diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000..09a1029 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,44 @@ +env: + browser: true + es2021: true +extends: ["airbnb-base", "plugin:prettier/recommended"] +parserOptions: + ecmaVersion: latest + sourceType: module +rules: + no-await-in-loop: + - warn + radix: + - error + - as-needed + default-param-last: + - warn + no-underscore-dangle: "off" + no-param-reassign: + - warn + class-methods-use-this: + - warn + no-unused-vars: + - warn + no-nested-ternary: "off" + no-restricted-syntax: + - warn + - selector: ForInStatement + message: + for..in loops iterate over the entire prototype chain, which is virtually + never what you want. Use Object.{keys,values,entries}, and iterate over the + resulting array. + - selector: LabeledStatement + message: + Labels are a form of GOTO; using them makes code confusing and hard to + maintain and understand. + - selector: WithStatement + message: + "`with` is disallowed in strict mode because it makes code impossible + to predict and optimize." + import/extensions: + - warn + - always +settings: + import/extensions: + - ".js" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..94f480d --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf \ No newline at end of file diff --git a/.github/workflows/buildPacks.yml b/.github/workflows/buildPacks.yml index 57f94ee..3a385c0 100644 --- a/.github/workflows/buildPacks.yml +++ b/.github/workflows/buildPacks.yml @@ -1,53 +1,53 @@ -# This is a basic workflow that is manually triggered -name: Build Packs - -# Controls when the action will run. Workflow runs when release is published. -on: - release: - types: [published] - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called buildPacks - buildPacks: - # The type of runner that the job will run on. This must be ubuntu for the zip command to work. - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Each step runs a single command using the runners shell. - # 1. Checkout our repository so we can do things on it. - - name: Checkout - uses: actions/checkout@v4 - # 2. Make sure node is set up. This may be an unecessary step. - - name: Node Setup - uses: actions/setup-node@v3 - with: - node-version: 18 - # 3. Install the FoundryVTT CLI. - - run: npm install -g @foundryvtt/foundryvtt-cli - # 4. Configure the datapath as the github workspace variable. - - run: fvtt configure set "dataPath" ${GITHUB_WORKSPACE} - # 5. Tell the FVTT CLI that we are working on a "system" package. - - run: fvtt package workon fvtt package workon "deltagreen" --type "System" - # 6-11. Package each folder of source json files into the appropriate LevelDB pack. - - run: fvtt package pack "armor" --in "packs/source/armor" --out "packs" - - run: fvtt package pack "firearms" --in "packs/source/firearms" --out "packs" - - run: fvtt package pack "hand-to-hand-weapons" --in "packs/source/hand-to-hand-weapons" --out "packs" - - run: fvtt package pack "operation-code-name-generator" --in "packs/source/operation-code-name-generator" --out "packs" - - run: fvtt package pack "operation-code-name-generator-macro" --in "packs/source/operation-code-name-generator-macro" --out "packs" - - run: fvtt package pack "pregens" --in "packs/source/pregens" --out "packs" - # 12. Zip up the branch with the LevelDB packs. - - name: Zip - # Exclude the source json files from the final package, as well as any git folders. - run: zip -r deltagreen.zip . --exclude="*packs/source/*" --exclude="*.git*" - # 13. Updates the release with the newly zipped branch. See documentation of this action for details. - - name: Update Release with Artifacts - uses: ncipollo/release-action@v1.13.0 - with: - allowUpdates: true - name: ${{ github.event.release.name }} - tag: ${{ github.event.release.tag_name }} - body: ${{ github.event.release.body }} - artifacts: './deltagreen.zip' - token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file +# This is a basic workflow that is manually triggered +name: Build Packs + +# Controls when the action will run. Workflow runs when release is published. +on: + release: + types: [published] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called buildPacks + buildPacks: + # The type of runner that the job will run on. This must be ubuntu for the zip command to work. + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Each step runs a single command using the runners shell. + # 1. Checkout our repository so we can do things on it. + - name: Checkout + uses: actions/checkout@v4 + # 2. Make sure node is set up. This may be an unecessary step. + - name: Node Setup + uses: actions/setup-node@v3 + with: + node-version: 18 + # 3. Install the FoundryVTT CLI. + - run: npm install -g @foundryvtt/foundryvtt-cli + # 4. Configure the datapath as the github workspace variable. + - run: fvtt configure set "dataPath" ${GITHUB_WORKSPACE} + # 5. Tell the FVTT CLI that we are working on a "system" package. + - run: fvtt package workon fvtt package workon "deltagreen" --type "System" + # 6-11. Package each folder of source json files into the appropriate LevelDB pack. + - run: fvtt package pack "armor" --in "packs/source/armor" --out "packs" + - run: fvtt package pack "firearms" --in "packs/source/firearms" --out "packs" + - run: fvtt package pack "hand-to-hand-weapons" --in "packs/source/hand-to-hand-weapons" --out "packs" + - run: fvtt package pack "operation-code-name-generator" --in "packs/source/operation-code-name-generator" --out "packs" + - run: fvtt package pack "operation-code-name-generator-macro" --in "packs/source/operation-code-name-generator-macro" --out "packs" + - run: fvtt package pack "pregens" --in "packs/source/pregens" --out "packs" + # 12. Zip up the branch with the LevelDB packs. + - name: Zip + # Exclude the source json files from the final package, as well as any git folders. + run: zip -r deltagreen.zip . --exclude="*packs/source/*" --exclude="*.git*" + # 13. Updates the release with the newly zipped branch. See documentation of this action for details. + - name: Update Release with Artifacts + uses: ncipollo/release-action@v1.13.0 + with: + allowUpdates: true + name: ${{ github.event.release.name }} + tag: ${{ github.event.release.tag_name }} + body: ${{ github.event.release.body }} + artifacts: "./deltagreen.zip" + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 5856cf5..27a2317 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +# Ignore binary compendia packs. packs/armor packs/armor* packs/firearms @@ -9,4 +10,7 @@ packs/operation-code-name-generator* packs/operation-code-name-generator-macro packs/operation-code-name-generator-macro* packs/pregens -packs/pregens* \ No newline at end of file +packs/pregens* + +# Ignore npm modules +node_modules diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..a1057a8 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,25 @@ +# These are generated automatically by external packages. Let them do their thing. +**/.git +**/node_modules +**/package-lock.json + +# These contain fonts, icons, and images, which are static files. +**/assets +**/documentation/images + +# Ignore binary compendia packs. +packs/armor +packs/armor* +packs/firearms +packs/firearms* +packs/hand-to-hand-weapons +packs/hand-to-hand-weapons* +packs/operation-code-name-generator +packs/operation-code-name-generator* +packs/operation-code-name-generator-macro +packs/operation-code-name-generator-macro* +packs/pregens +packs/pregens* + +# Ignore handlebars files as Prettier cannot handle these currently. +**/*.html \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..1ca87ab --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,3 @@ +{ + "singleQuote": false +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..b3d9cb4 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"], + "unwantedRecommendations": [] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9bf4d12 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c19357..b0ac020 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,168 +2,170 @@ ### Version 1.3.1 - 2023-09-23 -* Enhancement - Changed pause icon to be Delta Green logo. +- Enhancement - Changed pause icon to be Delta Green logo. ### Version 1.3.0 - 2023-09-23 -* Enhancement - Refactor roll system to make future changes easier. -* Enhancement - Slight restyle of roll chat messages. -* Enhancement - Restyled actor sheets to be more in-line with the core book's design. You can change back to the old style in the settings for the Delta Green system. -* Enhancement[GitHub #72] - Weapons can now have modifiers for their rolls built-in. -* Enhancement - Weapons can choose a custom target for their rolls. This can be used for unnatural creature attacks that may not line up with one of the skills. -* Fix - Damage rolls can now utilize math functions like base Foundry rolls. -* Enhancement - Hide untrained skills toggle turned into toggleable eye icon rather than a checkbox. +- Enhancement - Refactor roll system to make future changes easier. +- Enhancement - Slight restyle of roll chat messages. +- Enhancement - Restyled actor sheets to be more in-line with the core book's design. You can change back to the old style in the settings for the Delta Green system. +- Enhancement[GitHub #72] - Weapons can now have modifiers for their rolls built-in. +- Enhancement - Weapons can choose a custom target for their rolls. This can be used for unnatural creature attacks that may not line up with one of the skills. +- Fix - Damage rolls can now utilize math functions like base Foundry rolls. +- Enhancement - Hide untrained skills toggle turned into toggleable eye icon rather than a checkbox. ### Version 1.2.6 - 2023-09-13 -* Fix [Github #82] - New packaging workflow from @jalensailin will hopefully resolve issues with the Forge by deploying the v11 compendium packs directly. +- Fix [Github #82] - New packaging workflow from @jalensailin will hopefully resolve issues with the Forge by deploying the v11 compendium packs directly. ### Version 1.2.5 - 2023-09-09 -* Fix - Removing more places where system still says 'Unofficial' at Arc Dream's request +- Fix - Removing more places where system still says 'Unofficial' at Arc Dream's request ### Version 1.2.4 - 2023-08-03 The system is now officially recognized by Arc Dream! -* Enhancement[GitHub #77] - Changed some English localization labels and the legalese, per Arc Dream's request. -* Fix - Fixed layout bug on bond sheet. -* Enhancement[GitHub #78] - Added checkbox to bonds on the Agent sheet that you can use to indicate if the bond has been damaged since the last home scene. Also added a button to allow clearing the checkbox on all bonds. -* Enhancement [GitHub #80] - Can now roll SAN Damage from unnatural sheet -* Enhancement [GitHub #81] - You can now hide the Impossible Landscapes specific fields from the Agent's sheet by changing a system setting. +- Enhancement[GitHub #77] - Changed some English localization labels and the legalese, per Arc Dream's request. +- Fix - Fixed layout bug on bond sheet. +- Enhancement[GitHub #78] - Added checkbox to bonds on the Agent sheet that you can use to indicate if the bond has been damaged since the last home scene. Also added a button to allow clearing the checkbox on all bonds. +- Enhancement [GitHub #80] - Can now roll SAN Damage from unnatural sheet +- Enhancement [GitHub #81] - You can now hide the Impossible Landscapes specific fields from the Agent's sheet by changing a system setting. ### Version 1.2.2 - 2023-07-20 -* Enhancement [Github #76] - jalensailin added drag drop functionality to items. If you hold alt and drag, it will automatically delete the item from the original sheet. Otherwise, it will duplicate the item. -* Fix [Github #74] - jalensailin fixed issue with Portuguese (Brasil) translation. +- Enhancement [Github #76] - jalensailin added drag drop functionality to items. If you hold alt and drag, it will automatically delete the item from the original sheet. Otherwise, it will duplicate the item. +- Fix [Github #74] - jalensailin fixed issue with Portuguese (Brasil) translation. ### Version 1.2.0 - 2023-06-28 [BREAKING CHANGE: THIS VERSION FORWARD COMPATIBLE WITH FOUNDRY V11 OR HIGHER ONLY!] -* Fix [GitHub #71] - Fix for the update skill button does not work in Foundry V11. -* Fix - Dragging items from one sheet to another now does create the item on the other sheet, although it does not delete the item on the original character sheet. -* Enhancement - (Work in Progress) Added macro to parse a DG stat block. Currently only works for English, and only gets core attributes and skills. Call from a macro like: game.deltagreen.ParseDeltaGreenStatBlock() +- Fix [GitHub #71] - Fix for the update skill button does not work in Foundry V11. +- Fix - Dragging items from one sheet to another now does create the item on the other sheet, although it does not delete the item on the original character sheet. +- Enhancement - (Work in Progress) Added macro to parse a DG stat block. Currently only works for English, and only gets core attributes and skills. Call from a macro like: game.deltagreen.ParseDeltaGreenStatBlock() ### Version 1.1.0 - 2022-09-11 [BREAKING CHANGE: THIS VERSION FORWARD COMPATIBLE WITH FOUNDRY V10 OR HIGHER ONLY!] -* Enhancement - Update to new data model for Foundry V10. This breaks compatibility with older versions, but leaves the system in a better place for future updates. Thanks to Jailensailen for help with this effort. -* Enhancement [GitHub 39] - Jailensailen added a way to toggle lethality directly on the actor sheet without editing the item. There is now a toggle button beside the damage formula/lethality percentage. -* Enhancement [GitHub #56] - Added an actor sheet for Vehicles -* Fix [GitHub #66] - Dragging item macros to hot bar, as well as executing them seemed to be broken. -* Fix [GitHub #62] - Fixed issue with how weapon skill rolls are displayed in chat cards (incorrectly appended 'x5' to rolls that were not x5 rolls). -* Enhancement [GitHub #58] - Did not completely overhaul Agent sheet per request, but did implement some of the requested changes to make the Agent/NPC sheets shorter, so that they require less scrolling when on smaller screens. Thanks to wush3 for providing some of the CSS for this. -* Enhancement - Made a few improvements to improvements to layout for a few of the item and NPC sheets. +- Enhancement - Update to new data model for Foundry V10. This breaks compatibility with older versions, but leaves the system in a better place for future updates. Thanks to Jailensailen for help with this effort. +- Enhancement [GitHub 39] - Jailensailen added a way to toggle lethality directly on the actor sheet without editing the item. There is now a toggle button beside the damage formula/lethality percentage. +- Enhancement [GitHub #56] - Added an actor sheet for Vehicles +- Fix [GitHub #66] - Dragging item macros to hot bar, as well as executing them seemed to be broken. +- Fix [GitHub #62] - Fixed issue with how weapon skill rolls are displayed in chat cards (incorrectly appended 'x5' to rolls that were not x5 rolls). +- Enhancement [GitHub #58] - Did not completely overhaul Agent sheet per request, but did implement some of the requested changes to make the Agent/NPC sheets shorter, so that they require less scrolling when on smaller screens. Thanks to wush3 for providing some of the CSS for this. +- Enhancement - Made a few improvements to improvements to layout for a few of the item and NPC sheets. ### Version 1.0.6 - 2022-05-26 -* Enhancement - IgorAK25 has submitted a Portuguese translation for the system. +- Enhancement - IgorAK25 has submitted a Portuguese translation for the system. ### Version 1.0.5 - 2022-03-20 -* Enhancement [GitHub #53] - Added all physical attributes (on top of DEX) as options for the test for a weapon, to accomodate a special weapon in the Jack Frost module. -* Enhancement - Put a little dice icon next to the SAN label to make it more obvious that is how you roll a SAN test on the Agent's sheet. -* Enhancement - Added some buttons to the gear tab of the Agent's sheet that allow opening the compendiums for weapons or armor directly from the sheet. -* Enhancement - Made tabs in nav bar, look a little bit more obviously like tabs. -* Enhancement - Made it so that existing type skills are more editable now, to make using the pregens that have craft/language/science skills easier. -* Enhancement - Added some GM-only fields to the CV section of the Agent and NPC sheets that supports values recording in Impossible Landscapes +- Enhancement [GitHub #53] - Added all physical attributes (on top of DEX) as options for the test for a weapon, to accomodate a special weapon in the Jack Frost module. +- Enhancement - Put a little dice icon next to the SAN label to make it more obvious that is how you roll a SAN test on the Agent's sheet. +- Enhancement - Added some buttons to the gear tab of the Agent's sheet that allow opening the compendiums for weapons or armor directly from the sheet. +- Enhancement - Made tabs in nav bar, look a little bit more obviously like tabs. +- Enhancement - Made it so that existing type skills are more editable now, to make using the pregens that have craft/language/science skills easier. +- Enhancement - Added some GM-only fields to the CV section of the Agent and NPC sheets that supports values recording in Impossible Landscapes ### Version 1.0.4 - 2022-02-05 -* Fix [GitHub #50] - The custom background images used on the Actor sheets was also showing up for other free-floating windows, such as when the encounter tracker is undocked. Because of the bright background, it was hard to read the text or see buttons, so have changed the CSS to try to exclude these windows from the custom background image. -* Fix [GitHub #43] - Bond Scores on Agent Pregens from u/jets_or_chasm fixed to correctly match charisma score of the agent. Also re-created the compendium using a newer version of the pregen sheet that has more +- Fix [GitHub #50] - The custom background images used on the Actor sheets was also showing up for other free-floating windows, such as when the encounter tracker is undocked. Because of the bright background, it was hard to read the text or see buttons, so have changed the CSS to try to exclude these windows from the custom background image. +- Fix [GitHub #43] - Bond Scores on Agent Pregens from u/jets_or_chasm fixed to correctly match charisma score of the agent. Also re-created the compendium using a newer version of the pregen sheet that has more ### Version 1.0.3 - 2022-02-04 -* Other - Update compatible version to v9 (Note - this update could potentially have some effects on older Foundry versions) -* Fix [GitHub #48] - The new system option to hide SAN score was not also hiding Ritual proficiency, making it trivial to back-calculate the SAN score for players that know the formula for the Ritual skill. -* Fix [GitHub #50] - In Foundry v9, seems like the sections below the nav were anchored to the bottom of the window, so as the window got bigger the section would float away from the nav leaving a big gap. Attempted to fix CSS for this by setting how the grid should flex more specifically. +- Other - Update compatible version to v9 (Note - this update could potentially have some effects on older Foundry versions) +- Fix [GitHub #48] - The new system option to hide SAN score was not also hiding Ritual proficiency, making it trivial to back-calculate the SAN score for players that know the formula for the Ritual skill. +- Fix [GitHub #50] - In Foundry v9, seems like the sections below the nav were anchored to the bottom of the window, so as the window got bigger the section would float away from the nav leaving a big gap. Attempted to fix CSS for this by setting how the grid should flex more specifically. ### Version 1.0.2 - 2021-11-04 -* Fix - Pregen Agents were getting duplicated Unarmed Strike items added on creation. -* Fix - Unarmed Strike item in the compendium was using 'Melee Combat' instead of 'Unarmed Combat' as its skill. -* Enhancment - Added system option for a world to make SAN target and skill rolls hidden from non-GM players. SAN tests change to blind rolls for players who are not GM. +- Fix - Pregen Agents were getting duplicated Unarmed Strike items added on creation. +- Fix - Unarmed Strike item in the compendium was using 'Melee Combat' instead of 'Unarmed Combat' as its skill. +- Enhancment - Added system option for a world to make SAN target and skill rolls hidden from non-GM players. SAN tests change to blind rolls for players who are not GM. ### Version 1.0.1 - 2021-08-14 -* Fix [GitHub #31] - Default Type Skill of Art-Painting that is added automatically when making a new agent should be localizable now. -* Enhancement - Added a separate Actor type and sheet for _Unnatural_ creatures and a similar sheet that for non-agent NPC characters. -* Enhancement - The system will try to automatically add an 'Unarmed Attack' item to a new agent when they are created to make it more obvious how this is handled within the system. [Update - accidentally had this disabled in logic when packaging system, will re-add later...] -* Enhancement - DEX x5 is now selectable as an option to roll for a weapon's skill test, which is useful for items like hand grenades that are rolled or thrown. -* Enhancement - Eduard Cot (trombonecot) submitted a Catalan language pack for the system. -* Enhancement - Added list of Pregen Agents (originaly from Reddit user u/jets_or_chasm, AKA jimstorch) as a compendium pack to allow a player to jump back in quickly after a death, or to make playing for the first time easier by presenting a list of agents of 24 professions. See for more information. -* Enhancement - Added some roll tables that allow making Fall of Delta Green-style Operation Code names (e.g. 'Operation Able Archer'). These tables are based on roll tables created by Reddit user u/Travern. Note - there is also a compendium with a macro that will randomly pick a combination of the tables, then draw from those tables to make a random 2-part operation name to send to the chat. +- Fix [GitHub #31] - Default Type Skill of Art-Painting that is added automatically when making a new agent should be localizable now. +- Enhancement - Added a separate Actor type and sheet for _Unnatural_ creatures and a similar sheet that for non-agent NPC characters. +- Enhancement - The system will try to automatically add an 'Unarmed Attack' item to a new agent when they are created to make it more obvious how this is handled within the system. [Update - accidentally had this disabled in logic when packaging system, will re-add later...] +- Enhancement - DEX x5 is now selectable as an option to roll for a weapon's skill test, which is useful for items like hand grenades that are rolled or thrown. +- Enhancement - Eduard Cot (trombonecot) submitted a Catalan language pack for the system. +- Enhancement - Added list of Pregen Agents (originaly from Reddit user u/jets_or_chasm, AKA jimstorch) as a compendium pack to allow a player to jump back in quickly after a death, or to make playing for the first time easier by presenting a list of agents of 24 professions. See for more information. +- Enhancement - Added some roll tables that allow making Fall of Delta Green-style Operation Code names (e.g. 'Operation Able Archer'). These tables are based on roll tables created by Reddit user u/Travern. Note - there is also a compendium with a macro that will randomly pick a combination of the tables, then draw from those tables to make a random 2-part operation name to send to the chat. ### Version 1.0.0 - 2021-06-05 [BREAKING CHANGE: THIS VERSION FORWARD COMPATIBILE WITH FOUNDRY 0.8.6 OR HIGHER ONLY!!!] -* Changes to support 0.8.6+ Foundry - * Revamped data model for actor sheet. Note due to the changes, the new system is not backwards compatible with older versions of Foundry now. - * Rolls all asynchronous now. Should allow less work to be required in future versions when asynchronous rolls are required. +- Changes to support 0.8.6+ Foundry -* Enhancement - Roll Modifier Dialogues - * Added option to choose roll mode in the roll modifier dialogue for both percentile/lethality tests and damage rolls. - * Can now SHIFT+CLICK to get the Roll Modifier Dialogue for LUCK rolls. Cannot seem to make it feasible to get the right-click option to work on the menu currently. - * Changed d100 Roll Modifier dialogue to have a +/- dropdown instead of needing to type it into the box. + - Revamped data model for actor sheet. Note due to the changes, the new system is not backwards compatible with older versions of Foundry now. + - Rolls all asynchronous now. Should allow less work to be required in future versions when asynchronous rolls are required. -* Enhancement - Based on a character's strength, formula will automatically adjust for Melee and Unarmed damage rolls per the rules on page 55 of the Agent's Handbook (+1 for 13-16 STR, etc...). **NOTE** - Some adjustment to damage formulas on existing weapons may need to be made if it was manually added already. +- Enhancement - Roll Modifier Dialogues -* Enhancement - Added a descriptor field 'Relationship' to bonds, so you can give a name, and then optionally the relationship (e.g. 'Mother', 'Friend') as two separate fields. Makes discerning who is who on the bonds sheet easier at a glance. + - Added option to choose roll mode in the roll modifier dialogue for both percentile/lethality tests and damage rolls. + - Can now SHIFT+CLICK to get the Roll Modifier Dialogue for LUCK rolls. Cannot seem to make it feasible to get the right-click option to work on the menu currently. + - Changed d100 Roll Modifier dialogue to have a +/- dropdown instead of needing to type it into the box. -* Enhancement - More CSS Improvements, mostly to Item Sheets. - * Cleaned up layout on bonds, armor, weapons, gear item sheets - * Made weapons, armor and gear Item Sheets slightly more uniform in how the same fields are laid out. +- Enhancement - Based on a character's strength, formula will automatically adjust for Melee and Unarmed damage rolls per the rules on page 55 of the Agent's Handbook (+1 for 13-16 STR, etc...). **NOTE** - Some adjustment to damage formulas on existing weapons may need to be made if it was manually added already. + +- Enhancement - Added a descriptor field 'Relationship' to bonds, so you can give a name, and then optionally the relationship (e.g. 'Mother', 'Friend') as two separate fields. Makes discerning who is who on the bonds sheet easier at a glance. + +- Enhancement - More CSS Improvements, mostly to Item Sheets. + - Cleaned up layout on bonds, armor, weapons, gear item sheets + - Made weapons, armor and gear Item Sheets slightly more uniform in how the same fields are laid out. ### Version 0.9.9 - 2021-03-27 -* Fix - [GitHub #23] - Localization mistake, had two spaces in between "Critical" and "Success" or "Failure" in chat cards. -* Fix - [GitHub #24] - The chat card that was generated from rolling a skill check by clicking on a weapon (e.g. Firearms for a pistol) was not being localized. Fixed this along with a related tooltip that wasn't being localized either. -* Fix - [GitHub #25] - The chat card for damage and lethality was not bolding those terms like it would for other skill or percentile rolls. -* Fix - [GitHub #26] - When clicking on the 'Roll Luck' button in the character sheet header, the resulting chat card was not being localized properly. -* Fix - [GitHub #27] - Using a language setting that did not have a full translation was breaking adding skills to the agent's actor sheet. Should not break quite so quickly now, but will likely need a better long term fix at some point. -* Fix - [GitHub #28] - Missing localization keys for break point tooltips added. -* Fix - Made Agent sheet default width a little wider so skills with longer names aren't getting clipped off. Also a few other alignment fixes in the CSS. +- Fix - [GitHub #23] - Localization mistake, had two spaces in between "Critical" and "Success" or "Failure" in chat cards. +- Fix - [GitHub #24] - The chat card that was generated from rolling a skill check by clicking on a weapon (e.g. Firearms for a pistol) was not being localized. Fixed this along with a related tooltip that wasn't being localized either. +- Fix - [GitHub #25] - The chat card for damage and lethality was not bolding those terms like it would for other skill or percentile rolls. +- Fix - [GitHub #26] - When clicking on the 'Roll Luck' button in the character sheet header, the resulting chat card was not being localized properly. +- Fix - [GitHub #27] - Using a language setting that did not have a full translation was breaking adding skills to the agent's actor sheet. Should not break quite so quickly now, but will likely need a better long term fix at some point. +- Fix - [GitHub #28] - Missing localization keys for break point tooltips added. +- Fix - Made Agent sheet default width a little wider so skills with longer names aren't getting clipped off. Also a few other alignment fixes in the CSS. -* Enhancement - [GitHub #28] - Spanish language translation, many thanks to CthulhuRol for providing it! -* Enhancement - Added a macro that allows for rolling the skill check on a weapon, so there can be macro buttons for both the damage and the skill check if desired. - * Sample syntax: game.deltagreen.rollItemSkillCheckMacro("Combat Dagger"); -* Enhancement - Thanks to _Uriele_ - Added functionality from the Handler's Guide (page 188) for 'Inhuman' stat tests, test where the stat (e.g. CON) is 20 or higher, giving a x5 target of 100 or higher. In this event, the test auto succeeds on a roll of anything other than 100, and a roll lower than the stat value is a critical (along with regular critical logic). -* Enhancement - Added 'Ritual' skill, which is calculated and is equal to 99 - current sanity (thanks to _Uriele_ for mentioning it). See page 166 under 'Ritual Activation' for the full rules. -* Enhancement - Total protection rating of all _equipped_ armor now displayed by HP. +- Enhancement - [GitHub #28] - Spanish language translation, many thanks to CthulhuRol for providing it! +- Enhancement - Added a macro that allows for rolling the skill check on a weapon, so there can be macro buttons for both the damage and the skill check if desired. + - Sample syntax: game.deltagreen.rollItemSkillCheckMacro("Combat Dagger"); +- Enhancement - Thanks to _Uriele_ - Added functionality from the Handler's Guide (page 188) for 'Inhuman' stat tests, test where the stat (e.g. CON) is 20 or higher, giving a x5 target of 100 or higher. In this event, the test auto succeeds on a roll of anything other than 100, and a roll lower than the stat value is a critical (along with regular critical logic). +- Enhancement - Added 'Ritual' skill, which is calculated and is equal to 99 - current sanity (thanks to _Uriele_ for mentioning it). See page 166 under 'Ritual Activation' for the full rules. +- Enhancement - Total protection rating of all _equipped_ armor now displayed by HP. -* Font and Background Change and Configuration Options - *NOTE THIS CAN BE CHANGED IN THE SYSTEM SETTINGS BACK TO WHAT IT WAS!* - * Enhancement - Added system setting for font choice, with a few options. For example you can set a world to use typewriter style font for an older feel. - * Enhancement - Added system setting for background image choice, with a few options. Changed default from normal Foundry parchment to a lighter, more moder looking paper. Also included option for old, used/crinkled paper for a more unsettling or hard-used look. +- Font and Background Change and Configuration Options - _NOTE THIS CAN BE CHANGED IN THE SYSTEM SETTINGS BACK TO WHAT IT WAS!_ + - Enhancement - Added system setting for font choice, with a few options. For example you can set a world to use typewriter style font for an older feel. + - Enhancement - Added system setting for background image choice, with a few options. Changed default from normal Foundry parchment to a lighter, more moder looking paper. Also included option for old, used/crinkled paper for a more unsettling or hard-used look. ### Version 0.9.7 -* Enhancement - Can now click on the icon for armor/other gear to equip or unequip it. -* Enhancement - Changed so that players with the 'Limited' permission on an actor now only see the C.V. tab of the actor's character sheet, instead of the entire sheet. Previously the 'Limited' permission and the 'Observer' permission gave the same result. The 'Observer' permission is unchanged and still shows a read-only view of the entire sheet. -* Enhancement - Added ability to alter formula for damage rolls by either **right clicking** _or_ **holding shift and left clicking**. -* Enhancement - Added ability to alter targets for tests by either **right clicking** _or_ **holding shift and left clicking**. Applies to the following rolls: - * Skill tests - * Attribute tests - * Lethality tests -* Improved CSS on actor sheet in a few places. - * New Font (was previously in style sheet, but not properly applied). - * Nav bar alignment/border consistent across tabs for a cleaner look moving between sections. - * Gear sheet alignment cleaner with certain fields now being centered. - * CV sheet now has some padding on fields so things aren't so cramped looking. -* Fix - Thanks to @Hrunh for submitting update to localization in item sheet -* Fix - typo in Alertness skill (English locale), thanks to roestrei for report +- Enhancement - Can now click on the icon for armor/other gear to equip or unequip it. +- Enhancement - Changed so that players with the 'Limited' permission on an actor now only see the C.V. tab of the actor's character sheet, instead of the entire sheet. Previously the 'Limited' permission and the 'Observer' permission gave the same result. The 'Observer' permission is unchanged and still shows a read-only view of the entire sheet. +- Enhancement - Added ability to alter formula for damage rolls by either **right clicking** _or_ **holding shift and left clicking**. +- Enhancement - Added ability to alter targets for tests by either **right clicking** _or_ **holding shift and left clicking**. Applies to the following rolls: + - Skill tests + - Attribute tests + - Lethality tests +- Improved CSS on actor sheet in a few places. + - New Font (was previously in style sheet, but not properly applied). + - Nav bar alignment/border consistent across tabs for a cleaner look moving between sections. + - Gear sheet alignment cleaner with certain fields now being centered. + - CV sheet now has some padding on fields so things aren't so cramped looking. +- Fix - Thanks to @Hrunh for submitting update to localization in item sheet +- Fix - typo in Alertness skill (English locale), thanks to roestrei for report ### Version 0.9.6 -* Incremented Core Compatible Version after testing against release version of Foundry 0.7.5. -* Made the gear section a little less ugly by adding some nicer section dividers. -* Fixed some awkward tooltip wording. +- Incremented Core Compatible Version after testing against release version of Foundry 0.7.5. +- Made the gear section a little less ugly by adding some nicer section dividers. +- Fixed some awkward tooltip wording. ### Version 0.9.4 -* Fix - Pharmacy and Surgery skills were missing. -* Fix - Accounting and Disguise base skill rating were 0%, should be 10%. -* Fix - Damage on medium pistol in compendium was wrong, also fixed some base range values that were off. -* Enhancement - Adding support for localization. Character sheet and items sheets (gear, bonds, etc.) should be localized now, but not the compendium packs. -* Workaround - The (current alpha) 7.2 Foundry release seems to have a bug where rolls without a leading number ('d100') do not work, so updated all skill checks to roll '1d100' instead to avoid the issue. -* Enhancement - Added support for Dice So Nice module, since moving to custom chat message broke out of the box compatibility with it. +- Fix - Pharmacy and Surgery skills were missing. +- Fix - Accounting and Disguise base skill rating were 0%, should be 10%. +- Fix - Damage on medium pistol in compendium was wrong, also fixed some base range values that were off. +- Enhancement - Adding support for localization. Character sheet and items sheets (gear, bonds, etc.) should be localized now, but not the compendium packs. +- Workaround - The (current alpha) 7.2 Foundry release seems to have a bug where rolls without a leading number ('d100') do not work, so updated all skill checks to roll '1d100' instead to avoid the issue. +- Enhancement - Added support for Dice So Nice module, since moving to custom chat message broke out of the box compatibility with it. ### Version 0.9.3 @@ -171,7 +173,7 @@ We will never speak of 0.9.1 or 0.9.2 ever again. ### Version 0.9.1 -Added a few compendium packs with some common armor and weapon choices for Agents to equip themselves with. +Added a few compendium packs with some common armor and weapon choices for Agents to equip themselves with. Note that weapon/armor statistics are not covered by the Open Game License like the other rules used in the system, they are included as an exception with permission from Arc Dream publishing. diff --git a/README.md b/README.md index 7bcf2f1..69d7e7d 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ http://www.delta-green.com/ Whatever system documentation currently exists can be found [here.](https://github.com/TheLastScrub/delta-green-foundry-vtt-system-unofficial/blob/master/documentation/home.md) -*NOTE* - There is a system setting that controls the styling of the sheets. The current default is "Program" which gives a more modern look. To look more like the way the system looked prior to v1.3.0, choose the 'Cowboys' option. +_NOTE_ - There is a system setting that controls the styling of the sheets. The current default is "Program" which gives a more modern look. To look more like the way the system looked prior to v1.3.0, choose the 'Cowboys' option. ![Config Screenshot](./documentation/images/system-settings.webp) @@ -28,7 +28,7 @@ See samples of all tabs in the main agent character sheet [here](./documentation ![Character Sheet Skills Section Screenshot](./documentation/images/agent_sheet_program_skills_tab.webp) -The system automates most of the calculations on the sheet such as maximum HP/WP/SAN. Recalculating break points can be done by clicking a button. Clicking on labels for skills, sanity, x5 skill tests or weapon damage/lethality will automatically roll those tests or damage. +The system automates most of the calculations on the sheet such as maximum HP/WP/SAN. Recalculating break points can be done by clicking a button. Clicking on labels for skills, sanity, x5 skill tests or weapon damage/lethality will automatically roll those tests or damage. ![Example Rolls In Chat Window](./documentation/images/chat_rolls.webp) @@ -46,7 +46,7 @@ There are also some compendiums currently available with some of the more common # System Status -The system is now largely stable and publicably available in Foundry as an official system! There will still be tweaks here and there, but no major changes are currently planned. +The system is now largely stable and publicably available in Foundry as an official system! There will still be tweaks here and there, but no major changes are currently planned. If there is specific functionality you would like incorporated in the system, please open an issue on the [Issues](https://github.com/TheLastScrub/delta-green-foundry-vtt-system-unofficial/issues) tab in Github. @@ -54,7 +54,7 @@ If there is specific functionality you would like incorporated in the system, pl The system is now included in the list of official Foundry VTT game systems, and as such can be installed directly from within Foundry. -If there is a need to manually install the system, go to _Game Systems_ and click _Install System_. Then in the _Manifest URL_ input field, paste the following link and then click _Install_: +If there is a need to manually install the system, go to _Game Systems_ and click _Install System_. Then in the _Manifest URL_ input field, paste the following link and then click _Install_: https://github.com/TheLastScrub/delta-green-foundry-vtt-system-unofficial/raw/master/system.json @@ -76,7 +76,7 @@ https://gitlab.com/asacolips-projects/foundry-mods/foundryvtt-system-tutorial ## Delta Green Agent Pregen List -Comes from a character generator created by jimstorch, who graciously posted the results on Reddit for all to use. See the GitHub page for more information: https://github.com/jimstorch/DGGen +Comes from a character generator created by jimstorch, who graciously posted the results on Reddit for all to use. See the GitHub page for more information: https://github.com/jimstorch/DGGen ## Operation Code Name Generator @@ -85,7 +85,7 @@ The roll tables added to generate operation code names comes from Reddit user /u ## Localization Portugese (BR) Translation submitted by IgorAK25 -Spanish Translation submitted by CthulhuRol +Spanish Translation submitted by CthulhuRol Catalonian Translation submitted by trombonecot ## Fonts (Some in use, others that I would like to use at some point) @@ -103,7 +103,7 @@ https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL By Astigmatic (Principal Design) https://fonts.google.com/specimen/Special+Elite?sidebar.open&selection.family=Special+Elite#standard-styles -License: Apache License, Version 2.0 +License: Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 ### DIDACT GOTHIC FONT @@ -134,47 +134,47 @@ https://github.com/uswds/public-sans ## Game Icons -ICONS - https://game-icons.net/ +ICONS - https://game-icons.net/ https://creativecommons.org/licenses/by/3.0/ -* Sawed-off shotgun icon by Delapouite under CC BY 3.0 -* Crosshair icon by Delapouite under CC BY 3.0 -* Two handed sword icon by Delapouite under CC BY 3.0 -* Katana icon by Delapouite under CC BY 3.0 -* Baseball bat icon by Delapouite under CC BY 3.0 -* Hatchet icon by Delapouite under CC BY 3.0 -* Wood axe icon by Delapouite under CC BY 3.0 -* Brass knuckles icon by Delapouite under CC BY 3.0 -* Flashlight icon by Delapouite under CC BY 3.0 -* Wire icon by Delapouite under CC BY 3.0 -* Gun stock icon by Delapouite under CC BY 3.0 -* AK47 icon by Skoll under CC BY 3.0 -* Switchblade icon by Skoll under CC BY 3.0 -* Desert Eagle iconby Skoll under CC BY 3.0 -* Colt M1911 icon by Skoll under CC BY 3.0 -* Revolver icon by Skoll under CC BY 3.0 -* Lee Enfield icon by Skoll under CC BY 3.0 -* FN FAL icon by Skoll under CC BY 3.0 -* Walther PPK icon by Skoll under CC BY 3.0 -* Kevlar vest icon by Skoll under CC BY 3.0 -* Spectre M4 icon by Skoll under CC BY 3.0 -* FN Fal icon by Skoll under CC BY 3.0 -* Telescopic baton icon by Skoll under CC BY 3.0 -* Baton icon by Skoll under CC BY 3.0 -* Bayonet icon by Skoll under CC BY 3.0 -* Jaws icon by Skoll under CC BY 3.0 -* Helmet icon by sbed under CC BY 3.0 -* Kevlar icon by sbed under CC BY 3.0 -* Bowie knife icon by Lorc under CC BY 3.0 -* Space suit icon by Lorc under CC BY 3.0 -* Grenade icon by Lorc under CC BY 3.0 -* Stiletto icon by Lorc under CC BY 3.0 -* Punch icon by Lorc under CC BY 3.0. -* Arrowhead icon by Lorc under CC BY 3.0 -* Claw Slashes icon by Lorc under CC BY 3.0 -* Magic Hand icon by Lorc under CC BY 3.0 -* Magic Shield icon by Lorc under CC BY 3.0 -* Sly icon by Lorc under CC 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 \ No newline at end of file +- Sawed-off shotgun icon by Delapouite under CC BY 3.0 +- Crosshair icon by Delapouite under CC BY 3.0 +- Two handed sword icon by Delapouite under CC BY 3.0 +- Katana icon by Delapouite under CC BY 3.0 +- Baseball bat icon by Delapouite under CC BY 3.0 +- Hatchet icon by Delapouite under CC BY 3.0 +- Wood axe icon by Delapouite under CC BY 3.0 +- Brass knuckles icon by Delapouite under CC BY 3.0 +- Flashlight icon by Delapouite under CC BY 3.0 +- Wire icon by Delapouite under CC BY 3.0 +- Gun stock icon by Delapouite under CC BY 3.0 +- AK47 icon by Skoll under CC BY 3.0 +- Switchblade icon by Skoll under CC BY 3.0 +- Desert Eagle iconby Skoll under CC BY 3.0 +- Colt M1911 icon by Skoll under CC BY 3.0 +- Revolver icon by Skoll under CC BY 3.0 +- Lee Enfield icon by Skoll under CC BY 3.0 +- FN FAL icon by Skoll under CC BY 3.0 +- Walther PPK icon by Skoll under CC BY 3.0 +- Kevlar vest icon by Skoll under CC BY 3.0 +- Spectre M4 icon by Skoll under CC BY 3.0 +- FN Fal icon by Skoll under CC BY 3.0 +- Telescopic baton icon by Skoll under CC BY 3.0 +- Baton icon by Skoll under CC BY 3.0 +- Bayonet icon by Skoll under CC BY 3.0 +- Jaws icon by Skoll under CC BY 3.0 +- Helmet icon by sbed under CC BY 3.0 +- Kevlar icon by sbed under CC BY 3.0 +- Bowie knife icon by Lorc under CC BY 3.0 +- Space suit icon by Lorc under CC BY 3.0 +- Grenade icon by Lorc under CC BY 3.0 +- Stiletto icon by Lorc under CC BY 3.0 +- Punch icon by Lorc under CC BY 3.0. +- Arrowhead icon by Lorc under CC BY 3.0 +- Claw Slashes icon by Lorc under CC BY 3.0 +- Magic Hand icon by Lorc under CC BY 3.0 +- Magic Shield icon by Lorc under CC BY 3.0 +- Sly icon by Lorc under CC 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 diff --git a/css/deltagreen.css b/css/deltagreen.css index 002fb48..c4e76b5 100644 --- a/css/deltagreen.css +++ b/css/deltagreen.css @@ -2,76 +2,79 @@ @import url("https://fonts.googleapis.com/css2?family=Didact+Gothic"); @font-face { - font-family: 'atwriter'; - src: url('../assets/font/another-typewriter/atwriter.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5, Opera 10+, Safari 3—5 */ + font-family: "atwriter"; + src: url("../assets/font/another-typewriter/atwriter.ttf") format("truetype"); /* Chrome 4+, Firefox 3.5, Opera 10+, Safari 3—5 */ } @font-face { font-family: TypeWriterCondensed; - src: url("../assets/font/typewriter-condensed/typewcond_regular.otf") format("opentype"); + src: url("../assets/font/typewriter-condensed/typewcond_regular.otf") + format("opentype"); } @font-face { font-family: TypeWriterCondensed; font-weight: bold; - src: url("../assets/font/typewriter-condensed/typewcond_bold.otf") format("opentype"); + src: url("../assets/font/typewriter-condensed/typewcond_bold.otf") + format("opentype"); } @font-face { font-family: TypeWriterCondensed; font-weight: 600; - src: url("../assets/font/typewriter-condensed/typewcond_demi.otf") format("opentype"); + src: url("../assets/font/typewriter-condensed/typewcond_demi.otf") + format("opentype"); } @font-face { - font-family: 'SpecialElite'; - src: url('../assets/font/special_elite/SpecialElite-Regular.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5, Opera 10+, Safari 3—5 */ + font-family: "SpecialElite"; + src: url("../assets/font/special_elite/SpecialElite-Regular.ttf") + format("truetype"); /* Chrome 4+, Firefox 3.5, Opera 10+, Safari 3—5 */ } @font-face { - font-family: 'PublicSans'; - src: url('../assets/font/public-sans/PublicSans-VariableFont_wght.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5, Opera 10+, Safari 3—5 */ + font-family: "PublicSans"; + src: url("../assets/font/public-sans/PublicSans-VariableFont_wght.ttf") + format("truetype"); /* Chrome 4+, Firefox 3.5, Opera 10+, Safari 3—5 */ } /* Global styles */ - /* Hacky overrides of outer Foundry stuff */ /* Override default foundry CSS to remove padding, so that our background image can take up the whole window */ -.deltagreen section.window-content{ +.deltagreen section.window-content { padding: 0 !important; } /* Override the default Foundry CSS to add the padding we removed from the outer window back in */ -.deltagreen section.window-content form.editable{ +.deltagreen section.window-content form.editable { padding: 6px 6px 6px 6px !important; } /* Character Sheet Style Options */ form.outlaw-style, -form.cowboy-style{ +form.cowboy-style { background: url("../assets/img/StainedPlainPaper10b.webp") !important; background-size: 100% !important; } -form.program-style{ +form.program-style { background: url("../assets/img/StainedPlainPaper10a.webp") !important; background-size: 100% !important; } -.cowboy-style{ +.cowboy-style { font-family: "SpecialElite", sans-serif !important; } .outlaw-style, -.program-style{ +.program-style { font-family: "PublicSans", sans-serif !important; } -.outlaw-style -.cowboy-style .tabs .item { +.outlaw-style .cowboy-style .tabs .item { background: rgba(173, 151, 101, 0.3); } @@ -83,59 +86,57 @@ form.program-style{ content: url(../assets/img/DG_Pause_Icon.webp); } -.old-paper-background{ +.old-paper-background { background: url("../assets/img/StainedPlainPaper10.webp") !important; } -.default-parchment-background{ +.default-parchment-background { background: url("/ui/parchment.jpg") repeat !important; } -.typewriter-condensed-font{ +.typewriter-condensed-font { font-family: "TypeWriterCondensed", sans-serif !important; } -.martel-font{ +.martel-font { font-family: "Martel", sans-serif !important; } -.signika-font{ +.signika-font { font-family: "Signika", sans-serif !important; } -.atwriter-font{ +.atwriter-font { font-family: "atwriter", sans-serif !important; } -.special-elite-font{ +.special-elite-font { font-family: "SpecialElite", sans-serif !important; } -.public-sans-font{ +.public-sans-font { font-family: "PublicSans", sans-serif !important; } - - - -.rollable:hover, .rollable:focus { +.rollable:hover, +.rollable:focus { color: #000; text-shadow: 0 0 10px red; cursor: pointer; } -.not-rollable{ +.not-rollable { color: #999999; } -.dg-red{ - color:rgb(117, 0, 0); +.dg-red { + color: rgb(117, 0, 0); } -.bottom-margin-5px{ +.bottom-margin-5px { margin-bottom: 5px !important; } -.grid-1col{ +.grid-1col { display: grid; grid-column: span 1 / span 1; gap: 3px; @@ -212,15 +213,14 @@ form.program-style{ align-items: center; text-align: center; padding: 2px; - } -.flex-thin-border{ +.flex-thin-border { border: 1px solid #999; border-radius: 2px; } -.flex-mid-border{ +.flex-mid-border { border: 1.5px solid rgb(0, 0, 0); border-radius: 2px; } @@ -255,7 +255,7 @@ form.program-style{ justify-content: space-between; } -.horizontal-flex-column{ +.horizontal-flex-column { display: flex; flex-direction: column; } @@ -295,7 +295,7 @@ form.program-style{ margin-right: 5px; } -.profile-img{ +.profile-img { margin-bottom: 5px; } @@ -317,7 +317,6 @@ form.program-style{ margin: 0; } - .deltagreen .sheet-body, .deltagreen .sheet-body .tab, .deltagreen .sheet-body .tab .editor { @@ -330,12 +329,12 @@ form.program-style{ text-transform: uppercase; } -.sheet nav.sheet-tabs{ +.sheet nav.sheet-tabs { border-bottom: transparent !important; border-top: transparent !important; } -.deltagreen section.sheet-body{ +.deltagreen section.sheet-body { border: #000 !important; border-width: 2px !important; border-style: solid !important; @@ -401,7 +400,7 @@ form.program-style{ min-height: 30px; line-height: 24px; padding: 3px 0; - border-bottom: 1px solid #BBB; + border-bottom: 1px solid #bbb; } .deltagreen .items-list .item .item-image { @@ -416,7 +415,6 @@ form.program-style{ -ms-flex: 0 0 24px; flex: 0 0 24px; margin-left: 6px; - } .deltagreen .items-list .item img { @@ -436,7 +434,7 @@ form.program-style{ text-align: right; } -a.btn-tiny{ +a.btn-tiny { height: 26px; margin-left: 5px; margin-right: 5px; @@ -445,11 +443,11 @@ a.btn-tiny{ padding-bottom: 1px; padding-right: 5px; padding-left: 5px; - + text-decoration: none; - background-color: #EEEEEE; + background-color: #eeeeee; color: #333333; - + border-radius: 4px; line-height: 25px; border: 1px solid #333333; @@ -457,12 +455,12 @@ a.btn-tiny{ text-align: center; } -span.left-aligned-label{ +span.left-aligned-label { justify-content: left; margin-left: 5px; } -span.max-attribute-value-label{ +span.max-attribute-value-label { border: 1px solid rgb(122, 121, 113); border-radius: 3px; padding-top: 3px; @@ -472,34 +470,34 @@ span.max-attribute-value-label{ height: 26px; } -.deltagreen .skill-label{ +.deltagreen .skill-label { margin: 2px; align-content: flex-start; } -.deltagreen .skill-type-label{ +.deltagreen .skill-type-label { margin: 2px; } -.typed-skill-flexrow{ +.typed-skill-flexrow { display: flex; flex-direction: row; margin: 1px; } -input.percentile-skill-input{ +input.percentile-skill-input { flex: 0 0 40px; margin-right: 5px; margin-left: 5px; } -input.checkbox-skill-input{ +input.checkbox-skill-input { /*flex: 0 0 10px;*/ width: 15px; height: 15px; } -.deltagreen .sheet-header h2.profession{ +.deltagreen .sheet-header h2.profession { border-bottom: 0px; margin-top: 5px; margin-right: 0px; @@ -511,23 +509,23 @@ input.checkbox-skill-input{ margin: 0; } -div .simple-centered-flex-div{ +div .simple-centered-flex-div { display: flex; align-items: center; } -div input.fill-remaining-space{ +div input.fill-remaining-space { flex: 1; margin: 1px; text-align: left; } -div span.bio-grid-label{ +div span.bio-grid-label { margin: 1px; text-align: left; } -.bio-grid-2col{ +.bio-grid-2col { display: grid; grid-template-columns: 100px auto; align-items: center; @@ -535,35 +533,35 @@ div span.bio-grid-label{ row-gap: 10px; } -.bio-grid-top-border{ - border-top: 0px solid #AAA; +.bio-grid-top-border { + border-top: 0px solid #aaa; padding-top: 10px; } -.bio-grid-5col{ +.bio-grid-5col { display: grid; grid-template-columns: 100px 100px 20px 120px auto; align-items: center; padding-bottom: 10px; } -.bonds-grid-3col{ +.bonds-grid-3col { display: grid; grid-template-columns: auto 50px max-content; align-items: center; padding-bottom: 10px; } -.centered-input-value{ +.centered-input-value { text-align: center !important; } -.breaking-point-grid-3col{ +.breaking-point-grid-3col { display: grid; grid-template-columns: 100px 70px 65px; - border-top: 0px solid #AAA; + border-top: 0px solid #aaa; margin-bottom: 10px; - border-bottom: 1px solid #AAA; + border-bottom: 1px solid #aaa; align-content: center; justify-content: left; align-items: center; @@ -571,7 +569,7 @@ div span.bio-grid-label{ padding-top: 10px; } -.adaptation-grid-5col{ +.adaptation-grid-5col { display: grid; grid-template-columns: 100px 50px 50px 50px 200px; margin-top: 10px; @@ -580,16 +578,16 @@ div span.bio-grid-label{ justify-content: left; align-items: center; padding-bottom: 5px; - border-bottom: 0px solid #AAA; + border-bottom: 0px solid #aaa; } -.adapted-label{ +.adapted-label { font-weight: bold; font-style: italic; color: rgb(139, 0, 0); } -.weapon-grid-2col{ +.weapon-grid-2col { display: grid; grid-template-columns: 48% 48%; margin-top: 10px; @@ -600,38 +598,38 @@ div span.bio-grid-label{ column-gap: 4%; } -.centered-item-property{ +.centered-item-property { text-align: center; } -.bolded-label{ +.bolded-label { font-weight: bold; } -.resource .labeled-resource-checkbox{ +.resource .labeled-resource-checkbox { vertical-align: middle; } -.resource .first-aid-label{ +.resource .first-aid-label { vertical-align: bottom; } -div .motivation-section{ - border-bottom: 1px solid #AAA; +div .motivation-section { + border-bottom: 1px solid #aaa; margin-bottom: 10px; } -div .bottom-left-justified-resource{ +div .bottom-left-justified-resource { vertical-align: bottom; text-align: left; } -div .first-aid-received-section{ - border-bottom: 1px solid #AAA; +div .first-aid-received-section { + border-bottom: 1px solid #aaa; margin-bottom: 10px; } -.bonds-section-header{ +.bonds-section-header { /* border-top: 1px solid #AAA; */ width: 100%; display: flex; @@ -640,8 +638,8 @@ div .first-aid-received-section{ margin-bottom: 5px; } -.about-section-header{ - border-top: 1px solid #AAA; +.about-section-header { + border-top: 1px solid #aaa; width: 100%; display: flex; justify-content: center; @@ -649,18 +647,18 @@ div .first-aid-received-section{ margin-bottom: 5px; } -textarea.wounds{ +textarea.wounds { resize: none; } -.resource-inner-grid-3col{ +.resource-inner-grid-3col { display: grid; grid-template-columns: 35% 30% 35%; align-items: center; text-align: center; } -.resource-outer-grid-1col{ +.resource-outer-grid-1col { display: grid; grid-template-columns: 100%; align-items: center; @@ -672,7 +670,7 @@ textarea.wounds{ border-radius: 2px; } -div.max-resource-value{ +div.max-resource-value { border: 1px solid rgb(122, 121, 113); border-radius: 3px; height: 100%; @@ -681,7 +679,7 @@ div.max-resource-value{ align-items: center; } -.physical-stats-outer-grid-3col{ +.physical-stats-outer-grid-3col { display: grid; grid-template-columns: 33% 34% 33%; align-items: center; @@ -691,12 +689,12 @@ div.max-resource-value{ grid-gap: 5px; } -.physical-stats-and-feature{ +.physical-stats-and-feature { border-radius: 2px; border: 1.5px solid #000000; } -div.horizontal-bar-section-divider{ +div.horizontal-bar-section-divider { display: grid; grid-template-columns: 100%; justify-content: center; @@ -738,7 +736,7 @@ div.horizontal-bar-section-divider.contains-hide-button { justify-self: end; } -div.horizontal-bar-section-header{ +div.horizontal-bar-section-header { display: grid; grid-template-columns: 100%; justify-content: center; @@ -752,11 +750,11 @@ div.horizontal-bar-section-header{ height: 50px; } -.physical-description-label{ +.physical-description-label { font-weight: bold; } -div.motivation-editor-container div.editor{ +div.motivation-editor-container div.editor { height: 400px; min-height: 100% !important; } @@ -778,13 +776,13 @@ div.motivation-editor-container div.editor{ } .deltagreen .editor-host .tox { - height:100% !important; - display:block; + height: 100% !important; + display: block; } .deltagreen .editor-host .tox-tinymce { - height:100% !important; - display:block; + height: 100% !important; + display: block; } .deltagreen .editor-host .tox .tox-edit-area { @@ -805,14 +803,14 @@ div.motivation-editor-container div.editor{ border: 0px solid black; } -input.item-sheet-short-input{ +input.item-sheet-short-input { width: 75px; margin-right: 5px; margin-left: 5px; text-align: center !important; } -.item-grid-button-row{ +.item-grid-button-row { vertical-align: middle !important; line-height: inherit; padding: 5px 0px 0px 10px; @@ -822,7 +820,7 @@ input.item-sheet-short-input{ Bonds Item Sheet */ -.bond-sheet-grid-2col{ +.bond-sheet-grid-2col { display: grid; grid-template-columns: 25% 75%; align-items: center; @@ -832,7 +830,7 @@ input.item-sheet-short-input{ grid-gap: 5px; } -.bond-sheet-horizontal-grid-2col{ +.bond-sheet-horizontal-grid-2col { display: grid; grid-template-columns: 150px auto; align-items: center; @@ -847,9 +845,9 @@ input.item-sheet-short-input{ Motivation Item Sheet */ -.motivation-sheet-horizontal-grid-2col{ +.motivation-sheet-horizontal-grid-2col { display: grid; - grid-template-columns:50% 50%; + grid-template-columns: 50% 50%; align-items: center; justify-content: center; text-align: left; @@ -861,7 +859,7 @@ input.item-sheet-short-input{ Armor Item Sheet */ -.armor-sheet-grid-2col{ +.armor-sheet-grid-2col { display: grid; grid-template-columns: 25% 75%; align-items: center; @@ -872,7 +870,7 @@ input.item-sheet-short-input{ padding-left: 5px; } -.armor-sheet-horizontal-grid-2col{ +.armor-sheet-horizontal-grid-2col { display: grid; grid-template-columns: 100px auto; align-items: center; @@ -883,7 +881,7 @@ input.item-sheet-short-input{ padding-right: 5px; } -.armor-sheet-secondary-grid-2col{ +.armor-sheet-secondary-grid-2col { display: grid; grid-template-columns: 25% 75%; align-items: center; @@ -897,7 +895,7 @@ input.item-sheet-short-input{ Gear Item Sheet */ -.gear-sheet-grid-2col{ +.gear-sheet-grid-2col { display: grid; grid-template-columns: 25% 75%; align-items: center; @@ -907,7 +905,7 @@ input.item-sheet-short-input{ padding-left: 5px; } -.gear-sheet-horizontal-grid-2col{ +.gear-sheet-horizontal-grid-2col { display: grid; grid-template-columns: 100px auto; align-items: center; @@ -922,7 +920,7 @@ input.item-sheet-short-input{ Weapon Item Sheet */ -.weapon-sheet-grid-2col{ +.weapon-sheet-grid-2col { display: grid; grid-template-columns: 25% 75%; align-items: center; @@ -932,7 +930,7 @@ input.item-sheet-short-input{ padding-left: 5px; } -.weapon-sheet-horizontal-grid-2col{ +.weapon-sheet-horizontal-grid-2col { display: grid; grid-template-columns: 100px auto; align-items: center; @@ -943,9 +941,9 @@ input.item-sheet-short-input{ padding-right: 5px; } -.weapon-sheet-outer-grid-2col{ +.weapon-sheet-outer-grid-2col { display: grid; - grid-template-columns: 60% 40% ; + grid-template-columns: 60% 40%; align-items: center; justify-content: center; text-align: center; @@ -955,7 +953,7 @@ input.item-sheet-short-input{ row-gap: 5px; } -.weapon-sheet-horizontal-grid-left-2col{ +.weapon-sheet-horizontal-grid-left-2col { display: grid; grid-template-columns: 50% 50%; align-items: center; @@ -966,7 +964,7 @@ input.item-sheet-short-input{ padding-right: 10px; } -.weapon-sheet-horizontal-grid-right-2col{ +.weapon-sheet-horizontal-grid-right-2col { display: grid; grid-template-columns: 60% 40%; align-items: center; @@ -977,7 +975,7 @@ input.item-sheet-short-input{ padding-right: 10px; } -.weapon-sheet-secondary-grid-2col{ +.weapon-sheet-secondary-grid-2col { display: grid; grid-template-columns: 40% 60%; align-items: center; @@ -991,7 +989,7 @@ input.item-sheet-short-input{ Unnatural Character Sheet Specific Classes */ -.unnatural-notes-section{ +.unnatural-notes-section { display: grid; grid-template-columns: 100%; align-items: left; @@ -1002,70 +1000,72 @@ input.item-sheet-short-input{ text-align: left; } - -.skill-util-buttons{ +.skill-util-buttons { margin: 5px; } -.apply-skill-improvements{ +.apply-skill-improvements { float: right; } -.yellow-king{ +.yellow-king { color: #a0912f; } -.yellow-sign{ +.yellow-sign { font-weight: bold; text-shadow: 1px 1px #313a00; } -.yellow-king-rotate1{ +.yellow-king-rotate1 { transform: rotate(3deg); } -.yellow-king-rotate4{ +.yellow-king-rotate4 { transform: rotate(4deg); } -.yellow-king-rotate2{ +.yellow-king-rotate2 { transform: rotate(-1deg); } -.yellow-king-rotate3{ +.yellow-king-rotate3 { transform: rotate(5deg); } -.yellow-king-grid-9col{ +.yellow-king-grid-9col { display: grid; grid-template-columns: max-content 5px max-content max-content 20px max-content max-content 10px 35px; align-items: center; padding-bottom: 10px; } -.yellow-king-grid-5col{ +.yellow-king-grid-5col { display: grid; grid-template-columns: min-content 275px 20px min-content auto; align-items: center; padding-bottom: 10px; } -.yellow-king-label{ +.yellow-king-label { margin-right: 10px; } -.yellow-king input, .yellow-king select, .yellow-king textarea{ +.yellow-king input, +.yellow-king select, +.yellow-king textarea { color: #a0912f; font-weight: bold; } -.yellow-king textarea:focus, .yellow-king input:focus{ +.yellow-king textarea:focus, +.yellow-king input:focus { color: #a0912f; } -.top-div-border{ - border-top: 1px solid #AAA; +.top-div-border { + border-top: 1px solid #aaa; margin-bottom: 10px; padding-bottom: 10px; padding-top: 10px; -} \ No newline at end of file +} diff --git a/css/dialogue.css b/css/dialogue.css index 6a71691..552126e 100644 --- a/css/dialogue.css +++ b/css/dialogue.css @@ -1,44 +1,43 @@ -.skill-modify-grid{ - display: grid; - grid-template-columns: auto auto; - align-content: left; - justify-content: left; - align-items: left; - padding: 10px; - grid-gap: 10px 15px; - } - -.numeric-label-field{ - width: 50px !important; - text-align: center !important; - } - - -.damage-modify-label-grid{ - display: grid; - grid-template-columns: auto auto; - align-content: left; - justify-content: left; - align-items: left; - padding: 10px; - grid-gap: 10px 15px; -} - -.damage-modify-formula-modify-grid{ - display: grid; - grid-template-columns: auto auto auto auto auto auto; - align-content: left; - justify-content: left; - align-items: left; - padding: 10px; - grid-gap: 10px 15px; - } - -.damage-roll-formula-part{ - min-width: 100px !important; - text-align: center !important; -} - -.damage-modify-roll-mode{ +.skill-modify-grid { + display: grid; + grid-template-columns: auto auto; + align-content: left; + justify-content: left; + align-items: left; padding: 10px; -} \ No newline at end of file + grid-gap: 10px 15px; +} + +.numeric-label-field { + width: 50px !important; + text-align: center !important; +} + +.damage-modify-label-grid { + display: grid; + grid-template-columns: auto auto; + align-content: left; + justify-content: left; + align-items: left; + padding: 10px; + grid-gap: 10px 15px; +} + +.damage-modify-formula-modify-grid { + display: grid; + grid-template-columns: auto auto auto auto auto auto; + align-content: left; + justify-content: left; + align-items: left; + padding: 10px; + grid-gap: 10px 15px; +} + +.damage-roll-formula-part { + min-width: 100px !important; + text-align: center !important; +} + +.damage-modify-roll-mode { + padding: 10px; +} diff --git a/css/editor.css b/css/editor.css index 40edb80..b4a32ee 100644 --- a/css/editor.css +++ b/css/editor.css @@ -1,37 +1,37 @@ @font-face { - font-family: 'SpecialElite'; - src: url('../assets/font/special_elite/SpecialElite-Regular.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5, Opera 10+, Safari 3—5 */ + font-family: "SpecialElite"; + src: url("../assets/font/special_elite/SpecialElite-Regular.ttf") + format("truetype"); /* Chrome 4+, Firefox 3.5, Opera 10+, Safari 3—5 */ } -.special-elite-font{ - font-family: "SpecialElite", sans-serif !important; +.special-elite-font { + font-family: "SpecialElite", sans-serif !important; } .editor-content { - font-family: "SpecialElite", sans-serif !important; + font-family: "SpecialElite", sans-serif !important; +} + +.tox .tox-editor-container { + font-family: "SpecialElite", sans-serif !important; +} + +.tox .tox-edit-area { + font-family: "SpecialElite", sans-serif !important; +} + +.editor-host .editor { + font-family: "SpecialElite", sans-serif !important; +} + +.editor-host .tox { + font-family: "SpecialElite", sans-serif !important; +} + +.editor-host .tox-tinymce { + font-family: "SpecialElite", sans-serif !important; +} + +.editor-host .tox .tox-edit-area { + font-family: "SpecialElite", sans-serif !important; } - - - .tox .tox-editor-container { - font-family: "SpecialElite", sans-serif !important; - } - - .tox .tox-edit-area { - font-family: "SpecialElite", sans-serif !important; - } - - .editor-host .editor { - font-family: "SpecialElite", sans-serif !important; - } - - .editor-host .tox { - font-family: "SpecialElite", sans-serif !important; - } - - .editor-host .tox-tinymce { - font-family: "SpecialElite", sans-serif !important; - } - - .editor-host .tox .tox-edit-area { - font-family: "SpecialElite", sans-serif !important; - } \ No newline at end of file diff --git a/documentation/agent_sheet_sample.md b/documentation/agent_sheet_sample.md index 1866889..1a81ef2 100644 --- a/documentation/agent_sheet_sample.md +++ b/documentation/agent_sheet_sample.md @@ -21,16 +21,21 @@ The "Cowboys" setting gives the oldest feel, with a typewriter font and an weath ![Character Sheet Screenshot - Program - Skills](./images/agent_sheet_program_skills_tab.webp) ## Physical + ![Character Sheet Screenshot](./images/agent_sheet_program_statistics_tab.webp) ## Mental + ![Character Sheet Screenshot](./images/agent_sheet_program_psychological_tab.webp) ## Gear + ![Character Sheet Screenshot](./images/agent_sheet_program_equipment_tab.webp) ## CV + ![Character Sheet Screenshot](./images/agent_sheet_program_personal_tab.webp) ## Contacts -![Character Sheet Screenshot](./images/agent_sheet_program_bonds_tab.webp) \ No newline at end of file + +![Character Sheet Screenshot](./images/agent_sheet_program_bonds_tab.webp) diff --git a/documentation/home.md b/documentation/home.md index 4e69e7a..0aa7946 100644 --- a/documentation/home.md +++ b/documentation/home.md @@ -1,6 +1,7 @@ # System Documentation ## Table of Contents + 1. [Rolling Checks](#rolling-checks) 2. [Modifying Rolls on the Fly](#modifying-rolls) 3. [Type Skills Such as Art or Piloting](#type-skills) @@ -12,19 +13,21 @@ 9. [Item Macros](#item-macros) -## Rolling Checks + +## Rolling Checks Most labels can be clicked to roll a check or test of some kind. If they can be clicked, they should glow red when the mouse is hovered over them. ![Sanity Roll](./images/sanity_roll.webp) -* Click on _SAN_ (label above current/max sanity) to roll a Sanity check. -* Click on any of the skill labels (such as _Accounting_) to roll a skill test. -* Click on the name of a physical statistic (such as _STR_, on the _Physical_ tab) to roll a test. -* Click on a weapon name (on the _Gear_ tab) to roll the skill test associated with it (e.g. _Firearms_). -* Click on the Damage/Lethality associated with a weapon to roll it. +- Click on _SAN_ (label above current/max sanity) to roll a Sanity check. +- Click on any of the skill labels (such as _Accounting_) to roll a skill test. +- Click on the name of a physical statistic (such as _STR_, on the _Physical_ tab) to roll a test. +- Click on a weapon name (on the _Gear_ tab) to roll the skill test associated with it (e.g. _Firearms_). +- Click on the Damage/Lethality associated with a weapon to roll it. + ## Modifying Rolls on the Fly Shift-clicking or right-clicking will bring up a dialogue to allow modifying the roll. @@ -32,51 +35,58 @@ Shift-clicking or right-clicking will bring up a dialogue to allow modifying the ![Modify Roll Window](./images/modify_roll_dialogue.webp) + ## Where are the Specialized Skills Like 'Science' and 'Pilot'? -Only one 'Typed' skill is shown for an Agent by default, that being Art (Painting), and it is *below* all the other skills. It can be removed by clicking the trash icon inside the box for the skill. Likewise, new typed skills can be added by clicking the _+_ button just above the section. +Only one 'Typed' skill is shown for an Agent by default, that being Art (Painting), and it is _below_ all the other skills. It can be removed by clicking the trash icon inside the box for the skill. Likewise, new typed skills can be added by clicking the _+_ button just above the section. This allows adding any number of skills as needed, without having dead space for unused skills. ![Type Skills Section](./images/type_skill_example.webp) + ## Why Does the 'Lethality' Roll Show Damage Even on a Success? For Lethality, the D100 test against the target lethality threshold is evaluated like a normal skill test. But regardless of the outcome, the damage associated with a non-lethal roll (2D10) is also displayed in paretheses as lethality does not affect some creatures. -Note - the Lethality roll does not currently take into account the changes that rolling a critical on the associated attack roll involves. For example, on a critical _Firearms_ check with a weapon with a lethality of 10%, the threshold doubles to 20%, and if that check fails the resulting damage doubles as well. +Note - the Lethality roll does not currently take into account the changes that rolling a critical on the associated attack roll involves. For example, on a critical _Firearms_ check with a weapon with a lethality of 10%, the threshold doubles to 20%, and if that check fails the resulting damage doubles as well. + ## Where is an Agent's Breaking Point Shown? -It is under the _Mental_ tab, as are the boxes to tick for _Incidents of Sanity Loss Without Going Insane_ and an Agents _Motivations_ and _Disorders_. Clicking the _Reset_ button will automatically change it to current SAN - POW. +It is under the _Mental_ tab, as are the boxes to tick for _Incidents of Sanity Loss Without Going Insane_ and an Agents _Motivations_ and _Disorders_. Clicking the _Reset_ button will automatically change it to current SAN - POW. + ## "Inhuman Rules" - Why are Results for x5 Tests Different for Creatures with a x5 that is Greater than 100%? -Per the rules in the Handler's Guide, if a creature has a physical attribute that is 20 or above (giving a x5 of 100% or higher), it is considered "inhuman" and all rolls that are not a 100 automatically succeed. Furthermore, any roll that is **below the attribute score** is a critical (on top of the normal critical rules). For example, if a monster had a strength of 25, giving a x5 of 125, that monster could score a critical not only by rolling a 33, but also by rolling anything 25 or under. +Per the rules in the Handler's Guide, if a creature has a physical attribute that is 20 or above (giving a x5 of 100% or higher), it is considered "inhuman" and all rolls that are not a 100 automatically succeed. Furthermore, any roll that is **below the attribute score** is a critical (on top of the normal critical rules). For example, if a monster had a strength of 25, giving a x5 of 125, that monster could score a critical not only by rolling a 33, but also by rolling anything 25 or under. + ## What is the Ritual Skill? -Per the rules in the Handler's Guide, the ritual skill is used (primarily) to activate rituals. It is calculated as 100 - SAN. E.g., the lower one's sanity, the easier ritual activation becomes. Like Unnatural, it cannot be improved through failure like other skills. +Per the rules in the Handler's Guide, the ritual skill is used (primarily) to activate rituals. It is calculated as 100 - SAN. E.g., the lower one's sanity, the easier ritual activation becomes. Like Unnatural, it cannot be improved through failure like other skills. + ## What is the Shield Icon by Health? -This represents the total protection value of all equipped armor (click on the x or checkmark to toggle if armor is equipped or not). This is how much damage should be subtracted from incoming attacks, assuming the incoming damage has no armor penetration. +This represents the total protection value of all equipped armor (click on the x or checkmark to toggle if armor is equipped or not). This is how much damage should be subtracted from incoming attacks, assuming the incoming damage has no armor penetration. -Note there are a few limitations of this calculation. For instance the system is unaware of certain pieces that should not stack, such as wearing multiple helmets. Or wearing a kevlar helmet with armor that includes a helmet already (such as a bomb suit). +Note there are a few limitations of this calculation. For instance the system is unaware of certain pieces that should not stack, such as wearing multiple helmets. Or wearing a kevlar helmet with armor that includes a helmet already (such as a bomb suit). -In the example below, the vest is equipped but the helmet is not. As such total armor is only 4 rather than 5. Note that currently only 'Armor' type items can increase the calculated protection value. +In the example below, the vest is equipped but the helmet is not. As such total armor is only 4 rather than 5. Note that currently only 'Armor' type items can increase the calculated protection value. ![Armor Calculation](./images/equipped_armor.webp) + ## Item Macros -Currently there are two built-in item macros, that allow rolling the associated skill check or damage roll for a weapon. Dragging a weapon (try clicking on 'Armor Piercing' to avoid rolling) onto the macro bar results in a macro like this that will roll damage: +Currently there are two built-in item macros, that allow rolling the associated skill check or damage roll for a weapon. Dragging a weapon (try clicking on 'Armor Piercing' to avoid rolling) onto the macro bar results in a macro like this that will roll damage: ```javascript game.deltagreen.rollItemMacro("Combat Dagger"); @@ -89,4 +99,5 @@ You can get a macro that rolls the appropriate skill check instead however with ```javascript game.deltagreen.rollItemSkillCheckMacro("Combat Dagger"); ``` -Note that both of these macros search **the currently selected token** for the first instance of an item matching the indicated name passed to the function. \ No newline at end of file + +Note that both of these macros search **the currently selected token** for the first instance of an item matching the indicated name passed to the function. diff --git a/lang/ca.json b/lang/ca.json index bc5bee6..85dee9e 100644 --- a/lang/ca.json +++ b/lang/ca.json @@ -1,267 +1,266 @@ { - "DG.SystemName": "Delta Green", - "DG.AgentNameFieldTooltip": "COGNOM, NOM (ALIES O NOM EN CLAU EN CAS DE SER NECESSARI)", - "DG.RollLuck": "Tira sort", - "DG.Luck": "Sort", + "DG.SystemName": "Delta Green", + "DG.AgentNameFieldTooltip": "COGNOM, NOM (ALIES O NOM EN CLAU EN CAS DE SER NECESSARI)", + "DG.RollLuck": "Tira sort", + "DG.Luck": "Sort", - "DG.FallbackText.ProfessionAndOrRank": "Professió (Rang si aplica)", + "DG.FallbackText.ProfessionAndOrRank": "Professió (Rang si aplica)", - "DG.Skills.accounting": "Comptabilitat", - "DG.Skills.alertness": "Alerta", - "DG.Skills.anthropology": "Antropologia", - "DG.Skills.archeology": "Arqueologia", - "DG.Skills.artillery": "Artilleria", - "DG.Skills.athletics": "Atletisme", - "DG.Skills.bureaucracy": "Burocràcia", - "DG.Skills.computer_science": "Informàtica", - "DG.Skills.criminology": "Criminologia", - "DG.Skills.demolitions": "Demolicions", - "DG.Skills.disguise": "Disfressar-se", - "DG.Skills.dodge": "Esquivar", - "DG.Skills.drive": "Conduir", - "DG.Skills.firearms": "Armes de foc", - "DG.Skills.first_aid": "Primers auxilis", - "DG.Skills.forensics": "Ciència forense", - "DG.Skills.heavy_machiner": "Maquinària pesada", - "DG.Skills.heavy_weapons": "Armes pesades", - "DG.Skills.history": "Història", - "DG.Skills.humint": "HUMINT", - "DG.Skills.law": "Dret", - "DG.Skills.medicine": "Medicina", - "DG.Skills.melee_weapons": "Armes cos a cos", - "DG.Skills.navigate": "Orientar-se", - "DG.Skills.occult": "Ocultisme", - "DG.Skills.persuade": "Persuadir", - "DG.Skills.pharmacy": "Farmàcia", - "DG.Skills.psychotherapy": "Psicoteràpia", - "DG.Skills.ride": "Equitació", - "DG.Skills.search": "Cercar", - "DG.Skills.sigint": "SIGINT", - "DG.Skills.stealth": "Sigil/Camuflar", - "DG.Skills.surgery": "Cirurgia", - "DG.Skills.survival": "Supervivència", - "DG.Skills.swim": "Nedar", - "DG.Skills.unarmed_combat": "Combat sense armes", - "DG.Skills.unnatural": "Sobrenatural", + "DG.Skills.accounting": "Comptabilitat", + "DG.Skills.alertness": "Alerta", + "DG.Skills.anthropology": "Antropologia", + "DG.Skills.archeology": "Arqueologia", + "DG.Skills.artillery": "Artilleria", + "DG.Skills.athletics": "Atletisme", + "DG.Skills.bureaucracy": "Burocràcia", + "DG.Skills.computer_science": "Informàtica", + "DG.Skills.criminology": "Criminologia", + "DG.Skills.demolitions": "Demolicions", + "DG.Skills.disguise": "Disfressar-se", + "DG.Skills.dodge": "Esquivar", + "DG.Skills.drive": "Conduir", + "DG.Skills.firearms": "Armes de foc", + "DG.Skills.first_aid": "Primers auxilis", + "DG.Skills.forensics": "Ciència forense", + "DG.Skills.heavy_machiner": "Maquinària pesada", + "DG.Skills.heavy_weapons": "Armes pesades", + "DG.Skills.history": "Història", + "DG.Skills.humint": "HUMINT", + "DG.Skills.law": "Dret", + "DG.Skills.medicine": "Medicina", + "DG.Skills.melee_weapons": "Armes cos a cos", + "DG.Skills.navigate": "Orientar-se", + "DG.Skills.occult": "Ocultisme", + "DG.Skills.persuade": "Persuadir", + "DG.Skills.pharmacy": "Farmàcia", + "DG.Skills.psychotherapy": "Psicoteràpia", + "DG.Skills.ride": "Equitació", + "DG.Skills.search": "Cercar", + "DG.Skills.sigint": "SIGINT", + "DG.Skills.stealth": "Sigil/Camuflar", + "DG.Skills.surgery": "Cirurgia", + "DG.Skills.survival": "Supervivència", + "DG.Skills.swim": "Nedar", + "DG.Skills.unarmed_combat": "Combat sense armes", + "DG.Skills.unnatural": "Sobrenatural", - "DG.Skills.AddTypedOrCustomSkill": "Afegir tipus o habilitat personalitzada", - "DG.Skills.AddSkill": "Afegir habilitat", - "DG.Skills.EditTypedOrCustomSkill": "Edit Typed or Custom Skill", - "DG.Skills.EditSkill": "Edit Skill", - "DG.Skills.SkillGroup": "Habilitat grupal", - "DG.Skills.SkillName": "Nom de l'habilitat", + "DG.Skills.AddTypedOrCustomSkill": "Afegir tipus o habilitat personalitzada", + "DG.Skills.AddSkill": "Afegir habilitat", + "DG.Skills.EditTypedOrCustomSkill": "Edit Typed or Custom Skill", + "DG.Skills.EditSkill": "Edit Skill", + "DG.Skills.SkillGroup": "Habilitat grupal", + "DG.Skills.SkillName": "Nom de l'habilitat", - "DG.TypeSkills.Art": "Art", - "DG.TypeSkills.Craft": "Ofici", - "DG.TypeSkills.ForeignLanguage": "Idioma", - "DG.TypeSkills.MilitaryScience": "Ciència militar", - "DG.TypeSkills.Pilot": "Pilotar", - "DG.TypeSkills.Science": "Ciència", - "DG.TypeSkills.Other": "Altre", + "DG.TypeSkills.Art": "Art", + "DG.TypeSkills.Craft": "Ofici", + "DG.TypeSkills.ForeignLanguage": "Idioma", + "DG.TypeSkills.MilitaryScience": "Ciència militar", + "DG.TypeSkills.Pilot": "Pilotar", + "DG.TypeSkills.Science": "Ciència", + "DG.TypeSkills.Other": "Altre", - "DG.Attributes.HP": "PV", - "DG.Attributes.WP": "PVOL", - "DG.Attributes.SAN": "SENY", - "DG.Attributes.str": "FOR", - "DG.Attributes.con": "CON", - "DG.Attributes.dex": "DES", - "DG.Attributes.int": "INT", - "DG.Attributes.pow": "POD", - "DG.Attributes.cha": "CAR", + "DG.Attributes.HP": "PV", + "DG.Attributes.WP": "PVOL", + "DG.Attributes.SAN": "SENY", + "DG.Attributes.str": "FOR", + "DG.Attributes.con": "CON", + "DG.Attributes.dex": "DES", + "DG.Attributes.int": "INT", + "DG.Attributes.pow": "POD", + "DG.Attributes.cha": "CAR", - "DG.Navigation.Skills": "Habilitats", - "DG.Navigation.Physical": "Físic", - "DG.Navigation.Mental": "Mental", - "DG.Navigation.Gear": "Equip", - "DG.Navigation.CV": "C.V.", - "DG.Navigation.Contacts": "Contactes", + "DG.Navigation.Skills": "Habilitats", + "DG.Navigation.Physical": "Físic", + "DG.Navigation.Mental": "Mental", + "DG.Navigation.Gear": "Equip", + "DG.Navigation.CV": "C.V.", + "DG.Navigation.Contacts": "Contactes", - "DG.About.OnlineHelp": "Documentació del sistema oberta en (EN LÍNEA)", - "DG.About.OnlineHelpTooltip": "Inicia el navegador amb ajuda en línea de Github", - "DG.About.OnlineBugTracker": "Preguntes, informes d'errors o sol·licituts de funcions (EN LÍNEA)", - "DG.About.OnlineBugTrackerTooltip": "Inicia el navegador el rastrejador d'errors de Github. ", + "DG.About.OnlineHelp": "Documentació del sistema oberta en (EN LÍNEA)", + "DG.About.OnlineHelpTooltip": "Inicia el navegador amb ajuda en línea de Github", + "DG.About.OnlineBugTracker": "Preguntes, informes d'errors o sol·licituts de funcions (EN LÍNEA)", + "DG.About.OnlineBugTrackerTooltip": "Inicia el navegador el rastrejador d'errors de Github. ", - "DG.Roll.Rolling": "Tirant", - "DG.Roll.Target": "Objectiu: ", - "DG.Roll.Success": "Èxit", - "DG.Roll.Failure": "Fallada", - "DG.Roll.Critical": "Crític", - "DG.Roll.Lethality": "Letalitat", - "DG.Roll.Lethal": "Letal", - "DG.Roll.For": "Per", - "DG.Roll.Damage": "Dany", - "DG.Roll.RollingDamageFor": "Tirant dany per", - "DG.Roll.Or": "O", - "DG.Roll.Roll": "Tirar", + "DG.Roll.Rolling": "Tirant", + "DG.Roll.Target": "Objectiu: ", + "DG.Roll.Success": "Èxit", + "DG.Roll.Failure": "Fallada", + "DG.Roll.Critical": "Crític", + "DG.Roll.Lethality": "Letalitat", + "DG.Roll.Lethal": "Letal", + "DG.Roll.For": "Per", + "DG.Roll.Damage": "Dany", + "DG.Roll.RollingDamageFor": "Tirant dany per", + "DG.Roll.Or": "O", + "DG.Roll.Roll": "Tirar", - "DG.Physical.Wounds": "Ferides", - "DG.Physical.FirstAidLabel": "Primers auxilis ja aplicats: ", + "DG.Physical.Wounds": "Ferides", + "DG.Physical.FirstAidLabel": "Primers auxilis ja aplicats: ", - "DG.Generic.AddButtonLabel": "Afegir", + "DG.Generic.AddButtonLabel": "Afegir", - "DG.Mental.BreakingPoint": "Punt de trencament: ", - "DG.Mental.Reset": "Esborrar", - "DG.Mental.SanityLossIncidentsLabel": "Incidents o pèrdua de SENY sense embogir", - "DG.Mental.Violence": "Violència", - "DG.Mental.Helplessness": "Indefensió", - "DG.Mental.AdaptedToViolence": "Adaptat a la violència", - "DG.Mental.AdaptedToHelplessness": "Adaptat a la impotència", - "DG.Mental.Motivations": "Motivacions", - "DG.Mental.Disorders": "Desordres", + "DG.Mental.BreakingPoint": "Punt de trencament: ", + "DG.Mental.Reset": "Esborrar", + "DG.Mental.SanityLossIncidentsLabel": "Incidents o pèrdua de SENY sense embogir", + "DG.Mental.Violence": "Violència", + "DG.Mental.Helplessness": "Indefensió", + "DG.Mental.AdaptedToViolence": "Adaptat a la violència", + "DG.Mental.AdaptedToHelplessness": "Adaptat a la impotència", + "DG.Mental.Motivations": "Motivacions", + "DG.Mental.Disorders": "Desordres", - "DG.Gear.Weapons": "ARMES", - "DG.Gear.Armor": "ARMADURA", - "DG.Gear.OtherGear": "ALTRE EQUIP", - "DG.Gear.Name": "Nom", - "DG.Gear.DamageOrLethality": "Dany/Letalitat", - "DG.Gear.ArmorPiercing": "Perforació d'armadura", - "DG.Gear.ArmorRating": "Classificació d'armadura", - "DG.Gear.Equipped": "Equipat", + "DG.Gear.Weapons": "ARMES", + "DG.Gear.Armor": "ARMADURA", + "DG.Gear.OtherGear": "ALTRE EQUIP", + "DG.Gear.Name": "Nom", + "DG.Gear.DamageOrLethality": "Dany/Letalitat", + "DG.Gear.ArmorPiercing": "Perforació d'armadura", + "DG.Gear.ArmorRating": "Classificació d'armadura", + "DG.Gear.Equipped": "Equipat", - "DG.CV.Sex": "Sexe", - "DG.CV.SexPlaceholder": "Sexe", - "DG.CV.AgeAndDoB": "Edat y D.D.N.", - "DG.CV.AgeAndDoBPlaceholder": "Edat & Data de naixement", - "DG.CV.Employer": "Organització", - "DG.CV.EmployerPlaceholder": "Historial laboral", - "DG.CV.Nationality": "Nacionalitat", - "DG.CV.NationalityPlaceholder": "Nacionalitat", - "DG.CV.Education": "Educació", - "DG.CV.EducationPlaceholder": "Educació o entrenament", + "DG.CV.Sex": "Sexe", + "DG.CV.SexPlaceholder": "Sexe", + "DG.CV.AgeAndDoB": "Edat y D.D.N.", + "DG.CV.AgeAndDoBPlaceholder": "Edat & Data de naixement", + "DG.CV.Employer": "Organització", + "DG.CV.EmployerPlaceholder": "Historial laboral", + "DG.CV.Nationality": "Nacionalitat", + "DG.CV.NationalityPlaceholder": "Nacionalitat", + "DG.CV.Education": "Educació", + "DG.CV.EducationPlaceholder": "Educació o entrenament", - "DG.Bonds.Bond": "Vincle", - "DG.Bonds.Name": "Nom", - "DG.Bonds.Score": "Puntuació", - "DG.Bonds.NewBond": "Nou vincle", + "DG.Bonds.Bond": "Vincle", + "DG.Bonds.Name": "Nom", + "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.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.", - "DG.Tooltip.MaximumWP": "Els punts de voluntat màxims equivalen al POD.", - "DG.Tooltip.SanityLabel": "Clica per fer una tirada de seny.", - "DG.Tooltip.CurrentSanityPartOne": "Seny actual, el punt de trencament actual és ", - "DG.Tooltip.CurrentSanityPartTwo": ", fes clic a l'etiqueta de SENY anterior per realitzar una tirada de SENY.", - "DG.Tooltip.MaximumSanity": "El seny màxim és igual a 99 - l'habilitat antinatural.", - "DG.Tooltip.SkillLabel": "Clica per fer una tirada d'habilitat.", - "DG.Tooltip.CannotRollSkillLabel": "No es pot utilitzar una habilitat la 0%. Consulta la pàgina 28 del manual de l'agent.", - "DG.Tooltip.SkillFailCheckbox": "Després de fallar una prova sobre aquesta habilitat (si el domini és al menys 1%), marca aquesta casella. Al final de la sessió afageix 1D4-1 a l'habilitat i desmarca la casella. No s'aplica a l'habilitat antinatural. Consulta la pàgina 29 del manual de l'agent.", - "DG.Tooltip.DistinguishingFeature": "Caracteristica Distintiva (marca si la puntuació és de 13 o superior, o 8 o inferior).", - "DG.Tooltip.x5AttributeLabel": "Clica per una tirada de 5x.", - "DG.Tooltip.FirstAidAttempted": "Quan un agent rep primers auxilis, no es pot tornar a aplicar fins que rebi dany d'una font diferent.", - "DG.Tooltip.AdaptedToViolence": "Adaptar-se a la violència significa que l'empatia de l'agent rep al ser testimoni de tanta violència. Perd permanentment 1d6 CAR i la mateixa quantitat de cadascún dels seus vincles.", - "DG.Tooltip.AdaptedToHelplessness": "Estar adaptat a la impotència significa que l'impuls personal de l'agent s'allunya del món que el rodeja. Perd permanentement 1D6 POD. ", - "DG.Tooltip.ToggleEquippedState": "Fes click per alternar si aquest item està equipat o no. ", + "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.", + "DG.Tooltip.MaximumWP": "Els punts de voluntat màxims equivalen al POD.", + "DG.Tooltip.SanityLabel": "Clica per fer una tirada de seny.", + "DG.Tooltip.CurrentSanityPartOne": "Seny actual, el punt de trencament actual és ", + "DG.Tooltip.CurrentSanityPartTwo": ", fes clic a l'etiqueta de SENY anterior per realitzar una tirada de SENY.", + "DG.Tooltip.MaximumSanity": "El seny màxim és igual a 99 - l'habilitat antinatural.", + "DG.Tooltip.SkillLabel": "Clica per fer una tirada d'habilitat.", + "DG.Tooltip.CannotRollSkillLabel": "No es pot utilitzar una habilitat la 0%. Consulta la pàgina 28 del manual de l'agent.", + "DG.Tooltip.SkillFailCheckbox": "Després de fallar una prova sobre aquesta habilitat (si el domini és al menys 1%), marca aquesta casella. Al final de la sessió afageix 1D4-1 a l'habilitat i desmarca la casella. No s'aplica a l'habilitat antinatural. Consulta la pàgina 29 del manual de l'agent.", + "DG.Tooltip.DistinguishingFeature": "Caracteristica Distintiva (marca si la puntuació és de 13 o superior, o 8 o inferior).", + "DG.Tooltip.x5AttributeLabel": "Clica per una tirada de 5x.", + "DG.Tooltip.FirstAidAttempted": "Quan un agent rep primers auxilis, no es pot tornar a aplicar fins que rebi dany d'una font diferent.", + "DG.Tooltip.AdaptedToViolence": "Adaptar-se a la violència significa que l'empatia de l'agent rep al ser testimoni de tanta violència. Perd permanentment 1d6 CAR i la mateixa quantitat de cadascún dels seus vincles.", + "DG.Tooltip.AdaptedToHelplessness": "Estar adaptat a la impotència significa que l'impuls personal de l'agent s'allunya del món que el rodeja. Perd permanentement 1D6 POD. ", + "DG.Tooltip.ToggleEquippedState": "Fes click per alternar si aquest item està equipat o no. ", - "DG.Gear.Expense.NA": "N/A", - "DG.Gear.Expense.Incidental": "Accidental", - "DG.Gear.Expense.Standard": "Estàndar", - "DG.Gear.Expense.Unusual": "Inusual", - "DG.Gear.Expense.Major": "Destacat", - "DG.Gear.Expense.Extreme": "Extrem", + "DG.Gear.Expense.NA": "N/A", + "DG.Gear.Expense.Incidental": "Accidental", + "DG.Gear.Expense.Standard": "Estàndar", + "DG.Gear.Expense.Unusual": "Inusual", + "DG.Gear.Expense.Major": "Destacat", + "DG.Gear.Expense.Extreme": "Extrem", - "DG.ItemWindow.Bonds.Description": "Descripció / Desenvolupament ", - "DG.ItemWindow.Bonds.ScoreTooltip": "Una puntuació més alta representa una relació més forta entre l'agente i el vincle. ", + "DG.ItemWindow.Bonds.Description": "Descripció / Desenvolupament ", + "DG.ItemWindow.Bonds.ScoreTooltip": "Una puntuació més alta representa una relació més forta entre l'agente i el vincle. ", - "DG.ItemWindow.Motivations.Attributes": "Atributs", - "DG.ItemWindow.Motivations.Motivation": "Motivació", - "DG.ItemWindow.Motivations.Description": "Descripció / Notes", - "DG.ItemWindow.Motivations.Disorder": "Trastorn", - "DG.ItemWindow.Motivations.IsDisorder": "És trastorn", - "DG.ItemWindow.Motivations.MotivationNameTooltip": "Alguna cosa que impulsa el personatge. ", - "DG.ItemWindow.Motivations.DisorderNameTooltip": "Un trastorn substitueix una motivació després d'arribar al punt de trencament.", - "DG.ItemWindow.Motivations.IsDisorderTooltip": "Marca aquesta opció si afageix un trastorn o si ha perdut una motivació.", - "DG.ItemWindow.Motivations.DisorderHasBeenCured": "El trastorn s'ha curat.", - "DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip": "Un èxito crític en una tirada de sort terapèutica pot curar un trastorn. Tot i així, pot tornar la pròxima vegada que s'arribi a un punt de ruptura. ", + "DG.ItemWindow.Motivations.Attributes": "Atributs", + "DG.ItemWindow.Motivations.Motivation": "Motivació", + "DG.ItemWindow.Motivations.Description": "Descripció / Notes", + "DG.ItemWindow.Motivations.Disorder": "Trastorn", + "DG.ItemWindow.Motivations.IsDisorder": "És trastorn", + "DG.ItemWindow.Motivations.MotivationNameTooltip": "Alguna cosa que impulsa el personatge. ", + "DG.ItemWindow.Motivations.DisorderNameTooltip": "Un trastorn substitueix una motivació després d'arribar al punt de trencament.", + "DG.ItemWindow.Motivations.IsDisorderTooltip": "Marca aquesta opció si afageix un trastorn o si ha perdut una motivació.", + "DG.ItemWindow.Motivations.DisorderHasBeenCured": "El trastorn s'ha curat.", + "DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip": "Un èxito crític en una tirada de sort terapèutica pot curar un trastorn. Tot i així, pot tornar la pròxima vegada que s'arribi a un punt de ruptura. ", - "DG.ItemWindow.Gear.Attributes": "Atributs", - "DG.ItemWindow.Gear.Description": "Descripció", - "DG.ItemWindow.Gear.NamePlaceholder": "Nom", - "DG.ItemWindow.Gear.Expense": "Despesa", - "DG.ItemWindow.Gear.Equipped": "Equipat", + "DG.ItemWindow.Gear.Attributes": "Atributs", + "DG.ItemWindow.Gear.Description": "Descripció", + "DG.ItemWindow.Gear.NamePlaceholder": "Nom", + "DG.ItemWindow.Gear.Expense": "Despesa", + "DG.ItemWindow.Gear.Equipped": "Equipat", - "DG.ItemWindow.Armor.Description": "Descripció", - "DG.ItemWindow.Armor.NamePlaceholder": "Nom", - "DG.ItemWindow.Armor.ArmorRating": "Nivell armadura", - "DG.ItemWindow.Armor.Expense": "Despesa", - "DG.ItemWindow.Armor.Equipped": "Equipat", + "DG.ItemWindow.Armor.Description": "Descripció", + "DG.ItemWindow.Armor.NamePlaceholder": "Nom", + "DG.ItemWindow.Armor.ArmorRating": "Nivell armadura", + "DG.ItemWindow.Armor.Expense": "Despesa", + "DG.ItemWindow.Armor.Equipped": "Equipat", - "DG.ItemWindow.Weapons.Description": "Descripció", - "DG.ItemWindow.Weapons.NamePlaceholder": "Nom", - "DG.ItemWindow.Weapons.Skill": "Habilitat", - "DG.ItemWindow.Weapons.Expense": "Despesa", - "DG.ItemWindow.Weapons.Damage": "Dany", - "DG.ItemWindow.Weapons.Lethality": "Letalitat", - "DG.ItemWindow.Weapons.IsLethality": "És letal", - "DG.ItemWindow.Weapons.LethalityTooltip": "Una arma letal té l'oportunitat de matar instantàniament un objectiu. Tira 1d100 enlloc del dany. Si no és letal, el dany és dalcula tirant 2d10, on el primer d10 és iugal a 10.", - "DG.ItemWindow.Weapons.IsLethalityTooltip": "Marca si l'arma té un % de letalitat associat.", - "DG.ItemWindow.Weapons.ArmorPiercing": "Perforació d'armadures", - "DG.ItemWindow.Weapons.Ammo": "Munició (Quantitat/Tipus)", - "DG.ItemWindow.Weapons.Range": "Abast", - "DG.ItemWindow.Weapons.KillRadius": "Radi de mort", + "DG.ItemWindow.Weapons.Description": "Descripció", + "DG.ItemWindow.Weapons.NamePlaceholder": "Nom", + "DG.ItemWindow.Weapons.Skill": "Habilitat", + "DG.ItemWindow.Weapons.Expense": "Despesa", + "DG.ItemWindow.Weapons.Damage": "Dany", + "DG.ItemWindow.Weapons.Lethality": "Letalitat", + "DG.ItemWindow.Weapons.IsLethality": "És letal", + "DG.ItemWindow.Weapons.LethalityTooltip": "Una arma letal té l'oportunitat de matar instantàniament un objectiu. Tira 1d100 enlloc del dany. Si no és letal, el dany és dalcula tirant 2d10, on el primer d10 és iugal a 10.", + "DG.ItemWindow.Weapons.IsLethalityTooltip": "Marca si l'arma té un % de letalitat associat.", + "DG.ItemWindow.Weapons.ArmorPiercing": "Perforació d'armadures", + "DG.ItemWindow.Weapons.Ammo": "Munició (Quantitat/Tipus)", + "DG.ItemWindow.Weapons.Range": "Abast", + "DG.ItemWindow.Weapons.KillRadius": "Radi de mort", - "DG.ModifySkillRollDialogue.Title": "Modificar tirada", - "DG.ModifySkillRollDialogue.Test": "Test:", - "DG.ModifySkillRollDialogue.OriginalTarget": "Objectiu original:", - "DG.ModifySkillRollDialogue.TargetModifier": "Modificar objectiu:", - "DG.ModifySkillRollDialogue.ModifierTooltip": "Donar un modificador positiu o negatiu aquí per sumar o restar al objectiu en la tirada d'habilitats.", + "DG.ModifySkillRollDialogue.Title": "Modificar tirada", + "DG.ModifySkillRollDialogue.Test": "Test:", + "DG.ModifySkillRollDialogue.OriginalTarget": "Objectiu original:", + "DG.ModifySkillRollDialogue.TargetModifier": "Modificar objectiu:", + "DG.ModifySkillRollDialogue.ModifierTooltip": "Donar un modificador positiu o negatiu aquí per sumar o restar al objectiu en la tirada d'habilitats.", - "DG.ModifyDamageRollDialogue.Weapon": "Arma:", - "DG.ModifyDamageRollDialogue.OuterModifierTooltip": "Utilitza aquest camp per modificar la fòrmula, com duplicar el resultat.", - "DG.ModifyDamageRollDialogue.InnerModifierTooltip": "Utilitza aquest camp per afegir un modificar com +1 o un altre terma com +1d4.", + "DG.ModifyDamageRollDialogue.Weapon": "Arma:", + "DG.ModifyDamageRollDialogue.OuterModifierTooltip": "Utilitza aquest camp per modificar la fòrmula, com duplicar el resultat.", + "DG.ModifyDamageRollDialogue.InnerModifierTooltip": "Utilitza aquest camp per afegir un modificar com +1 o un altre terma com +1d4.", - "DG.Roll.Inhuman": "Inhumà", - "DG.Tooltip.BreakPoint": "El punt de trencament actual, actualitzar quan el seny actual sigui igual a aquest valor. El punt de trencament inciial és SENY - POD.", - "DG.Tooltip.BreakPointReset": "Actualitzar el punt de trencament al valor actual de SENY - PVOL.", - "DG.Skills.ritual": "Ritual", + "DG.Roll.Inhuman": "Inhumà", + "DG.Tooltip.BreakPoint": "El punt de trencament actual, actualitzar quan el seny actual sigui igual a aquest valor. El punt de trencament inciial és SENY - POD.", + "DG.Tooltip.BreakPointReset": "Actualitzar el punt de trencament al valor actual de SENY - PVOL.", + "DG.Skills.ritual": "Ritual", - "DG.RollMode": "Modo rollo", - "DG.Bonds.Relationship": "Relació", + "DG.RollMode": "Modo rollo", + "DG.Bonds.Relationship": "Relació", - "DG.TypeSkills.Subskills.Painting": "Pintar", + "DG.TypeSkills.Subskills.Painting": "Pintar", - "DG.Sheet.BlockHeaders.Attributes": "ATTRIBUTES", - "DG.Sheet.BlockHeaders.Statistics": "STATISTICS", - "DG.Sheet.BlockHeaders.PhysicalDescriptionNotes": "Descripció física/notes", - "DG.Sheet.BlockHeaders.SkillsAndTraining": "SKILLS AND TRAINING", - "DG.Sheet.BlockHeaders.Injuries": "INJURIES", - "DG.Sheet.BlockHeaders.BreakingPointAndAdaptations": "BREAKING POINT AND ADAPTATIONS", - "DG.Sheet.BlockHeaders.MotivationsAndDisorders": "MOTIVATIONS AND DISDORDERS", - "DG.Sheet.BlockHeaders.PersonalInfoCV": "PERSONAL INFORMATION / CV", - "DG.Sheet.BlockHeaders.BondsRelationshipsContacts": "BONDS / RELATIONSHIPS / CONTACTS", + "DG.Sheet.BlockHeaders.Attributes": "ATTRIBUTES", + "DG.Sheet.BlockHeaders.Statistics": "STATISTICS", + "DG.Sheet.BlockHeaders.PhysicalDescriptionNotes": "Descripció física/notes", + "DG.Sheet.BlockHeaders.SkillsAndTraining": "SKILLS AND TRAINING", + "DG.Sheet.BlockHeaders.Injuries": "INJURIES", + "DG.Sheet.BlockHeaders.BreakingPointAndAdaptations": "BREAKING POINT AND ADAPTATIONS", + "DG.Sheet.BlockHeaders.MotivationsAndDisorders": "MOTIVATIONS AND DISDORDERS", + "DG.Sheet.BlockHeaders.PersonalInfoCV": "PERSONAL INFORMATION / CV", + "DG.Sheet.BlockHeaders.BondsRelationshipsContacts": "BONDS / RELATIONSHIPS / CONTACTS", + "DG.UnnaturalSheet.HideUntrainedSkillsLabel": "Amagar habilitats no entrenades", + "DG.UnnaturalSheet.NotesLabel": "Notes", + "DG.UnnaturalSheet.ShortDescriptionFallbackText": "Descripció de la criatura o tipus de criatura", + "DG.UnnaturalSheet.Tabs.NotesTabLabel": "Habilitats i notes", + "DG.UnnaturalSheet.Tabs.ItemsTabLabel": "Atacs i equipament", + "DG.NPCSheet.BreakPointAbbreviation": "PT", - "DG.UnnaturalSheet.HideUntrainedSkillsLabel": "Amagar habilitats no entrenades", - "DG.UnnaturalSheet.NotesLabel": "Notes", - "DG.UnnaturalSheet.ShortDescriptionFallbackText": "Descripció de la criatura o tipus de criatura", - "DG.UnnaturalSheet.Tabs.NotesTabLabel": "Habilitats i notes", - "DG.UnnaturalSheet.Tabs.ItemsTabLabel": "Atacs i equipament", - "DG.NPCSheet.BreakPointAbbreviation": "PT", + "DG.ImpossibleLanscapes.IHaveSeenThe": "I HAVE SEEN THE", + "DG.ImpossibleLanscapes.YellowSign": "YELLOW SIGN", + "DG.ImpossibleLanscapes.CorruptionFirstHalf": "Corrup", + "DG.ImpossibleLanscapes.CorruptionSecondHalf": "tion", + "DG.ImpossibleLanscapes.Gift": "Gift", + "DG.ImpossibleLanscapes.Insight": "Insight", - "DG.ImpossibleLanscapes.IHaveSeenThe": "I HAVE SEEN THE", - "DG.ImpossibleLanscapes.YellowSign": "YELLOW SIGN", - "DG.ImpossibleLanscapes.CorruptionFirstHalf": "Corrup", - "DG.ImpossibleLanscapes.CorruptionSecondHalf": "tion", - "DG.ImpossibleLanscapes.Gift": "Gift", - "DG.ImpossibleLanscapes.Insight": "Insight", + "DG.VehicleSheet.NotesTabName": "Notes", + "DG.VehicleSheet.GearTabName": "Gear", + "DG.VehicleSheet.NotesLabel": "NOTES", + "DG.VehicleSheet.DescriptionPlaceHolder": "Vehicle Description", - "DG.VehicleSheet.NotesTabName": "Notes", - "DG.VehicleSheet.GearTabName": "Gear", - "DG.VehicleSheet.NotesLabel": "NOTES", - "DG.VehicleSheet.DescriptionPlaceHolder": "Vehicle Description", + "DG.Generic.CheckDamagedBondsBoxUntilNextHomeScene": "Check a damaged Bond's box until the next Home Scene ends.", + "DG.Generic.ClearAll": "Clear All", - "DG.Generic.CheckDamagedBondsBoxUntilNextHomeScene": "Check a damaged Bond's box until the next Home Scene ends.", - "DG.Generic.ClearAll": "Clear All", + "DG.Generic.SanDamage": "SAN Damage", - "DG.Generic.SanDamage": "SAN Damage", - - "DG.ItemWindow.Weapons.CustomSkillTarget": "Target", - "DG.ItemWindow.Weapons.SkillModifier": "Skill Modifier", - "DG.ItemWindow.Custom": "Custom" + "DG.ItemWindow.Weapons.CustomSkillTarget": "Target", + "DG.ItemWindow.Weapons.SkillModifier": "Skill Modifier", + "DG.ItemWindow.Custom": "Custom" } diff --git a/lang/en.json b/lang/en.json index 4c57405..d614a78 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,273 +1,273 @@ { - "DG.SystemName": "Delta Green", - "DG.AgentNameFieldTooltip": "LAST NAME, FIRST NAME (AND ALIAS IF APPLICABLE)", - "DG.RollLuck": "Roll Luck", - "DG.Luck": "Luck", + "DG.SystemName": "Delta Green", + "DG.AgentNameFieldTooltip": "LAST NAME, FIRST NAME (AND ALIAS IF APPLICABLE)", + "DG.RollLuck": "Roll Luck", + "DG.Luck": "Luck", - "DG.FallbackText.ProfessionAndOrRank": "PROFESSION (RANK IF APPLICABLE)", + "DG.FallbackText.ProfessionAndOrRank": "PROFESSION (RANK IF APPLICABLE)", - "DG.Skills.accounting": "Accounting", - "DG.Skills.alertness": "Alertness", - "DG.Skills.anthropology": "Anthropology", - "DG.Skills.archeology": "Archeology", - "DG.Skills.artillery": "Artillery", - "DG.Skills.athletics": "Athletics", - "DG.Skills.bureaucracy": "Bureaucracy", - "DG.Skills.computer_science": "Computer Science", - "DG.Skills.criminology": "Criminology", - "DG.Skills.demolitions": "Demolitions", - "DG.Skills.disguise": "Disguise", - "DG.Skills.dodge": "Dodge", - "DG.Skills.drive": "Drive", - "DG.Skills.firearms": "Firearms", - "DG.Skills.first_aid": "First Aid", - "DG.Skills.forensics": "Forensics", - "DG.Skills.heavy_machiner": "Heavy Machinery", - "DG.Skills.heavy_weapons": "Heavy Weapons", - "DG.Skills.history": "History", - "DG.Skills.humint": "HUMINT", - "DG.Skills.law": "Law", - "DG.Skills.medicine": "Medicine", - "DG.Skills.melee_weapons": "Melee Weapons", - "DG.Skills.navigate": "Navigate", - "DG.Skills.occult": "Occult", - "DG.Skills.persuade": "Persuade", - "DG.Skills.pharmacy": "Pharmacy", - "DG.Skills.psychotherapy": "Psychotherapy", - "DG.Skills.ride": "Ride", - "DG.Skills.search": "Search", - "DG.Skills.sigint": "SIGINT", - "DG.Skills.stealth": "Stealth", - "DG.Skills.surgery": "Surgery", - "DG.Skills.survival": "Survival", - "DG.Skills.swim": "Swim", - "DG.Skills.unarmed_combat": "Unarmed Combat", - "DG.Skills.unnatural": "Unnatural", + "DG.Skills.accounting": "Accounting", + "DG.Skills.alertness": "Alertness", + "DG.Skills.anthropology": "Anthropology", + "DG.Skills.archeology": "Archeology", + "DG.Skills.artillery": "Artillery", + "DG.Skills.athletics": "Athletics", + "DG.Skills.bureaucracy": "Bureaucracy", + "DG.Skills.computer_science": "Computer Science", + "DG.Skills.criminology": "Criminology", + "DG.Skills.demolitions": "Demolitions", + "DG.Skills.disguise": "Disguise", + "DG.Skills.dodge": "Dodge", + "DG.Skills.drive": "Drive", + "DG.Skills.firearms": "Firearms", + "DG.Skills.first_aid": "First Aid", + "DG.Skills.forensics": "Forensics", + "DG.Skills.heavy_machiner": "Heavy Machinery", + "DG.Skills.heavy_weapons": "Heavy Weapons", + "DG.Skills.history": "History", + "DG.Skills.humint": "HUMINT", + "DG.Skills.law": "Law", + "DG.Skills.medicine": "Medicine", + "DG.Skills.melee_weapons": "Melee Weapons", + "DG.Skills.navigate": "Navigate", + "DG.Skills.occult": "Occult", + "DG.Skills.persuade": "Persuade", + "DG.Skills.pharmacy": "Pharmacy", + "DG.Skills.psychotherapy": "Psychotherapy", + "DG.Skills.ride": "Ride", + "DG.Skills.search": "Search", + "DG.Skills.sigint": "SIGINT", + "DG.Skills.stealth": "Stealth", + "DG.Skills.surgery": "Surgery", + "DG.Skills.survival": "Survival", + "DG.Skills.swim": "Swim", + "DG.Skills.unarmed_combat": "Unarmed Combat", + "DG.Skills.unnatural": "Unnatural", - "DG.Skills.AddTypedOrCustomSkill": "Add Typed or Custom Skill", - "DG.Skills.AddSkill": "Add Skill", - "DG.Skills.Apply": "Apply", - "DG.Skills.ApplySkillImprovements": "Apply Skill Improvements", - "DG.Skills.ApplySkillImprovementsChatFlavor": "Improved the following skills by", - "DG.Skills.ApplySkillImprovementsDialogLabel": "Improve skills by the following formula:", - "DG.Skills.ApplySkillImprovementsDialogEffectsFollowing": "Effects the following skills:", - "DG.Skills.ApplySkillImprovementsWarning": "No failed skills to improve.", - "DG.Skills.EditTypedOrCustomSkill": "Edit Typed or Custom Skill", - "DG.Skills.EditSkill": "Edit Skill", - "DG.Skills.SkillGroup": "Skill Group", - "DG.Skills.SkillName": "Skill Name", + "DG.Skills.AddTypedOrCustomSkill": "Add Typed or Custom Skill", + "DG.Skills.AddSkill": "Add Skill", + "DG.Skills.Apply": "Apply", + "DG.Skills.ApplySkillImprovements": "Apply Skill Improvements", + "DG.Skills.ApplySkillImprovementsChatFlavor": "Improved the following skills by", + "DG.Skills.ApplySkillImprovementsDialogLabel": "Improve skills by the following formula:", + "DG.Skills.ApplySkillImprovementsDialogEffectsFollowing": "Effects the following skills:", + "DG.Skills.ApplySkillImprovementsWarning": "No failed skills to improve.", + "DG.Skills.EditTypedOrCustomSkill": "Edit Typed or Custom Skill", + "DG.Skills.EditSkill": "Edit Skill", + "DG.Skills.SkillGroup": "Skill Group", + "DG.Skills.SkillName": "Skill Name", - "DG.TypeSkills.Art": "Art", - "DG.TypeSkills.Craft": "Craft", - "DG.TypeSkills.ForeignLanguage": "Foreign Language", - "DG.TypeSkills.MilitaryScience": "Military Science", - "DG.TypeSkills.Pilot": "Pilot", - "DG.TypeSkills.Science": "Science", - "DG.TypeSkills.Other": "Other", + "DG.TypeSkills.Art": "Art", + "DG.TypeSkills.Craft": "Craft", + "DG.TypeSkills.ForeignLanguage": "Foreign Language", + "DG.TypeSkills.MilitaryScience": "Military Science", + "DG.TypeSkills.Pilot": "Pilot", + "DG.TypeSkills.Science": "Science", + "DG.TypeSkills.Other": "Other", - "DG.Attributes.HP": "HP", - "DG.Attributes.WP": "WP", - "DG.Attributes.SAN": "SAN", - "DG.Attributes.str": "STR", - "DG.Attributes.con": "CON", - "DG.Attributes.dex": "DEX", - "DG.Attributes.int": "INT", - "DG.Attributes.pow": "POW", - "DG.Attributes.cha": "CHA", + "DG.Attributes.HP": "HP", + "DG.Attributes.WP": "WP", + "DG.Attributes.SAN": "SAN", + "DG.Attributes.str": "STR", + "DG.Attributes.con": "CON", + "DG.Attributes.dex": "DEX", + "DG.Attributes.int": "INT", + "DG.Attributes.pow": "POW", + "DG.Attributes.cha": "CHA", - "DG.Navigation.Skills": "Skills", - "DG.Navigation.Physical": "Statistics", - "DG.Navigation.Mental": "Psychological", - "DG.Navigation.Gear": "Equipment", - "DG.Navigation.CV": "Personal", - "DG.Navigation.Contacts": "Bonds", + "DG.Navigation.Skills": "Skills", + "DG.Navigation.Physical": "Statistics", + "DG.Navigation.Mental": "Psychological", + "DG.Navigation.Gear": "Equipment", + "DG.Navigation.CV": "Personal", + "DG.Navigation.Contacts": "Bonds", - "DG.About.OnlineHelp": "System Documentation on (ONLINE)", - "DG.About.OnlineHelpTooltip": "Launch browser with online GitHub help.", - "DG.About.OnlineBugTracker": "Questions, Bug Reports or Feature Requests (ONLINE)", - "DG.About.OnlineBugTrackerTooltip": "Launch browser with GitHub issue tracker.", + "DG.About.OnlineHelp": "System Documentation on (ONLINE)", + "DG.About.OnlineHelpTooltip": "Launch browser with online GitHub help.", + "DG.About.OnlineBugTracker": "Questions, Bug Reports or Feature Requests (ONLINE)", + "DG.About.OnlineBugTrackerTooltip": "Launch browser with GitHub issue tracker.", - "DG.Roll.Rolling": "Rolling", - "DG.Roll.Target": "Target: ", - "DG.Roll.Success": "Success", - "DG.Roll.Failure": "Failure", - "DG.Roll.Critical": "Critical", - "DG.Roll.Lethality": "Lethality", - "DG.Roll.Lethal": "Lethal", - "DG.Roll.For": "For", - "DG.Roll.Damage": "Damage", - "DG.Roll.RollingDamageFor": "Rolling DAMAGE for", - "DG.Roll.Or": "Or", - "DG.Roll.Roll": "Roll", + "DG.Roll.Rolling": "Rolling", + "DG.Roll.Target": "Target: ", + "DG.Roll.Success": "Success", + "DG.Roll.Failure": "Failure", + "DG.Roll.Critical": "Critical", + "DG.Roll.Lethality": "Lethality", + "DG.Roll.Lethal": "Lethal", + "DG.Roll.For": "For", + "DG.Roll.Damage": "Damage", + "DG.Roll.RollingDamageFor": "Rolling DAMAGE for", + "DG.Roll.Or": "Or", + "DG.Roll.Roll": "Roll", - "DG.Physical.Wounds": "Wounds", - "DG.Physical.FirstAidLabel": "First Aid Has Already Been Attempted: ", + "DG.Physical.Wounds": "Wounds", + "DG.Physical.FirstAidLabel": "First Aid Has Already Been Attempted: ", - "DG.Generic.AddButtonLabel": "Add", + "DG.Generic.AddButtonLabel": "Add", - "DG.Mental.BreakingPoint": "Breaking Point: ", - "DG.Mental.Reset": "Reset", - "DG.Mental.SanityLossIncidentsLabel": "Incidents of SAN Loss Without Going Insane", - "DG.Mental.Violence": "Violence", - "DG.Mental.Helplessness": "Helplessness", - "DG.Mental.AdaptedToViolence": "Adapted to Violence", - "DG.Mental.AdaptedToHelplessness": "Adapted to Helplessness", - "DG.Mental.Motivations": "Motivation", - "DG.Mental.Disorders": "Disorder", + "DG.Mental.BreakingPoint": "Breaking Point: ", + "DG.Mental.Reset": "Reset", + "DG.Mental.SanityLossIncidentsLabel": "Incidents of SAN Loss Without Going Insane", + "DG.Mental.Violence": "Violence", + "DG.Mental.Helplessness": "Helplessness", + "DG.Mental.AdaptedToViolence": "Adapted to Violence", + "DG.Mental.AdaptedToHelplessness": "Adapted to Helplessness", + "DG.Mental.Motivations": "Motivation", + "DG.Mental.Disorders": "Disorder", - "DG.Gear.Weapons": "WEAPONS", - "DG.Gear.Armor": "ARMOR", - "DG.Gear.OtherGear": "OTHER GEAR", - "DG.Gear.Name": "Name", - "DG.Gear.DamageOrLethality": "Damage/Lethality", - "DG.Gear.ArmorPiercing": "Armor Piercing", - "DG.Gear.ArmorRating": "Armor Rating", - "DG.Gear.Equipped": "Equipped", + "DG.Gear.Weapons": "WEAPONS", + "DG.Gear.Armor": "ARMOR", + "DG.Gear.OtherGear": "OTHER GEAR", + "DG.Gear.Name": "Name", + "DG.Gear.DamageOrLethality": "Damage/Lethality", + "DG.Gear.ArmorPiercing": "Armor Piercing", + "DG.Gear.ArmorRating": "Armor Rating", + "DG.Gear.Equipped": "Equipped", - "DG.CV.Sex": "Sex", - "DG.CV.SexPlaceholder": "Sex", - "DG.CV.AgeAndDoB": "Age and D.O.B.", - "DG.CV.AgeAndDoBPlaceholder": "Age & Date of Birth", - "DG.CV.Employer": "Employer", - "DG.CV.EmployerPlaceholder": "Employer or Work History", - "DG.CV.Nationality": "Nationality", - "DG.CV.NationalityPlaceholder": "Nationality", - "DG.CV.Education": "Education", - "DG.CV.EducationPlaceholder": "Education or Training", + "DG.CV.Sex": "Sex", + "DG.CV.SexPlaceholder": "Sex", + "DG.CV.AgeAndDoB": "Age and D.O.B.", + "DG.CV.AgeAndDoBPlaceholder": "Age & Date of Birth", + "DG.CV.Employer": "Employer", + "DG.CV.EmployerPlaceholder": "Employer or Work History", + "DG.CV.Nationality": "Nationality", + "DG.CV.NationalityPlaceholder": "Nationality", + "DG.CV.Education": "Education", + "DG.CV.EducationPlaceholder": "Education or Training", - "DG.Bonds.Bond": "Bond", - "DG.Bonds.Name": "Name", - "DG.Bonds.Score": "Score", - "DG.Bonds.NewBond": "New Bond", + "DG.Bonds.Bond": "Bond", + "DG.Bonds.Name": "Name", + "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.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.", - "DG.Tooltip.MaximumWP": "Maximum WP is equal to POW.", - "DG.Tooltip.SanityLabel": "Click to roll a SAN test...", - "DG.Tooltip.CurrentSanityPartOne": "Current sanity, current breaking point is ", - "DG.Tooltip.CurrentSanityPartTwo": ", click the SAN label above to roll a sanity check.", - "DG.Tooltip.MaximumSanity": "Maximum sanity is equal to 99 - the Unnatural skill.", - "DG.Tooltip.SkillLabel": "Click to roll a skill check.", - "DG.Tooltip.CannotRollSkillLabel": "A skill at 0% cannot be used. See page 28 of the Agent's Handbook.", - "DG.Tooltip.SkillFailCheckbox": "After failing a test on this skill (if proficiency is at least 1%), check this box. At the end of the session, add 1D4 percentage points to the skill and uncheck the box. Does not apply to the Unnatural or Ritual skill. See page 29 of the Agent's Handbook.", - "DG.Tooltip.DistinguishingFeature": "Distinguishing Feature (fill out if score is 13 or higher, or 8 or lower).", - "DG.Tooltip.x5AttributeLabel": "Click to roll a x5 check.", - "DG.Tooltip.FirstAidAttempted": "Once an agent receives first aid, they cannot benefit from it again until they receive further damage from a different source.", - "DG.Tooltip.AdaptedToViolence": "Being adapted to violence means your Agent’s empathy suffers as they come to view violence as nothing but another tool to be wielded. Agent permanently loses 1D6 CHA and the same amount from each of their Bonds.", - "DG.Tooltip.AdaptedToHelplessness": "Being adapted to helplessness means your Agent’s personal drive suffers as they pull back from the world around them. As soon as your Agent becomes adapted to helplessness, agent permanently loses 1D6 POW.", - "DG.Tooltip.ToggleEquippedState": "Click to toggle whether this item is equipped or not.", + "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.", + "DG.Tooltip.MaximumWP": "Maximum WP is equal to POW.", + "DG.Tooltip.SanityLabel": "Click to roll a SAN test...", + "DG.Tooltip.CurrentSanityPartOne": "Current sanity, current breaking point is ", + "DG.Tooltip.CurrentSanityPartTwo": ", click the SAN label above to roll a sanity check.", + "DG.Tooltip.MaximumSanity": "Maximum sanity is equal to 99 - the Unnatural skill.", + "DG.Tooltip.SkillLabel": "Click to roll a skill check.", + "DG.Tooltip.CannotRollSkillLabel": "A skill at 0% cannot be used. See page 28 of the Agent's Handbook.", + "DG.Tooltip.SkillFailCheckbox": "After failing a test on this skill (if proficiency is at least 1%), check this box. At the end of the session, add 1D4 percentage points to the skill and uncheck the box. Does not apply to the Unnatural or Ritual skill. See page 29 of the Agent's Handbook.", + "DG.Tooltip.DistinguishingFeature": "Distinguishing Feature (fill out if score is 13 or higher, or 8 or lower).", + "DG.Tooltip.x5AttributeLabel": "Click to roll a x5 check.", + "DG.Tooltip.FirstAidAttempted": "Once an agent receives first aid, they cannot benefit from it again until they receive further damage from a different source.", + "DG.Tooltip.AdaptedToViolence": "Being adapted to violence means your Agent’s empathy suffers as they come to view violence as nothing but another tool to be wielded. Agent permanently loses 1D6 CHA and the same amount from each of their Bonds.", + "DG.Tooltip.AdaptedToHelplessness": "Being adapted to helplessness means your Agent’s personal drive suffers as they pull back from the world around them. As soon as your Agent becomes adapted to helplessness, agent permanently loses 1D6 POW.", + "DG.Tooltip.ToggleEquippedState": "Click to toggle whether this item is equipped or not.", - "DG.Gear.Expense.NA": "N/A or None", - "DG.Gear.Expense.Incidental": "Incidental", - "DG.Gear.Expense.Standard": "Standard", - "DG.Gear.Expense.Unusual": "Unusual", - "DG.Gear.Expense.Major": "Major", - "DG.Gear.Expense.Extreme": "Extreme", + "DG.Gear.Expense.NA": "N/A or None", + "DG.Gear.Expense.Incidental": "Incidental", + "DG.Gear.Expense.Standard": "Standard", + "DG.Gear.Expense.Unusual": "Unusual", + "DG.Gear.Expense.Major": "Major", + "DG.Gear.Expense.Extreme": "Extreme", - "DG.ItemWindow.Bonds.Description": "Description/Developments", - "DG.ItemWindow.Bonds.ScoreTooltip": "A higher score represents a stronger relationship between the agent and the bond.", + "DG.ItemWindow.Bonds.Description": "Description/Developments", + "DG.ItemWindow.Bonds.ScoreTooltip": "A higher score represents a stronger relationship between the agent and the bond.", - "DG.ItemWindow.Motivations.Attributes": "Attributes", - "DG.ItemWindow.Motivations.Motivation": "Motivation", - "DG.ItemWindow.Motivations.Description": "Description/Notes", - "DG.ItemWindow.Motivations.Disorder": "Disorder", - "DG.ItemWindow.Motivations.IsDisorder": "Is Disorder", - "DG.ItemWindow.Motivations.MotivationNameTooltip": "Something that drives the character.", - "DG.ItemWindow.Motivations.DisorderNameTooltip": "A disorder replaces a motivation after hitting a break point.", - "DG.ItemWindow.Motivations.IsDisorderTooltip": "Check this if adding a disorder, or if an existing motivation has been lost due to gaining a disorder.", - "DG.ItemWindow.Motivations.DisorderHasBeenCured": "Disorder Has Been \"Cured\"", - "DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip": "A critical success on a therapy luck roll can 'cure' a disorder. It may return the next time a breaking point is hit however. See the Therapy section on pages 78-79 of the Agent's Handbook.", + "DG.ItemWindow.Motivations.Attributes": "Attributes", + "DG.ItemWindow.Motivations.Motivation": "Motivation", + "DG.ItemWindow.Motivations.Description": "Description/Notes", + "DG.ItemWindow.Motivations.Disorder": "Disorder", + "DG.ItemWindow.Motivations.IsDisorder": "Is Disorder", + "DG.ItemWindow.Motivations.MotivationNameTooltip": "Something that drives the character.", + "DG.ItemWindow.Motivations.DisorderNameTooltip": "A disorder replaces a motivation after hitting a break point.", + "DG.ItemWindow.Motivations.IsDisorderTooltip": "Check this if adding a disorder, or if an existing motivation has been lost due to gaining a disorder.", + "DG.ItemWindow.Motivations.DisorderHasBeenCured": "Disorder Has Been \"Cured\"", + "DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip": "A critical success on a therapy luck roll can 'cure' a disorder. It may return the next time a breaking point is hit however. See the Therapy section on pages 78-79 of the Agent's Handbook.", - "DG.ItemWindow.Gear.Attributes": "Attributes", - "DG.ItemWindow.Gear.Description": "Description", - "DG.ItemWindow.Gear.NamePlaceholder": "Name", - "DG.ItemWindow.Gear.Expense": "Expense", - "DG.ItemWindow.Gear.Equipped": "Equipped", + "DG.ItemWindow.Gear.Attributes": "Attributes", + "DG.ItemWindow.Gear.Description": "Description", + "DG.ItemWindow.Gear.NamePlaceholder": "Name", + "DG.ItemWindow.Gear.Expense": "Expense", + "DG.ItemWindow.Gear.Equipped": "Equipped", - "DG.ItemWindow.Armor.Description": "Description", - "DG.ItemWindow.Armor.NamePlaceholder": "Name", - "DG.ItemWindow.Armor.ArmorRating": "Armor Rating", - "DG.ItemWindow.Armor.Expense": "Expense", - "DG.ItemWindow.Armor.Equipped": "Equipped", + "DG.ItemWindow.Armor.Description": "Description", + "DG.ItemWindow.Armor.NamePlaceholder": "Name", + "DG.ItemWindow.Armor.ArmorRating": "Armor Rating", + "DG.ItemWindow.Armor.Expense": "Expense", + "DG.ItemWindow.Armor.Equipped": "Equipped", - "DG.ItemWindow.Weapons.Description": "Description", - "DG.ItemWindow.Weapons.NamePlaceholder": "Name", - "DG.ItemWindow.Weapons.Skill": "Skill", - "DG.ItemWindow.Weapons.Expense": "Expense", - "DG.ItemWindow.Weapons.Damage": "Damage", - "DG.ItemWindow.Weapons.Lethality": "Lethality", - "DG.ItemWindow.Weapons.IsLethality": "Is Lethal", - "DG.ItemWindow.Weapons.LethalityTooltip": "A lethal weapon has a chance to instantly kill a target. Roll a D100 instead of damage die. If it is not lethal, damage is dealt instead as if the result was a 2d10 roll, with a '00' on the first d10 equaling a 10.", - "DG.ItemWindow.Weapons.IsLethalityTooltip": "Check this if the weapon has a lethality % associated with it.", - "DG.ItemWindow.Weapons.ArmorPiercing": "Armor Piercing", - "DG.ItemWindow.Weapons.Ammo": "Ammo (Amount/Type)", - "DG.ItemWindow.Weapons.Range": "Range", - "DG.ItemWindow.Weapons.KillRadius": "Kill Radius", + "DG.ItemWindow.Weapons.Description": "Description", + "DG.ItemWindow.Weapons.NamePlaceholder": "Name", + "DG.ItemWindow.Weapons.Skill": "Skill", + "DG.ItemWindow.Weapons.Expense": "Expense", + "DG.ItemWindow.Weapons.Damage": "Damage", + "DG.ItemWindow.Weapons.Lethality": "Lethality", + "DG.ItemWindow.Weapons.IsLethality": "Is Lethal", + "DG.ItemWindow.Weapons.LethalityTooltip": "A lethal weapon has a chance to instantly kill a target. Roll a D100 instead of damage die. If it is not lethal, damage is dealt instead as if the result was a 2d10 roll, with a '00' on the first d10 equaling a 10.", + "DG.ItemWindow.Weapons.IsLethalityTooltip": "Check this if the weapon has a lethality % associated with it.", + "DG.ItemWindow.Weapons.ArmorPiercing": "Armor Piercing", + "DG.ItemWindow.Weapons.Ammo": "Ammo (Amount/Type)", + "DG.ItemWindow.Weapons.Range": "Range", + "DG.ItemWindow.Weapons.KillRadius": "Kill Radius", - "DG.ModifySkillRollDialogue.Title": "Modify Roll", - "DG.ModifySkillRollDialogue.Test": "Test:", - "DG.ModifySkillRollDialogue.OriginalTarget": "Original Target:", - "DG.ModifySkillRollDialogue.TargetModifier": "Modify Target (+/-):", - "DG.ModifySkillRollDialogue.ModifierTooltip": "Give a positive or negative modifier here to add/subtract from the target for the skill check.", + "DG.ModifySkillRollDialogue.Title": "Modify Roll", + "DG.ModifySkillRollDialogue.Test": "Test:", + "DG.ModifySkillRollDialogue.OriginalTarget": "Original Target:", + "DG.ModifySkillRollDialogue.TargetModifier": "Modify Target (+/-):", + "DG.ModifySkillRollDialogue.ModifierTooltip": "Give a positive or negative modifier here to add/subtract from the target for the skill check.", - "DG.ModifyDamageRollDialogue.Weapon": "Weapon:", - "DG.ModifyDamageRollDialogue.OuterModifierTooltip": "Use this field to modify the outer part of the formula, such as to double the result.", - "DG.ModifyDamageRollDialogue.InnerModifierTooltip": "Use this field to add a flat modifier such as '+1' or another dice term such as '+1d4'.", + "DG.ModifyDamageRollDialogue.Weapon": "Weapon:", + "DG.ModifyDamageRollDialogue.OuterModifierTooltip": "Use this field to modify the outer part of the formula, such as to double the result.", + "DG.ModifyDamageRollDialogue.InnerModifierTooltip": "Use this field to add a flat modifier such as '+1' or another dice term such as '+1d4'.", - "DG.Roll.Inhuman": "Inhuman", - "DG.Tooltip.BreakPoint": "The current breaking point, reset when current sanity falls to or below this value. The starting breaking point is SAN - POW.", - "DG.Tooltip.BreakPointReset": "Reset breaking point to be current SAN - WP.", - "DG.Skills.ritual": "Ritual", + "DG.Roll.Inhuman": "Inhuman", + "DG.Tooltip.BreakPoint": "The current breaking point, reset when current sanity falls to or below this value. The starting breaking point is SAN - POW.", + "DG.Tooltip.BreakPointReset": "Reset breaking point to be current SAN - WP.", + "DG.Skills.ritual": "Ritual", - "DG.RollMode": "Roll Mode", - "DG.Bonds.Relationship": "Relationship", + "DG.RollMode": "Roll Mode", + "DG.Bonds.Relationship": "Relationship", - "DG.TypeSkills.Subskills.Painting": "Painting", + "DG.TypeSkills.Subskills.Painting": "Painting", - "DG.Sheet.BlockHeaders.Attributes": "ATTRIBUTES", - "DG.Sheet.BlockHeaders.Statistics": "STATISTICS", - "DG.Sheet.BlockHeaders.PhysicalDescriptionNotes": "PHYSICAL DESCRIPTION / NOTES", - "DG.Sheet.BlockHeaders.SkillsAndTraining": "SKILLS AND TRAINING", - "DG.Sheet.BlockHeaders.Injuries": "INJURIES", - "DG.Sheet.BlockHeaders.BreakingPointAndAdaptations": "BREAKING POINT AND ADAPTATIONS", - "DG.Sheet.BlockHeaders.MotivationsAndDisorders": "MOTIVATIONS AND DISDORDERS", - "DG.Sheet.BlockHeaders.PersonalInfoCV": "PERSONAL INFORMATION / CV", - "DG.Sheet.BlockHeaders.BondsRelationshipsContacts": "BONDS / RELATIONSHIPS / CONTACTS", + "DG.Sheet.BlockHeaders.Attributes": "ATTRIBUTES", + "DG.Sheet.BlockHeaders.Statistics": "STATISTICS", + "DG.Sheet.BlockHeaders.PhysicalDescriptionNotes": "PHYSICAL DESCRIPTION / NOTES", + "DG.Sheet.BlockHeaders.SkillsAndTraining": "SKILLS AND TRAINING", + "DG.Sheet.BlockHeaders.Injuries": "INJURIES", + "DG.Sheet.BlockHeaders.BreakingPointAndAdaptations": "BREAKING POINT AND ADAPTATIONS", + "DG.Sheet.BlockHeaders.MotivationsAndDisorders": "MOTIVATIONS AND DISDORDERS", + "DG.Sheet.BlockHeaders.PersonalInfoCV": "PERSONAL INFORMATION / CV", + "DG.Sheet.BlockHeaders.BondsRelationshipsContacts": "BONDS / RELATIONSHIPS / CONTACTS", - "DG.UnnaturalSheet.HideUntrainedSkillsLabel": "Hide Untrained", - "DG.UnnaturalSheet.NotesLabel": "Notes", - "DG.UnnaturalSheet.ShortDescriptionFallbackText": "Description of creature or creature type", - "DG.UnnaturalSheet.ShowUntrainedSkillsLabel": "Show Untrained", - "DG.UnnaturalSheet.Tabs.NotesTabLabel": "Skills & Notes", - "DG.UnnaturalSheet.Tabs.ItemsTabLabel": "Attacks & Abilities", - "DG.NPCSheet.BreakPointAbbreviation": "BP", + "DG.UnnaturalSheet.HideUntrainedSkillsLabel": "Hide Untrained", + "DG.UnnaturalSheet.NotesLabel": "Notes", + "DG.UnnaturalSheet.ShortDescriptionFallbackText": "Description of creature or creature type", + "DG.UnnaturalSheet.ShowUntrainedSkillsLabel": "Show Untrained", + "DG.UnnaturalSheet.Tabs.NotesTabLabel": "Skills & Notes", + "DG.UnnaturalSheet.Tabs.ItemsTabLabel": "Attacks & Abilities", + "DG.NPCSheet.BreakPointAbbreviation": "BP", - "DG.ImpossibleLanscapes.IHaveSeenThe": "I HAVE SEEN THE", - "DG.ImpossibleLanscapes.YellowSign": "YELLOW SIGN", - "DG.ImpossibleLanscapes.CorruptionFirstHalf": "Corrup", - "DG.ImpossibleLanscapes.CorruptionSecondHalf": "tion", - "DG.ImpossibleLanscapes.Gift": "Gift", - "DG.ImpossibleLanscapes.Insight": "Insight", + "DG.ImpossibleLanscapes.IHaveSeenThe": "I HAVE SEEN THE", + "DG.ImpossibleLanscapes.YellowSign": "YELLOW SIGN", + "DG.ImpossibleLanscapes.CorruptionFirstHalf": "Corrup", + "DG.ImpossibleLanscapes.CorruptionSecondHalf": "tion", + "DG.ImpossibleLanscapes.Gift": "Gift", + "DG.ImpossibleLanscapes.Insight": "Insight", - "DG.VehicleSheet.NotesTabName": "Notes", - "DG.VehicleSheet.GearTabName": "Gear", - "DG.VehicleSheet.NotesLabel": "NOTES", - "DG.VehicleSheet.DescriptionPlaceHolder": "Vehicle Description", + "DG.VehicleSheet.NotesTabName": "Notes", + "DG.VehicleSheet.GearTabName": "Gear", + "DG.VehicleSheet.NotesLabel": "NOTES", + "DG.VehicleSheet.DescriptionPlaceHolder": "Vehicle Description", - "DG.Generic.CheckDamagedBondsBoxUntilNextHomeScene": "Check a damaged Bond's box until the next Home Scene ends.", - "DG.Generic.ClearAll": "Clear Checks", + "DG.Generic.CheckDamagedBondsBoxUntilNextHomeScene": "Check a damaged Bond's box until the next Home Scene ends.", + "DG.Generic.ClearAll": "Clear Checks", - "DG.Generic.SanDamage": "SAN Damage", + "DG.Generic.SanDamage": "SAN Damage", - "DG.ItemWindow.Weapons.CustomSkillTarget": "Target", - "DG.ItemWindow.Weapons.SkillModifier": "Skill Modifier", - "DG.ItemWindow.Custom": "Custom" -} \ No newline at end of file + "DG.ItemWindow.Weapons.CustomSkillTarget": "Target", + "DG.ItemWindow.Weapons.SkillModifier": "Skill Modifier", + "DG.ItemWindow.Custom": "Custom" +} diff --git a/lang/es.json b/lang/es.json index 04b62c5..fc55eb5 100644 --- a/lang/es.json +++ b/lang/es.json @@ -1,277 +1,277 @@ { - "DG.SystemName": "Delta Green", - "DG.AgentNameFieldTooltip": "APELLIDO, NOMBRE (ALIAS O NOMBRE EN CLAVE SI APLICABLE)", - "DG.RollLuck": "Tira Suerte", - "DG.Luck": "Suerte", + "DG.SystemName": "Delta Green", + "DG.AgentNameFieldTooltip": "APELLIDO, NOMBRE (ALIAS O NOMBRE EN CLAVE SI APLICABLE)", + "DG.RollLuck": "Tira Suerte", + "DG.Luck": "Suerte", - "DG.FallbackText.ProfessionAndOrRank": "PROFESIÓN (RANGO SI APLICABLE)", + "DG.FallbackText.ProfessionAndOrRank": "PROFESIÓN (RANGO SI APLICABLE)", - "DG.Skills.accounting": "Contabilidad", - "DG.Skills.alertness": "Alerta", - "DG.Skills.anthropology": "Antropología", - "DG.Skills.archeology": "Arqueología", - "DG.Skills.artillery": "Artillería", - "DG.Skills.athletics": "Atletismo", - "DG.Skills.bureaucracy": "Burocracia", - "DG.Skills.computer_science": "Informática", - "DG.Skills.criminology": "Criminología", - "DG.Skills.demolitions": "Demoliciones", - "DG.Skills.disguise": "Disfrazarse", - "DG.Skills.dodge": "Esquivar", - "DG.Skills.drive": "Conducir", - "DG.Skills.firearms": "Armas de Fuego", - "DG.Skills.first_aid": "Primeros Auxilios", - "DG.Skills.forensics": "Ciencia Forense", - "DG.Skills.heavy_machiner": "Maquinaria Pesada", - "DG.Skills.heavy_weapons": "Armas Pesadas", - "DG.Skills.history": "Historia", - "DG.Skills.humint": "HUMINT", - "DG.Skills.law": "Derecho", - "DG.Skills.medicine": "Medicina", - "DG.Skills.melee_weapons": "Armas Cuerpo a Cuerpo", - "DG.Skills.navigate": "Orientarse", - "DG.Skills.occult": "Ocultismo", - "DG.Skills.persuade": "Persuadir", - "DG.Skills.pharmacy": "Farmacia", - "DG.Skills.psychotherapy": "Psicoterapia", - "DG.Skills.ride": "Equitación", - "DG.Skills.search": "Buscar", - "DG.Skills.sigint": "SIGINT", - "DG.Skills.stealth": "Sigilo/Camuflar", - "DG.Skills.surgery": "Cirugia", - "DG.Skills.survival": "Supervivencia", - "DG.Skills.swim": "Nadar", - "DG.Skills.unarmed_combat": "Combate sin Armas", - "DG.Skills.unnatural": "Antinatural", + "DG.Skills.accounting": "Contabilidad", + "DG.Skills.alertness": "Alerta", + "DG.Skills.anthropology": "Antropología", + "DG.Skills.archeology": "Arqueología", + "DG.Skills.artillery": "Artillería", + "DG.Skills.athletics": "Atletismo", + "DG.Skills.bureaucracy": "Burocracia", + "DG.Skills.computer_science": "Informática", + "DG.Skills.criminology": "Criminología", + "DG.Skills.demolitions": "Demoliciones", + "DG.Skills.disguise": "Disfrazarse", + "DG.Skills.dodge": "Esquivar", + "DG.Skills.drive": "Conducir", + "DG.Skills.firearms": "Armas de Fuego", + "DG.Skills.first_aid": "Primeros Auxilios", + "DG.Skills.forensics": "Ciencia Forense", + "DG.Skills.heavy_machiner": "Maquinaria Pesada", + "DG.Skills.heavy_weapons": "Armas Pesadas", + "DG.Skills.history": "Historia", + "DG.Skills.humint": "HUMINT", + "DG.Skills.law": "Derecho", + "DG.Skills.medicine": "Medicina", + "DG.Skills.melee_weapons": "Armas Cuerpo a Cuerpo", + "DG.Skills.navigate": "Orientarse", + "DG.Skills.occult": "Ocultismo", + "DG.Skills.persuade": "Persuadir", + "DG.Skills.pharmacy": "Farmacia", + "DG.Skills.psychotherapy": "Psicoterapia", + "DG.Skills.ride": "Equitación", + "DG.Skills.search": "Buscar", + "DG.Skills.sigint": "SIGINT", + "DG.Skills.stealth": "Sigilo/Camuflar", + "DG.Skills.surgery": "Cirugia", + "DG.Skills.survival": "Supervivencia", + "DG.Skills.swim": "Nadar", + "DG.Skills.unarmed_combat": "Combate sin Armas", + "DG.Skills.unnatural": "Antinatural", - "DG.Skills.AddTypedOrCustomSkill": "Añadir Tipo o Habilidad Personalizada", - "DG.Skills.AddSkill": "Añadir Habilidad", - "DG.Skills.EditTypedOrCustomSkill": "Edit Typed or Custom Skill", - "DG.Skills.EditSkill": "Edit Skill", - "DG.Skills.SkillGroup": "Habilidad Grupal", - "DG.Skills.SkillName": "Nombre de la Habilidad", + "DG.Skills.AddTypedOrCustomSkill": "Añadir Tipo o Habilidad Personalizada", + "DG.Skills.AddSkill": "Añadir Habilidad", + "DG.Skills.EditTypedOrCustomSkill": "Edit Typed or Custom Skill", + "DG.Skills.EditSkill": "Edit Skill", + "DG.Skills.SkillGroup": "Habilidad Grupal", + "DG.Skills.SkillName": "Nombre de la Habilidad", - "DG.TypeSkills.Art": "Arte", - "DG.TypeSkills.Craft": "Oficio", - "DG.TypeSkills.ForeignLanguage": "Idioma", - "DG.TypeSkills.MilitaryScience": "Ciencia Militar", - "DG.TypeSkills.Pilot": "Pilotar", - "DG.TypeSkills.Science": "Ciencia", - "DG.TypeSkills.Other": "Otra", + "DG.TypeSkills.Art": "Arte", + "DG.TypeSkills.Craft": "Oficio", + "DG.TypeSkills.ForeignLanguage": "Idioma", + "DG.TypeSkills.MilitaryScience": "Ciencia Militar", + "DG.TypeSkills.Pilot": "Pilotar", + "DG.TypeSkills.Science": "Ciencia", + "DG.TypeSkills.Other": "Otra", - "DG.Attributes.HP": "PV", - "DG.Attributes.WP": "PVOL", - "DG.Attributes.SAN": "COR", - "DG.Attributes.str": "FUE", - "DG.Attributes.con": "CON", - "DG.Attributes.dex": "DES", - "DG.Attributes.int": "INT", - "DG.Attributes.pow": "POD", - "DG.Attributes.cha": "CAR", + "DG.Attributes.HP": "PV", + "DG.Attributes.WP": "PVOL", + "DG.Attributes.SAN": "COR", + "DG.Attributes.str": "FUE", + "DG.Attributes.con": "CON", + "DG.Attributes.dex": "DES", + "DG.Attributes.int": "INT", + "DG.Attributes.pow": "POD", + "DG.Attributes.cha": "CAR", - "DG.Navigation.Skills": "Habilidades", - "DG.Navigation.Physical": "Físico", - "DG.Navigation.Mental": "Mental", - "DG.Navigation.Gear": "Equipo", - "DG.Navigation.CV": "C.V.", - "DG.Navigation.Contacts": "Contactos", + "DG.Navigation.Skills": "Habilidades", + "DG.Navigation.Physical": "Físico", + "DG.Navigation.Mental": "Mental", + "DG.Navigation.Gear": "Equipo", + "DG.Navigation.CV": "C.V.", + "DG.Navigation.Contacts": "Contactos", - "DG.About.OnlineHelp": "Documentación del sistema abierto en (EN LÍNEA)", - "DG.About.OnlineHelpTooltip": "Inicie el navegador con la ayuda en línea de GitHub.", - "DG.About.OnlineBugTracker": "Preguntas, informes de errores o solicitudes de funciones (EN LÍNEA)", - "DG.About.OnlineBugTrackerTooltip": "Inicie el navegador con el rastreador de problemas de GitHub. ", + "DG.About.OnlineHelp": "Documentación del sistema abierto en (EN LÍNEA)", + "DG.About.OnlineHelpTooltip": "Inicie el navegador con la ayuda en línea de GitHub.", + "DG.About.OnlineBugTracker": "Preguntas, informes de errores o solicitudes de funciones (EN LÍNEA)", + "DG.About.OnlineBugTrackerTooltip": "Inicie el navegador con el rastreador de problemas de GitHub. ", - "DG.Roll.Rolling": "Tirando", - "DG.Roll.Target": "Objetivo: ", - "DG.Roll.Success": "Exito", - "DG.Roll.Failure": "Fallo", - "DG.Roll.Critical": "Crítico", - "DG.Roll.Lethality": "Letalidad", - "DG.Roll.Lethal": "Letal", - "DG.Roll.For": "Para", - "DG.Roll.Damage": "Daño", - "DG.Roll.RollingDamageFor": "Tirando DAÑO para", - "DG.Roll.Or": "O", - "DG.Roll.Roll": "Tirar", + "DG.Roll.Rolling": "Tirando", + "DG.Roll.Target": "Objetivo: ", + "DG.Roll.Success": "Exito", + "DG.Roll.Failure": "Fallo", + "DG.Roll.Critical": "Crítico", + "DG.Roll.Lethality": "Letalidad", + "DG.Roll.Lethal": "Letal", + "DG.Roll.For": "Para", + "DG.Roll.Damage": "Daño", + "DG.Roll.RollingDamageFor": "Tirando DAÑO para", + "DG.Roll.Or": "O", + "DG.Roll.Roll": "Tirar", - "DG.Physical.Wounds": "Heridas", - "DG.Physical.FirstAidLabel": "Los Primeros Auxilios ya han sido aplicados: ", + "DG.Physical.Wounds": "Heridas", + "DG.Physical.FirstAidLabel": "Los Primeros Auxilios ya han sido aplicados: ", - "DG.Generic.AddButtonLabel": "Añadir", + "DG.Generic.AddButtonLabel": "Añadir", - "DG.Mental.BreakingPoint": "Punto de Ruptura: ", - "DG.Mental.Reset": "Borrar", - "DG.Mental.SanityLossIncidentsLabel": "Incidentes o perdida de COR sin enloquecer", - "DG.Mental.Violence": "Violencia", - "DG.Mental.Helplessness": "Indefensión", - "DG.Mental.AdaptedToViolence": "Adaptado a la Violencia", - "DG.Mental.AdaptedToHelplessness": "Adaptado a la Indefensión", - "DG.Mental.Motivations": "Motivaciones", - "DG.Mental.Disorders": "Desordenes", + "DG.Mental.BreakingPoint": "Punto de Ruptura: ", + "DG.Mental.Reset": "Borrar", + "DG.Mental.SanityLossIncidentsLabel": "Incidentes o perdida de COR sin enloquecer", + "DG.Mental.Violence": "Violencia", + "DG.Mental.Helplessness": "Indefensión", + "DG.Mental.AdaptedToViolence": "Adaptado a la Violencia", + "DG.Mental.AdaptedToHelplessness": "Adaptado a la Indefensión", + "DG.Mental.Motivations": "Motivaciones", + "DG.Mental.Disorders": "Desordenes", - "DG.Gear.Weapons": "ARMAS", - "DG.Gear.Armor": "ARMADURA", - "DG.Gear.OtherGear": "OTRO EQUIPO", - "DG.Gear.Name": "Nombre", - "DG.Gear.DamageOrLethality": "Daño/Letalidad", - "DG.Gear.ArmorPiercing": "Perforación de Armadura", - "DG.Gear.ArmorRating": "Clasificación de Armadura", - "DG.Gear.Equipped": "Equipado", + "DG.Gear.Weapons": "ARMAS", + "DG.Gear.Armor": "ARMADURA", + "DG.Gear.OtherGear": "OTRO EQUIPO", + "DG.Gear.Name": "Nombre", + "DG.Gear.DamageOrLethality": "Daño/Letalidad", + "DG.Gear.ArmorPiercing": "Perforación de Armadura", + "DG.Gear.ArmorRating": "Clasificación de Armadura", + "DG.Gear.Equipped": "Equipado", - "DG.CV.Sex": "Sexo", - "DG.CV.SexPlaceholder": "Sexo", - "DG.CV.AgeAndDoB": "Edad y F.D.N.", - "DG.CV.AgeAndDoBPlaceholder": "Edad & Fecha de Nacimiento", - "DG.CV.Employer": "Empleador", - "DG.CV.EmployerPlaceholder": "Empleador o Historial laboral", - "DG.CV.Nationality": "Nacionalidad", - "DG.CV.NationalityPlaceholder": "Nacionalidad", - "DG.CV.Education": "Educación", - "DG.CV.EducationPlaceholder": "Educación o Entrenamiento", + "DG.CV.Sex": "Sexo", + "DG.CV.SexPlaceholder": "Sexo", + "DG.CV.AgeAndDoB": "Edad y F.D.N.", + "DG.CV.AgeAndDoBPlaceholder": "Edad & Fecha de Nacimiento", + "DG.CV.Employer": "Empleador", + "DG.CV.EmployerPlaceholder": "Empleador o Historial laboral", + "DG.CV.Nationality": "Nacionalidad", + "DG.CV.NationalityPlaceholder": "Nacionalidad", + "DG.CV.Education": "Educación", + "DG.CV.EducationPlaceholder": "Educación o Entrenamiento", - "DG.Bonds.Bond": "Vínculo", - "DG.Bonds.Name": "Nombre", - "DG.Bonds.Score": "Puntuación", - "DG.Bonds.NewBond": "Nuevo Vínculo", + "DG.Bonds.Bond": "Vínculo", + "DG.Bonds.Name": "Nombre", + "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.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.", - "DG.Tooltip.MaximumWP": "Los Ptos Voluntad máximos son iguales al POD.", - "DG.Tooltip.SanityLabel": "Click para hacer una tirada de Cordura...", - "DG.Tooltip.CurrentSanityPartOne": "Cordura actual, punto de ruptura actual es ", - "DG.Tooltip.CurrentSanityPartTwo": ", haga clic en la etiqueta COR anterior para realizar una tirada de de cordura.", - "DG.Tooltip.MaximumSanity": "La cordura máxima es igual a 99 - la habilidad Antinatural.", - "DG.Tooltip.SkillLabel": "Click para hacer una tirada de habilidad.", - "DG.Tooltip.CannotRollSkillLabel": "No se puede usar una habilidad al 0%. Consulte la página 28 del Manual del Agente.", - "DG.Tooltip.SkillFailCheckbox": "Después de fallar una prueba sobre esta habilidad (si el dominio es de al menos 1%), marque esta casilla. Al final de la sesión, agregue puntos porcentuales 1D4-1 a la habilidad y desmarque la casilla. No se aplica a la habilidad Antinatural. Consulte la página 29 del Manual del Agente.", - "DG.Tooltip.DistinguishingFeature": "Característica Distintiva (rellene si la puntuación es 13 o superior, u 8 o inferior).", - "DG.Tooltip.x5AttributeLabel": "Click para una tirada x5.", - "DG.Tooltip.FirstAidAttempted": "Una vez que un agente recibe primeros auxilios, no puede beneficiarse de él de nuevo hasta que reciba más daños de una fuente diferente.", - "DG.Tooltip.AdaptedToViolence": "Adaptarse a la violencia significa que la empatía de su agente sufre al ser testigo de tanta violencia. Pierde permanentemente 1D6 CAR y la misma cantidad de cada uno de sus vínculos.", - "DG.Tooltip.AdaptedToHelplessness": "Estar adaptado a la impotencia significa que el impulso personal de su Agente sufre cuando se aleja del mundo que lo rodea. Tan pronto como su Agente se adapte a la indefensión, perderá permanentemente 1D6 POD. ", - "DG.Tooltip.ToggleEquippedState": "Haga clic para alternar si este artículo está equipado o no. ", + "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.", + "DG.Tooltip.MaximumWP": "Los Ptos Voluntad máximos son iguales al POD.", + "DG.Tooltip.SanityLabel": "Click para hacer una tirada de Cordura...", + "DG.Tooltip.CurrentSanityPartOne": "Cordura actual, punto de ruptura actual es ", + "DG.Tooltip.CurrentSanityPartTwo": ", haga clic en la etiqueta COR anterior para realizar una tirada de de cordura.", + "DG.Tooltip.MaximumSanity": "La cordura máxima es igual a 99 - la habilidad Antinatural.", + "DG.Tooltip.SkillLabel": "Click para hacer una tirada de habilidad.", + "DG.Tooltip.CannotRollSkillLabel": "No se puede usar una habilidad al 0%. Consulte la página 28 del Manual del Agente.", + "DG.Tooltip.SkillFailCheckbox": "Después de fallar una prueba sobre esta habilidad (si el dominio es de al menos 1%), marque esta casilla. Al final de la sesión, agregue puntos porcentuales 1D4-1 a la habilidad y desmarque la casilla. No se aplica a la habilidad Antinatural. Consulte la página 29 del Manual del Agente.", + "DG.Tooltip.DistinguishingFeature": "Característica Distintiva (rellene si la puntuación es 13 o superior, u 8 o inferior).", + "DG.Tooltip.x5AttributeLabel": "Click para una tirada x5.", + "DG.Tooltip.FirstAidAttempted": "Una vez que un agente recibe primeros auxilios, no puede beneficiarse de él de nuevo hasta que reciba más daños de una fuente diferente.", + "DG.Tooltip.AdaptedToViolence": "Adaptarse a la violencia significa que la empatía de su agente sufre al ser testigo de tanta violencia. Pierde permanentemente 1D6 CAR y la misma cantidad de cada uno de sus vínculos.", + "DG.Tooltip.AdaptedToHelplessness": "Estar adaptado a la impotencia significa que el impulso personal de su Agente sufre cuando se aleja del mundo que lo rodea. Tan pronto como su Agente se adapte a la indefensión, perderá permanentemente 1D6 POD. ", + "DG.Tooltip.ToggleEquippedState": "Haga clic para alternar si este artículo está equipado o no. ", - "DG.Gear.Expense.NA": "N/A", - "DG.Gear.Expense.Incidental": "Incidental", - "DG.Gear.Expense.Standard": "Estándar", - "DG.Gear.Expense.Unusual": "Inusual", - "DG.Gear.Expense.Major": "Destacado", - "DG.Gear.Expense.Extreme": "Extremo", + "DG.Gear.Expense.NA": "N/A", + "DG.Gear.Expense.Incidental": "Incidental", + "DG.Gear.Expense.Standard": "Estándar", + "DG.Gear.Expense.Unusual": "Inusual", + "DG.Gear.Expense.Major": "Destacado", + "DG.Gear.Expense.Extreme": "Extremo", - "DG.ItemWindow.Bonds.Description": "Descripción / Desarrollos ", - "DG.ItemWindow.Bonds.ScoreTooltip": "Una puntuación más alta representa una relación más fuerte entre el agente y el vínculo. ", + "DG.ItemWindow.Bonds.Description": "Descripción / Desarrollos ", + "DG.ItemWindow.Bonds.ScoreTooltip": "Una puntuación más alta representa una relación más fuerte entre el agente y el vínculo. ", - "DG.ItemWindow.Motivations.Attributes": "Atributos", - "DG.ItemWindow.Motivations.Motivation": "Motivación", - "DG.ItemWindow.Motivations.Description": "Descripción / Notas", - "DG.ItemWindow.Motivations.Disorder": "Trastorno", - "DG.ItemWindow.Motivations.IsDisorder": "Es Trastorno", - "DG.ItemWindow.Motivations.MotivationNameTooltip": "Algo que impulsa al personaje. ", - "DG.ItemWindow.Motivations.DisorderNameTooltip": "Un trastorno reemplaza una motivación después de llegar al punto de ruptura.", - "DG.ItemWindow.Motivations.IsDisorderTooltip": "Marque esta opción si agrega un trastorno o si se ha perdido una motivación existente debido a la adquisición de un trastorno.", - "DG.ItemWindow.Motivations.DisorderHasBeenCured": "El trastorno ha sido curado.", - "DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip": "Un éxito crítico en una tirada de suerte terapéutica puede curar un trastorno. Sin embargo, puede regresar la próxima vez que se alcance un punto de ruptura. ", + "DG.ItemWindow.Motivations.Attributes": "Atributos", + "DG.ItemWindow.Motivations.Motivation": "Motivación", + "DG.ItemWindow.Motivations.Description": "Descripción / Notas", + "DG.ItemWindow.Motivations.Disorder": "Trastorno", + "DG.ItemWindow.Motivations.IsDisorder": "Es Trastorno", + "DG.ItemWindow.Motivations.MotivationNameTooltip": "Algo que impulsa al personaje. ", + "DG.ItemWindow.Motivations.DisorderNameTooltip": "Un trastorno reemplaza una motivación después de llegar al punto de ruptura.", + "DG.ItemWindow.Motivations.IsDisorderTooltip": "Marque esta opción si agrega un trastorno o si se ha perdido una motivación existente debido a la adquisición de un trastorno.", + "DG.ItemWindow.Motivations.DisorderHasBeenCured": "El trastorno ha sido curado.", + "DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip": "Un éxito crítico en una tirada de suerte terapéutica puede curar un trastorno. Sin embargo, puede regresar la próxima vez que se alcance un punto de ruptura. ", - "DG.ItemWindow.Gear.Attributes": "Atributos", - "DG.ItemWindow.Gear.Description": "Descripción", - "DG.ItemWindow.Gear.NamePlaceholder": "Nombre", - "DG.ItemWindow.Gear.Expense": "Gasto", - "DG.ItemWindow.Gear.Equipped": "Equipado", + "DG.ItemWindow.Gear.Attributes": "Atributos", + "DG.ItemWindow.Gear.Description": "Descripción", + "DG.ItemWindow.Gear.NamePlaceholder": "Nombre", + "DG.ItemWindow.Gear.Expense": "Gasto", + "DG.ItemWindow.Gear.Equipped": "Equipado", - "DG.ItemWindow.Armor.Description": "Descripción", - "DG.ItemWindow.Armor.NamePlaceholder": "Nombre", - "DG.ItemWindow.Armor.ArmorRating": "Tasa Armadura", - "DG.ItemWindow.Armor.Expense": "Gasto", - "DG.ItemWindow.Armor.Equipped": "Equipado", + "DG.ItemWindow.Armor.Description": "Descripción", + "DG.ItemWindow.Armor.NamePlaceholder": "Nombre", + "DG.ItemWindow.Armor.ArmorRating": "Tasa Armadura", + "DG.ItemWindow.Armor.Expense": "Gasto", + "DG.ItemWindow.Armor.Equipped": "Equipado", - "DG.ItemWindow.Weapons.Description": "Descripción", - "DG.ItemWindow.Weapons.NamePlaceholder": "Nombre", - "DG.ItemWindow.Weapons.Skill": "Habilidad", - "DG.ItemWindow.Weapons.Expense": "Gasto", - "DG.ItemWindow.Weapons.Damage": "Daño", - "DG.ItemWindow.Weapons.Lethality": "Letalidad", - "DG.ItemWindow.Weapons.IsLethality": "Es Letal", - "DG.ItemWindow.Weapons.LethalityTooltip": "Un arma letal tiene la oportunidad de matar instantáneamente a un objetivo. Tira 1D100 en lugar de un dado de daño. Si no es letal, el daño se calcula en su lugar tirando 2d10, donde un '00' en el primer d10 es igual a 10.", - "DG.ItemWindow.Weapons.IsLethalityTooltip": "Marca si el arma tiene un % de letalidad asociada.", - "DG.ItemWindow.Weapons.ArmorPiercing": "Perforación de armaduras", - "DG.ItemWindow.Weapons.Ammo": "Munición (Cantidad/Tipo)", - "DG.ItemWindow.Weapons.Range": "Alcance", - "DG.ItemWindow.Weapons.KillRadius": "Radio de muerte", + "DG.ItemWindow.Weapons.Description": "Descripción", + "DG.ItemWindow.Weapons.NamePlaceholder": "Nombre", + "DG.ItemWindow.Weapons.Skill": "Habilidad", + "DG.ItemWindow.Weapons.Expense": "Gasto", + "DG.ItemWindow.Weapons.Damage": "Daño", + "DG.ItemWindow.Weapons.Lethality": "Letalidad", + "DG.ItemWindow.Weapons.IsLethality": "Es Letal", + "DG.ItemWindow.Weapons.LethalityTooltip": "Un arma letal tiene la oportunidad de matar instantáneamente a un objetivo. Tira 1D100 en lugar de un dado de daño. Si no es letal, el daño se calcula en su lugar tirando 2d10, donde un '00' en el primer d10 es igual a 10.", + "DG.ItemWindow.Weapons.IsLethalityTooltip": "Marca si el arma tiene un % de letalidad asociada.", + "DG.ItemWindow.Weapons.ArmorPiercing": "Perforación de armaduras", + "DG.ItemWindow.Weapons.Ammo": "Munición (Cantidad/Tipo)", + "DG.ItemWindow.Weapons.Range": "Alcance", + "DG.ItemWindow.Weapons.KillRadius": "Radio de muerte", - "DG.ModifySkillRollDialogue.Title": "Modificar Tirada", - "DG.ModifySkillRollDialogue.Test": "Test:", - "DG.ModifySkillRollDialogue.OriginalTarget": "Objetivo Original:", - "DG.ModifySkillRollDialogue.TargetModifier": "Modificar Objetivo:", - "DG.ModifySkillRollDialogue.ModifierTooltip": "Dar un modificador positivo o negativo aquí para sumar o restar al objetivo en la chequeo de habilidades.", + "DG.ModifySkillRollDialogue.Title": "Modificar Tirada", + "DG.ModifySkillRollDialogue.Test": "Test:", + "DG.ModifySkillRollDialogue.OriginalTarget": "Objetivo Original:", + "DG.ModifySkillRollDialogue.TargetModifier": "Modificar Objetivo:", + "DG.ModifySkillRollDialogue.ModifierTooltip": "Dar un modificador positivo o negativo aquí para sumar o restar al objetivo en la chequeo de habilidades.", - "DG.ModifyDamageRollDialogue.Weapon": "Arma:", - "DG.ModifyDamageRollDialogue.OuterModifierTooltip": "Utilice este campo para modificar la fórmula, como duplicar el resultado.", - "DG.ModifyDamageRollDialogue.InnerModifierTooltip": "Utilice este campo para añadir un modificador como '+1' u otro término como '+1d4'.", + "DG.ModifyDamageRollDialogue.Weapon": "Arma:", + "DG.ModifyDamageRollDialogue.OuterModifierTooltip": "Utilice este campo para modificar la fórmula, como duplicar el resultado.", + "DG.ModifyDamageRollDialogue.InnerModifierTooltip": "Utilice este campo para añadir un modificador como '+1' u otro término como '+1d4'.", - "DG.Roll.Inhuman": "Inhumano", - "DG.Tooltip.BreakPoint": "El Punto de Ruptura actual, actualizar cuando la Cordura actual sea igual o inferior a este valor. El Punto de Ruptura inicial es COR - POD.", - "DG.Tooltip.BreakPointReset": "Actualizar el Punto de Ruptura al valor actual de COR - PVOL.", - "DG.Skills.ritual": "Ritual", + "DG.Roll.Inhuman": "Inhumano", + "DG.Tooltip.BreakPoint": "El Punto de Ruptura actual, actualizar cuando la Cordura actual sea igual o inferior a este valor. El Punto de Ruptura inicial es COR - POD.", + "DG.Tooltip.BreakPointReset": "Actualizar el Punto de Ruptura al valor actual de COR - PVOL.", + "DG.Skills.ritual": "Ritual", - "DG.RollMode": "Modo rollo", - "DG.Bonds.Relationship": "Relación", + "DG.RollMode": "Modo rollo", + "DG.Bonds.Relationship": "Relación", - "DG.TypeSkills.Subskills.Painting": "Cuadro", + "DG.TypeSkills.Subskills.Painting": "Cuadro", - "DG.Sheet.BlockHeaders.Attributes": "ATTRIBUTES", - "DG.Sheet.BlockHeaders.Statistics": "STATISTICS", - "DG.Sheet.BlockHeaders.PhysicalDescriptionNotes": "Descripción Física/Notas", - "DG.Sheet.BlockHeaders.SkillsAndTraining": "SKILLS AND TRAINING", - "DG.Sheet.BlockHeaders.Injuries": "INJURIES", - "DG.Sheet.BlockHeaders.BreakingPointAndAdaptations": "BREAKING POINT AND ADAPTATIONS", - "DG.Sheet.BlockHeaders.MotivationsAndDisorders": "MOTIVATIONS AND DISDORDERS", - "DG.Sheet.BlockHeaders.PersonalInfoCV": "PERSONAL INFORMATION / CV", - "DG.Sheet.BlockHeaders.BondsRelationshipsContacts": "BONDS / RELATIONSHIPS / CONTACTS", + "DG.Sheet.BlockHeaders.Attributes": "ATTRIBUTES", + "DG.Sheet.BlockHeaders.Statistics": "STATISTICS", + "DG.Sheet.BlockHeaders.PhysicalDescriptionNotes": "Descripción Física/Notas", + "DG.Sheet.BlockHeaders.SkillsAndTraining": "SKILLS AND TRAINING", + "DG.Sheet.BlockHeaders.Injuries": "INJURIES", + "DG.Sheet.BlockHeaders.BreakingPointAndAdaptations": "BREAKING POINT AND ADAPTATIONS", + "DG.Sheet.BlockHeaders.MotivationsAndDisorders": "MOTIVATIONS AND DISDORDERS", + "DG.Sheet.BlockHeaders.PersonalInfoCV": "PERSONAL INFORMATION / CV", + "DG.Sheet.BlockHeaders.BondsRelationshipsContacts": "BONDS / RELATIONSHIPS / CONTACTS", - "DG.UnnaturalSheet.HideUntrainedSkillsLabel": "Hide Untrained Skills", - "DG.UnnaturalSheet.NotesLabel": "Notes", - "DG.UnnaturalSheet.ShortDescriptionFallbackText": "Description of creature or creature type", - "DG.UnnaturalSheet.Tabs.NotesTabLabel": "Skills & Notes", - "DG.UnnaturalSheet.Tabs.ItemsTabLabel": "Attacks & Abilities", - "DG.NPCSheet.BreakPointAbbreviation": "BP", + "DG.UnnaturalSheet.HideUntrainedSkillsLabel": "Hide Untrained Skills", + "DG.UnnaturalSheet.NotesLabel": "Notes", + "DG.UnnaturalSheet.ShortDescriptionFallbackText": "Description of creature or creature type", + "DG.UnnaturalSheet.Tabs.NotesTabLabel": "Skills & Notes", + "DG.UnnaturalSheet.Tabs.ItemsTabLabel": "Attacks & Abilities", + "DG.NPCSheet.BreakPointAbbreviation": "BP", - "DG.ImpossibleLanscapes.IHaveSeenThe": "I HAVE SEEN THE", - "DG.ImpossibleLanscapes.YellowSign": "YELLOW SIGN", - "DG.ImpossibleLanscapes.CorruptionFirstHalf": "Corrup", - "DG.ImpossibleLanscapes.CorruptionSecondHalf": "tion", - "DG.ImpossibleLanscapes.Gift": "Gift", - "DG.ImpossibleLanscapes.Insight": "Insight", + "DG.ImpossibleLanscapes.IHaveSeenThe": "I HAVE SEEN THE", + "DG.ImpossibleLanscapes.YellowSign": "YELLOW SIGN", + "DG.ImpossibleLanscapes.CorruptionFirstHalf": "Corrup", + "DG.ImpossibleLanscapes.CorruptionSecondHalf": "tion", + "DG.ImpossibleLanscapes.Gift": "Gift", + "DG.ImpossibleLanscapes.Insight": "Insight", - "DG.VehicleSheet.NotesTabName": "Notes", - "DG.VehicleSheet.GearTabName": "Gear", - "DG.VehicleSheet.NotesLabel": "NOTES", - "DG.VehicleSheet.DescriptionPlaceHolder": "Vehicle Description", + "DG.VehicleSheet.NotesTabName": "Notes", + "DG.VehicleSheet.GearTabName": "Gear", + "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.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", + "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", + "DG.Generic.CheckDamagedBondsBoxUntilNextHomeScene": "Check a damaged Bond's box until the next Home Scene ends.", + "DG.Generic.ClearAll": "Clear All", - "DG.Generic.SanDamage": "SAN Damage", + "DG.Generic.SanDamage": "SAN Damage", - "DG.ItemWindow.Weapons.CustomSkillTarget": "Target", - "DG.ItemWindow.Weapons.SkillModifier": "Skill Modifier", - "DG.ItemWindow.Custom": "Custom" -} \ No newline at end of file + "DG.ItemWindow.Weapons.CustomSkillTarget": "Target", + "DG.ItemWindow.Weapons.SkillModifier": "Skill Modifier", + "DG.ItemWindow.Custom": "Custom" +} diff --git a/lang/ja.json b/lang/ja.json index f97c86d..f23dabd 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -1,266 +1,266 @@ { - "DG.SystemName": "デルタ・グリーン", - "DG.AgentNameFieldTooltip": "名前(エイリアス)", - "DG.RollLuck": "運のテスト", - "DG.Luck": "運", + "DG.SystemName": "デルタ・グリーン", + "DG.AgentNameFieldTooltip": "名前(エイリアス)", + "DG.RollLuck": "運のテスト", + "DG.Luck": "運", - "DG.FallbackText.ProfessionAndOrRank": "職業 (またはランク)", + "DG.FallbackText.ProfessionAndOrRank": "職業 (またはランク)", - "DG.Skills.accounting": "会計", - "DG.Skills.alertness": "警戒心", - "DG.Skills.anthropology": "人類学", - "DG.Skills.archeology": "考古学", - "DG.Skills.artillery": "火砲", - "DG.Skills.athletics": "アスレチックス", - "DG.Skills.bureaucracy": "官僚", - "DG.Skills.computer_science": "コンピュータサイエンス", - "DG.Skills.criminology": "犯罪学", - "DG.Skills.demolitions": "取り壊し", - "DG.Skills.disguise": "変装", - "DG.Skills.dodge": "ダッジ", - "DG.Skills.drive": "運転", - "DG.Skills.firearms": "銃砲", - "DG.Skills.first_aid": "応急処置", - "DG.Skills.forensics": "法医学", - "DG.Skills.heavy_machiner": "重機", - "DG.Skills.heavy_weapons": "重火器", - "DG.Skills.history": "歴史学", - "DG.Skills.humint": "HUMINT", - "DG.Skills.law": "法律", - "DG.Skills.medicine": "医学", - "DG.Skills.melee_weapons": "近接武器", - "DG.Skills.navigate": "航行", - "DG.Skills.occult": "オカルト", - "DG.Skills.persuade": "説得", - "DG.Skills.pharmacy": "薬学", - "DG.Skills.psychotherapy": "心理療法", - "DG.Skills.ride": "乗り", - "DG.Skills.search": "捜索", - "DG.Skills.sigint": "SIGINT", - "DG.Skills.stealth": "ステルス", - "DG.Skills.surgery": "手術", - "DG.Skills.survival": "サバイバル", - "DG.Skills.swim": "泳ぎ", - "DG.Skills.unarmed_combat": "非武装戦闘", - "DG.Skills.unnatural": "不自然", + "DG.Skills.accounting": "会計", + "DG.Skills.alertness": "警戒心", + "DG.Skills.anthropology": "人類学", + "DG.Skills.archeology": "考古学", + "DG.Skills.artillery": "火砲", + "DG.Skills.athletics": "アスレチックス", + "DG.Skills.bureaucracy": "官僚", + "DG.Skills.computer_science": "コンピュータサイエンス", + "DG.Skills.criminology": "犯罪学", + "DG.Skills.demolitions": "取り壊し", + "DG.Skills.disguise": "変装", + "DG.Skills.dodge": "ダッジ", + "DG.Skills.drive": "運転", + "DG.Skills.firearms": "銃砲", + "DG.Skills.first_aid": "応急処置", + "DG.Skills.forensics": "法医学", + "DG.Skills.heavy_machiner": "重機", + "DG.Skills.heavy_weapons": "重火器", + "DG.Skills.history": "歴史学", + "DG.Skills.humint": "HUMINT", + "DG.Skills.law": "法律", + "DG.Skills.medicine": "医学", + "DG.Skills.melee_weapons": "近接武器", + "DG.Skills.navigate": "航行", + "DG.Skills.occult": "オカルト", + "DG.Skills.persuade": "説得", + "DG.Skills.pharmacy": "薬学", + "DG.Skills.psychotherapy": "心理療法", + "DG.Skills.ride": "乗り", + "DG.Skills.search": "捜索", + "DG.Skills.sigint": "SIGINT", + "DG.Skills.stealth": "ステルス", + "DG.Skills.surgery": "手術", + "DG.Skills.survival": "サバイバル", + "DG.Skills.swim": "泳ぎ", + "DG.Skills.unarmed_combat": "非武装戦闘", + "DG.Skills.unnatural": "不自然", - "DG.Skills.AddTypedOrCustomSkill": "スキルを加える", - "DG.Skills.AddSkill": "スキルを加える", - "DG.Skills.EditTypedOrCustomSkill": "スキルを編集", - "DG.Skills.EditSkill": "スキルを編集", - "DG.Skills.SkillGroup": "スキルのグループ", - "DG.Skills.SkillName": "スキルの名前", + "DG.Skills.AddTypedOrCustomSkill": "スキルを加える", + "DG.Skills.AddSkill": "スキルを加える", + "DG.Skills.EditTypedOrCustomSkill": "スキルを編集", + "DG.Skills.EditSkill": "スキルを編集", + "DG.Skills.SkillGroup": "スキルのグループ", + "DG.Skills.SkillName": "スキルの名前", - "DG.TypeSkills.Art": "芸", - "DG.TypeSkills.Craft": "クラフト", - "DG.TypeSkills.ForeignLanguage": "外国語", - "DG.TypeSkills.MilitaryScience": "軍事科学", - "DG.TypeSkills.Pilot": "パイロット", - "DG.TypeSkills.Science": "理科", - "DG.TypeSkills.Other": "他", + "DG.TypeSkills.Art": "芸", + "DG.TypeSkills.Craft": "クラフト", + "DG.TypeSkills.ForeignLanguage": "外国語", + "DG.TypeSkills.MilitaryScience": "軍事科学", + "DG.TypeSkills.Pilot": "パイロット", + "DG.TypeSkills.Science": "理科", + "DG.TypeSkills.Other": "他", - "DG.Attributes.HP": "HP", - "DG.Attributes.WP": "WP", - "DG.Attributes.SAN": "正気", - "DG.Attributes.str": "筋力", - "DG.Attributes.con": "耐久力", - "DG.Attributes.dex": "敏捷力", - "DG.Attributes.int": "知力", - "DG.Attributes.pow": "判断力", - "DG.Attributes.cha": "魅力", + "DG.Attributes.HP": "HP", + "DG.Attributes.WP": "WP", + "DG.Attributes.SAN": "正気", + "DG.Attributes.str": "筋力", + "DG.Attributes.con": "耐久力", + "DG.Attributes.dex": "敏捷力", + "DG.Attributes.int": "知力", + "DG.Attributes.pow": "判断力", + "DG.Attributes.cha": "魅力", - "DG.Navigation.Skills": "技術", - "DG.Navigation.Physical": "健康", - "DG.Navigation.Mental": "精神", - "DG.Navigation.Gear": "装備", - "DG.Navigation.CV": "履歴書", - "DG.Navigation.Contacts": "絆", + "DG.Navigation.Skills": "技術", + "DG.Navigation.Physical": "健康", + "DG.Navigation.Mental": "精神", + "DG.Navigation.Gear": "装備", + "DG.Navigation.CV": "履歴書", + "DG.Navigation.Contacts": "絆", - "DG.About.OnlineHelp": "オンラインのドキュメンテーション", - "DG.About.OnlineHelpTooltip": "ブラウザにオンラインのGitHubのドキュメンテーションを開く。", - "DG.About.OnlineBugTracker": "質問、バッグを報告、とフィーチャの申請", - "DG.About.OnlineBugTrackerTooltip": "ブラウザにオンラインのGitHubの問題トラッカーを開く。", + "DG.About.OnlineHelp": "オンラインのドキュメンテーション", + "DG.About.OnlineHelpTooltip": "ブラウザにオンラインのGitHubのドキュメンテーションを開く。", + "DG.About.OnlineBugTracker": "質問、バッグを報告、とフィーチャの申請", + "DG.About.OnlineBugTrackerTooltip": "ブラウザにオンラインのGitHubの問題トラッカーを開く。", - "DG.Roll.Rolling": "ローリング", - "DG.Roll.Target": "リミット", - "DG.Roll.Success": "成功", - "DG.Roll.Failure": "失敗", - "DG.Roll.Critical": "クリティカル", - "DG.Roll.Lethality": "致命率", - "DG.Roll.Lethal": "致命傷", - "DG.Roll.For": " : ", - "DG.Roll.Damage": "ダメージ", - "DG.Roll.RollingDamageFor": "ダメージ・ロール:", - "DG.Roll.Or": " / ", - "DG.Roll.Roll": "振る", + "DG.Roll.Rolling": "ローリング", + "DG.Roll.Target": "リミット", + "DG.Roll.Success": "成功", + "DG.Roll.Failure": "失敗", + "DG.Roll.Critical": "クリティカル", + "DG.Roll.Lethality": "致命率", + "DG.Roll.Lethal": "致命傷", + "DG.Roll.For": " : ", + "DG.Roll.Damage": "ダメージ", + "DG.Roll.RollingDamageFor": "ダメージ・ロール:", + "DG.Roll.Or": " / ", + "DG.Roll.Roll": "振る", - "DG.Physical.Wounds": "傷", - "DG.Physical.FirstAidLabel": "応急処置は既に施された", + "DG.Physical.Wounds": "傷", + "DG.Physical.FirstAidLabel": "応急処置は既に施された", - "DG.Generic.AddButtonLabel": "加える", + "DG.Generic.AddButtonLabel": "加える", - "DG.Mental.BreakingPoint": "ブレーキポイント: ", - "DG.Mental.Reset": "リセット", - "DG.Mental.SanityLossIncidentsLabel": "正気を失わずにあった正気のダメージの事件", - "DG.Mental.Violence": "暴力", - "DG.Mental.Helplessness": "無力", - "DG.Mental.AdaptedToViolence": "暴力無効", - "DG.Mental.AdaptedToHelplessness": "無力無効", - "DG.Mental.Motivations": "モチベーション", - "DG.Mental.Disorders": "精神障害", + "DG.Mental.BreakingPoint": "ブレーキポイント: ", + "DG.Mental.Reset": "リセット", + "DG.Mental.SanityLossIncidentsLabel": "正気を失わずにあった正気のダメージの事件", + "DG.Mental.Violence": "暴力", + "DG.Mental.Helplessness": "無力", + "DG.Mental.AdaptedToViolence": "暴力無効", + "DG.Mental.AdaptedToHelplessness": "無力無効", + "DG.Mental.Motivations": "モチベーション", + "DG.Mental.Disorders": "精神障害", - "DG.Gear.Weapons": "武器", - "DG.Gear.Armor": "武具", - "DG.Gear.OtherGear": "他の装備", - "DG.Gear.Name": "名前", - "DG.Gear.DamageOrLethality": "ダメージ/致命率", - "DG.Gear.ArmorPiercing": "アーマーピアス", - "DG.Gear.ArmorRating": "アーマースコア", - "DG.Gear.Equipped": "装備中", + "DG.Gear.Weapons": "武器", + "DG.Gear.Armor": "武具", + "DG.Gear.OtherGear": "他の装備", + "DG.Gear.Name": "名前", + "DG.Gear.DamageOrLethality": "ダメージ/致命率", + "DG.Gear.ArmorPiercing": "アーマーピアス", + "DG.Gear.ArmorRating": "アーマースコア", + "DG.Gear.Equipped": "装備中", - "DG.CV.Sex": "性別", - "DG.CV.SexPlaceholder": "性別", - "DG.CV.AgeAndDoB": "年齢と誕生日", - "DG.CV.AgeAndDoBPlaceholder": "年齢と誕生日", - "DG.CV.Employer": "雇用者", - "DG.CV.EmployerPlaceholder": "雇用者と職歴", - "DG.CV.Nationality": "国籍", - "DG.CV.NationalityPlaceholder": "国籍", - "DG.CV.Education": "教育", - "DG.CV.EducationPlaceholder": "教育", + "DG.CV.Sex": "性別", + "DG.CV.SexPlaceholder": "性別", + "DG.CV.AgeAndDoB": "年齢と誕生日", + "DG.CV.AgeAndDoBPlaceholder": "年齢と誕生日", + "DG.CV.Employer": "雇用者", + "DG.CV.EmployerPlaceholder": "雇用者と職歴", + "DG.CV.Nationality": "国籍", + "DG.CV.NationalityPlaceholder": "国籍", + "DG.CV.Education": "教育", + "DG.CV.EducationPlaceholder": "教育", - "DG.Bonds.Bond": "絆", - "DG.Bonds.Name": "名前", - "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.Bonds.Bond": "絆", + "DG.Bonds.Name": "名前", + "DG.Bonds.Score": "スコア", + "DG.Bonds.NewBond": "新しい絆", - "DG.Tooltip.HP": "2HPにエージェントは気を失い、0HPに死ぬ。", - "DG.Tooltip.MaximumHP": "最大のヒットポイントは筋力と耐久力の平均(切り上げする)。", - "DG.Tooltip.WP": "WPとは精神の燃料。疲れた時と精神的に厳しい時に必要です。", - "DG.Tooltip.MaximumWP": "最大のWPは判断力と同じです。", - "DG.Tooltip.SanityLabel": "クリックと、正気を試す...", - "DG.Tooltip.CurrentSanityPartOne": "今の精神の安定のレベル、今のブレーキポイントは", - "DG.Tooltip.CurrentSanityPartTwo": "、上の正気をクリックと正気を試す。", - "DG.Tooltip.MaximumSanity": "最大の正気は99-不自然のスキルです。", - "DG.Tooltip.SkillLabel": "スキルを試す。", - "DG.Tooltip.CannotRollSkillLabel": "スキルが0である場合、そのスキルはつかえません、そして試すと失敗します。", - "DG.Tooltip.SkillFailCheckbox": "スキルを試して、失敗する場合、そのスキルが1以上このボックスをチェックします。", - "DG.Tooltip.DistinguishingFeature": "特徴の説明 (スコアは13以上それとも8以下のみ、このフィールドに説明を書きます)。", - "DG.Tooltip.x5AttributeLabel": "アトリビュートx5のテストをします", - "DG.Tooltip.FirstAidAttempted": "応急処置を受けたエージェントはまたダメージを受けるまでには応急処置は効きません。", - "DG.Tooltip.AdaptedToViolence": "暴力を道具としかみえない、暴力を見たり、使ったりするのをなんとも思えなくなって、もう精神ダメージは受けないが、永遠に1D6魅力とそれぞれの絆のスコアを失ってしまう。", - "DG.Tooltip.AdaptedToHelplessness": "すべてが無意味と理解し、もう無力の精神ダメージはうけないが、執行するドライブが下がって、永遠に1D6判断力を失ってしまう。", - "DG.Tooltip.ToggleEquippedState": "クリックすると、この装備を着るる/外す。", + "DG.ItemTypes.weapon": "武器", + "DG.ItemTypes.armor": "武具", + "DG.ItemTypes.motivation": "モチベーション", + "DG.ItemTypes.bond": "絆", + "DG.ItemTypes.gear": "装備", + "DG.ItemTypes.NewPrefix": "新", - "DG.Gear.Expense.NA": "N/A", - "DG.Gear.Expense.Incidental": "付帯費用", - "DG.Gear.Expense.Standard": "普通", - "DG.Gear.Expense.Unusual": "普通でない", - "DG.Gear.Expense.Major": "メジャー", - "DG.Gear.Expense.Extreme": "極端", + "DG.Tooltip.HP": "2HPにエージェントは気を失い、0HPに死ぬ。", + "DG.Tooltip.MaximumHP": "最大のヒットポイントは筋力と耐久力の平均(切り上げする)。", + "DG.Tooltip.WP": "WPとは精神の燃料。疲れた時と精神的に厳しい時に必要です。", + "DG.Tooltip.MaximumWP": "最大のWPは判断力と同じです。", + "DG.Tooltip.SanityLabel": "クリックと、正気を試す...", + "DG.Tooltip.CurrentSanityPartOne": "今の精神の安定のレベル、今のブレーキポイントは", + "DG.Tooltip.CurrentSanityPartTwo": "、上の正気をクリックと正気を試す。", + "DG.Tooltip.MaximumSanity": "最大の正気は99-不自然のスキルです。", + "DG.Tooltip.SkillLabel": "スキルを試す。", + "DG.Tooltip.CannotRollSkillLabel": "スキルが0である場合、そのスキルはつかえません、そして試すと失敗します。", + "DG.Tooltip.SkillFailCheckbox": "スキルを試して、失敗する場合、そのスキルが1以上このボックスをチェックします。", + "DG.Tooltip.DistinguishingFeature": "特徴の説明 (スコアは13以上それとも8以下のみ、このフィールドに説明を書きます)。", + "DG.Tooltip.x5AttributeLabel": "アトリビュートx5のテストをします", + "DG.Tooltip.FirstAidAttempted": "応急処置を受けたエージェントはまたダメージを受けるまでには応急処置は効きません。", + "DG.Tooltip.AdaptedToViolence": "暴力を道具としかみえない、暴力を見たり、使ったりするのをなんとも思えなくなって、もう精神ダメージは受けないが、永遠に1D6魅力とそれぞれの絆のスコアを失ってしまう。", + "DG.Tooltip.AdaptedToHelplessness": "すべてが無意味と理解し、もう無力の精神ダメージはうけないが、執行するドライブが下がって、永遠に1D6判断力を失ってしまう。", + "DG.Tooltip.ToggleEquippedState": "クリックすると、この装備を着るる/外す。", - "DG.ItemWindow.Bonds.Description": "説明と発展", - "DG.ItemWindow.Bonds.ScoreTooltip": "高いスコアはもっと親しい関係を意味する。", + "DG.Gear.Expense.NA": "N/A", + "DG.Gear.Expense.Incidental": "付帯費用", + "DG.Gear.Expense.Standard": "普通", + "DG.Gear.Expense.Unusual": "普通でない", + "DG.Gear.Expense.Major": "メジャー", + "DG.Gear.Expense.Extreme": "極端", - "DG.ItemWindow.Motivations.Attributes": "属性", - "DG.ItemWindow.Motivations.Motivation": "モチベーション", - "DG.ItemWindow.Motivations.Description": "説明とノート", - "DG.ItemWindow.Motivations.Disorder": "精神病", - "DG.ItemWindow.Motivations.IsDisorder": "精神の病である", - "DG.ItemWindow.Motivations.MotivationNameTooltip": "刺激するもの", - "DG.ItemWindow.Motivations.DisorderNameTooltip": "ブレーキポイントに辿り着くと精神の病が発生する。", - "DG.ItemWindow.Motivations.IsDisorderTooltip": "精神の病である場合このボックスをチェックする", - "DG.ItemWindow.Motivations.DisorderHasBeenCured": "病が\"治された\"", - "DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip": "治療を受ける時、クリックの成功の場合精神の病が治されるが、次のブレーキポイントに着く時戻る可能性がある。", + "DG.ItemWindow.Bonds.Description": "説明と発展", + "DG.ItemWindow.Bonds.ScoreTooltip": "高いスコアはもっと親しい関係を意味する。", - "DG.ItemWindow.Gear.Attributes": "属性", - "DG.ItemWindow.Gear.Description": "説明", - "DG.ItemWindow.Gear.NamePlaceholder": "名前", - "DG.ItemWindow.Gear.Expense": "費用", - "DG.ItemWindow.Gear.Equipped": "武装中", + "DG.ItemWindow.Motivations.Attributes": "属性", + "DG.ItemWindow.Motivations.Motivation": "モチベーション", + "DG.ItemWindow.Motivations.Description": "説明とノート", + "DG.ItemWindow.Motivations.Disorder": "精神病", + "DG.ItemWindow.Motivations.IsDisorder": "精神の病である", + "DG.ItemWindow.Motivations.MotivationNameTooltip": "刺激するもの", + "DG.ItemWindow.Motivations.DisorderNameTooltip": "ブレーキポイントに辿り着くと精神の病が発生する。", + "DG.ItemWindow.Motivations.IsDisorderTooltip": "精神の病である場合このボックスをチェックする", + "DG.ItemWindow.Motivations.DisorderHasBeenCured": "病が\"治された\"", + "DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip": "治療を受ける時、クリックの成功の場合精神の病が治されるが、次のブレーキポイントに着く時戻る可能性がある。", - "DG.ItemWindow.Armor.Description": "説明", - "DG.ItemWindow.Armor.NamePlaceholder": "名前", - "DG.ItemWindow.Armor.ArmorRating": "アーマーレーティング", - "DG.ItemWindow.Armor.Expense": "費用", - "DG.ItemWindow.Armor.Equipped": "武装中", + "DG.ItemWindow.Gear.Attributes": "属性", + "DG.ItemWindow.Gear.Description": "説明", + "DG.ItemWindow.Gear.NamePlaceholder": "名前", + "DG.ItemWindow.Gear.Expense": "費用", + "DG.ItemWindow.Gear.Equipped": "武装中", - "DG.ItemWindow.Weapons.Description": "説明", - "DG.ItemWindow.Weapons.NamePlaceholder": "名前", - "DG.ItemWindow.Weapons.Skill": "技術", - "DG.ItemWindow.Weapons.Expense": "費用", - "DG.ItemWindow.Weapons.Damage": "ダメージ", - "DG.ItemWindow.Weapons.Lethality": "致命率", - "DG.ItemWindow.Weapons.IsLethality": "致命的", - "DG.ItemWindow.Weapons.LethalityTooltip": "", - "DG.ItemWindow.Weapons.IsLethalityTooltip": "致命率のある武器なら、このボックスをチェックする", - "DG.ItemWindow.Weapons.ArmorPiercing": "武具貫通", - "DG.ItemWindow.Weapons.Ammo": "弾 (量/種類/など)", - "DG.ItemWindow.Weapons.Range": "距離", - "DG.ItemWindow.Weapons.KillRadius": "致命の半径", + "DG.ItemWindow.Armor.Description": "説明", + "DG.ItemWindow.Armor.NamePlaceholder": "名前", + "DG.ItemWindow.Armor.ArmorRating": "アーマーレーティング", + "DG.ItemWindow.Armor.Expense": "費用", + "DG.ItemWindow.Armor.Equipped": "武装中", - "DG.ModifySkillRollDialogue.Title": "ロールの変更", - "DG.ModifySkillRollDialogue.Test": "テスト:", - "DG.ModifySkillRollDialogue.OriginalTarget": "元のターゲット:", - "DG.ModifySkillRollDialogue.TargetModifier": "変換(+/-):", - "DG.ModifySkillRollDialogue.ModifierTooltip": "スキルチェックのターゲットに加算/減算します。", + "DG.ItemWindow.Weapons.Description": "説明", + "DG.ItemWindow.Weapons.NamePlaceholder": "名前", + "DG.ItemWindow.Weapons.Skill": "技術", + "DG.ItemWindow.Weapons.Expense": "費用", + "DG.ItemWindow.Weapons.Damage": "ダメージ", + "DG.ItemWindow.Weapons.Lethality": "致命率", + "DG.ItemWindow.Weapons.IsLethality": "致命的", + "DG.ItemWindow.Weapons.LethalityTooltip": "", + "DG.ItemWindow.Weapons.IsLethalityTooltip": "致命率のある武器なら、このボックスをチェックする", + "DG.ItemWindow.Weapons.ArmorPiercing": "武具貫通", + "DG.ItemWindow.Weapons.Ammo": "弾 (量/種類/など)", + "DG.ItemWindow.Weapons.Range": "距離", + "DG.ItemWindow.Weapons.KillRadius": "致命の半径", - "DG.ModifyDamageRollDialogue.Weapon": "武器:", - "DG.ModifyDamageRollDialogue.OuterModifierTooltip": "ここでダイスの式の外を変えられる、結果を二倍にするために使われる。", - "DG.ModifyDamageRollDialogue.InnerModifierTooltip": "ここでダイスの式の内側を変えられる、結果を「+1」とか、「+1d4」とかにするために使われる。", + "DG.ModifySkillRollDialogue.Title": "ロールの変更", + "DG.ModifySkillRollDialogue.Test": "テスト:", + "DG.ModifySkillRollDialogue.OriginalTarget": "元のターゲット:", + "DG.ModifySkillRollDialogue.TargetModifier": "変換(+/-):", + "DG.ModifySkillRollDialogue.ModifierTooltip": "スキルチェックのターゲットに加算/減算します。", - "DG.Roll.Inhuman": "人ならざるもの", - "DG.Tooltip.BreakPoint": "現在のブレーキポイント。初めの数値は「正気 ー 判断力」。", - "DG.Tooltip.BreakPointReset": "ブレーキポイントをレセットする。新しい数値は「正気 ー 判断力」。", - "DG.Skills.ritual": "秘儀", + "DG.ModifyDamageRollDialogue.Weapon": "武器:", + "DG.ModifyDamageRollDialogue.OuterModifierTooltip": "ここでダイスの式の外を変えられる、結果を二倍にするために使われる。", + "DG.ModifyDamageRollDialogue.InnerModifierTooltip": "ここでダイスの式の内側を変えられる、結果を「+1」とか、「+1d4」とかにするために使われる。", - "DG.RollMode": "ロールモード", - "DG.Bonds.Relationship": "関係", + "DG.Roll.Inhuman": "人ならざるもの", + "DG.Tooltip.BreakPoint": "現在のブレーキポイント。初めの数値は「正気 ー 判断力」。", + "DG.Tooltip.BreakPointReset": "ブレーキポイントをレセットする。新しい数値は「正気 ー 判断力」。", + "DG.Skills.ritual": "秘儀", - "DG.TypeSkills.Subskills.Painting": "ペインティング", + "DG.RollMode": "ロールモード", + "DG.Bonds.Relationship": "関係", - "DG.Sheet.BlockHeaders.Attributes": "ATTRIBUTES", - "DG.Sheet.BlockHeaders.Statistics": "STATISTICS", - "DG.Sheet.BlockHeaders.PhysicalDescriptionNotes": "身体的特徴とメモ", - "DG.Sheet.BlockHeaders.SkillsAndTraining": "SKILLS AND TRAINING", - "DG.Sheet.BlockHeaders.Injuries": "INJURIES", - "DG.Sheet.BlockHeaders.BreakingPointAndAdaptations": "BREAKING POINT AND ADAPTATIONS", - "DG.Sheet.BlockHeaders.MotivationsAndDisorders": "MOTIVATIONS AND DISDORDERS", - "DG.Sheet.BlockHeaders.PersonalInfoCV": "PERSONAL INFORMATION / CV", - "DG.Sheet.BlockHeaders.BondsRelationshipsContacts": "BONDS / RELATIONSHIPS / CONTACTS", + "DG.TypeSkills.Subskills.Painting": "ペインティング", - "DG.UnnaturalSheet.HideUntrainedSkillsLabel": "持たないスキルを表示しない", - "DG.UnnaturalSheet.NotesLabel": "ノート", - "DG.UnnaturalSheet.ShortDescriptionFallbackText": "外見・種類・など", - "DG.UnnaturalSheet.Tabs.NotesTabLabel": "スキル/ノート", - "DG.UnnaturalSheet.Tabs.ItemsTabLabel": "攻撃・能力", - "DG.NPCSheet.BreakPointAbbreviation": "BP", + "DG.Sheet.BlockHeaders.Attributes": "ATTRIBUTES", + "DG.Sheet.BlockHeaders.Statistics": "STATISTICS", + "DG.Sheet.BlockHeaders.PhysicalDescriptionNotes": "身体的特徴とメモ", + "DG.Sheet.BlockHeaders.SkillsAndTraining": "SKILLS AND TRAINING", + "DG.Sheet.BlockHeaders.Injuries": "INJURIES", + "DG.Sheet.BlockHeaders.BreakingPointAndAdaptations": "BREAKING POINT AND ADAPTATIONS", + "DG.Sheet.BlockHeaders.MotivationsAndDisorders": "MOTIVATIONS AND DISDORDERS", + "DG.Sheet.BlockHeaders.PersonalInfoCV": "PERSONAL INFORMATION / CV", + "DG.Sheet.BlockHeaders.BondsRelationshipsContacts": "BONDS / RELATIONSHIPS / CONTACTS", - "DG.ImpossibleLanscapes.IHaveSeenThe": "見えてしまった、", - "DG.ImpossibleLanscapes.YellowSign": "YELLOW SIGNを", - "DG.ImpossibleLanscapes.CorruptionFirstHalf": "腐", - "DG.ImpossibleLanscapes.CorruptionSecondHalf": "敗", - "DG.ImpossibleLanscapes.Gift": "ギフト", - "DG.ImpossibleLanscapes.Insight": "インサイト", + "DG.UnnaturalSheet.HideUntrainedSkillsLabel": "持たないスキルを表示しない", + "DG.UnnaturalSheet.NotesLabel": "ノート", + "DG.UnnaturalSheet.ShortDescriptionFallbackText": "外見・種類・など", + "DG.UnnaturalSheet.Tabs.NotesTabLabel": "スキル/ノート", + "DG.UnnaturalSheet.Tabs.ItemsTabLabel": "攻撃・能力", + "DG.NPCSheet.BreakPointAbbreviation": "BP", - "DG.VehicleSheet.NotesTabName": "ノート", - "DG.VehicleSheet.GearTabName": "装備", - "DG.VehicleSheet.NotesLabel": "ノート", - "DG.VehicleSheet.DescriptionPlaceHolder": "", + "DG.ImpossibleLanscapes.IHaveSeenThe": "見えてしまった、", + "DG.ImpossibleLanscapes.YellowSign": "YELLOW SIGNを", + "DG.ImpossibleLanscapes.CorruptionFirstHalf": "腐", + "DG.ImpossibleLanscapes.CorruptionSecondHalf": "敗", + "DG.ImpossibleLanscapes.Gift": "ギフト", + "DG.ImpossibleLanscapes.Insight": "インサイト", - "DG.Generic.CheckDamagedBondsBoxUntilNextHomeScene": "すぎのホーム・シーヌまで、傷つけた絆のボックスにチェクを", - "DG.Generic.ClearAll": "全てのチェックを消す", + "DG.VehicleSheet.NotesTabName": "ノート", + "DG.VehicleSheet.GearTabName": "装備", + "DG.VehicleSheet.NotesLabel": "ノート", + "DG.VehicleSheet.DescriptionPlaceHolder": "", - "DG.Generic.SanDamage": "SAN ダメージ", + "DG.Generic.CheckDamagedBondsBoxUntilNextHomeScene": "すぎのホーム・シーヌまで、傷つけた絆のボックスにチェクを", + "DG.Generic.ClearAll": "全てのチェックを消す", - "DG.ItemWindow.Weapons.CustomSkillTarget": "ターゲット", - "DG.ItemWindow.Weapons.SkillModifier": "ターゲットに加えて", - "DG.ItemWindow.Custom": "カスタム" -} \ No newline at end of file + "DG.Generic.SanDamage": "SAN ダメージ", + + "DG.ItemWindow.Weapons.CustomSkillTarget": "ターゲット", + "DG.ItemWindow.Weapons.SkillModifier": "ターゲットに加えて", + "DG.ItemWindow.Custom": "カスタム" +} diff --git a/lang/pt-BR.json b/lang/pt-BR.json index efa1eee..86ea22a 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -1,231 +1,231 @@ { - "DG.SystemName": "Delta Green", - "DG.AgentNameFieldTooltip": "SOBRENOME, NOME (OU PSEUDÔNIMO)", - "DG.RollLuck": "Rolar Sorte", - "DG.Luck": "Sorte", - "DG.FallbackText.ProfessionAndOrRank": "Profissão (Patente caso Aplicável)", - "DG.Skills.accounting": "Contabilidade", - "DG.Skills.alertness": "Alerta", - "DG.Skills.anthropology": "Antropologia", - "DG.Skills.archeology": "Arqueologia", - "DG.Skills.artillery": "Artilharia", - "DG.Skills.athletics": "Atleticismo", - "DG.Skills.bureaucracy": "Burocracia", - "DG.Skills.computer_science": "Ciência da Computação", - "DG.Skills.criminology": "Criminologia", - "DG.Skills.demolitions": "Demolição", - "DG.Skills.disguise": "Disfarce", - "DG.Skills.dodge": "Esquivar", - "DG.Skills.drive": "Dirigir", - "DG.Skills.firearms": "Armas de Fogo", - "DG.Skills.first_aid": "Primeiros Socorros", - "DG.Skills.forensics": "Ciência Forense", - "DG.Skills.heavy_machiner": "Maquinaria Pesada", - "DG.Skills.heavy_weapons": "Armas Pesadas", - "DG.Skills.history": "História", - "DG.Skills.humint": "HUMINT", - "DG.Skills.law": "Direito", - "DG.Skills.medicine": "Medicina", - "DG.Skills.melee_weapons": "Armas Corpo a Corpo", - "DG.Skills.navigate": "Navegar", - "DG.Skills.occult": "Ocultismo", - "DG.Skills.persuade": "Persuasão", - "DG.Skills.pharmacy": "Farmacia", - "DG.Skills.psychotherapy": "Psicoterapia", - "DG.Skills.ride": "Cavalgar", - "DG.Skills.search": "Procurar", - "DG.Skills.sigint": "SIGINT", - "DG.Skills.stealth": "Furtividade", - "DG.Skills.surgery": "Cirurgia", - "DG.Skills.survival": "Sobrevivência", - "DG.Skills.swim": "Nadar", - "DG.Skills.unarmed_combat": "Combate Desarmado", - "DG.Skills.unnatural": "Antinatural", - "DG.Skills.AddTypedOrCustomSkill": "Adicionar Habilidade Personalizada", - "DG.Skills.AddSkill": "Adicionar Habilidade", - "DG.Skills.EditTypedOrCustomSkill": "Edit Typed or Custom Skill", - "DG.Skills.EditSkill": "Editar Habilidade", - "DG.Skills.SkillGroup": "Grupo de Habilidade", - "DG.Skills.SkillName": "Nome da Habilidade", - "DG.TypeSkills.Art": "Artes", - "DG.TypeSkills.Craft": "Trabalhos Manuais", - "DG.TypeSkills.ForeignLanguage": "Lingua Estrangeira", - "DG.TypeSkills.MilitaryScience": "Ciência Militar", - "DG.TypeSkills.Pilot": "Pilotar", - "DG.TypeSkills.Science": "Ciência", - "DG.TypeSkills.Other": "Outros", - "DG.Attributes.HP": "PV", - "DG.Attributes.WP": "FV", - "DG.Attributes.SAN": "SAN", - "DG.Attributes.str": "FOR", - "DG.Attributes.con": "CON", - "DG.Attributes.dex": "DES", - "DG.Attributes.int": "INT", - "DG.Attributes.pow": "POD", - "DG.Attributes.cha": "CAR", - "DG.Navigation.Skills": "Habilidades", - "DG.Navigation.Physical": "Físico", - "DG.Navigation.Mental": "Mental", - "DG.Navigation.Gear": "Equipamento", - "DG.Navigation.CV": "C.V.", - "DG.Navigation.Contacts": "Contatos", - "DG.About.OnlineHelp": "Open System Documentation on (ONLINE)", - "DG.About.OnlineHelpTooltip": "Launch browser with online GitHub help.", - "DG.About.OnlineBugTracker": "Questions, Bug Reports or Feature Requests (ONLINE)", - "DG.About.OnlineBugTrackerTooltip": "Launch browser with GitHub issue tracker.", - "DG.Roll.Rolling": "Rolando", - "DG.Roll.Target": "Alvo: ", - "DG.Roll.Success": "Sucesso", - "DG.Roll.Failure": "Falha", - "DG.Roll.Critical": "Crítico(a)", - "DG.Roll.Lethality": "Letalidade", - "DG.Roll.Lethal": "Letal", - "DG.Roll.For": "para", - "DG.Roll.Damage": "Dano", - "DG.Roll.RollingDamageFor": "Rolando DANO para", - "DG.Roll.Or": "Ou", - "DG.Roll.Roll": "Rolar", - "DG.Physical.Wounds": "Ferimentos", - "DG.Physical.FirstAidLabel": "Primeiros socorros já foi tentado: ", - "DG.Generic.AddButtonLabel": "Adicionar", - "DG.Mental.BreakingPoint": "Ponto de Ruptura: ", - "DG.Mental.Reset": "Resetar", - "DG.Mental.SanityLossIncidentsLabel": "Perdas de Sanidade sem ficar Louco", - "DG.Mental.Violence": "Violência", - "DG.Mental.Helplessness": "Desamparo", - "DG.Mental.AdaptedToViolence": "Adaptado à Violência", - "DG.Mental.AdaptedToHelplessness": "Adaptado ao Desamparo", - "DG.Mental.Motivations": "Motivações", - "DG.Mental.Disorders": "Distúrbios", - "DG.Gear.Weapons": "ARMAS", - "DG.Gear.Armor": "ARMADURA", - "DG.Gear.OtherGear": "OUTROS EQUIPAMENTOS", - "DG.Gear.Name": "Nome", - "DG.Gear.DamageOrLethality": "Dano/Letalidade", - "DG.Gear.ArmorPiercing": "Perfuração de Armadura", - "DG.Gear.ArmorRating": "Categoria de Armadura", - "DG.Gear.Equipped": "Equipado", - "DG.CV.Sex": "Sexo", - "DG.CV.SexPlaceholder": "Sexo", - "DG.CV.AgeAndDoB": "Idade e Data de Nascimento", - "DG.CV.AgeAndDoBPlaceholder": "Idade e Data de Nascimento", - "DG.CV.Employer": "Empregador", - "DG.CV.EmployerPlaceholder": "Empregador ou Histórico de Trabalho", - "DG.CV.Nationality": "Nacionalidade", - "DG.CV.NationalityPlaceholder": "Nacionalidade", - "DG.CV.Education": "Educação", - "DG.CV.EducationPlaceholder": "Educação ou Treinamento", - "DG.Bonds.Bond": "Vínculo", - "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.", - "DG.Tooltip.MaximumWP": "FV máximo é igual a POD.", - "DG.Tooltip.SanityLabel": "Clique para rolar um teste de SAN...", - "DG.Tooltip.CurrentSanityPartOne": "Sanidade atual, atual ponto de ruptura é ", - "DG.Tooltip.CurrentSanityPartTwo": ", clique o botão de SAN acima para rolar sanidade.", - "DG.Tooltip.MaximumSanity": "A sanidade máxima é igual a 99 - a habilidade Antinatural.", - "DG.Tooltip.SkillLabel": "Clique para rolar um teste de habilidade.", - "DG.Tooltip.CannotRollSkillLabel": "Uma habilidade com 0% não pode ser usada.", - "DG.Tooltip.SkillFailCheckbox": "Depois de falhar em um teste nesta habilidade (se a proficiência for de pelo menos 1%), marque esta caixa. No final da sessão, adicione 1D4 pontos percentuais à habilidade e desmarque a caixa. Não se aplica à perícia Antinatural ou Ritual. Consulte a página 29 do Manual do Agente.", - "DG.Tooltip.DistinguishingFeature": "Característica Distintiva (preencha se a pontuação for 13 ou superior, ou 8 ou inferior).", - "DG.Tooltip.x5AttributeLabel": "Clique para rolar um cheque x5.", - "DG.Tooltip.FirstAidAttempted": "Uma vez que um agente recebe os primeiros socorros, ele não pode se beneficiar novamente até receber mais danos de uma fonte diferente.", - "DG.Tooltip.AdaptedToViolence": "Estar adaptado à violência significa que a empatia do seu agente sofre quando eles veem a violência como nada além de outra ferramenta a ser usada. O agente perde permanentemente 1D6 CAR e a mesma quantia de cada um de seus vínculos.", - "DG.Tooltip.AdaptedToHelplessness": "Estar adaptado ao desamparo significa que a motivação pessoal do seu agente sofre à medida que ele se afasta do mundo ao seu redor. Assim que seu Agente se adaptar ao desamparo, o agente perde permanentemente 1D6 de POD.", - "DG.Tooltip.ToggleEquippedState": "Clique para alternar se este item está equipado ou não.", - "DG.Gear.Expense.NA": "N/A", - "DG.Gear.Expense.Incidental": "Incidental", - "DG.Gear.Expense.Standard": "Padrão", - "DG.Gear.Expense.Unusual": "Incomum", - "DG.Gear.Expense.Major": "Maior", - "DG.Gear.Expense.Extreme": "Extremo", - "DG.ItemWindow.Bonds.Description": "Descrição/Desenvolvimentos", - "DG.ItemWindow.Bonds.ScoreTooltip": "Uma pontuação mais alta representa uma relação mais forte entre o agente e o vínculo.", - "DG.ItemWindow.Motivations.Attributes": "Atributos", - "DG.ItemWindow.Motivations.Motivation": "Motivação", - "DG.ItemWindow.Motivations.Description": "Descrição/Notas", - "DG.ItemWindow.Motivations.Disorder": "Distúrbio", - "DG.ItemWindow.Motivations.IsDisorder": "É um Distúrbio", - "DG.ItemWindow.Motivations.MotivationNameTooltip": "Algo que impulsiona o personagem.", - "DG.ItemWindow.Motivations.DisorderNameTooltip": "Um distúrbio substitui uma motivação depois de atingir um ponto de ruptura.", - "DG.ItemWindow.Motivations.IsDisorderTooltip": "Marque isso se adicionar um distúrbio ou se uma motivação existente foi perdida devido ao ganho de um distúrbio.", - "DG.ItemWindow.Motivations.DisorderHasBeenCured": "Distúrbio foi \"Curado\"", - "DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip": "Um sucesso crítico em um teste de sorte na terapia pode 'curar' um distúrbio. No entanto, pode retornar na próxima vez que um ponto de ruptura for atingido. Consulte a seção Terapia nas páginas 78-79 do Manual do Agente.", - "DG.ItemWindow.Gear.Attributes": "Atributos", - "DG.ItemWindow.Gear.Description": "Descrição", - "DG.ItemWindow.Gear.NamePlaceholder": "Nome", - "DG.ItemWindow.Gear.Expense": "Custo", - "DG.ItemWindow.Gear.Equipped": "Equipado", - "DG.ItemWindow.Armor.Description": "Descrição", - "DG.ItemWindow.Armor.NamePlaceholder": "Nome", - "DG.ItemWindow.Armor.ArmorRating": "Categoria de Armadura", - "DG.ItemWindow.Armor.Expense": "Custo", - "DG.ItemWindow.Armor.Equipped": "Equipado", - "DG.ItemWindow.Weapons.Description": "Descrição", - "DG.ItemWindow.Weapons.NamePlaceholder": "Nome", - "DG.ItemWindow.Weapons.Skill": "Habilidade", - "DG.ItemWindow.Weapons.Expense": "Custo", - "DG.ItemWindow.Weapons.Damage": "Dano", - "DG.ItemWindow.Weapons.Lethality": "Letalide", - "DG.ItemWindow.Weapons.IsLethality": "É Letal", - "DG.ItemWindow.Weapons.LethalityTooltip": "Uma arma letal tem a chance de matar instantaneamente um alvo. Role um D100 em vez de um dado de dano. Se não for letal, o dano é causado como se o resultado fosse uma rolagem de 2d10, com um '00' no primeiro d10 igual a 10.", - "DG.ItemWindow.Weapons.IsLethalityTooltip": "Marque isso se a arma tiver uma % de letalidade associada a ela.", - "DG.ItemWindow.Weapons.ArmorPiercing": "Perfuração de Armadura", - "DG.ItemWindow.Weapons.Ammo": "Munição (quantidade/tipo)", - "DG.ItemWindow.Weapons.Range": "Alcance", - "DG.ItemWindow.Weapons.KillRadius": "Raio de Eliminação", - "DG.ModifySkillRollDialogue.Title": "Modificar Rolagem", - "DG.ModifySkillRollDialogue.Test": "Teste:", - "DG.ModifySkillRollDialogue.OriginalTarget": "Alvo Original:", - "DG.ModifySkillRollDialogue.TargetModifier": "Modificar Alvo (+/-):", - "DG.ModifySkillRollDialogue.ModifierTooltip": "Dê um modificador positivo ou negativo aqui para adicionar/subtrair do alvo para o teste de perícia.", - "DG.ModifyDamageRollDialogue.Weapon": "Arma:", - "DG.ModifyDamageRollDialogue.OuterModifierTooltip": "Use este campo para modificar a parte externa da fórmula, como dobrar o resultado.", - "DG.ModifyDamageRollDialogue.InnerModifierTooltip": "Use este campo para adicionar um modificador simples como '+1' ou outro termo de dados como '+1d4'.", - "DG.Roll.Inhuman": "Desumano", - "DG.Tooltip.BreakPoint": "O ponto de ruptura atual, redefinido quando a sanidade atual cair para ou abaixo desse valor. O ponto de ruptura inicial é SAN - POW.", - "DG.Tooltip.BreakPointReset": "Redefina o ponto de ruptura para ser SAN - FV.", - "DG.Skills.ritual": "Ritual", - "DG.RollMode": "Modo de Rolagem", - "DG.Bonds.Relationship": "Relacionamento", - "DG.TypeSkills.Subskills.Painting": "Pintura", + "DG.SystemName": "Delta Green", + "DG.AgentNameFieldTooltip": "SOBRENOME, NOME (OU PSEUDÔNIMO)", + "DG.RollLuck": "Rolar Sorte", + "DG.Luck": "Sorte", + "DG.FallbackText.ProfessionAndOrRank": "Profissão (Patente caso Aplicável)", + "DG.Skills.accounting": "Contabilidade", + "DG.Skills.alertness": "Alerta", + "DG.Skills.anthropology": "Antropologia", + "DG.Skills.archeology": "Arqueologia", + "DG.Skills.artillery": "Artilharia", + "DG.Skills.athletics": "Atleticismo", + "DG.Skills.bureaucracy": "Burocracia", + "DG.Skills.computer_science": "Ciência da Computação", + "DG.Skills.criminology": "Criminologia", + "DG.Skills.demolitions": "Demolição", + "DG.Skills.disguise": "Disfarce", + "DG.Skills.dodge": "Esquivar", + "DG.Skills.drive": "Dirigir", + "DG.Skills.firearms": "Armas de Fogo", + "DG.Skills.first_aid": "Primeiros Socorros", + "DG.Skills.forensics": "Ciência Forense", + "DG.Skills.heavy_machiner": "Maquinaria Pesada", + "DG.Skills.heavy_weapons": "Armas Pesadas", + "DG.Skills.history": "História", + "DG.Skills.humint": "HUMINT", + "DG.Skills.law": "Direito", + "DG.Skills.medicine": "Medicina", + "DG.Skills.melee_weapons": "Armas Corpo a Corpo", + "DG.Skills.navigate": "Navegar", + "DG.Skills.occult": "Ocultismo", + "DG.Skills.persuade": "Persuasão", + "DG.Skills.pharmacy": "Farmacia", + "DG.Skills.psychotherapy": "Psicoterapia", + "DG.Skills.ride": "Cavalgar", + "DG.Skills.search": "Procurar", + "DG.Skills.sigint": "SIGINT", + "DG.Skills.stealth": "Furtividade", + "DG.Skills.surgery": "Cirurgia", + "DG.Skills.survival": "Sobrevivência", + "DG.Skills.swim": "Nadar", + "DG.Skills.unarmed_combat": "Combate Desarmado", + "DG.Skills.unnatural": "Antinatural", + "DG.Skills.AddTypedOrCustomSkill": "Adicionar Habilidade Personalizada", + "DG.Skills.AddSkill": "Adicionar Habilidade", + "DG.Skills.EditTypedOrCustomSkill": "Edit Typed or Custom Skill", + "DG.Skills.EditSkill": "Editar Habilidade", + "DG.Skills.SkillGroup": "Grupo de Habilidade", + "DG.Skills.SkillName": "Nome da Habilidade", + "DG.TypeSkills.Art": "Artes", + "DG.TypeSkills.Craft": "Trabalhos Manuais", + "DG.TypeSkills.ForeignLanguage": "Lingua Estrangeira", + "DG.TypeSkills.MilitaryScience": "Ciência Militar", + "DG.TypeSkills.Pilot": "Pilotar", + "DG.TypeSkills.Science": "Ciência", + "DG.TypeSkills.Other": "Outros", + "DG.Attributes.HP": "PV", + "DG.Attributes.WP": "FV", + "DG.Attributes.SAN": "SAN", + "DG.Attributes.str": "FOR", + "DG.Attributes.con": "CON", + "DG.Attributes.dex": "DES", + "DG.Attributes.int": "INT", + "DG.Attributes.pow": "POD", + "DG.Attributes.cha": "CAR", + "DG.Navigation.Skills": "Habilidades", + "DG.Navigation.Physical": "Físico", + "DG.Navigation.Mental": "Mental", + "DG.Navigation.Gear": "Equipamento", + "DG.Navigation.CV": "C.V.", + "DG.Navigation.Contacts": "Contatos", + "DG.About.OnlineHelp": "Open System Documentation on (ONLINE)", + "DG.About.OnlineHelpTooltip": "Launch browser with online GitHub help.", + "DG.About.OnlineBugTracker": "Questions, Bug Reports or Feature Requests (ONLINE)", + "DG.About.OnlineBugTrackerTooltip": "Launch browser with GitHub issue tracker.", + "DG.Roll.Rolling": "Rolando", + "DG.Roll.Target": "Alvo: ", + "DG.Roll.Success": "Sucesso", + "DG.Roll.Failure": "Falha", + "DG.Roll.Critical": "Crítico(a)", + "DG.Roll.Lethality": "Letalidade", + "DG.Roll.Lethal": "Letal", + "DG.Roll.For": "para", + "DG.Roll.Damage": "Dano", + "DG.Roll.RollingDamageFor": "Rolando DANO para", + "DG.Roll.Or": "Ou", + "DG.Roll.Roll": "Rolar", + "DG.Physical.Wounds": "Ferimentos", + "DG.Physical.FirstAidLabel": "Primeiros socorros já foi tentado: ", + "DG.Generic.AddButtonLabel": "Adicionar", + "DG.Mental.BreakingPoint": "Ponto de Ruptura: ", + "DG.Mental.Reset": "Resetar", + "DG.Mental.SanityLossIncidentsLabel": "Perdas de Sanidade sem ficar Louco", + "DG.Mental.Violence": "Violência", + "DG.Mental.Helplessness": "Desamparo", + "DG.Mental.AdaptedToViolence": "Adaptado à Violência", + "DG.Mental.AdaptedToHelplessness": "Adaptado ao Desamparo", + "DG.Mental.Motivations": "Motivações", + "DG.Mental.Disorders": "Distúrbios", + "DG.Gear.Weapons": "ARMAS", + "DG.Gear.Armor": "ARMADURA", + "DG.Gear.OtherGear": "OUTROS EQUIPAMENTOS", + "DG.Gear.Name": "Nome", + "DG.Gear.DamageOrLethality": "Dano/Letalidade", + "DG.Gear.ArmorPiercing": "Perfuração de Armadura", + "DG.Gear.ArmorRating": "Categoria de Armadura", + "DG.Gear.Equipped": "Equipado", + "DG.CV.Sex": "Sexo", + "DG.CV.SexPlaceholder": "Sexo", + "DG.CV.AgeAndDoB": "Idade e Data de Nascimento", + "DG.CV.AgeAndDoBPlaceholder": "Idade e Data de Nascimento", + "DG.CV.Employer": "Empregador", + "DG.CV.EmployerPlaceholder": "Empregador ou Histórico de Trabalho", + "DG.CV.Nationality": "Nacionalidade", + "DG.CV.NationalityPlaceholder": "Nacionalidade", + "DG.CV.Education": "Educação", + "DG.CV.EducationPlaceholder": "Educação ou Treinamento", + "DG.Bonds.Bond": "Vínculo", + "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.", + "DG.Tooltip.MaximumWP": "FV máximo é igual a POD.", + "DG.Tooltip.SanityLabel": "Clique para rolar um teste de SAN...", + "DG.Tooltip.CurrentSanityPartOne": "Sanidade atual, atual ponto de ruptura é ", + "DG.Tooltip.CurrentSanityPartTwo": ", clique o botão de SAN acima para rolar sanidade.", + "DG.Tooltip.MaximumSanity": "A sanidade máxima é igual a 99 - a habilidade Antinatural.", + "DG.Tooltip.SkillLabel": "Clique para rolar um teste de habilidade.", + "DG.Tooltip.CannotRollSkillLabel": "Uma habilidade com 0% não pode ser usada.", + "DG.Tooltip.SkillFailCheckbox": "Depois de falhar em um teste nesta habilidade (se a proficiência for de pelo menos 1%), marque esta caixa. No final da sessão, adicione 1D4 pontos percentuais à habilidade e desmarque a caixa. Não se aplica à perícia Antinatural ou Ritual. Consulte a página 29 do Manual do Agente.", + "DG.Tooltip.DistinguishingFeature": "Característica Distintiva (preencha se a pontuação for 13 ou superior, ou 8 ou inferior).", + "DG.Tooltip.x5AttributeLabel": "Clique para rolar um cheque x5.", + "DG.Tooltip.FirstAidAttempted": "Uma vez que um agente recebe os primeiros socorros, ele não pode se beneficiar novamente até receber mais danos de uma fonte diferente.", + "DG.Tooltip.AdaptedToViolence": "Estar adaptado à violência significa que a empatia do seu agente sofre quando eles veem a violência como nada além de outra ferramenta a ser usada. O agente perde permanentemente 1D6 CAR e a mesma quantia de cada um de seus vínculos.", + "DG.Tooltip.AdaptedToHelplessness": "Estar adaptado ao desamparo significa que a motivação pessoal do seu agente sofre à medida que ele se afasta do mundo ao seu redor. Assim que seu Agente se adaptar ao desamparo, o agente perde permanentemente 1D6 de POD.", + "DG.Tooltip.ToggleEquippedState": "Clique para alternar se este item está equipado ou não.", + "DG.Gear.Expense.NA": "N/A", + "DG.Gear.Expense.Incidental": "Incidental", + "DG.Gear.Expense.Standard": "Padrão", + "DG.Gear.Expense.Unusual": "Incomum", + "DG.Gear.Expense.Major": "Maior", + "DG.Gear.Expense.Extreme": "Extremo", + "DG.ItemWindow.Bonds.Description": "Descrição/Desenvolvimentos", + "DG.ItemWindow.Bonds.ScoreTooltip": "Uma pontuação mais alta representa uma relação mais forte entre o agente e o vínculo.", + "DG.ItemWindow.Motivations.Attributes": "Atributos", + "DG.ItemWindow.Motivations.Motivation": "Motivação", + "DG.ItemWindow.Motivations.Description": "Descrição/Notas", + "DG.ItemWindow.Motivations.Disorder": "Distúrbio", + "DG.ItemWindow.Motivations.IsDisorder": "É um Distúrbio", + "DG.ItemWindow.Motivations.MotivationNameTooltip": "Algo que impulsiona o personagem.", + "DG.ItemWindow.Motivations.DisorderNameTooltip": "Um distúrbio substitui uma motivação depois de atingir um ponto de ruptura.", + "DG.ItemWindow.Motivations.IsDisorderTooltip": "Marque isso se adicionar um distúrbio ou se uma motivação existente foi perdida devido ao ganho de um distúrbio.", + "DG.ItemWindow.Motivations.DisorderHasBeenCured": "Distúrbio foi \"Curado\"", + "DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip": "Um sucesso crítico em um teste de sorte na terapia pode 'curar' um distúrbio. No entanto, pode retornar na próxima vez que um ponto de ruptura for atingido. Consulte a seção Terapia nas páginas 78-79 do Manual do Agente.", + "DG.ItemWindow.Gear.Attributes": "Atributos", + "DG.ItemWindow.Gear.Description": "Descrição", + "DG.ItemWindow.Gear.NamePlaceholder": "Nome", + "DG.ItemWindow.Gear.Expense": "Custo", + "DG.ItemWindow.Gear.Equipped": "Equipado", + "DG.ItemWindow.Armor.Description": "Descrição", + "DG.ItemWindow.Armor.NamePlaceholder": "Nome", + "DG.ItemWindow.Armor.ArmorRating": "Categoria de Armadura", + "DG.ItemWindow.Armor.Expense": "Custo", + "DG.ItemWindow.Armor.Equipped": "Equipado", + "DG.ItemWindow.Weapons.Description": "Descrição", + "DG.ItemWindow.Weapons.NamePlaceholder": "Nome", + "DG.ItemWindow.Weapons.Skill": "Habilidade", + "DG.ItemWindow.Weapons.Expense": "Custo", + "DG.ItemWindow.Weapons.Damage": "Dano", + "DG.ItemWindow.Weapons.Lethality": "Letalide", + "DG.ItemWindow.Weapons.IsLethality": "É Letal", + "DG.ItemWindow.Weapons.LethalityTooltip": "Uma arma letal tem a chance de matar instantaneamente um alvo. Role um D100 em vez de um dado de dano. Se não for letal, o dano é causado como se o resultado fosse uma rolagem de 2d10, com um '00' no primeiro d10 igual a 10.", + "DG.ItemWindow.Weapons.IsLethalityTooltip": "Marque isso se a arma tiver uma % de letalidade associada a ela.", + "DG.ItemWindow.Weapons.ArmorPiercing": "Perfuração de Armadura", + "DG.ItemWindow.Weapons.Ammo": "Munição (quantidade/tipo)", + "DG.ItemWindow.Weapons.Range": "Alcance", + "DG.ItemWindow.Weapons.KillRadius": "Raio de Eliminação", + "DG.ModifySkillRollDialogue.Title": "Modificar Rolagem", + "DG.ModifySkillRollDialogue.Test": "Teste:", + "DG.ModifySkillRollDialogue.OriginalTarget": "Alvo Original:", + "DG.ModifySkillRollDialogue.TargetModifier": "Modificar Alvo (+/-):", + "DG.ModifySkillRollDialogue.ModifierTooltip": "Dê um modificador positivo ou negativo aqui para adicionar/subtrair do alvo para o teste de perícia.", + "DG.ModifyDamageRollDialogue.Weapon": "Arma:", + "DG.ModifyDamageRollDialogue.OuterModifierTooltip": "Use este campo para modificar a parte externa da fórmula, como dobrar o resultado.", + "DG.ModifyDamageRollDialogue.InnerModifierTooltip": "Use este campo para adicionar um modificador simples como '+1' ou outro termo de dados como '+1d4'.", + "DG.Roll.Inhuman": "Desumano", + "DG.Tooltip.BreakPoint": "O ponto de ruptura atual, redefinido quando a sanidade atual cair para ou abaixo desse valor. O ponto de ruptura inicial é SAN - POW.", + "DG.Tooltip.BreakPointReset": "Redefina o ponto de ruptura para ser SAN - FV.", + "DG.Skills.ritual": "Ritual", + "DG.RollMode": "Modo de Rolagem", + "DG.Bonds.Relationship": "Relacionamento", + "DG.TypeSkills.Subskills.Painting": "Pintura", - "DG.Sheet.BlockHeaders.Attributes": "ATTRIBUTES", - "DG.Sheet.BlockHeaders.Statistics": "STATISTICS", - "DG.Sheet.BlockHeaders.PhysicalDescriptionNotes": "Descrição Física/Notas", - "DG.Sheet.BlockHeaders.SkillsAndTraining": "SKILLS AND TRAINING", - "DG.Sheet.BlockHeaders.Injuries": "INJURIES", - "DG.Sheet.BlockHeaders.BreakingPointAndAdaptations": "BREAKING POINT AND ADAPTATIONS", - "DG.Sheet.BlockHeaders.MotivationsAndDisorders": "MOTIVATIONS AND DISDORDERS", - "DG.Sheet.BlockHeaders.PersonalInfoCV": "PERSONAL INFORMATION / CV", - "DG.Sheet.BlockHeaders.BondsRelationshipsContacts": "BONDS / RELATIONSHIPS / CONTACTS", + "DG.Sheet.BlockHeaders.Attributes": "ATTRIBUTES", + "DG.Sheet.BlockHeaders.Statistics": "STATISTICS", + "DG.Sheet.BlockHeaders.PhysicalDescriptionNotes": "Descrição Física/Notas", + "DG.Sheet.BlockHeaders.SkillsAndTraining": "SKILLS AND TRAINING", + "DG.Sheet.BlockHeaders.Injuries": "INJURIES", + "DG.Sheet.BlockHeaders.BreakingPointAndAdaptations": "BREAKING POINT AND ADAPTATIONS", + "DG.Sheet.BlockHeaders.MotivationsAndDisorders": "MOTIVATIONS AND DISDORDERS", + "DG.Sheet.BlockHeaders.PersonalInfoCV": "PERSONAL INFORMATION / CV", + "DG.Sheet.BlockHeaders.BondsRelationshipsContacts": "BONDS / RELATIONSHIPS / CONTACTS", - "DG.UnnaturalSheet.HideUntrainedSkillsLabel": "Esconder Habilidade não Treinadas", - "DG.UnnaturalSheet.NotesLabel": "Notas", - "DG.UnnaturalSheet.ShortDescriptionFallbackText": "Descrição de Criatura ou Tipo de Criatura", - "DG.UnnaturalSheet.Tabs.NotesTabLabel": "Habilidades & Notas", - "DG.UnnaturalSheet.Tabs.ItemsTabLabel": "Ataques & Habilidades", - "DG.NPCSheet.BreakPointAbbreviation": "PR", - "DG.ImpossibleLanscapes.IHaveSeenThe": "EU JÁ VI O", - "DG.ImpossibleLanscapes.YellowSign": "SINAL AMARELO", - "DG.ImpossibleLanscapes.CorruptionFirstHalf": "Corrup", - "DG.ImpossibleLanscapes.CorruptionSecondHalf": "ção", - "DG.ImpossibleLanscapes.Gift": "Dom", - "DG.ImpossibleLanscapes.Insight": "Intuição", + "DG.UnnaturalSheet.HideUntrainedSkillsLabel": "Esconder Habilidade não Treinadas", + "DG.UnnaturalSheet.NotesLabel": "Notas", + "DG.UnnaturalSheet.ShortDescriptionFallbackText": "Descrição de Criatura ou Tipo de Criatura", + "DG.UnnaturalSheet.Tabs.NotesTabLabel": "Habilidades & Notas", + "DG.UnnaturalSheet.Tabs.ItemsTabLabel": "Ataques & Habilidades", + "DG.NPCSheet.BreakPointAbbreviation": "PR", + "DG.ImpossibleLanscapes.IHaveSeenThe": "EU JÁ VI O", + "DG.ImpossibleLanscapes.YellowSign": "SINAL AMARELO", + "DG.ImpossibleLanscapes.CorruptionFirstHalf": "Corrup", + "DG.ImpossibleLanscapes.CorruptionSecondHalf": "ção", + "DG.ImpossibleLanscapes.Gift": "Dom", + "DG.ImpossibleLanscapes.Insight": "Intuição", - "DG.Generic.CheckDamagedBondsBoxUntilNextHomeScene": "Check a damaged Bond's box until the next Home Scene ends.", - "DG.Generic.ClearAll": "Clear All", + "DG.Generic.CheckDamagedBondsBoxUntilNextHomeScene": "Check a damaged Bond's box until the next Home Scene ends.", + "DG.Generic.ClearAll": "Clear All", - "DG.Generic.SanDamage": "SAN Damage", + "DG.Generic.SanDamage": "SAN Damage", - "DG.Generic.Custom": "Custom" -} \ No newline at end of file + "DG.Generic.Custom": "Custom" +} diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index f520662..e55927d 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -1,17 +1,16 @@ /* globals $ game Roll ChatMessage AudioHelper ActorSheet mergeObject Dialog TextEditor ActiveEffect ui duplicate fromUuidSync */ -import { +import { DGPercentileRoll, DGLethalityRoll, DGDamageRoll, DGSanityDamageRoll, -} from "../roll/roll.js" +} from "../roll/roll.js"; /** * Extend the basic ActorSheet with some very simple modifications * @extends {ActorSheet} */ -export class DeltaGreenActorSheet extends ActorSheet { - +export default class DeltaGreenActorSheet extends ActorSheet { /** @override */ static get defaultOptions() { return mergeObject(super.defaultOptions, { @@ -19,7 +18,13 @@ export class DeltaGreenActorSheet extends ActorSheet { template: "systems/deltagreen/templates/actor/actor-sheet.html", width: 700, height: 800, - tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "skills" }] + tabs: [ + { + navSelector: ".sheet-tabs", + contentSelector: ".sheet-body", + initial: "skills", + }, + ], }); } @@ -27,33 +32,29 @@ export class DeltaGreenActorSheet extends ActorSheet { /** @override */ get template() { - - if(this.actor !== null){ - if(this.actor.type === 'agent'){ - if ( !game.user.isGM && this.actor.limited ) { + if (this.actor !== null) { + if (this.actor.type === "agent") { + if (!game.user.isGM && this.actor.limited) { return "systems/deltagreen/templates/actor/limited-sheet.html"; } - else{ - //return `systems/deltagreen/templates/actor/${this.actor.data.type}-sheet.html`; - return `systems/deltagreen/templates/actor/actor-sheet.html`; - } + + // return `systems/deltagreen/templates/actor/${this.actor.data.type}-sheet.html`; + return `systems/deltagreen/templates/actor/actor-sheet.html`; } - else if(this.actor.type === 'unnatural'){ + if (this.actor.type === "unnatural") { return `systems/deltagreen/templates/actor/unnatural-sheet.html`; } - else if(this.actor.type === 'npc'){ + if (this.actor.type === "npc") { return `systems/deltagreen/templates/actor/npc-sheet.html`; } - else if(this.actor.type === 'vehicle'){ + if (this.actor.type === "vehicle") { return `systems/deltagreen/templates/actor/vehicle-sheet.html`; } - else{ - return "systems/deltagreen/templates/actor/limited-sheet.html"; - } - } - else{ + return "systems/deltagreen/templates/actor/limited-sheet.html"; } + + return "systems/deltagreen/templates/actor/limited-sheet.html"; } /** @override */ @@ -61,24 +62,33 @@ export class DeltaGreenActorSheet extends ActorSheet { const data = super.getData(); // Prepare items. - if (this.actor.type == 'agent') { + if (this.actor.type === "agent") { this._prepareCharacterItems(data); } switch (this.actor.type) { case "agent": - data.enrichedDescription = await TextEditor.enrichHTML(this.object.system.physicalDescription, {async: true}); + data.enrichedDescription = await TextEditor.enrichHTML( + this.object.system.physicalDescription, + { async: true }, + ); break; case "vehicle": - data.enrichedDescription = await TextEditor.enrichHTML(this.object.system.description, {async: true}); + data.enrichedDescription = await TextEditor.enrichHTML( + this.object.system.description, + { async: true }, + ); break; case "npc": case "unnatural": - data.enrichedDescription = await TextEditor.enrichHTML(this.object.system.notes, {async: true}); + data.enrichedDescription = await TextEditor.enrichHTML( + this.object.system.notes, + { async: true }, + ); break; default: } - + return data; } @@ -98,13 +108,13 @@ export class DeltaGreenActorSheet extends ActorSheet { // Iterate through items, allocating to containers // let totalWeight = 0; - for (let i of sheetData.items) { + for (const i of sheetData.items) { // Append to armor. - if (i.type === 'armor') { + if (i.type === "armor") { armor.push(i); } // Append to weapons. - else if (i.type === 'weapon') { + else if (i.type === "weapon") { weapons.push(i); } } @@ -113,35 +123,38 @@ export class DeltaGreenActorSheet extends ActorSheet { actorData.armor = armor; actorData.weapons = weapons; } - + // Can add extra buttons to form header here if necessary - _getHeaderButtons(){ + _getHeaderButtons() { let buttons = super._getHeaderButtons(); let label = "Roll Luck"; let label2 = "Luck"; - try{ + try { label = game.i18n.translations.DG.RollLuck; label2 = game.i18n.translations.DG.Luck; + } catch { + ui.notifications.warn( + "Missing translation key for either DG.RollLuck or DG.Luck key.", + ); } - catch{ - ui.notifications.warn('Missing translation key for either DG.RollLuck or DG.Luck key.') - } - - buttons = [{ - label: label, - class: "test-extra-icon", - icon: "fas fa-dice", - onclick: (ev) => this.luckRollOnClick(ev, this.actor, label2) - }].concat(buttons); + + buttons = [ + { + label, + class: "test-extra-icon", + icon: "fas fa-dice", + onclick: (ev) => this.luckRollOnClick(ev, this.actor, label2), + }, + ].concat(buttons); return buttons; } // This only exists to give a chance to activate the modifier dialogue if desired // Cannot seem to trigger the event on a right-click, so unfortunately only applies to a shift-click currently. - async luckRollOnClick(event){ - if(event && event.which === 2){ + async luckRollOnClick(event) { + if (event && event.which === 2) { // probably don't want rolls to trigger from a middle mouse click so just kill it here return; } @@ -149,10 +162,10 @@ export class DeltaGreenActorSheet extends ActorSheet { rollType: "luck", key: "luck", actor: this.actor, - } + }; // Create a default 1d100 roll just in case. - let roll = new DGPercentileRoll("1D100", {}, rollOptions); + const roll = new DGPercentileRoll("1D100", {}, rollOptions); // Open dialog if user requests it. if (event.shiftKey || event.which === 3) { const dialogData = await roll.showDialog(); @@ -163,27 +176,32 @@ export class DeltaGreenActorSheet extends ActorSheet { // Evaluate the roll. await roll.evaluate({ async: true }); // Send the roll to chat. - roll.toChat(); + roll.toChat(); } - activeEffectTest(sheet){ + activeEffectTest(sheet) { console.log(sheet.actor.uuid); - let owner = sheet.actor; + const owner = sheet.actor; - let effect = ActiveEffect.create({ + const effect = ActiveEffect.create( + { label: "Custom Effect", tint: "#008000", icon: "icons/svg/aura.svg", origin: owner.uuid, - //duration: {"rounds": 1, "seconds": null, "startTime": null, "turns": null, "startRound": null, "startTurn": null}, + // duration: {"rounds": 1, "seconds": null, "startTime": null, "turns": null, "startRound": null, "startTurn": null}, disabled: false, - changes: [{ - "key": "data.skills.firearms.proficiency", //"data.statistics.str.value", //"data.health.max", - "mode": 2, // 0 = custom, 1 = multiply, 2 = add, 3 = upgrade, 4 = downgrade, 5 = override - "value": -20, - "priority": "20" - }] - }, owner).create(); + changes: [ + { + key: "data.skills.firearms.proficiency", // "data.statistics.str.value", //"data.health.max", + mode: 2, // 0 = custom, 1 = multiply, 2 = add, 3 = upgrade, 4 = downgrade, 5 = override + value: -20, + priority: "20", + }, + ], + }, + owner, + ).create(); } /* -------------------------------------------- */ @@ -196,39 +214,45 @@ export class DeltaGreenActorSheet extends ActorSheet { if (!this.options.editable) return; // Add Inventory Item - html.find('.item-create').click(this._onItemCreate.bind(this)); + html.find(".item-create").click(this._onItemCreate.bind(this)); // Update Inventory Item - html.find('.item-edit').click(ev => { + html.find(".item-edit").click((ev) => { const li = $(ev.currentTarget).parents(".item"); - //const item = this.actor.getOwnedItem(li.data("itemId")); + // const item = this.actor.getOwnedItem(li.data("itemId")); const item = this.actor.items.get(li.data("itemId")); item.sheet.render(true); }); // Delete Inventory Item - html.find('.item-delete').click(ev => { + html.find(".item-delete").click((ev) => { const li = $(ev.currentTarget).parents(".item"); - //this.actor.deleteOwnedItem(li.data("itemId")); - let options = {}; + // this.actor.deleteOwnedItem(li.data("itemId")); + const options = {}; this.actor.deleteEmbeddedDocuments("Item", [li.data("itemId")], options); li.slideUp(200, () => this.render(false)); }); // Rollable abilities - bind to everything with the 'Rollable' class - html.find('.rollable').click(this._onRoll.bind(this)); + html.find(".rollable").click(this._onRoll.bind(this)); - html.find('.toggle-untrained').click(() => this.actor.update({"system.showUntrainedSkills": !this.actor.system.showUntrainedSkills})); + html.find(".toggle-untrained").click(() => + this.actor.update({ + "system.showUntrainedSkills": !this.actor.system.showUntrainedSkills, + }), + ); // Macro for toggling an item's equipped state - html.find('.equipped-item').mousedown(this._onEquippedStatusChange.bind(this)); + html + .find(".equipped-item") + .mousedown(this._onEquippedStatusChange.bind(this)); // Drag events for macros. if (this.actor.isOwner) { - let handler = ev => this._onDragStart(ev); - html.find('li.item').each((i, li) => { + const handler = (ev) => this._onDragStart(ev); + html.find("li.item").each((i, li) => { if (li.classList.contains("inventory-header")) return; li.setAttribute("draggable", true); li.addEventListener("dragstart", handler, false); @@ -236,56 +260,60 @@ export class DeltaGreenActorSheet extends ActorSheet { } // Custom Sheet Macros - html.find('.btn-reset-breaking-point').click(event => { + html.find(".btn-reset-breaking-point").click((event) => { event.preventDefault(); let currentBreakingPoint = 0; - - currentBreakingPoint = this.actor.system.sanity.value - this.actor.system.statistics.pow.value; - - let updatedData = duplicate(this.actor.system); + + currentBreakingPoint = + this.actor.system.sanity.value - this.actor.system.statistics.pow.value; + + const updatedData = duplicate(this.actor.system); updatedData.sanity.currentBreakingPoint = currentBreakingPoint; - this.actor.update({"data": updatedData}); + this.actor.update({ data: updatedData }); }); - html.find('.typed-skill-add').click(event => { + html.find(".typed-skill-add").click((event) => { event.preventDefault(); - let targetskill = event.target.getAttribute("data-typeskill"); + const targetskill = event.target.getAttribute("data-typeskill"); this._showNewTypeSkillDialog(targetskill); }); - html.find('.typed-skill-edit').click(event => { - + html.find(".typed-skill-edit").click((event) => { event.preventDefault(); - let targetskill = event.target.getAttribute("data-typedskill"); - let existingLabel = this.actor.system.typedSkills[targetskill].label; - let existingGroup = this.actor.system.typedSkills[targetskill].group; + const targetskill = event.target.getAttribute("data-typedskill"); + const existingLabel = this.actor.system.typedSkills[targetskill].label; + const existingGroup = this.actor.system.typedSkills[targetskill].group; - //this.actor.update({[`data.typedSkills.${targetskill}.label`]: 'test'}); - - this._showNewEditTypeSkillDialog(targetskill, existingLabel, existingGroup); + // this.actor.update({[`data.typedSkills.${targetskill}.label`]: 'test'}); + this._showNewEditTypeSkillDialog( + targetskill, + existingLabel, + existingGroup, + ); }); - html.find('.typed-skill-delete').click(event => { - + html.find(".typed-skill-delete").click((event) => { event.preventDefault(); - let targetskill = event.target.getAttribute("data-typedskill"); + const targetskill = event.target.getAttribute("data-typedskill"); // many bothans died to bring us this information on how to delete a property on an entity - this.actor.update({[`system.typedSkills.-=${targetskill}`]: null}); - + this.actor.update({ [`system.typedSkills.-=${targetskill}`]: null }); }); - html.find('.apply-skill-improvements').click(event => { - + html.find(".apply-skill-improvements").click((event) => { event.preventDefault(); - const failedSkills = Object.entries(this.actor.system.skills).filter((skill) => skill[1].failure); - const failedTypedSkills = Object.entries(this.actor.system.typedSkills).filter((skill) => skill[1].failure); + const failedSkills = Object.entries(this.actor.system.skills).filter( + (skill) => skill[1].failure, + ); + const failedTypedSkills = Object.entries( + this.actor.system.typedSkills, + ).filter((skill) => skill[1].failure); if (failedSkills.length === 0 && failedTypedSkills.length === 0) { - ui.notifications.warn('No Skills to Increase') + ui.notifications.warn("No Skills to Increase"); return; } @@ -293,95 +321,115 @@ export class DeltaGreenActorSheet extends ActorSheet { let failedSkillNames = ""; failedSkills.forEach(([skill], value) => { if (value === 0) { - failedSkillNames += (game.i18n.localize("DG.Skills." + skill)); + failedSkillNames += game.i18n.localize(`DG.Skills.${skill}`); } else { - failedSkillNames += `, ${(game.i18n.localize("DG.Skills." + skill))}`; + failedSkillNames += `, ${game.i18n.localize(`DG.Skills.${skill}`)}`; } - }) + }); failedTypedSkills.forEach(([skillName, skillData], value) => { if (value === 0 && failedSkillNames === "") { - failedSkillNames += `${game.i18n.localize("DG.TypeSkills." + skillData.group.split(" ").join(""))} (${skillData.label})`; + failedSkillNames += `${game.i18n.localize( + `DG.TypeSkills.${skillData.group.split(" ").join("")}`, + )} (${skillData.label})`; } else { - failedSkillNames += `, ${game.i18n.localize("DG.TypeSkills." + skillData.group.split(" ").join(""))} (${skillData.label})`; + failedSkillNames += `, ${game.i18n.localize( + `DG.TypeSkills.${skillData.group.split(" ").join("")}`, + )} (${skillData.label})`; } - }) + }); - const baseRollFormula = game.settings.get("deltagreen", "skillImprovementFormula"); + const baseRollFormula = game.settings.get( + "deltagreen", + "skillImprovementFormula", + ); htmlContent += `
`; - htmlContent += ` `; + htmlContent += ` `; htmlContent += `
`; - htmlContent += ` ${game.i18n.localize("DG.Skills.ApplySkillImprovementsDialogEffectsFollowing")} ${failedSkillNames} `; + htmlContent += ` ${game.i18n.localize( + "DG.Skills.ApplySkillImprovementsDialogEffectsFollowing", + )} ${failedSkillNames} `; htmlContent += `
`; - + new Dialog({ content: htmlContent, - title: game.i18n.translations.DG?.Skills?.ApplySkillImprovements ?? "Apply Skill Improvements", + title: + game.i18n.translations.DG?.Skills?.ApplySkillImprovements ?? + "Apply Skill Improvements", default: "add", buttons: { - apply:{ + apply: { label: game.i18n.translations.DG?.Skills?.Apply ?? "Apply", - callback: btn =>{ - this._applySkillImprovements(baseRollFormula, failedSkills, failedTypedSkills); + callback: (btn) => { + this._applySkillImprovements( + baseRollFormula, + failedSkills, + failedTypedSkills, + ); }, - } - } + }, + }, }).render(true); - }); // Browse Weapon Compendiums - html.find('.weapon-browse').click(ev => { + html.find(".weapon-browse").click((ev) => { const dialog = new Dialog({ title: "Select Compendium", - buttons:{ + buttons: { firearms: { icon: '', - callback: () => game.packs.find(k=>k.collection==="deltagreen.firearms").render(true) + callback: () => + game.packs + .find((k) => k.collection === "deltagreen.firearms") + .render(true), }, melee: { icon: '', - callback: () => game.packs.find(k=>k.collection==="deltagreen.hand-to-hand-weapons").render(true) - } - } + callback: () => + game.packs + .find((k) => k.collection === "deltagreen.hand-to-hand-weapons") + .render(true), + }, + }, }); dialog.render(true); }); - html.find('.armor-browse').click(ev => { - game.packs.find(k=>k.collection==="deltagreen.armor").render(true); + html.find(".armor-browse").click((ev) => { + game.packs.find((k) => k.collection === "deltagreen.armor").render(true); }); - html.find('.gear-browse').click(ev => { - //game.packs.find(k=>k.collection==="deltagreen.firearms").render(true); + html.find(".gear-browse").click((ev) => { + // game.packs.find(k=>k.collection==="deltagreen.firearms").render(true); }); - html.find('.toggle-lethality').click(event => { + html.find(".toggle-lethality").click((event) => { this._toggleLethality(event); }); // let user check off the 'bond damaged' checkbox right from the sheet - html.find('.bond-has-been-damaged-agent-sheet-checkbox').click(ev => { - + html.find(".bond-has-been-damaged-agent-sheet-checkbox").click((ev) => { const el = $(ev.currentTarget).parents(".item"); - const item = this.actor.items.get(el.data('item-id')); - let value = ev.target.checked; - - item.update({["system.hasBeenDamagedSinceLastHomeScene"]: value}); + const item = this.actor.items.get(el.data("item-id")); + const value = ev.target.checked; + item.update({ "system.hasBeenDamagedSinceLastHomeScene": value }); }); - html.find('.clear-all-bond-damage-checks').click(ev => { + html.find(".clear-all-bond-damage-checks").click((ev) => { this._updateBondsRemoveAllDamagedCheckmarks(); }); } // trigger an update on all bonds that have had their damaged flag checked off - async _updateBondsRemoveAllDamagedCheckmarks(){ - for(let i of this.actor.items){ - if(i.type === 'bond' && i.system.hasBeenDamagedSinceLastHomeScene){ - await i.update({["system.hasBeenDamagedSinceLastHomeScene"]: false}); + async _updateBondsRemoveAllDamagedCheckmarks() { + for (const i of this.actor.items) { + if (i.type === "bond" && i.system.hasBeenDamagedSinceLastHomeScene) { + await i.update({ "system.hasBeenDamagedSinceLastHomeScene": false }); } } } @@ -390,156 +438,251 @@ export 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({ "data.isLethal": !isLethal }); } - _showNewEditTypeSkillDialog(targetSkill, currentLabel, currentGroup){ - + _showNewEditTypeSkillDialog(targetSkill, currentLabel, currentGroup) { // TO DO: BUILD DIALOG TO CAPTURE UPDATED DATA let htmlContent = `
`; - htmlContent += ` `; + htmlContent += ` `; htmlContent += ` `; htmlContent += `
`; htmlContent += `
`; - htmlContent += ` `; + htmlContent += ` `; htmlContent += ` `; htmlContent += `
`; new Dialog({ content: htmlContent, - title: game.i18n.translations.DG?.Skills?.EditTypedOrCustomSkill ?? "Edit Typed or Custom Skill", + title: + game.i18n.translations.DG?.Skills?.EditTypedOrCustomSkill ?? + "Edit Typed or Custom Skill", default: "add", buttons: { - add:{ + add: { label: game.i18n.translations.DG?.Skills?.EditSkill ?? "Edit Skill", - callback: btn =>{ - let newTypeSkillLabel = btn.find("[name='new-type-skill-label']").val(); - let newTypeSkillGroup = btn.find("[name='new-type-skill-group']").val(); - this._updateTypedSkill(targetSkill, newTypeSkillLabel, newTypeSkillGroup); - } - } - } + callback: (btn) => { + const newTypeSkillLabel = btn + .find("[name='new-type-skill-label']") + .val(); + const newTypeSkillGroup = btn + .find("[name='new-type-skill-group']") + .val(); + this._updateTypedSkill( + targetSkill, + newTypeSkillLabel, + newTypeSkillGroup, + ); + }, + }, + }, }).render(true); } - _showNewTypeSkillDialog(targetskill){ + _showNewTypeSkillDialog(targetskill) { let htmlContent = ""; htmlContent += `
`; - htmlContent += ` `; + htmlContent += ` `; htmlContent += ` `; htmlContent += `
`; htmlContent += `
`; - htmlContent += ` `; + htmlContent += ` `; htmlContent += ` `; htmlContent += `
`; new Dialog({ content: htmlContent, - title: game.i18n.translations.DG?.Skills?.AddTypedOrCustomSkill ?? "Add Typed or Custom Skill", + title: + game.i18n.translations.DG?.Skills?.AddTypedOrCustomSkill ?? + "Add Typed or Custom Skill", default: "add", buttons: { - add:{ + add: { label: game.i18n.translations.DG?.Skills?.AddSkill ?? "Add Skill", - callback: btn =>{ - let newTypeSkillLabel = btn.find("[name='new-type-skill-label']").val(); - let newTypeSkillGroup = btn.find("[name='new-type-skill-group']").val(); + callback: (btn) => { + const newTypeSkillLabel = btn + .find("[name='new-type-skill-label']") + .val(); + const newTypeSkillGroup = btn + .find("[name='new-type-skill-group']") + .val(); this._addNewTypedSkill(newTypeSkillLabel, newTypeSkillGroup); }, - } - } + }, + }, }).render(true); } - _addNewTypedSkill(newSkillLabel, newSkillGroup){ - let updatedData = duplicate(this.actor.system); - let typedSkills = updatedData.typedSkills; + _addNewTypedSkill(newSkillLabel, newSkillGroup) { + const updatedData = duplicate(this.actor.system); + const { typedSkills } = updatedData; - let d = new Date(); + const d = new Date(); - let newSkillPropertyName = d.getFullYear().toString() + (d.getMonth() + 1).toString() + d.getDate().toString() + d.getHours().toString() + d.getMinutes().toString() + d.getSeconds().toString(); - //console.log(newSkillPropertyName); - typedSkills[newSkillPropertyName] = {"label": newSkillLabel, "group": newSkillGroup, "proficiency": 10, "failure": false}; + const newSkillPropertyName = + d.getFullYear().toString() + + (d.getMonth() + 1).toString() + + d.getDate().toString() + + d.getHours().toString() + + d.getMinutes().toString() + + d.getSeconds().toString(); + // console.log(newSkillPropertyName); + typedSkills[newSkillPropertyName] = { + label: newSkillLabel, + group: newSkillGroup, + proficiency: 10, + failure: false, + }; updatedData.typedSkills = typedSkills; - this.actor.update({"data": updatedData}); + this.actor.update({ data: updatedData }); } - _updateTypedSkill(targetSkill, newSkillLabel, newSkillGroup){ + _updateTypedSkill(targetSkill, newSkillLabel, newSkillGroup) { + if ( + newSkillLabel !== null && + newSkillLabel !== "" && + newSkillGroup !== null && + newSkillGroup !== "" + ) { + const updatedData = duplicate(this.actor.system); - if(newSkillLabel !== null && newSkillLabel !== "" && newSkillGroup !== null & newSkillGroup !== ""){ - let updatedData = duplicate(this.actor.system); - updatedData.typedSkills[targetSkill].label = newSkillLabel; updatedData.typedSkills[targetSkill].group = newSkillGroup; - - this.actor.update({"data": updatedData}); + + this.actor.update({ data: updatedData }); } - } /** @@ -548,46 +691,45 @@ export class DeltaGreenActorSheet extends ActorSheet { * @private */ _onItemCreate(event) { - event.preventDefault(); const header = event.currentTarget; // Get the type of item to create. - const type = header.dataset.type; - + const { type } = header.dataset; + // 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 = `New ${type.capitalize()}`; + const name = + game.i18n.localize("DG.ItemTypes.NewPrefix") + + game.i18n.localize(`DG.ItemTypes.${type}`); // Prepare the item object. const itemData = { - name: name, - type: type, - system: {} + name, + type, + system: {}, }; - if(type == "weapon"){ - //itemData.system.skill = "firearms"; //default skill to firearms, since that will be most common - //itemData.system.expense = "Standard"; - } - else if(type == "armor"){ - //itemData.system.armor = 3; - //itemData.system.expense = "Standard"; - } - else if(type == "bond"){ + if (type === "weapon") { + // itemData.system.skill = "firearms"; //default skill to firearms, since that will be most common + // itemData.system.expense = "Standard"; + } else if (type === "armor") { + // itemData.system.armor = 3; + // itemData.system.expense = "Standard"; + } else if (type === "bond") { // try to default bonds for an agent to their current CHA itemData.system.score = this.object.system.statistics.cha.value; // Can vary, but at character creation starting bond score is usually agent's charisma - //itemData.img = "icons/svg/mystery-man.svg" + // itemData.img = "icons/svg/mystery-man.svg" } - + // create the item return this.actor.createEmbeddedDocuments("Item", [itemData]); } /** * Handle clickable rolls. - * + * * @param {Event} event The originating click event * @async * @private @@ -597,7 +739,7 @@ export class DeltaGreenActorSheet extends ActorSheet { const element = event.currentTarget; const { dataset } = element; - if(event && event.which === 2) { + if (event && event.which === 2) { // probably don't want rolls to trigger from a middle mouse click so just kill it here return; } @@ -607,31 +749,35 @@ export class DeltaGreenActorSheet extends ActorSheet { rollType: dataset.rolltype, key: dataset.key, actor: this.actor, - item - } + item, + }; // Create a default 1d100 roll just in case. let roll = new Roll("1d100", {}); switch (dataset.rolltype) { case "stat": case "skill": - case "sanity": + case "sanity": case "weapon": roll = new DGPercentileRoll("1D100", {}, rollOptions); break; case "lethality": - roll = new DGLethalityRoll("1D100", {}, rollOptions) + roll = new DGLethalityRoll("1D100", {}, rollOptions); break; case "damage": { let diceFormula = item.system.damage; const { skill } = item.system; - if(this.actor.type === 'agent' && (skill === 'unarmed_combat' || skill === 'melee_weapons')){ - diceFormula += this.actor.system.statistics.str.meleeDamageBonusFormula; + if ( + this.actor.type === "agent" && + (skill === "unarmed_combat" || skill === "melee_weapons") + ) { + diceFormula += + this.actor.system.statistics.str.meleeDamageBonusFormula; } - roll = new DGDamageRoll(diceFormula, {}, rollOptions) + roll = new DGDamageRoll(diceFormula, {}, rollOptions); break; } - case "sanity-damage":{ + case "sanity-damage": { const { successLoss, failedLoss } = this.actor.system.sanity; const combinedFormula = `{${successLoss}, ${failedLoss}}`; roll = new DGSanityDamageRoll(combinedFormula, {}, rollOptions); @@ -640,25 +786,30 @@ export class DeltaGreenActorSheet extends ActorSheet { default: break; } - return this.processRoll(event, roll, rollOptions) + this.processRoll(event, roll, rollOptions); } /** * Show a dialog for the roll and then send to chat. * Broke this logic out from `_onRoll()` so that other files can call it, * namely the macro logic. - * + * + * TODO: Move this logic to the roll.js. + * * @param {Event} event The originating click event * @param {Event} roll The roll to show a dialog for and then send to chat. * @async */ async processRoll(event, roll) { // Open dialog if user requests it (no dialog for Sanity Damage rolls) - if ((event.shiftKey || event.which === 3) && !(roll instanceof DGSanityDamageRoll)) { + if ( + (event.shiftKey || event.which === 3) && + !(roll instanceof DGSanityDamageRoll) + ) { const dialogData = await roll.showDialog(); if (!dialogData) return; if (dialogData.newFormula) { - roll = new DGDamageRoll(dialogData.newFormula, {}, roll.options) + roll = new DGDamageRoll(dialogData.newFormula, {}, roll.options); } roll.modifier += dialogData.targetModifier; roll.options.rollMode = dialogData.rollMode; @@ -666,50 +817,54 @@ export class DeltaGreenActorSheet extends ActorSheet { // Evaluate the roll. await roll.evaluate({ async: true }); // Send the roll to chat. - return roll.toChat(); + roll.toChat(); } - _resetBreakingPoint(event){ + _resetBreakingPoint(event) { event.preventDefault(); let currentBreakingPoint = 0; - - currentBreakingPoint = this.actor.system.sanity.value - this.actor.system.statistics.pow.value; - if(currentBreakingPoint < 0){ + currentBreakingPoint = + this.actor.system.sanity.value - this.actor.system.statistics.pow.value; + + if (currentBreakingPoint < 0) { currentBreakingPoint = 0; } - - let updatedData = duplicate(this.actor.system); + + const updatedData = duplicate(this.actor.system); updatedData.sanity.currentBreakingPoint = currentBreakingPoint; - this.actor.update({"data": updatedData}); + this.actor.update({ data: updatedData }); } _onEquippedStatusChange(event) { event.preventDefault(); const element = event.currentTarget; - const dataset = element.dataset; + const { dataset } = element; - try{ - //const item = this.actor.getOwnedItem(dataset.id); + try { + // const item = this.actor.getOwnedItem(dataset.id); const item = this.actor.items.get(dataset.id); - var isEquipped = item.system.equipped; + let isEquipped = item.system.equipped; isEquipped = !isEquipped; - item.update({data:{equipped: isEquipped}}); - } - catch(ex){ + item.update({ data: { equipped: isEquipped } }); + } catch (ex) { console.log(ex); } } // For any skills a user has checked off as failed, roll the improvement and update the agent's skills to their new values - async _applySkillImprovements(baseRollFormula, failedSkills, failedTypedSkills) { + async _applySkillImprovements( + baseRollFormula, + failedSkills, + failedTypedSkills, + ) { const actorData = this.actor.system; const resultList = []; let rollFormula; - + // Define the amount of dice being rolled, if any. switch (baseRollFormula) { case "1": @@ -728,97 +883,122 @@ export class DeltaGreenActorSheet extends ActorSheet { let roll; if (rollFormula !== 1) { roll = new Roll(rollFormula, actorData); - roll.evaluate({async: true}); + roll.evaluate({ async: true }); // Put the results into a list. - roll.terms[0].results.forEach((result) => resultList.push(baseRollFormula === "1d4-1" ? result.result - 1 : result.result)); + roll.terms[0].results.forEach((result) => + resultList.push( + baseRollFormula === "1d4-1" ? result.result - 1 : result.result, + ), + ); } // This will be end up being a list of skills and how much each were improved by. It gets modified in the following loops. 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); 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. updatedData.skills[skill].failure = false; // So we can record the regular skills improved and how much they were increased by in chat. // The if statement tells us whether to add a comma before the term or not. if (value === 0) { - improvedSkillList += `${game.i18n.localize("DG.Skills." + skill)}: +${resultList[value] ?? 1}%`; + improvedSkillList += `${game.i18n.localize( + `DG.Skills.${skill}`, + )}: +${resultList[value] ?? 1}%`; } else { - improvedSkillList += `, ${game.i18n.localize("DG.Skills." + skill)}: +${resultList[value] ?? 1}%`; + improvedSkillList += `, ${game.i18n.localize( + `DG.Skills.${skill}`, + )}: +${resultList[value] ?? 1}%`; } - }) + }); failedTypedSkills.forEach(([skillName, skillData], value) => { // We must increase value in the following line by the length of failedSkills, so that we index the entire resultList. // Otherwise we would be adding the same die results to regular skills and typed skills. - updatedData.typedSkills[skillName].proficiency += resultList[value + failedSkills.length] ?? 1; + updatedData.typedSkills[skillName].proficiency += + resultList[value + failedSkills.length] ?? 1; updatedData.typedSkills[skillName].failure = false; // So we can record the typed skills improved and how much they were increased by in chat. // The if statement tells us whether to add a comma before the term or not. if (value === 0 && improvedSkillList === "") { - improvedSkillList += `${game.i18n.localize("DG.TypeSkills." + skillData.group.split(" ").join(""))} (${skillData.label}): +${resultList[value + failedSkills.length] ?? 1}%`; + improvedSkillList += `${game.i18n.localize( + `DG.TypeSkills.${skillData.group.split(" ").join("")}`, + )} (${skillData.label}): +${ + resultList[value + failedSkills.length] ?? 1 + }%`; } else { - improvedSkillList += `, ${game.i18n.localize("DG.TypeSkills." + skillData.group.split(" ").join(""))} (${skillData.label}): +${resultList[value + failedSkills.length] ?? 1}%`; + improvedSkillList += `, ${game.i18n.localize( + `DG.TypeSkills.${skillData.group.split(" ").join("")}`, + )} (${skillData.label}): +${ + resultList[value + failedSkills.length] ?? 1 + }%`; } - }) + }); // Probably not worth triggering the update if the user didn't pick any skills - if (improvedSkillList !== ""){ - await this.actor.update({"system": updatedData}); - } + if (improvedSkillList !== "") { + await this.actor.update({ system: updatedData }); + } let html; - html = `
` - html += `
${improvedSkillList}
` - html += `
` + html = `
`; + html += `
${improvedSkillList}
`; + html += `
`; const chatData = { - speaker: ChatMessage.getSpeaker({actor: this.actor, token: this.token, alias: this.actor.name}), + speaker: ChatMessage.getSpeaker({ + actor: this.actor, + token: this.token, + alias: this.actor.name, + }), content: html, - flavor: `${game.i18n.localize("DG.Skills.ApplySkillImprovementsChatFlavor")} +${baseRollFormula}%:`, + flavor: `${game.i18n.localize( + "DG.Skills.ApplySkillImprovementsChatFlavor", + )} +${baseRollFormula}%:`, type: baseRollFormula === "1" ? 0 : 5, // 0 = CHAT_MESSAGE_TYPES.OTHER, 5 = CHAT_MESSAGE_TYPES.ROLL rolls: baseRollFormula === "1" ? [] : [roll], // If adding flat +1, there is no roll. - 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); - - ChatMessage.create(chatData, {}); + 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, + ); + + ChatMessage.create(chatData, {}); } /** @override */ _onDragStart(event) { // Most of this is the standard Foundry implementation of _onDragStart const li = event.currentTarget; - if ( event.target.classList.contains("content-link") ) return; + if (event.target.classList.contains("content-link")) return; // Create drag data let dragData; // Owned Items - if ( li.dataset.itemId ) { + if (li.dataset.itemId) { const item = this.actor.items.get(li.dataset.itemId); dragData = item.toDragData(); } // Active Effect - if ( li.dataset.effectId ) { + if (li.dataset.effectId) { const effect = this.actor.effects.get(li.dataset.effectId); dragData = effect.toDragData(); } - if ( !dragData ) return; + if (!dragData) return; // this is custom, grab item data for creating item macros on the hotbar - if ( li.dataset.itemId ) { + if (li.dataset.itemId) { const item = this.actor.items.get(li.dataset.itemId); dragData.itemData = item; } @@ -828,7 +1008,7 @@ export class DeltaGreenActorSheet extends ActorSheet { } /** @override */ - async _onDrop(event){ + async _onDrop(event) { super._onDrop(event); // If alt key is held down, we will delete the original document. if (event.altKey) { @@ -837,7 +1017,7 @@ export class DeltaGreenActorSheet extends ActorSheet { // Make sure that we are dragging an item, otherwise this doesn't make sense. if (dragData.type === "Item") { const item = fromUuidSync(dragData.uuid); - await item.delete() + await item.delete(); } } } @@ -847,4 +1027,3 @@ export class DeltaGreenActorSheet extends ActorSheet { return super.activateEditor(target, editorOptions, initialContent); } } - diff --git a/module/actor/actor.js b/module/actor/actor.js index 2efe8f9..2277226 100644 --- a/module/actor/actor.js +++ b/module/actor/actor.js @@ -1,9 +1,10 @@ +/* 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} */ -export class DeltaGreenActor extends Actor { - +export default class DeltaGreenActor extends Actor { /** * Augment the basic actor data with additional dynamic data. */ @@ -11,41 +12,38 @@ export class DeltaGreenActor extends Actor { super.prepareData(); const actorData = this; - const system = actorData.system; - const flags = actorData.flags; + const { system } = actorData; + const { flags } = actorData; - //console.log('actor.js prepareData'); - //console.log(this); + // console.log('actor.js prepareData'); + // console.log(this); // Make separate methods for each Actor type (character, npc, etc.) to keep // things organized. - if (actorData.type === 'agent'){ + if (actorData.type === "agent") { this._prepareAgentData(this); - } - else if(actorData.type === 'unnatural'){ + } else if (actorData.type === "unnatural") { this._prepareUnnaturalData(this); - } - else if(actorData.type === 'npc'){ + } else if (actorData.type === "npc") { this._prepareNpcData(this); - } - else if(actorData.type === 'vehicle'){ + } else if (actorData.type === "vehicle") { this._prepareVehicleData(this); } } /** - * - * @param {*} agent + * + * @param {*} agent */ - _prepareVehicleData(actor){ - let actorData = actor; + _prepareVehicleData(actor) { + const actorData = actor; - // calculate total armor rating + // calculate total armor rating let protection = 0; - for (let i of actor.items) { - if (i.type === 'armor') { - if(i.system.equipped === true){ + for (const i of actor.items) { + if (i.type === "armor") { + if (i.system.equipped === true) { protection += i.system.protection; } } @@ -56,74 +54,76 @@ export class DeltaGreenActor extends Actor { console.log(actor); } - _prepareNpcData(actor){ - const { system } = actor; - - // Loop through ability scores, and add their modifiers to our sheet output. - for (let [key, statistic] of Object.entries(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; - } - - // initialize sanity, don't set these afterwards, as they need to be manually edited - if(system.sanity.value >= 100){ - system.sanity.value = system.statistics.pow.x5 - system.sanity.currentBreakingPoint = system.sanity.value - system.statistics.pow.value; - }; - - system.sanity.max = 99 - system.skills.unnatural.proficiency; - - system.wp.max = system.statistics.pow.value; - - system.health.max = Math.ceil((system.statistics.con.value + system.statistics.str.value) / 2); - - 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 - } - - // calculate total armor rating - let protection = 0; - for (let i of actor.items) { - if (i.type === 'armor') { - if(i.system.equipped === true){ - protection += i.system.protection; - } - } - } - - system.health.protection = protection; - - console.log(actor); -} - - /** - * - * @param {*} agent - */ - _prepareUnnaturalData(actor){ + _prepareNpcData(actor) { const { system } = actor; // Loop through ability scores, and add their modifiers to our sheet output. - for (let [key, statistic] of Object.entries(system.statistics)) { + for (const [key, statistic] of Object.entries(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; + } + + // initialize sanity, don't set these afterwards, as they need to be manually edited + if (system.sanity.value >= 100) { + system.sanity.value = system.statistics.pow.x5; + system.sanity.currentBreakingPoint = + system.sanity.value - system.statistics.pow.value; + } + + system.sanity.max = 99 - system.skills.unnatural.proficiency; + + system.wp.max = system.statistics.pow.value; + + system.health.max = Math.ceil( + (system.statistics.con.value + system.statistics.str.value) / 2, + ); + + 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; + } + + // calculate total armor rating + let protection = 0; + for (const i of actor.items) { + if (i.type === "armor") { + if (i.system.equipped === true) { + protection += i.system.protection; + } + } + } + + system.health.protection = protection; + + console.log(actor); + } + + /** + * + * @param {*} agent + */ + _prepareUnnaturalData(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)) { // the x5 is just whatever the raw statistic is x 5 to turn it into a d100 percentile statistic.x5 = statistic.value * 5; } // calculate total armor rating let protection = 0; - for (let i of actor.items) { - if (i.type === 'armor') { - if(i.system.equipped === true){ + for (const i of actor.items) { + if (i.type === "armor") { + if (i.system.equipped === true) { protection += i.system.protection; } } @@ -138,94 +138,96 @@ export class DeltaGreenActor extends Actor { * Prepare Agent type specific data */ _prepareAgentData(agent) { - const { system } = agent; // Make modifications to data here. For example: // Loop through ability scores, and add their modifiers to our sheet output. - for (let [key, statistic] of Object.entries(system.statistics)) { + for (const [key, statistic] of Object.entries(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 + 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 + if (system.skills.ritual.proficiency > 99) { + system.skills.ritual.proficiency = 99; + } else if (system.skills.ritual.proficiency < 1) { + system.skills.ritual.proficiency = 1; } // The unnatural skill is sort of special // It cannot be improved via failure, so add in a special property to reflect this // Mostly to make it easy to deactivate the failure checkbox in the GUI - for (let [key, skill] of Object.entries(system.skills)){ - if(key === 'unnatural'){ + for (const [key, skill] of Object.entries(system.skills)) { + if (key === "unnatural") { skill.cannotBeImprovedByFailure = true; - } - else if(key === 'luck'){ + } else if (key === "luck") { skill.cannotBeImprovedByFailure = true; - } - else if(key === 'ritual'){ + } else if (key === "ritual") { skill.cannotBeImprovedByFailure = true; - } - else{ + } else { skill.cannotBeImprovedByFailure = false; } // For ritual skill, it's calculated, so add some logic to turn off changing that entirely. - if(key === 'ritual'){ + if (key === "ritual") { skill.isCalculatedValue = true; - } - else{ + } else { skill.isCalculatedValue = false; } } system.wp.max = system.statistics.pow.value; - system.health.max = Math.ceil((system.statistics.con.value + system.statistics.str.value) / 2); + system.health.max = Math.ceil( + (system.statistics.con.value + system.statistics.str.value) / 2, + ); // initialize sanity, don't set these afterwards, as they need to be manually edited - if(system.sanity.value >= 100){ - system.sanity.value = system.statistics.pow.x5 - system.sanity.currentBreakingPoint = system.sanity.value - system.statistics.pow.value; - }; + if (system.sanity.value >= 100) { + system.sanity.value = system.statistics.pow.x5; + system.sanity.currentBreakingPoint = + system.sanity.value - system.statistics.pow.value; + } system.sanity.max = 99 - system.skills.unnatural.proficiency; - // Sanity Loss Adaptations Logic - let adaptations = system.sanity.adaptations; + const { adaptations } = system.sanity; - if (adaptations.violence.incident1 && adaptations.violence.incident2 && adaptations.violence.incident3){ + if ( + adaptations.violence.incident1 && + adaptations.violence.incident2 && + adaptations.violence.incident3 + ) { system.sanity.adaptations.violence.isAdapted = true; - } - else{ + } else { system.sanity.adaptations.violence.isAdapted = false; } - if (adaptations.helplessness.incident1 && adaptations.helplessness.incident2 && adaptations.helplessness.incident3){ + if ( + adaptations.helplessness.incident1 && + adaptations.helplessness.incident2 && + adaptations.helplessness.incident3 + ) { system.sanity.adaptations.helplessness.isAdapted = true; - } - else{ + } else { system.sanity.adaptations.helplessness.isAdapted = false; } // calculate total armor rating let protection = 0; - for (let i of agent.items) { - if (i.type === 'armor') { - if(i.system.equipped === true){ + for (const i of agent.items) { + if (i.type === "armor") { + if (i.system.equipped === true) { protection += i.system.protection; } } @@ -236,25 +238,22 @@ export class DeltaGreenActor extends Actor { // Damage Bonus/Malus From Strength in Hand-to-hand Combat (melee/unarmed) let bonus = 0; let sbonus = ""; - let strength = system.statistics.str; + const strength = system.statistics.str; - if(strength.value < 5){ + if (strength.value < 5) { sbonus = "-2"; bonus = -2; - } - else if(strength.value < 9){ + } else if (strength.value < 9) { sbonus = "-1"; bonus = -1; - } - else if(strength.value > 12 && strength.value < 17){ + } else if (strength.value > 12 && strength.value < 17) { sbonus = "+1"; bonus = 1; - } - else if(strength.value > 16){ + } else if (strength.value > 16) { sbonus = "+2"; bonus = 2; } - + system.statistics.str.meleeDamageBonus = bonus; system.statistics.str.meleeDamageBonusFormula = sbonus; @@ -262,95 +261,98 @@ export class DeltaGreenActor extends Actor { } /** @override */ - static async create(data, options={}) { + static async create(data, options = {}) { data.prototypeToken = data.prototypeToken || {}; - if ( data.type === "agent" ) { - 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. - }, {overwrite: false}); + if (data.type === "agent") { + 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. + }, + { overwrite: false }, + ); } return super.create(data, options); } - async AddUnarmedAttackItemIfMissing(){ - try{ - + async AddUnarmedAttackItemIfMissing() { + try { let alreadyAdded = false; - for(let item of this.items){ - - let flag = await item.getFlag('deltagreen', 'SystemName'); + for (const item of this.items) { + const flag = await item.getFlag("deltagreen", "SystemName"); - if(flag === 'unarmed-attack' || item.name === 'Unarmed Attack'){ + if (flag === "unarmed-attack" || item.name === "Unarmed Attack") { alreadyAdded = true; break; } - } - if(alreadyAdded === true){ return; }; + if (alreadyAdded === true) { + return; + } - let handToHandPack = await game.packs.get('deltagreen.hand-to-hand-weapons'); - let itemIndex = await handToHandPack.getIndex(); - let toAdd = []; // createEmbeddedDocument expects an array + const handToHandPack = await game.packs.get( + "deltagreen.hand-to-hand-weapons", + ); + const itemIndex = await handToHandPack.getIndex(); + const toAdd = []; // createEmbeddedDocument expects an array - for(let idx of itemIndex){ - let _temp = await handToHandPack.getDocument(idx._id); - - if(_temp.name === 'Unarmed Attack'){ + for (const idx of itemIndex) { + const _temp = await handToHandPack.getDocument(idx._id); + + if (_temp.name === "Unarmed Attack") { toAdd.push(_temp); - } - } - - let newItems = await this.createEmbeddedDocuments("Item", toAdd); - - for(let item of newItems){ - await item.setFlag('deltagreen','AutoAdded', true); - - if(item.name === 'Unarmed Attack'){ - await item.setFlag('deltagreen','SystemName', 'unarmed-attack'); } } - } - catch(ex){ - console.log('Error adding unarmed strike item to Actor.') + + const newItems = await this.createEmbeddedDocuments("Item", toAdd); + + for (const item of newItems) { + await item.setFlag("deltagreen", "AutoAdded", true); + + if (item.name === "Unarmed Attack") { + await item.setFlag("deltagreen", "SystemName", "unarmed-attack"); + } + } + } catch (ex) { + console.log("Error adding unarmed strike item to Actor."); console.log(ex); } } - async AddBaseVehicleItemsIfMissing(){ - try{ - let flag = await this.getFlag('deltagreen', 'DefaultVehicleArmorAdded'); + async AddBaseVehicleItemsIfMissing() { + try { + const flag = await this.getFlag("deltagreen", "DefaultVehicleArmorAdded"); - if(flag !== null && flag !== undefined && flag !== true){ - console.log('found a flag'); + if (flag !== null && flag !== undefined && flag !== true) { + console.log("found a flag"); console.log(flag); - } - else{ + } else { // mark the actor so that we don't accidently do this again later, or if we want to fix/change something on it in the future - this.setFlag('deltagreen', 'DefaultVehicleArmorAdded', true); - - let toAdd = []; // createEmbeddedDocument expects an array + this.setFlag("deltagreen", "DefaultVehicleArmorAdded", true); - let armor = await Item.create({type:"armor", name:"Vehicle Frame"}); + const toAdd = []; // createEmbeddedDocument expects an array + + const armor = await Item.create({ + type: "armor", + name: "Vehicle Frame", + }); // this is the current default, but set it anyways in case it gets changed later. armor.system.protection = 3; toAdd.push(armor); - - // create the item on the actor - let newItems = await this.createEmbeddedDocuments("Item", toAdd); - - for(let item of newItems){ - await item.setFlag('deltagreen','AutoAdded', true); - } + // create the item on the actor + const newItems = await this.createEmbeddedDocuments("Item", toAdd); + + for (const item of newItems) { + await item.setFlag("deltagreen", "AutoAdded", true); + } } - } - catch(ex){ + } catch (ex) { console.log(ex); } } - -} \ No newline at end of file +} diff --git a/module/deltagreen.js b/module/deltagreen.js index 4159a63..f076a2a 100644 --- a/module/deltagreen.js +++ b/module/deltagreen.js @@ -1,25 +1,30 @@ -/* globals $ Hooks game CONFIG Actors Items ActorSheet ItemSheet Handlebars Macro ChatMessage ui duplicate */ +/* globals $ Hooks game CONFIG Actors Items ActorSheet ItemSheet duplicate */ // Import Modules -import { DeltaGreenActor } from "./actor/actor.js"; -import { DeltaGreenActorSheet } from "./actor/actor-sheet.js"; -import { DeltaGreenItem } from "./item/item.js"; -import { DeltaGreenItemSheet } from "./item/item-sheet.js"; +import DeltaGreenActor from "./actor/actor.js"; +import DeltaGreenActorSheet from "./actor/actor-sheet.js"; +import DeltaGreenItem from "./item/item.js"; +import DeltaGreenItemSheet from "./item/item-sheet.js"; import * as DGRolls from "./roll/roll.js"; -import { registerSystemSettings } from "./settings.js" -import { preloadHandlebarsTemplates } from "./templates.js"; -import { ParseDeltaGreenStatBlock } from "./other/stat-parser-macro.js"; -import DGUtils from "./other/utility-functions.js"; - -Hooks.once('init', async function() { +import registerSystemSettings from "./settings.js"; +import preloadHandlebarsTemplates from "./templates.js"; +import registerHandlebarsHelpers from "./other/register-helpers.js"; +import ParseDeltaGreenStatBlock from "./other/stat-parser-macro.js"; +import { + createDeltaGreenMacro, + rollItemMacro, + rollItemSkillCheckMacro, + rollSkillMacro, +} from "./other/macro-functions.js"; +Hooks.once("init", async () => { game.deltagreen = { DeltaGreenActor, DeltaGreenItem, rollItemMacro, rollItemSkillCheckMacro, rollSkillMacro, - ParseDeltaGreenStatBlock + ParseDeltaGreenStatBlock, }; /** @@ -28,11 +33,11 @@ Hooks.once('init', async function() { */ CONFIG.Combat.initiative = { formula: "@statistics.dex.value", - decimals: 0 + decimals: 0, }; // Register custom dice rolls - Object.values(DGRolls).forEach((cls) => CONFIG.Dice.rolls.push(cls)) + Object.values(DGRolls).forEach((cls) => CONFIG.Dice.rolls.push(cls)); // Register System Settings registerSystemSettings(); @@ -44,498 +49,86 @@ Hooks.once('init', async function() { // Register sheet application classes Actors.unregisterSheet("core", ActorSheet); Items.unregisterSheet("core", ItemSheet); - Actors.registerSheet("deltagreen", DeltaGreenActorSheet, { makeDefault: true }); + Actors.registerSheet("deltagreen", DeltaGreenActorSheet, { + makeDefault: true, + }); Items.registerSheet("deltagreen", DeltaGreenItemSheet, { makeDefault: true }); - + // Preload Handlebars Templates preloadHandlebarsTemplates(); // Add Handlebars helpers - Handlebars.registerHelper('localizeWithFallback', function(value, fallbackValue) { - return DGUtils.localizeWithFallback(value, fallbackValue); - }); - - Handlebars.registerHelper('concat', function() { - var outStr = ''; - for (var arg in arguments) { - if (typeof arguments[arg] != 'object') { - outStr += arguments[arg]; - } - } - return outStr; - }); - - Handlebars.registerHelper('toLowerCase', function(str) { - try { - return str.toLowerCase(); - } catch (error) { - return ""; - } - }); - - Handlebars.registerHelper('toUpperCase', function(str) { - try { - return str.toUpperCase(); - } catch (error) { - return ""; - } - }); - - Handlebars.registerHelper('if_eq', function(a, b, opts) { - if (a == b) { - return opts.fn(this); - } else { - return opts.inverse(this); - } - }); - - Handlebars.registerHelper('if_not_eq', function(a, b, opts) { - if (a != b) { return opts.fn(this); } - return opts.inverse(this); - }); - - Handlebars.registerHelper('if_gt', function(a, b, trueVal, falseVal) { - if (a > b) { - return trueVal; - } else { - return falseVal; - } - }); - - Handlebars.registerHelper('cite_ahb', function(page) { - return `See page ${page} of the Agent's Handbook.`; - }); - - Handlebars.registerHelper('formatLethality', function(lethality) { - if (lethality > 0) { - return lethality.toString() + "%"; - } - else { - return ""; - } - }); - - - // Is this used anywhere? - Handlebars.registerHelper('getActorSkillProp', function(actorData, skillName, prop) { - try{ - if(skillName != "" && prop != ""){ - let skills = actorData.data.skills; - let skill = skills[skillName]; - let propVal = skill[prop]; - return propVal; - } - else{ - return ""; - } - } - catch(ex){ - console.log(ex); - return ""; - } - - }); - - Handlebars.registerHelper('getAvailableRollModes', function() { - try { - return CONFIG.Dice.rollModes; - } catch (error) { - console.log(error); - } - }); - - Handlebars.registerHelper('getDefaultRollMode', function() { - try { - return game.settings.get("core", "rollMode"); - } catch (error) { - console.log(error); - } - }); - - Handlebars.registerHelper('calculateHandToHandCombatDamageFormulaBonus', function(strength) { - try { - let bonus = ""; - - if(strength.value < 5){ - bonus = " - 2"; - } - else if(strength.value < 9){ - bonus = " - 1"; - } - else if(strength.value > 12 && strength < 17){ - bonus = " + 1"; - } - else if(strength.value > 16){ - bonus = " + 2"; - } - - return bonus; - - } catch (error) { - console.log(error); - } - }); - - Handlebars.registerHelper('localizeWeaponSkill', function(skill) { - let label = skill; - - try { - - if(skill === 'dex'){ - label = game.i18n.localize("DG.Attributes.dex"); - } - if(skill === 'DG.Skills.custom'){ - label = game.i18n.localize('DG.ItemWindow.Custom'); - } - else{ - label = game.i18n.localize("DG.Skills." + skill); - } - } catch (error) { - console.log(error); - } - - return label; - }); - - Handlebars.registerHelper('hideSkillBasedOnProficiencyAndUserChoice', function(hideUntrainedSkills, proficiency) { - let showValue = true; - - try { - - if(hideUntrainedSkills === false){ - showValue = true; - } - else{ - if(proficiency > 0){ - showValue = true; - } - else{ - showValue = false; - } - } - } catch (error) { - console.log(error); - } - - return showValue; - - }); - - // looks at system setting for what font to use and returns the class that is then used in the handlebars template that - // generates the character sheet. - Handlebars.registerHelper('getFontFamilySystemSettingClass', function() { - let setting = game.settings.get("deltagreen", "characterSheetFont"); - - let characterSheetStyle = game.settings.get("deltagreen", "characterSheetStyle"); - - /* - if(setting === "TypeWriterCondensed"){ - return "typewriter-condensed-font"; - } - else if(setting === "Martel"){ - return "martel-font"; - } - else if(setting === "Signika"){ - return "signika-font"; - } - else if(setting === "atwriter"){ - return "atwriter-font"; - } - else if(setting === "SpecialElite"){ - return "special-elite-font"; - } - else if(setting === "PublicSans"){ - return "public-sans-font"; - } - else{ - return "martel-font"; - } - */ - - /* - if(characterSheetStyle === "cowboy"){ - return "special-elite-font"; - } - else{ - return "public-sans-font"; - } - */ - }); - - Handlebars.registerHelper('getCharacterSheetStyle', function() { - - let characterSheetStyle = game.settings.get("deltagreen", "characterSheetStyle"); - - if(characterSheetStyle === "cowboy"){ - return "cowboy-style"; - } - else if(characterSheetStyle === "outlaw"){ - return "outlaw-style"; - } - else{ - return "program-style"; - } - - }); - - Handlebars.registerHelper('keepSanityPrivate', function() { - - let setting = false; - - try{ - setting = game.settings.get("deltagreen", "keepSanityPrivate"); - - if(game.user.isGM){ - setting = false; - } - - } - catch(ex){ - setting = false; - } - - return setting; - }); + registerHandlebarsHelpers(); }); -Handlebars.registerHelper('playerHasGamemasterPrivileges', function(){ - return game.user.isGM; -}); - -Handlebars.registerHelper('showImpossibleLandscapesContent', function() { - - let result = false; - let setting = game.settings.get("deltagreen", "showImpossibleLandscapesContent"); - - if(game.user.isGM === true && setting === true){ - result = true; - } - - return result -}); - -Hooks.once("ready", async function() { +Hooks.once("ready", async () => { // Wait to register hotbar drop hook on ready so that modules could register earlier if they want to - Hooks.on("hotbarDrop", (bar, data, slot) => createDeltaGreenMacro(data, slot)); -}); - -Hooks.on("ready", ()=> { - - //let backgroundImageSetting = game.settings.get("deltagreen", "characterSheetBackgroundImageSetting"); - //let characterSheetStyle = game.settings.get("deltagreen", "characterSheetStyle"); - - //let customCss = ""; - - //let customStyle = document.createElement("style"); - //customStyle.id = "dg-custom-css"; - - /* - if(backgroundImageSetting === "OldPaper1"){ - customCss += `div.deltagreen.sheet.actor section.window-content{ - background: url("systems/deltagreen/assets/img/old_paper.jpg") !important; - }`; - } - else if(backgroundImageSetting === "IvoryPaper"){ - customCss += `div.deltagreen.sheet.actor section.window-content{ - background-size: 100% !important; - }`; - } - */ - - /* - if(characterSheetStyle === "cowboy"){ - customCss += `div.deltagreen.sheet.actor section.window-content{ - background: url("systems/deltagreen/assets/img/old_paper.jpg") !important; - }`; - } - else if(characterSheetStyle === "program"){ - customCss += `div.deltagreen.sheet.actor section.window-content{ - background: url("systems/deltagreen/assets/img/CrumpledPlainPaper10.webp") !important; - }`; - } - - customStyle.innerHTML = customCss; - - if(customCss != ""){ - //document.querySelector("head").appendChild(customStyle); - } - */ - + Hooks.on("hotbarDrop", (bar, data, slot) => + createDeltaGreenMacro(data, slot), + ); }); Hooks.on("preCreateItem", (item) => { - console.log("preCreateItem"); - console.log(item.img); - console.log(item.type); - - if(item.img === 'icons/svg/item-bag.svg'){ - - if(item.type === 'bond'){ - item.updateSource({ img: 'systems/deltagreen/assets/icons/person-black-bg.svg'}); - } - else{ - item.updateSource({ img: 'systems/deltagreen/assets/icons/swap-bag-black-bg.svg'}); + if (item.img === "icons/svg/item-bag.svg") { + if (item.type === "bond") { + item.updateSource({ + img: "systems/deltagreen/assets/icons/person-black-bg.svg", + }); + } else { + item.updateSource({ + img: "systems/deltagreen/assets/icons/swap-bag-black-bg.svg", + }); } } - }); Hooks.on("renderSidebarTab", async (app, html) => { - if (app.options.id == "actors") { - let button = $("") + if (app.options.id === "actors") { + const button = $( + "", + ); - button.click(function () { - ParseDeltaGreenStatBlock() + button.click(() => { + ParseDeltaGreenStatBlock(); }); html.find(".directory-footer").append(button); } -}) +}); // Note - this event is fired on ALL connected clients... -Hooks.on('createActor', async function(actor, options, userId){ - try{ - +Hooks.on("createActor", async (actor, options, userId) => { + try { // use this to trap on if this hook is firing for the same user that triggered the create // can put logic specific to a particular user session below if (userId !== game.user.id) return; - if (actor !== null){ - - if(actor.type === 'agent'){ + if (actor !== null) { + if (actor.type === "agent") { // update the default type skill of Art - Painting's labels to try to be localized // since I really backed myself into a corner on this with my implementation of it... - console.log('createActor Hook'); + console.log("createActor Hook"); - let artLabel = game.i18n.translations.DG?.TypeSkills?.Art ?? "Art"; - let paintingLabel = game.i18n.translations.DG?.TypeSkills?.Subskills?.Painting ?? "Painting"; + const artLabel = game.i18n.translations.DG?.TypeSkills?.Art ?? "Art"; + const paintingLabel = + game.i18n.translations.DG?.TypeSkills?.Subskills?.Painting ?? + "Painting"; - let updatedData = duplicate(actor.system); + const updatedData = duplicate(actor.system); updatedData.typedSkills.tskill_01.group = artLabel; updatedData.typedSkills.tskill_01.label = paintingLabel; - - actor.update({"data": updatedData}); - + + actor.update({ data: updatedData }); + // throw on an unarmed strike item for convenience actor.AddUnarmedAttackItemIfMissing(); - } - else if(actor.type === 'unnatural'){ + } else if (actor.type === "unnatural") { // Do nothing. - } - else if(actor.type === 'vehicle'){ + } else if (actor.type === "vehicle") { actor.AddBaseVehicleItemsIfMissing(); } - } - - } - catch(ex){ + } catch (ex) { console.log(ex); } }); - -/* -------------------------------------------- */ -/* Hotbar Macros */ -/* -------------------------------------------- */ - -/** - * Create a Macro from an Item drop. - * Get an existing item macro if one exists, otherwise create a new one. - * @param {Object} data The dropped data - * @param {number} slot The hotbar slot to use - * @returns {Promise} - */ -async function createDeltaGreenMacro(data, slot) { - // Definitely should not be doing assignments in conditionals but if we fix this, it breaks macro creation. - // eslint-disable-next-line no-cond-assign - if (data.type = "Item" && data.itemData.type !== "weapon") return; - //if (!("data" in data)) return ui.notifications.warn("You can only create macro buttons for owned Items"); - const item = data.itemData; - - // Create the macro command - let command = '// Uncomment line below to also roll skill check if desired.' - command += '\n' + `//game.deltagreen.rollItemSkillCheckMacro("${item._id}");`; - command += '\n' + `game.deltagreen.rollItemMacro("${item._id}");`; - - //let macro = game.macros.entities.find(m => (m.name === data.name) && (m.command === command)); - //if (!macro) { - let macro = await Macro.create({ - name: data.itemData.name, - type: "script", - img: data.itemData.img, - command: command, - flags: { "deltagreen.itemMacro": true } - }); - //} - - game.user.assignHotbarMacro(macro, slot); - return false; -} - -/** - * Create a Macro from an Item drop. - * Get an existing item macro if one exists, otherwise create a new one. - * @param {string} itemName - * @return {Promise} - */ -async function rollItemMacro(itemId) { - const speaker = ChatMessage.getSpeaker(); - let actor; - if (speaker.token) actor = game.actors.tokens[speaker.token]; - if (!actor) actor = game.actors.get(speaker.actor); - - if(!actor) return ui.notifications.warn('Must have an Actor selected first.'); - - let item = actor ? actor.items.find(i => i._id === itemId) : null; - - // for backwards compatibility with older macros, where I unwisely set it to use name instead of id - if(!item){ - item = actor ? actor.items.find(i => i.name === itemId) : null; - } - - if (!item) return ui.notifications.warn(`Your controlled Actor does not have an item named ${itemId}`); - - // Trigger the item roll - const r = await item.roll(); - - return r; -} - -function rollItemSkillCheckMacro(itemId) { - const speaker = ChatMessage.getSpeaker(); - let actor; - if (speaker.token) actor = game.actors.tokens[speaker.token]; - if (!actor) actor = game.actors.get(speaker.actor); - - if (!actor) return ui.notifications.warn('Must have an Actor selected first.'); - - let item = actor ? actor.items.find(i => i._id === itemId) : null; - - // for backwards compatibility with older macros, where I unwisely set it to use name instead of id - if(!item){ - item = actor ? actor.items.find(i => i.name === itemId) : null; - } - - if (!item) return ui.notifications.warn(`Your controlled Actor does not have an item '${item.name}'`); - - let skillName = item.system.skill.toString(); - - const roll = new DGRolls.DGPercentileRoll("1D100", {}, { rollType: "weapon", key: skillName, actor, item }); - return actor.sheet.processRoll({}, roll)} - -function rollSkillMacro(skillName) { - const speaker = ChatMessage.getSpeaker(); - let actor; - if (speaker.token) actor = game.actors.tokens[speaker.token]; - if (!actor) actor = game.actors.get(speaker.actor); - - if(!actor) return ui.notifications.warn('Must have an Actor selected first.'); - - let skill = actor.system.skills[skillName]; - - if(!skill) return ui.notifications.warn('Bad skill name passed to macro.'); - - const roll = new DGRolls.DGPercentileRoll("1D100", {}, { rollType: "skill", key: skillName, actor }); - actor.sheet.processRoll({}, roll) - // sendPercentileTestToChat(actor, translatedSkillLabel, skill.proficiency); -} \ No newline at end of file diff --git a/module/item/item-sheet.js b/module/item/item-sheet.js index 9cab3bd..84d0207 100644 --- a/module/item/item-sheet.js +++ b/module/item/item-sheet.js @@ -1,23 +1,30 @@ +/* global ItemSheet mergeObject TextEditor */ + /** * Extend the basic ItemSheet with some very simple modifications * @extends {ItemSheet} */ -export class DeltaGreenItemSheet extends ItemSheet { - +export default class DeltaGreenItemSheet extends ItemSheet { /** @override */ static get defaultOptions() { return mergeObject(super.defaultOptions, { classes: ["deltagreen", "sheet", "item"], width: 520, height: 600, - tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "attributes" }] + tabs: [ + { + navSelector: ".sheet-tabs", + contentSelector: ".sheet-body", + initial: "attributes", + }, + ], }); } /** @override */ get template() { const path = "systems/deltagreen/templates/item"; - + // unique item sheet by type, like `weapon-sheet.html`. return `${path}/item-${this.item.type}-sheet.html`; } @@ -27,7 +34,10 @@ export class DeltaGreenItemSheet extends ItemSheet { /** @override */ async getData() { const data = super.getData(); - data.enrichedDescription = await TextEditor.enrichHTML(this.object.system.description, {async: true}); + data.enrichedDescription = await TextEditor.enrichHTML( + this.object.system.description, + { async: true }, + ); return data; } @@ -49,6 +59,7 @@ export class DeltaGreenItemSheet extends ItemSheet { super.activateListeners(html); // Everything below here is only needed if the sheet is editable + // eslint-disable-next-line no-useless-return if (!this.options.editable) return; // Roll handlers, click handlers, etc. would go here. diff --git a/module/item/item.js b/module/item/item.js index 19cbed3..740d577 100644 --- a/module/item/item.js +++ b/module/item/item.js @@ -6,7 +6,7 @@ import { DGDamageRoll, DGLethalityRoll } from "../roll/roll.js"; * Extend the basic Item with some very simple modifications. * @extends {Item} */ -export class DeltaGreenItem extends Item { +export default class DeltaGreenItem extends Item { /** * Augment the basic Item data model with additional dynamic data. */ @@ -16,7 +16,7 @@ export class DeltaGreenItem extends Item { // Get the Item's data const itemData = this; const actorData = this.actor || {}; - const system = itemData.system; + const { system } = itemData; } /** @@ -32,17 +32,25 @@ export class DeltaGreenItem extends Item { let roll; if (item.system.isLethal) { - roll = new DGLethalityRoll("1D100", {}, { rollType: "lethality", actor, item }) + roll = new DGLethalityRoll( + "1D100", + {}, + { rollType: "lethality", actor, item }, + ); } else { // regular damage roll let diceFormula = item.system.damage; - let skillType = item.system.skill; + const skillType = item.system.skill; - if (skillType === 'unarmed_combat' || skillType === 'melee_weapons') { + if (skillType === "unarmed_combat" || skillType === "melee_weapons") { diceFormula += actorSystemData.statistics.str.meleeDamageBonusFormula; } - roll = new DGDamageRoll(diceFormula, {}, { rollType: "damage", actor, item }) + roll = new DGDamageRoll( + diceFormula, + {}, + { rollType: "damage", actor, item }, + ); } return actor.sheet.processRoll({}, roll); } diff --git a/module/other/macro-functions.js b/module/other/macro-functions.js new file mode 100644 index 0000000..b488615 --- /dev/null +++ b/module/other/macro-functions.js @@ -0,0 +1,126 @@ +/* global game Macro ChatMessage ui */ + +import * as DGRolls from "../roll/roll.js"; + +/* -------------------------------------------- */ +/* Hotbar Macros */ +/* -------------------------------------------- */ + +/** + * Create a Macro from an Item drop. + * Get an existing item macro if one exists, otherwise create a new one. + * @param {Object} data The dropped data + * @param {number} slot The hotbar slot to use + * @returns {Promise} + */ +export async function createDeltaGreenMacro(data, slot) { + // Definitely should not be doing assignments in conditionals but if we fix this, it breaks macro creation. + // eslint-disable-next-line no-cond-assign + if ((data.type = "Item" && data.itemData.type !== "weapon")) return; + // if (!("data" in data)) return ui.notifications.warn("You can only create macro buttons for owned Items"); + const item = data.itemData; + + // Create the macro command + let command = "// Uncomment line below to also roll skill check if desired."; + command += `\n//game.deltagreen.rollItemSkillCheckMacro("${item._id}");`; + command += `\ngame.deltagreen.rollItemMacro("${item._id}");`; + + // let macro = game.macros.entities.find(m => (m.name === data.name) && (m.command === command)); + // if (!macro) { + const macro = await Macro.create({ + name: data.itemData.name, + type: "script", + img: data.itemData.img, + command, + flags: { "deltagreen.itemMacro": true }, + }); + // } + + game.user.assignHotbarMacro(macro, slot); +} + +/** + * Create a Macro from an Item drop. + * Get an existing item macro if one exists, otherwise create a new one. + * @param {string} itemName + * @return {Promise} + */ +export async function rollItemMacro(itemId) { + const speaker = ChatMessage.getSpeaker(); + let actor; + if (speaker.token) actor = game.actors.tokens[speaker.token]; + if (!actor) actor = game.actors.get(speaker.actor); + + if (!actor) + return ui.notifications.warn("Must have an Actor selected first."); + + let item = actor ? actor.items.find((i) => i._id === itemId) : null; + + // for backwards compatibility with older macros, where I unwisely set it to use name instead of id + if (!item) { + item = actor ? actor.items.find((i) => i.name === itemId) : null; + } + + if (!item) + return ui.notifications.warn( + `Your controlled Actor does not have an item named ${itemId}`, + ); + + // Trigger the item roll + const r = await item.roll(); + + return r; +} + +export function rollItemSkillCheckMacro(itemId) { + const speaker = ChatMessage.getSpeaker(); + let actor; + if (speaker.token) actor = game.actors.tokens[speaker.token]; + if (!actor) actor = game.actors.get(speaker.actor); + + if (!actor) + return ui.notifications.warn("Must have an Actor selected first."); + + let item = actor ? actor.items.find((i) => i._id === itemId) : null; + + // for backwards compatibility with older macros, where I unwisely set it to use name instead of id + if (!item) { + item = actor ? actor.items.find((i) => i.name === itemId) : null; + } + + if (!item) + return ui.notifications.warn( + `Your controlled Actor does not have an item '${item.name}'`, + ); + + const skillName = item.system.skill.toString(); + + const roll = new DGRolls.DGPercentileRoll( + "1D100", + {}, + { rollType: "weapon", key: skillName, actor, item }, + ); + return actor.sheet.processRoll({}, roll); +} + +export function rollSkillMacro(skillName) { + const speaker = ChatMessage.getSpeaker(); + let actor; + if (speaker.token) actor = game.actors.tokens[speaker.token]; + if (!actor) actor = game.actors.get(speaker.actor); + + if (!actor) + return ui.notifications.warn("Must have an Actor selected first."); + + const skill = actor.system.skills[skillName]; + + if (!skill) return ui.notifications.warn("Bad skill name passed to macro."); + + const roll = new DGRolls.DGPercentileRoll( + "1D100", + {}, + { rollType: "skill", key: skillName, actor }, + ); + return actor.sheet.processRoll({}, roll); + // sendPercentileTestToChat(actor, translatedSkillLabel, skill.proficiency); +} diff --git a/module/other/register-helpers.js b/module/other/register-helpers.js new file mode 100644 index 0000000..02f3775 --- /dev/null +++ b/module/other/register-helpers.js @@ -0,0 +1,259 @@ +/* global Handlebars CONFIG game */ + +import DGUtils from "./utility-functions.js"; + +export default function registerHandlebarsHelpers() { + // Add Handlebars helpers + Handlebars.registerHelper("localizeWithFallback", (value, fallbackValue) => { + return DGUtils.localizeWithFallback(value, fallbackValue); + }); + + Handlebars.registerHelper("concat", (...args) => { + let outStr = ""; + for (const arg in args) { + if (typeof args[arg] !== "object") { + outStr += args[arg]; + } + } + return outStr; + }); + + Handlebars.registerHelper("toLowerCase", (str) => { + try { + return str.toLowerCase(); + } catch (error) { + return ""; + } + }); + + Handlebars.registerHelper("toUpperCase", (str) => { + try { + return str.toUpperCase(); + } catch (error) { + return ""; + } + }); + + Handlebars.registerHelper("if_eq", (a, b, opts) => { + if (a === b) { + return opts.fn(this); + } + return opts.inverse(this); + }); + + Handlebars.registerHelper("if_not_eq", (a, b, opts) => { + if (a !== b) { + return opts.fn(this); + } + return opts.inverse(this); + }); + + Handlebars.registerHelper("if_gt", (a, b, trueVal, falseVal) => { + if (a > b) { + return trueVal; + } + return falseVal; + }); + + Handlebars.registerHelper("cite_ahb", (page) => { + return `See page ${page} of the Agent's Handbook.`; + }); + + Handlebars.registerHelper("formatLethality", (lethality) => { + if (lethality > 0) { + return `${lethality.toString()}%`; + } + return ""; + }); + + // Is this used anywhere? + Handlebars.registerHelper( + "getActorSkillProp", + (actorData, skillName, prop) => { + try { + if (skillName !== "" && prop !== "") { + const { skills } = actorData.data; + const skill = skills[skillName]; + const propVal = skill[prop]; + return propVal; + } + return ""; + } catch (ex) { + console.log(ex); + return ""; + } + }, + ); + + Handlebars.registerHelper("getAvailableRollModes", () => { + try { + return CONFIG.Dice.rollModes; + } catch (error) { + return console.log(error); + } + }); + + Handlebars.registerHelper("getDefaultRollMode", () => { + try { + return game.settings.get("core", "rollMode"); + } catch (error) { + return console.log(error); + } + }); + + Handlebars.registerHelper( + "calculateHandToHandCombatDamageFormulaBonus", + (strength) => { + try { + let bonus = ""; + + if (strength.value < 5) { + bonus = " - 2"; + } else if (strength.value < 9) { + bonus = " - 1"; + } else if (strength.value > 12 && strength < 17) { + bonus = " + 1"; + } else if (strength.value > 16) { + bonus = " + 2"; + } + + return bonus; + } catch (error) { + return console.log(error); + } + }, + ); + + Handlebars.registerHelper("localizeWeaponSkill", (skill) => { + let label = skill; + + try { + if (skill === "dex") { + label = game.i18n.localize("DG.Attributes.dex"); + } + if (skill === "DG.Skills.custom") { + label = game.i18n.localize("DG.ItemWindow.Custom"); + } else { + label = game.i18n.localize(`DG.Skills.${skill}`); + } + } catch (error) { + console.log(error); + } + + return label; + }); + + Handlebars.registerHelper( + "hideSkillBasedOnProficiencyAndUserChoice", + (hideUntrainedSkills, proficiency) => { + let showValue = true; + + try { + if (hideUntrainedSkills === false) { + showValue = true; + } else if (proficiency > 0) { + showValue = true; + } else { + showValue = false; + } + } catch (error) { + console.log(error); + } + + return showValue; + }, + ); + + // looks at system setting for what font to use and returns the class that is then used in the handlebars template that + // generates the character sheet. + Handlebars.registerHelper("getFontFamilySystemSettingClass", () => { + const setting = game.settings.get("deltagreen", "characterSheetFont"); + + const characterSheetStyle = game.settings.get( + "deltagreen", + "characterSheetStyle", + ); + + /* + if(setting === "TypeWriterCondensed"){ + return "typewriter-condensed-font"; + } + else if(setting === "Martel"){ + return "martel-font"; + } + else if(setting === "Signika"){ + return "signika-font"; + } + else if(setting === "atwriter"){ + return "atwriter-font"; + } + else if(setting === "SpecialElite"){ + return "special-elite-font"; + } + else if(setting === "PublicSans"){ + return "public-sans-font"; + } + else{ + return "martel-font"; + } + */ + + /* + if(characterSheetStyle === "cowboy"){ + return "special-elite-font"; + } + else{ + return "public-sans-font"; + } + */ + }); + + Handlebars.registerHelper("getCharacterSheetStyle", () => { + const characterSheetStyle = game.settings.get( + "deltagreen", + "characterSheetStyle", + ); + + if (characterSheetStyle === "cowboy") { + return "cowboy-style"; + } + if (characterSheetStyle === "outlaw") { + return "outlaw-style"; + } + return "program-style"; + }); + + Handlebars.registerHelper("keepSanityPrivate", () => { + let setting = false; + + try { + setting = game.settings.get("deltagreen", "keepSanityPrivate"); + + if (game.user.isGM) { + setting = false; + } + } catch (ex) { + setting = false; + } + + return setting; + }); + + Handlebars.registerHelper("playerHasGamemasterPrivileges", () => { + return game.user.isGM; + }); + + Handlebars.registerHelper("showImpossibleLandscapesContent", () => { + let result = false; + const setting = game.settings.get( + "deltagreen", + "showImpossibleLandscapesContent", + ); + + if (game.user.isGM === true && setting === true) { + result = true; + } + + return result; + }); +} diff --git a/module/other/stat-parser-macro.js b/module/other/stat-parser-macro.js index cfb2633..c2b2161 100644 --- a/module/other/stat-parser-macro.js +++ b/module/other/stat-parser-macro.js @@ -1,185 +1,376 @@ +/* global Dialog Actor */ + // call this within a world as: game.deltagreen.ParseDeltaGreenStatBlock() -function GetTypeSkillRatingsFromInput(inputText){ - - let matchStr = "(Art|Craft|Foreign Language|Native Language|Military Science|Pilot|Science)\\s?\\((\\w.*?)\\)\\s?(\\d?\\d)%"; +function GetTypeSkillRatingsFromInput(inputText) { + const matchStr = + "(Art|Craft|Foreign Language|Native Language|Military Science|Pilot|Science)\\s?\\((\\w.*?)\\)\\s?(\\d?\\d)%"; - inputText = inputText.replace(/[\n\r]/g, ' ') + inputText = inputText.replace(/[\n\r]/g, " "); - let re = new RegExp(matchStr, "gi"); - - let matches = []; - let match; - - try{ - while(match = re.exec(inputText)){ - matches.push({group: match[1], label: match[2], proficiency: parseInt(match[3]), failure: false}); - } + const re = new RegExp(matchStr, "gi"); + + const matches = []; + let match; + + try { + // This is probably one of the few times where its recommended to assign within a while loop. + // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec + // eslint-disable-next-line no-cond-assign + while ((match = re.exec(inputText))) { + matches.push({ + group: match[1], + label: match[2], + proficiency: parseInt(match[3]), + failure: false, + }); } - catch(ex){ - console.log('GetAttributeFromInput Error'); - console.log(ex); - } - - return matches; + } catch (ex) { + console.log("GetAttributeFromInput Error"); + console.log(ex); + } + + return matches; } -function GetAttributeFromInput(inputText, attribute){ - - let matchStr = "(?:" + attribute + "\\s)(\\d\\d?)"; - let re = new RegExp(matchStr, "i"); - let results = inputText.match(re); - let attributeScore = 10; - - try{ - if(results != null && results.length > 1){ - attributeScore = parseInt(results[1]); - } - else{ - attributeScore = 0; - } +function GetAttributeFromInput(inputText, attribute) { + const matchStr = `(?:${attribute}\\s)(\\d\\d?)`; + const re = new RegExp(matchStr, "i"); + const results = inputText.match(re); + let attributeScore = 10; + + try { + if (results != null && results.length > 1) { + attributeScore = parseInt(results[1]); + } else { + attributeScore = 0; } - catch(ex){ - console.log('GetAttributeFromInput Error'); - console.log(ex); - } - - return attributeScore; + } catch (ex) { + console.log("GetAttributeFromInput Error"); + console.log(ex); + } + + return attributeScore; } -function GetSkillRatingsFromInput(inputText, skill){ - - let matchStr = "(?:" + skill + "\\s)(\\d\\d?)"; - let re = new RegExp(matchStr, "i"); - let results = inputText.match(re); - let skillValue = 0; - - try{ - if(results != null && results.length > 1){ - skillValue = parseInt(results[1]); - } +function GetSkillRatingsFromInput(inputText, skill) { + const matchStr = `(?:${skill}\\s)(\\d\\d?)`; + const re = new RegExp(matchStr, "i"); + const results = inputText.match(re); + let skillValue = 0; + + try { + if (results != null && results.length > 1) { + skillValue = parseInt(results[1]); } - catch(ex){ - console.log('GetAttributeFromInput Error'); - console.log(ex); - } - - return skillValue; + } catch (ex) { + console.log("GetAttributeFromInput Error"); + console.log(ex); + } + + return skillValue; } -async function RegexParseNpcStatBlock(inputStr, actorType){ - let actorData = {}; +async function RegexParseNpcStatBlock(inputStr, actorType) { + const actorData = {}; - let shortDescription = ""; - - actorData.type = actorType; - actorData.data = {}; - actorData.data.statistics = {}; - actorData.data.skills = {}; - actorData.data.typedSkills = {}; - actorData.data.physical = {}; + let shortDescription = ""; - actorData.data.health = {value: 10, min: 0, max: 10}; - actorData.data.wp = {value: 10, min: 0, max: 10}; - - let tempStr = ""; - let arr = []; - - tempStr = inputStr.split(/\r?\n/); - - if(tempStr.length > 1){ - actorData.name = tempStr[0]; - shortDescription = tempStr[1]; - } - else{ - actorData.name = "Unknown"; - } + actorData.type = actorType; + actorData.data = {}; + actorData.data.statistics = {}; + actorData.data.skills = {}; + actorData.data.typedSkills = {}; + actorData.data.physical = {}; - if(actorType === 'agent'){ - actorData.data.physical = {description: shortDescription, wounds: "", firstAidAttempted: false} - } - else if(actorType === 'npc' || actorType === 'unnatural'){ - actorData.data.shortDescription = shortDescription; - } - - actorData.data.statistics.str = {value: GetAttributeFromInput(inputStr, "STR"), distinguishing_feature: ""}; - actorData.data.statistics.con = {value: GetAttributeFromInput(inputStr, "CON"), distinguishing_feature: ""}; - actorData.data.statistics.dex = {value: GetAttributeFromInput(inputStr, "DEX"), distinguishing_feature: ""}; - actorData.data.statistics.int = {value: GetAttributeFromInput(inputStr, "INT"), distinguishing_feature: ""}; - actorData.data.statistics.pow = {value: GetAttributeFromInput(inputStr, "POW"), distinguishing_feature: ""}; - actorData.data.statistics.cha = {value: GetAttributeFromInput(inputStr, "CHA"), distinguishing_feature: ""}; + actorData.data.health = { value: 10, min: 0, max: 10 }; + actorData.data.wp = { value: 10, min: 0, max: 10 }; - if(actorType === 'npc' || actorType === 'unnatural'){ - // don't want to try to set HP/SAN for player characters - actorData.data.health = {min: 0, max: GetAttributeFromInput(inputStr, "HP"), value: GetAttributeFromInput(inputStr, "HP")}; - actorData.data.sanity = {max: actorData.data.statistics.pow.value * 5, value: GetAttributeFromInput(inputStr, "SAN"), currentBreakingPoint: GetAttributeFromInput(inputStr, "BREAKING POINT")}; - actorData.data.wp = {max: actorData.data.statistics.pow.value, value: GetAttributeFromInput(inputStr, "WP"), min: 0}; - } + let tempStr = ""; + let arr = []; - actorData.data.skills.accounting = {"label": "Accounting", proficiency: GetSkillRatingsFromInput(inputStr, "ACCOUNTING"), failure: false}; - actorData.data.skills.alertness = {"label": "Alertness", proficiency: GetSkillRatingsFromInput(inputStr, "ALERTNESS"), failure: false}; - actorData.data.skills.anthropology = {"label": "Anthropology", proficiency: GetSkillRatingsFromInput(inputStr, "ANTHROPOLOGY"), failure: false}; - actorData.data.skills.archeology = {"label": "Archeology", proficiency: GetSkillRatingsFromInput(inputStr, "ARCHEOLOGY|ARCHAEOLOGY"), failure: false}; // damn you british spellings - actorData.data.skills.artillery = {"label": "Artillery", proficiency: GetSkillRatingsFromInput(inputStr, "ARTILLERY"), failure: false}; - actorData.data.skills.athletics = {"label": "Athletics", proficiency: GetSkillRatingsFromInput(inputStr, "ATHLETICS"), failure: false}; - actorData.data.skills.bureaucracy = {"label": "Bureaucracy", proficiency: GetSkillRatingsFromInput(inputStr, "BUREAUCRACY"), failure: false}; - actorData.data.skills.computer_science = {"label": "Computer Science", proficiency: GetSkillRatingsFromInput(inputStr, "COMPUTER SCIENCE"), failure: false}; - actorData.data.skills.criminology = {"label": "Criminology", proficiency: GetSkillRatingsFromInput(inputStr, "CRIMINOLOGY"), failure: false}; - actorData.data.skills.demolitions = {"label": "Demolitions", proficiency: GetSkillRatingsFromInput(inputStr, "DEMOLITIONS"), failure: false}; - actorData.data.skills.disguise = {"label": "Disguise", proficiency: GetSkillRatingsFromInput(inputStr, "DISGUISE"), failure: false}; - actorData.data.skills.dodge = {"label": "Dodge", proficiency: GetSkillRatingsFromInput(inputStr, "DODGE"), failure: false}; - actorData.data.skills.drive = {"label": "Drive", proficiency: GetSkillRatingsFromInput(inputStr, "DRIVE"), failure: false}; + tempStr = inputStr.split(/\r?\n/); - // Impossible Landscapes seems to favor 'Driving' as the name for this instead for some - if(actorData.data.skills.drive.proficiency === 0){ - actorData.data.skills.drive = {"label": "Drive", proficiency: GetSkillRatingsFromInput(inputStr, "DRIVING"), failure: false}; - } + if (tempStr.length > 1) { + [actorData.name, shortDescription] = tempStr; + } else { + actorData.name = "Unknown"; + } - actorData.data.skills.firearms = {"label": "Firearms", proficiency: GetSkillRatingsFromInput(inputStr, "FIREARMS"), failure: false}; - actorData.data.skills.first_aid = {"label": "First Adi", proficiency: GetSkillRatingsFromInput(inputStr, "FIRST AID"), failure: false}; - actorData.data.skills.forensics = {"label": "Forensics", proficiency: GetSkillRatingsFromInput(inputStr, "FORENSICS"), failure: false}; - actorData.data.skills.heavy_machinery = {"label": "Heavy Machinery", proficiency: GetSkillRatingsFromInput(inputStr, "HEAVY MACHINERY"), failure: false}; // template.json has typo on heavy machinery... - actorData.data.skills.heavy_weapons = {"label": "Heavy Weapons", proficiency: GetSkillRatingsFromInput(inputStr, "HEAVY WEAPONS"), failure: false}; - actorData.data.skills.history = {"label": "History", proficiency: GetSkillRatingsFromInput(inputStr, "HISTORY"), failure: false}; - actorData.data.skills.humint = {"label": "HUMINT", proficiency: GetSkillRatingsFromInput(inputStr, "HUMINT"), failure: false}; - actorData.data.skills.law = {"label": "Law", proficiency: GetSkillRatingsFromInput(inputStr, "LAW"), failure: false}; - actorData.data.skills.medicine = {"label": "Medicine", proficiency: GetSkillRatingsFromInput(inputStr, "MEDICINE"), failure: false}; - actorData.data.skills.melee_weapons = {"label": "Melee Weapons", proficiency: GetSkillRatingsFromInput(inputStr, "MELEE WEAPONS"), failure: false}; - actorData.data.skills.navigate = {"label": "Navigate", proficiency: GetSkillRatingsFromInput(inputStr, "NAVIGATE"), failure: false}; - actorData.data.skills.occult = {"label": "Occult", proficiency: GetSkillRatingsFromInput(inputStr, "OCCULT"), failure: false}; - actorData.data.skills.persuade = {"label": "Persuade", proficiency: GetSkillRatingsFromInput(inputStr, "PERSUADE"), failure: false}; - actorData.data.skills.pharmacy = {"label": "Pharmacy", proficiency: GetSkillRatingsFromInput(inputStr, "PHARMACY"), failure: false}; - actorData.data.skills.psychotherapy = {"label": "Psychotherapy", proficiency: GetSkillRatingsFromInput(inputStr, "PSYCHOTHERAPY"), failure: false}; - actorData.data.skills.ride = {"label": "Ride", proficiency: GetSkillRatingsFromInput(inputStr, "RIDE"), failure: false}; - actorData.data.skills.search = {"label": "Search", proficiency: GetSkillRatingsFromInput(inputStr, "SEARCH"), failure: false}; - actorData.data.skills.sigint = {"label": "SIGINT", proficiency: GetSkillRatingsFromInput(inputStr, "SIGINT"), failure: false}; - actorData.data.skills.stealth = {"label": "Stealth", proficiency: GetSkillRatingsFromInput(inputStr, "STEALTH"), failure: false}; - actorData.data.skills.surgery = {"label": "Surgery", proficiency: GetSkillRatingsFromInput(inputStr, "SURGERY"), failure: false}; - actorData.data.skills.survival = {"label": "Survival", proficiency: GetSkillRatingsFromInput(inputStr, "SURVIVAL"), failure: false}; - actorData.data.skills.swim = {"label": "Swim", proficiency: GetSkillRatingsFromInput(inputStr, "SWIM"), failure: false}; - actorData.data.skills.unarmed_combat = {"label": "Unarmed Combat", proficiency: GetSkillRatingsFromInput(inputStr, "UNARMED COMBAT"), failure: false}; - actorData.data.skills.unnatural = {"label": "Unnatural", proficiency: GetSkillRatingsFromInput(inputStr, "UNNATURAL"), failure: false}; + if (actorType === "agent") { + actorData.data.physical = { + description: shortDescription, + wounds: "", + firstAidAttempted: false, + }; + } else if (actorType === "npc" || actorType === "unnatural") { + actorData.data.shortDescription = shortDescription; + } - // some npcs/unnatural have other skills - if(GetSkillRatingsFromInput(inputStr, "FLIGHT") > 0){ - actorData.data.skills.flight = {"label": "Flight", proficiency: GetSkillRatingsFromInput(inputStr, "FLIGHT"), failure: false}; - } - - arr = GetTypeSkillRatingsFromInput(inputStr); + actorData.data.statistics.str = { + value: GetAttributeFromInput(inputStr, "STR"), + distinguishing_feature: "", + }; + actorData.data.statistics.con = { + value: GetAttributeFromInput(inputStr, "CON"), + distinguishing_feature: "", + }; + actorData.data.statistics.dex = { + value: GetAttributeFromInput(inputStr, "DEX"), + distinguishing_feature: "", + }; + actorData.data.statistics.int = { + value: GetAttributeFromInput(inputStr, "INT"), + distinguishing_feature: "", + }; + actorData.data.statistics.pow = { + value: GetAttributeFromInput(inputStr, "POW"), + distinguishing_feature: "", + }; + actorData.data.statistics.cha = { + value: GetAttributeFromInput(inputStr, "CHA"), + distinguishing_feature: "", + }; - for (let index = 0; index < arr.length; ++index) { - const element = arr[index]; - actorData.data.typedSkills['tskill_' + index.toString()] = element; - } - - console.log(actorData); + if (actorType === "npc" || actorType === "unnatural") { + // don't want to try to set HP/SAN for player characters + actorData.data.health = { + min: 0, + max: GetAttributeFromInput(inputStr, "HP"), + value: GetAttributeFromInput(inputStr, "HP"), + }; + actorData.data.sanity = { + max: actorData.data.statistics.pow.value * 5, + value: GetAttributeFromInput(inputStr, "SAN"), + currentBreakingPoint: GetAttributeFromInput(inputStr, "BREAKING POINT"), + }; + actorData.data.wp = { + max: actorData.data.statistics.pow.value, + value: GetAttributeFromInput(inputStr, "WP"), + min: 0, + }; + } - const newActors = await Actor.createDocuments([actorData]); + actorData.data.skills.accounting = { + label: "Accounting", + proficiency: GetSkillRatingsFromInput(inputStr, "ACCOUNTING"), + failure: false, + }; + actorData.data.skills.alertness = { + label: "Alertness", + proficiency: GetSkillRatingsFromInput(inputStr, "ALERTNESS"), + failure: false, + }; + actorData.data.skills.anthropology = { + label: "Anthropology", + proficiency: GetSkillRatingsFromInput(inputStr, "ANTHROPOLOGY"), + failure: false, + }; + actorData.data.skills.archeology = { + label: "Archeology", + proficiency: GetSkillRatingsFromInput(inputStr, "ARCHEOLOGY|ARCHAEOLOGY"), + failure: false, + }; // damn you british spellings + actorData.data.skills.artillery = { + label: "Artillery", + proficiency: GetSkillRatingsFromInput(inputStr, "ARTILLERY"), + failure: false, + }; + actorData.data.skills.athletics = { + label: "Athletics", + proficiency: GetSkillRatingsFromInput(inputStr, "ATHLETICS"), + failure: false, + }; + actorData.data.skills.bureaucracy = { + label: "Bureaucracy", + proficiency: GetSkillRatingsFromInput(inputStr, "BUREAUCRACY"), + failure: false, + }; + actorData.data.skills.computer_science = { + label: "Computer Science", + proficiency: GetSkillRatingsFromInput(inputStr, "COMPUTER SCIENCE"), + failure: false, + }; + actorData.data.skills.criminology = { + label: "Criminology", + proficiency: GetSkillRatingsFromInput(inputStr, "CRIMINOLOGY"), + failure: false, + }; + actorData.data.skills.demolitions = { + label: "Demolitions", + proficiency: GetSkillRatingsFromInput(inputStr, "DEMOLITIONS"), + failure: false, + }; + actorData.data.skills.disguise = { + label: "Disguise", + proficiency: GetSkillRatingsFromInput(inputStr, "DISGUISE"), + failure: false, + }; + actorData.data.skills.dodge = { + label: "Dodge", + proficiency: GetSkillRatingsFromInput(inputStr, "DODGE"), + failure: false, + }; + actorData.data.skills.drive = { + label: "Drive", + proficiency: GetSkillRatingsFromInput(inputStr, "DRIVE"), + failure: false, + }; - newActors[0].sheet.render(true); + // Impossible Landscapes seems to favor 'Driving' as the name for this instead for some + if (actorData.data.skills.drive.proficiency === 0) { + actorData.data.skills.drive = { + label: "Drive", + proficiency: GetSkillRatingsFromInput(inputStr, "DRIVING"), + failure: false, + }; + } + + actorData.data.skills.firearms = { + label: "Firearms", + proficiency: GetSkillRatingsFromInput(inputStr, "FIREARMS"), + failure: false, + }; + actorData.data.skills.first_aid = { + label: "First Adi", + proficiency: GetSkillRatingsFromInput(inputStr, "FIRST AID"), + failure: false, + }; + actorData.data.skills.forensics = { + label: "Forensics", + proficiency: GetSkillRatingsFromInput(inputStr, "FORENSICS"), + failure: false, + }; + actorData.data.skills.heavy_machinery = { + label: "Heavy Machinery", + proficiency: GetSkillRatingsFromInput(inputStr, "HEAVY MACHINERY"), + failure: false, + }; // template.json has typo on heavy machinery... + actorData.data.skills.heavy_weapons = { + label: "Heavy Weapons", + proficiency: GetSkillRatingsFromInput(inputStr, "HEAVY WEAPONS"), + failure: false, + }; + actorData.data.skills.history = { + label: "History", + proficiency: GetSkillRatingsFromInput(inputStr, "HISTORY"), + failure: false, + }; + actorData.data.skills.humint = { + label: "HUMINT", + proficiency: GetSkillRatingsFromInput(inputStr, "HUMINT"), + failure: false, + }; + actorData.data.skills.law = { + label: "Law", + proficiency: GetSkillRatingsFromInput(inputStr, "LAW"), + failure: false, + }; + actorData.data.skills.medicine = { + label: "Medicine", + proficiency: GetSkillRatingsFromInput(inputStr, "MEDICINE"), + failure: false, + }; + actorData.data.skills.melee_weapons = { + label: "Melee Weapons", + proficiency: GetSkillRatingsFromInput(inputStr, "MELEE WEAPONS"), + failure: false, + }; + actorData.data.skills.navigate = { + label: "Navigate", + proficiency: GetSkillRatingsFromInput(inputStr, "NAVIGATE"), + failure: false, + }; + actorData.data.skills.occult = { + label: "Occult", + proficiency: GetSkillRatingsFromInput(inputStr, "OCCULT"), + failure: false, + }; + actorData.data.skills.persuade = { + label: "Persuade", + proficiency: GetSkillRatingsFromInput(inputStr, "PERSUADE"), + failure: false, + }; + actorData.data.skills.pharmacy = { + label: "Pharmacy", + proficiency: GetSkillRatingsFromInput(inputStr, "PHARMACY"), + failure: false, + }; + actorData.data.skills.psychotherapy = { + label: "Psychotherapy", + proficiency: GetSkillRatingsFromInput(inputStr, "PSYCHOTHERAPY"), + failure: false, + }; + actorData.data.skills.ride = { + label: "Ride", + proficiency: GetSkillRatingsFromInput(inputStr, "RIDE"), + failure: false, + }; + actorData.data.skills.search = { + label: "Search", + proficiency: GetSkillRatingsFromInput(inputStr, "SEARCH"), + failure: false, + }; + actorData.data.skills.sigint = { + label: "SIGINT", + proficiency: GetSkillRatingsFromInput(inputStr, "SIGINT"), + failure: false, + }; + actorData.data.skills.stealth = { + label: "Stealth", + proficiency: GetSkillRatingsFromInput(inputStr, "STEALTH"), + failure: false, + }; + actorData.data.skills.surgery = { + label: "Surgery", + proficiency: GetSkillRatingsFromInput(inputStr, "SURGERY"), + failure: false, + }; + actorData.data.skills.survival = { + label: "Survival", + proficiency: GetSkillRatingsFromInput(inputStr, "SURVIVAL"), + failure: false, + }; + actorData.data.skills.swim = { + label: "Swim", + proficiency: GetSkillRatingsFromInput(inputStr, "SWIM"), + failure: false, + }; + actorData.data.skills.unarmed_combat = { + label: "Unarmed Combat", + proficiency: GetSkillRatingsFromInput(inputStr, "UNARMED COMBAT"), + failure: false, + }; + actorData.data.skills.unnatural = { + label: "Unnatural", + proficiency: GetSkillRatingsFromInput(inputStr, "UNNATURAL"), + failure: false, + }; + + // some npcs/unnatural have other skills + if (GetSkillRatingsFromInput(inputStr, "FLIGHT") > 0) { + actorData.data.skills.flight = { + label: "Flight", + proficiency: GetSkillRatingsFromInput(inputStr, "FLIGHT"), + failure: false, + }; + } + + arr = GetTypeSkillRatingsFromInput(inputStr); + + for (let index = 0; index < arr.length; index += 1) { + const element = arr[index]; + actorData.data.typedSkills[`tskill_${index.toString()}`] = element; + } + + console.log(actorData); + + const newActors = await Actor.createDocuments([actorData]); + + newActors[0].sheet.render(true); } -async function GetUserInput(){ - const content = `
+async function GetUserInput() { + const content = `
@@ -197,25 +388,25 @@ async function GetUserInput(){
`; - - new Dialog({ - title: "Stat Block Parser", // Change the title if you want. - content, - buttons: { - roll: { - label: "PARSE", - callback: async (html) => { - const textInput = html.find("[name=parse-input]")[0].value; - - const actorType = html.find("[name=actor-type]")[0].value; - RegexParseNpcStatBlock(textInput, actorType); - } - } - } - }).render(true); + new Dialog({ + title: "Stat Block Parser", // Change the title if you want. + content, + buttons: { + roll: { + label: "PARSE", + callback: async (html) => { + const textInput = html.find("[name=parse-input]")[0].value; + + const actorType = html.find("[name=actor-type]")[0].value; + + RegexParseNpcStatBlock(textInput, actorType); + }, + }, + }, + }).render(true); } -export async function ParseDeltaGreenStatBlock(){ - GetUserInput(); -} \ No newline at end of file +export default async function ParseDeltaGreenStatBlock() { + GetUserInput(); +} diff --git a/module/other/utility-functions.js b/module/other/utility-functions.js index ed13a60..75db6c5 100644 --- a/module/other/utility-functions.js +++ b/module/other/utility-functions.js @@ -1,27 +1,25 @@ /* globals game */ - export default class DGUtils { /** * Attempt to localize a keyword, and gracefully fallback to something else if the key does not exist. * This way people using incomplete translations will not as many crashes or bugs when playing against a newly updated system. - * - * @param {String} key - localization key + * + * @param {String} key - localization key * @param {String} fallback - string to fall back to if translation does not exist for key - * @returns + * @returns */ - static localizeWithFallback(key, fallback){ + static localizeWithFallback(key, fallback) { try { - let translatedValue = game.i18n.localize(key); - if (translatedValue != key) { - return translatedValue; - } else { - console.warn(`Untranslated localization key '${key}'.`); - // can't have single quotes in a handlebars string literal input, so sort of hack in an escape character for them. - fallback = fallback.replace("'", "'"); - return fallback; + const translatedValue = game.i18n.localize(key); + if (translatedValue !== key) { + return translatedValue; } - } catch(ex) { + console.warn(`Untranslated localization key '${key}'.`); + // can't have single quotes in a handlebars string literal input, so sort of hack in an escape character for them. + fallback = fallback.replace("'", "'"); + return fallback; + } catch (ex) { console.warn(ex); return fallback; } @@ -29,12 +27,12 @@ export default class DGUtils { /** * Format a number with a leading plus. - * - * @param {Number} number + * + * @param {Number} number * @returns {String} - the stringified number with a leading plus if applicable - * + * */ - static formatStringWithLeadingPlus(number){ - return number > 0 ? `+${number}` : number.toString() ; + static formatStringWithLeadingPlus(number) { + return number > 0 ? `+${number}` : number.toString(); } -} \ No newline at end of file +} diff --git a/module/roll/roll.js b/module/roll/roll.js index f0cb1ac..11a4f2e 100644 --- a/module/roll/roll.js +++ b/module/roll/roll.js @@ -1,13 +1,14 @@ +/* eslint-disable max-classes-per-file */ /* globals game Roll ChatMessage AudioHelper renderTemplate Dialog */ -import DGUtils from "../other/utility-functions.js" +import DGUtils from "../other/utility-functions.js"; export class DGRoll extends Roll { /** * NOTE: This class will rarely be called on its own. It should generally be extended. Look to DGPercentileRoll as an example. - * + * * Customize our roll with some useful information, passed in the `options` Object. - * + * * @param {string} formula Unused - The string formula to parse (from Foundry) * @param {Object} data Unused - The data object against which to parse attributes within the formula * @param {Object} [options] Additional data which is preserved in the database @@ -27,24 +28,27 @@ export class DGRoll extends Roll { } /** - * Simple function that actually creates the message and sends it to chat. - * + * Simple function that actually creates the message and sends it to chat. + * * Broke this out so multiple functions can use it. - * + * * @returns {Promise} - the created chat message. */ async createMessage(content, flavor, rollMode) { - let chatData = { + const chatData = { speaker: ChatMessage.getSpeaker({ actor: this.actor }), content, flavor, - type: 5, //CHAT_MESSAGE_TYPES.ROLL, + type: 5, // CHAT_MESSAGE_TYPES.ROLL, roll: this, - rollMode + rollMode, }; - + // play the dice rolling sound, like a regular in-chat roll - AudioHelper.play({src: "sounds/dice.wav", volume: 0.8, autoplay: true, loop: false}, true); + AudioHelper.play( + { src: "sounds/dice.wav", volume: 0.8, autoplay: true, loop: false }, + true, + ); return ChatMessage.create(chatData); } } @@ -52,15 +56,15 @@ export class DGRoll extends Roll { export class DGPercentileRoll extends DGRoll { /** * Creates D100 rolls, the base die of the system. - * - * This constructor embeds the following info into the roll: - * 1. Target number that the roll needs to beat. - * 2. Localized name for the roll. - * + * + * This constructor embeds the following info into the roll: + * 1. Target number that the roll needs to beat. + * 2. Localized name for the roll. + * * Note: In order for all of our custom data to persist, our constructor must use the same parameters as its parent class. * So, even though percentile rolls will always have a formula of "1d100" and we don't use the `data` object, * we still have to keep them as parameters. - * + * * @param {string} formula Unused - The string formula to parse (from Foundry) - Always "1d100" for percentile rolls. * @param {Object} data Unused - The data object against which to parse attributes within the formula * @param {Object} [options] Additional data which is preserved in the database @@ -81,7 +85,7 @@ export class DGPercentileRoll extends DGRoll { this.target = this.actor.system.statistics[this.key].x5; this.localizedKey = game.i18n.localize(`DG.Attributes.${this.key}`); break; - case "skill": + case "skill": // Set up a target number and localized roll based on whether the skill is regular or typed. if (skillKeys.includes(this.key)) { this.target = this.actor.system.skills[this.key].proficiency; @@ -113,7 +117,7 @@ export class DGPercentileRoll extends DGRoll { // Add a the weapon's internal modifier. this.modifier += this.item.system.skillModifier; break; - case "luck": + case "luck": this.target = 50; this.localizedKey = game.i18n.localize("DG.Luck"); break; @@ -124,59 +128,67 @@ export class DGPercentileRoll extends DGRoll { /** * Shows a dialog that can modify the roll. - * + * * @returns {Promise} - the results of the dialog. */ - async showDialog() { + async showDialog() { let isSanCheck = false; - const hideSanTarget = !game.user.isGM && game.settings.get("deltagreen", "keepSanityPrivate"); - - if (this.key === 'sanity' || this.key === 'ritual') { + const hideSanTarget = + !game.user.isGM && game.settings.get("deltagreen", "keepSanityPrivate"); + + if (this.key === "sanity" || this.key === "ritual") { isSanCheck = true; } - - let backingData = { - data:{ + + const backingData = { + data: { label: this.localizedKey, originalTarget: this.target, targetModifier: 20, - isSanCheck: isSanCheck, - hideTarget: hideSanTarget + isSanCheck, + hideTarget: hideSanTarget, }, }; - - let template = "systems/deltagreen/templates/dialog/modify-percentile-roll.html"; - let html = await renderTemplate(template, backingData); + + const template = + "systems/deltagreen/templates/dialog/modify-percentile-roll.html"; + const content = await renderTemplate(template, backingData); return new Promise((resolve, reject) => { new Dialog({ - content: html, - title: DGUtils.localizeWithFallback("DG.ModifySkillRollDialogue.Title", "Modify Roll"), + content, + title: DGUtils.localizeWithFallback( + "DG.ModifySkillRollDialogue.Title", + "Modify Roll", + ), default: "roll", buttons: { - roll:{ + roll: { label: DGUtils.localizeWithFallback("DG.Roll.Roll", "Roll"), - callback: html => { + callback: (html) => { try { - let targetModifier = html.find("[name='targetModifier']").val(); // this is text as a heads up - - let rollMode = html.find("[name='rollMode']").val(); - - let plusMinus = html.find("[name='plusOrMinus']").val(); - - if (targetModifier.trim() != "" && !isNaN(targetModifier)){ + let targetModifier = html.find("[name='targetModifier']").val(); // this is text as a heads up + + const rollMode = html.find("[name='rollMode']").val(); + + const plusMinus = html.find("[name='plusOrMinus']").val(); + + if ( + targetModifier.trim() !== "" && + !Number.isNaN(targetModifier) + ) { targetModifier = Math.abs(parseInt(targetModifier)); - - if(plusMinus === "-"){ - targetModifier = -1 * targetModifier; + + if (plusMinus === "-") { + targetModifier *= -1; } } - resolve({targetModifier, rollMode}) - } catch(ex) { + resolve({ targetModifier, rollMode }); + } catch (ex) { reject(console.log(ex)); } - } - } - } + }, + }, + }, }).render(true); }); } @@ -184,74 +196,93 @@ export class DGPercentileRoll extends DGRoll { /** * Prepares data for a chat message and then passes that data * to a method that actually creates a ChatMessage. - * + * * Lays out and styles message based on outcome of the roll. - * + * * @returns {Promise} - the created chat message. */ async toChat() { - let rollMode = this.options.rollMode || game.settings.get("core", "rollMode"); - + let rollMode = + this.options.rollMode || game.settings.get("core", "rollMode"); + // if using private san rolls, must hide any SAN roll unless user is a GM - const privateSanSetting = game.settings.get("deltagreen", "keepSanityPrivate"); - if (privateSanSetting && (this.key === 'sanity' || this.key === 'ritual') && !game.user.isGM){ - rollMode = 'blindroll'; + const privateSanSetting = game.settings.get( + "deltagreen", + "keepSanityPrivate", + ); + if ( + privateSanSetting && + (this.key === "sanity" || this.key === "ritual") && + !game.user.isGM + ) { + rollMode = "blindroll"; } - - let label = `${game.i18n.localize("DG.Roll.Rolling")} ${this.localizedKey} ${game.i18n.localize("DG.Roll.Target")} ${this.target + this.modifier}`; + + let label = `${game.i18n.localize("DG.Roll.Rolling")} ${ + this.localizedKey + } ${game.i18n.localize("DG.Roll.Target")} ${ + this.target + this.modifier + }`; // "Inhuman" stat being rolled. See function for details. if (this.isInhuman) { - label = `${game.i18n.localize("DG.Roll.Rolling")} ${this.localizedKey} [${game.i18n.localize("DG.Roll.Inhuman").toUpperCase()}] ${game.i18n.localize("DG.Roll.Target")} ${this.target + this.modifier}`; + label = `${game.i18n.localize("DG.Roll.Rolling")} ${ + this.localizedKey + } [${game.i18n + .localize("DG.Roll.Inhuman") + .toUpperCase()}] ${game.i18n.localize("DG.Roll.Target")} ${ + this.target + this.modifier + }`; } if (this.modifier) { - label += ` (${DGUtils.formatStringWithLeadingPlus(this.modifier)}%)` + label += ` (${DGUtils.formatStringWithLeadingPlus(this.modifier)}%)`; } - - let resultString = '', styleOverride = ''; + + let resultString = ""; + let styleOverride = ""; if (this.isCritical) { resultString = `${game.i18n.localize("DG.Roll.Critical")} `; } - + if (this.isSuccess) { resultString += `${game.i18n.localize("DG.Roll.Success")}`; - - if (this.isCritical){ - resultString = resultString.toUpperCase() + '!'; - styleOverride="color: green"; + + if (this.isCritical) { + resultString = `${resultString.toUpperCase()}!`; + styleOverride = "color: green"; } - } else { + } else { resultString += `${game.i18n.localize("DG.Roll.Failure")}`; - - if(this.isCritical){ - resultString = resultString.toUpperCase() + '!'; - styleOverride="color: red"; + + if (this.isCritical) { + resultString = `${resultString.toUpperCase()}!`; + styleOverride = "color: red"; } } - - let html = ''; - html += `
` - html += `
` - html += `
${resultString}
` - html += `
` - html += `
` - html += `
` - html += `
` - html += ` ` - html += ` ${this.formula}` - html += ` ` - html += ` ` - html += ` ${this.total}` - html += ` ` - html += `
` - html += `
    ` - html += `
  1. ${this.total}
  2. ` - html += `
` - html += `
` - html += `
` - html += `
` - html += `

${this.total}

` - html += `
` - + + let html = ""; + html += `
`; + html += `
`; + html += `
${resultString}
`; + html += `
`; + html += `
`; + html += `
`; + html += `
`; + html += ` `; + html += ` ${this.formula}`; + html += ` `; + html += ` `; + html += ` ${this.total}`; + html += ` `; + html += `
`; + html += `
    `; + html += `
  1. ${this.total}
  2. `; + html += `
`; + html += `
`; + html += `
`; + html += `
`; + html += `

${this.total}

`; + html += `
`; + return this.createMessage(html, label, rollMode); } @@ -261,28 +292,28 @@ export class DGPercentileRoll extends DGRoll { * For an inhuman check, the roll succeeds except on a roll of 100 which fails AND fumbles. * If the roll is a matching digit roll, it is a critical as normal. * Also, if the roll is below the regular (non-x5) value of the stat, it is a critical. E.g. a CON of 25, a d100 roll of 21 would be a critical. - * - * @returns {Boolean} + * + * @returns {Boolean} */ get isInhuman() { if (this.target + this.modifier > 99 && this.type === "stat") { return true; } - return false; + return false; } /** * Determines if a roll result is critical. * If roll has not been evaluated, return null. - * - * @returns {null|Boolean} + * + * @returns {null|Boolean} */ get isCritical() { // If roll isn't evaluated, return null. if (!this.total) { return null; } - let isCritical = false + let isCritical = false; // 1, 100, or any matching dice are a crit, i.e. 11, 22, 33...99. if (this.total === 1 || this.total === 100 || this.total % 11 === 0) { @@ -290,9 +321,9 @@ export class DGPercentileRoll extends DGRoll { isCritical = true; } - // If inhuman and the roll is below the regular (non-x5) value of the stat, it is a critical. + // If inhuman and the roll is below the regular (non-x5) value of the stat, it is a critical. // E.g. a CON of 25, a d100 roll of 21 would be a critical. - if (this.isInhuman && this.total <= ((this.target + this.modifier) / 5)) { + if (this.isInhuman && this.total <= (this.target + this.modifier) / 5) { isCritical = true; } @@ -302,8 +333,8 @@ export class DGPercentileRoll extends DGRoll { /** * Determines if a roll succeeded. * If roll has not been evaluated, return null. - * - * @returns {null|Boolean} + * + * @returns {null|Boolean} */ get isSuccess() { // If roll isn't evaluated, return null. @@ -313,7 +344,7 @@ export class DGPercentileRoll extends DGRoll { // A roll of 100 always (critically) fails, even for inhuman rolls. if (this.total === 100) return false; - return this.total <= (this.target + this.modifier); + return this.total <= this.target + this.modifier; } } @@ -321,11 +352,11 @@ export class DGLethalityRoll extends DGPercentileRoll { /** * See constructor for DGPercentileRoll. This theoretically could be done in the parent class' * constructor, but since Lethality rolls needs its own class for custom methods anyway, - * we will set the target and localized key here. - * - * @param {String} formula - * @param {Object} data - * @param {Object} options + * we will set the target and localized key here. + * + * @param {String} formula + * @param {Object} data + * @param {Object} options */ constructor(formula, data, options) { super(formula, data, options); @@ -335,34 +366,40 @@ export class DGLethalityRoll extends DGPercentileRoll { /** * Prepares data for a chat message and then passes that data - * to a method that actually creates a ChatMessage. - * + * to a method that actually creates a ChatMessage. + * * Lays out and styles message based on outcome of the roll. - * + * * Overrides `DGPercentileRoll.toChat()` - * + * * @returns {Promise} - the created chat message. * @override */ - async toChat() { - const rollMode = this.options.rollMode || game.settings.get("core", "rollMode"); - let resultString = ''; - let styleOverride = ''; - if(this.total <= this.target){ + async toChat() { + const rollMode = + this.options.rollMode || game.settings.get("core", "rollMode"); + let resultString = ""; + let styleOverride = ""; + if (this.total <= this.target) { resultString = `${game.i18n.localize("DG.Roll.Lethal").toUpperCase()}`; - styleOverride="color: red"; - } - else{ + styleOverride = "color: red"; + } else { resultString = `${game.i18n.localize("DG.Roll.Failure")}`; } const { nonLethalDamage } = this; - let label = `${game.i18n.localize("DG.Roll.Rolling")} ${game.i18n.localize("DG.Roll.Lethality").toUpperCase()} ${game.i18n.localize("DG.Roll.For")} ${this.item.name.toUpperCase()} ${game.i18n.localize("DG.Roll.Target")} ${this.target + this.modifier}`; + let label = `${game.i18n.localize("DG.Roll.Rolling")} ${game.i18n + .localize("DG.Roll.Lethality") + .toUpperCase()} ${game.i18n.localize( + "DG.Roll.For", + )} ${this.item.name.toUpperCase()} ${game.i18n.localize( + "DG.Roll.Target", + )} ${this.target + this.modifier}`; if (this.modifier) { - label += ` (${DGUtils.formatStringWithLeadingPlus(this.modifier)}%)` + label += ` (${DGUtils.formatStringWithLeadingPlus(this.modifier)}%)`; } - - let html = ''; + + let html = ""; html += `
`; html += `
`; html += `
${resultString}
`; @@ -396,7 +433,9 @@ export class DGLethalityRoll extends DGPercentileRoll { html += `
`; html += ` `; html += `
`; - html += `

${this.total} (${nonLethalDamage.total} ${game.i18n.localize("DG.Roll.Damage")})

`; + html += `

${this.total} (${ + nonLethalDamage.total + } ${game.i18n.localize("DG.Roll.Damage")})

`; html += `
`; return this.createMessage(html, label, rollMode); @@ -405,12 +444,12 @@ export class DGLethalityRoll extends DGPercentileRoll { /** * Calculates the damage for when a lethality roll fails. * If roll has not been evaluated, return null. - * + * * See full rules on page 57 of agent's handbook. - * + * * Note, this getter does not actually care if the roll has failed. - * - * @returns {null|Object} - return data about the non-lethal damage. + * + * @returns {null|Object} - return data about the non-lethal damage. */ get nonLethalDamage() { if (!this.total) { @@ -420,7 +459,8 @@ export class DGLethalityRoll extends DGPercentileRoll { // Try to determine what the d100 result would be as if it was two d10's being rolled. const totalString = this.total.toString(); const digits = totalString.length; - let die1, die2; + let die1; + let die2; switch (digits) { case 1: // If one digit in the result, one die is a 10, and the other is the result. @@ -428,7 +468,10 @@ export class DGLethalityRoll extends DGPercentileRoll { break; case 2: // If two digits in the result, each die is the value of one of the digits. If one of those digits is 0, make it 10. - [die1, die2] = totalString.split("").map((digit) => parseInt(digit)).map((digit) => digit || 10); + [die1, die2] = totalString + .split("") + .map((digit) => parseInt(digit)) + .map((digit) => digit || 10); break; case 3: // If three digits in the result (aka result === 100), each die is a 10. @@ -439,7 +482,7 @@ export class DGLethalityRoll extends DGPercentileRoll { } const total = die1 + die2; - return { die1, die2, total } + return { die1, die2, total }; } } @@ -447,70 +490,77 @@ export class DGDamageRoll extends DGRoll { /** * Prepares data for a chat message and then passes that data * to a method that actually creates a ChatMessage. - * + * * @returns {Promise} - the created chat message. * @override */ async toChat() { - const rollMode = this.options.rollMode || game.settings.get("core", "rollMode"); + const rollMode = + this.options.rollMode || game.settings.get("core", "rollMode"); let label = this.formula; - try{ - label = `${this.item.name}: ${game.i18n.localize("DG.Roll.Rolling")} ${game.i18n.localize("DG.Roll.Damage").toUpperCase()} ${game.i18n.localize("DG.Roll.For")} ${label.toUpperCase()}`; - } - catch{ + try { + label = `${this.item.name}: ${game.i18n.localize( + "DG.Roll.Rolling", + )} ${game.i18n + .localize("DG.Roll.Damage") + .toUpperCase()} ${game.i18n.localize( + "DG.Roll.For", + )} ${label.toUpperCase()}`; + } catch { label = `Rolling DAMAGE for ${label.toUpperCase()}`; } return this.createMessage(this.total, label, rollMode); } async showDialog() { - let template = "systems/deltagreen/templates/dialog/modify-damage-roll.html"; - let backingData = { - data:{ + const template = + "systems/deltagreen/templates/dialog/modify-damage-roll.html"; + const backingData = { + data: { label: this.item?.name, originalFormula: this.formula, outerModifier: "2 * ", - innerModifier: "+ 0" + innerModifier: "+ 0", }, }; - let html = await renderTemplate(template, backingData); + const content = await renderTemplate(template, backingData); return new Promise((resolve, reject) => { new Dialog({ - content: html, + content, title: game.i18n.localize("DG.ModifySkillRollDialogue.Title"), default: "roll", buttons: { - roll:{ + roll: { label: game.i18n.translations.DG.Roll.Roll, - callback: html => { - try{ - let outerModifier = html.find("[name='outerModifier']").val(); // this is text as a heads up - let innerModifier = html.find("[name='innerModifier']").val(); // this is text as a heads up - let modifiedBaseRoll = html.find("[name='originalFormula']").val(); // this is text as a heads up - let rollMode = html.find("[name='targetRollMode']").val(); + callback: (html) => { + try { + const outerModifier = html.find("[name='outerModifier']").val(); // this is text as a heads up + let innerModifier = html.find("[name='innerModifier']").val(); // this is text as a heads up + const modifiedBaseRoll = html + .find("[name='originalFormula']") + .val(); // this is text as a heads up + const rollMode = html.find("[name='targetRollMode']").val(); - if(innerModifier.replace(" ", "") === "+0"){ + if (innerModifier.replace(" ", "") === "+0") { innerModifier = ""; } let newFormula = ""; - if(outerModifier.trim() != ""){ - newFormula += outerModifier + "(" + modifiedBaseRoll + innerModifier.trim() + ")"; - } - else{ + if (outerModifier.trim() !== "") { + newFormula += `${outerModifier}(${modifiedBaseRoll}${innerModifier.trim()})`; + } else { newFormula += modifiedBaseRoll + innerModifier.trim(); } - resolve({newFormula, rollMode}) - } - catch(ex){ + resolve({ newFormula, rollMode }); + } catch (ex) { reject(console.log(ex)); } - } - } - } + }, + }, + }, }).render(true); }); } @@ -520,22 +570,26 @@ export class DGSanityDamageRoll extends DGRoll { /** * Prepares data for a chat message and then passes that data * to a method that actually creates a ChatMessage. - * + * * @returns {Promise} - the created chat message. * @override */ async toChat() { - const rollMode = this.options.rollMode || game.settings.get("core", "rollMode"); + const rollMode = + this.options.rollMode || game.settings.get("core", "rollMode"); const [lowDie, highDie] = this.terms[0].terms.map((formula) => { return Roll.parse(formula)[0] || { faces: parseInt(formula), number: 1 }; }); const [lowResult, highResult] = this.damageResults; - - const flavor = `Rolling ${DGUtils.localizeWithFallback('DG.Generic.SanDamage', 'SAN DAMAGE')} For ${lowDie.formula} / ${highDie.formula}`; - - let html = ''; + + const flavor = `Rolling ${DGUtils.localizeWithFallback( + "DG.Generic.SanDamage", + "SAN DAMAGE", + )} For ${lowDie.formula} / ${highDie.formula}`; + + let html = ""; html += `
`; html += `
`; html += `
${lowDie.formula} / ${highDie.formula}
`; @@ -568,22 +622,22 @@ export class DGSanityDamageRoll extends DGRoll { html += `
`; html += ` `; html += `
`; - html += `

${lowResult} / ${highResult}

` + html += `

${lowResult} / ${highResult}

`; html += `
`; return this.createMessage(html, flavor, rollMode); } /** * Returns the two results for a sanity damage roll. - * + * * Returns null if the roll has not been evaluated. - * + * * @returns {null|Array} - Array of result numbers */ get damageResults() { if (!this.total) return null; const [lowResult, highResult] = this.terms[0].results; - return [lowResult?.result, highResult?.result] + return [lowResult?.result, highResult?.result]; } -} \ No newline at end of file +} diff --git a/module/settings.js b/module/settings.js index 0a97cac..1b6cfcd 100644 --- a/module/settings.js +++ b/module/settings.js @@ -1,4 +1,6 @@ -export const registerSystemSettings = function () { +/* global game */ + +export default function registerSystemSettings() { game.settings.register("deltagreen", "characterSheetStyle", { name: "Character Sheet Style", hint: "Choose how actor sheets should be styled. 'Program' is a more modern government style, where 'Cowboy/Outlaw' is an older, grittier looking typewriter style.", @@ -15,7 +17,7 @@ export const registerSystemSettings = function () { default: "program", // The default value for the setting onChange: (value) => { // A callback function which triggers when the setting is changed - //console.log(value) + // console.log(value) }, }); @@ -44,11 +46,10 @@ export const registerSystemSettings = function () { default: "1d4", // The default value for the setting, per the most recent errata. onChange: (value) => { // A callback function which triggers when the setting is changed - //console.log(value) + // console.log(value) }, }); - // These two settings are obsolete now game.settings.register("deltagreen", "showImpossibleLandscapesContent", { name: "Show Impossible Landscapes Content", @@ -73,12 +74,12 @@ export const registerSystemSettings = function () { TypeWriterCondensed: "Condensed Typewriter (Modern, Small Typewriter Font)", PublicSans: "Public Sans (US Government-style sans serif font)", - //"atwriter": "Another Typewriter (Alternate Old-style Typewriter Font)" + // "atwriter": "Another Typewriter (Alternate Old-style Typewriter Font)" }, default: "SpecialElite", // The default value for the setting onChange: (value) => { // A callback function which triggers when the setting is changed - //console.log(value) + // console.log(value) }, }); @@ -97,7 +98,7 @@ export const registerSystemSettings = function () { default: "OldPaper1", // The default value for the setting onChange: (value) => { // A callback function which triggers when the setting is changed - //console.log(value) + // console.log(value) }, }); -}; +} diff --git a/module/templates.js b/module/templates.js index 0cde96b..33c6e19 100644 --- a/module/templates.js +++ b/module/templates.js @@ -1,17 +1,19 @@ +/* global loadTemplates */ + /** * Define a set of template paths to pre-load * Pre-loaded templates are compiled and cached for fast access when rendering * @return {Promise} */ -export const preloadHandlebarsTemplates = async function() { - return loadTemplates([ - "systems/deltagreen/templates/actor/actor-sheet.html", - "systems/deltagreen/templates/actor/limited-sheet.html", - "systems/deltagreen/templates/actor/unnatural-sheet.html", - "systems/deltagreen/templates/actor/npc-sheet.html", - "systems/deltagreen/templates/actor/cv-partial.html", - "systems/deltagreen/templates/dialog/modify-percentile-roll.html", - "systems/deltagreen/templates/actor/vehicle-sheet.html", - "systems/deltagreen/templates/actor/help-and-licensing-partial.html" - ]); - }; \ No newline at end of file +export default async function preloadHandlebarsTemplates() { + return loadTemplates([ + "systems/deltagreen/templates/actor/actor-sheet.html", + "systems/deltagreen/templates/actor/limited-sheet.html", + "systems/deltagreen/templates/actor/unnatural-sheet.html", + "systems/deltagreen/templates/actor/npc-sheet.html", + "systems/deltagreen/templates/actor/cv-partial.html", + "systems/deltagreen/templates/dialog/modify-percentile-roll.html", + "systems/deltagreen/templates/actor/vehicle-sheet.html", + "systems/deltagreen/templates/actor/help-and-licensing-partial.html", + ]); +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..7be696e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4594 @@ +{ + "name": "deltagreen", + "version": "1.3.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "deltagreen", + "version": "1.3.1", + "license": "MIT", + "dependencies": { + "eslint": "^8.50.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-prettier": "^5.0.0" + }, + "devDependencies": {} + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/es-abstract": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.50.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", + "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==" + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==" + }, + "@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@eslint/js": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==" + }, + "@humanwhocodes/config-array": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "requires": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + } + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, + "array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + } + }, + "array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" + }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "requires": { + "big-integer": "^1.6.44" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "requires": { + "run-applescript": "^5.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "requires": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + } + }, + "default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "requires": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + } + }, + "define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==" + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "es-abstract": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "requires": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.11" + } + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "eslint": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.50.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + } + }, + "eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + } + }, + "eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "requires": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "requires": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-plugin-prettier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", + "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "requires": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + } + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "requires": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "requires": { + "type-fest": "^0.20.2" + } + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "requires": { + "define-properties": "^1.1.3" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "requires": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + }, + "is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "requires": { + "is-docker": "^3.0.0" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "requires": { + "which-typed-array": "^1.1.11" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + }, + "dependencies": { + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + } + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "requires": { + "minimist": "^1.2.0" + } + }, + "keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "requires": { + "json-buffer": "3.0.1" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + } + } + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "requires": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + }, + "prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "peer": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "requires": { + "fast-diff": "^1.1.2" + } + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + } + }, + "resolve": { + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "requires": { + "execa": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + } + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + } + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + }, + "set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "requires": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "requires": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, + "typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..11a9532 --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "deltagreen", + "version": "1.3.1", + "description": "This is a fan made but now officially supported rules implementation (system) for [Foundry Virtual Tabletop](https://foundryvtt.com/) system for Delta Green: The RPG, based on the _Agent's Handbook_ rule set from Arc Dream Publishing (_**not** the Call of Cthulu rules_).", + "main": "deltagreen.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/TheLastScrub/delta-green-foundry-vtt-system-unofficial.git" + }, + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/TheLastScrub/delta-green-foundry-vtt-system-unofficial/issues" + }, + "homepage": "https://github.com/TheLastScrub/delta-green-foundry-vtt-system-unofficial#readme", + "dependencies": { + "eslint": "^8.50.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-prettier": "^5.0.0", + "eslint-config-prettier": "^9.0.0" + }, + "devDependencies": {} +} diff --git a/packs/source/armor/Bomb_Suit_oYJsYalfaNchDt34.json b/packs/source/armor/Bomb_Suit_oYJsYalfaNchDt34.json index 8a1f809..ac45917 100644 --- a/packs/source/armor/Bomb_Suit_oYJsYalfaNchDt34.json +++ b/packs/source/armor/Bomb_Suit_oYJsYalfaNchDt34.json @@ -17,4 +17,4 @@ "img": "systems/deltagreen/assets/icons/space-suit.svg", "effects": [], "_key": "!items!oYJsYalfaNchDt34" -} \ No newline at end of file +} diff --git a/packs/source/armor/Helmet__Kevlar_h8KAJDpLe03y2qWK.json b/packs/source/armor/Helmet__Kevlar_h8KAJDpLe03y2qWK.json index 01579c0..833b262 100644 --- a/packs/source/armor/Helmet__Kevlar_h8KAJDpLe03y2qWK.json +++ b/packs/source/armor/Helmet__Kevlar_h8KAJDpLe03y2qWK.json @@ -17,4 +17,4 @@ "img": "systems/deltagreen/assets/icons/helmet.svg", "effects": [], "_key": "!items!h8KAJDpLe03y2qWK" -} \ No newline at end of file +} diff --git a/packs/source/armor/Helmet__Riot_0iBS0OdEMPN6WTsu.json b/packs/source/armor/Helmet__Riot_0iBS0OdEMPN6WTsu.json index 35beadf..c35f00c 100644 --- a/packs/source/armor/Helmet__Riot_0iBS0OdEMPN6WTsu.json +++ b/packs/source/armor/Helmet__Riot_0iBS0OdEMPN6WTsu.json @@ -17,4 +17,4 @@ "img": "systems/deltagreen/assets/icons/helmet.svg", "effects": [], "_key": "!items!0iBS0OdEMPN6WTsu" -} \ No newline at end of file +} diff --git a/packs/source/armor/Kevlar_Vest_3PqRqzKL6Y3G3N0r.json b/packs/source/armor/Kevlar_Vest_3PqRqzKL6Y3G3N0r.json index 43116f2..56d75a3 100644 --- a/packs/source/armor/Kevlar_Vest_3PqRqzKL6Y3G3N0r.json +++ b/packs/source/armor/Kevlar_Vest_3PqRqzKL6Y3G3N0r.json @@ -17,4 +17,4 @@ "img": "systems/deltagreen/assets/icons/kevlar.svg", "effects": [], "_key": "!items!3PqRqzKL6Y3G3N0r" -} \ No newline at end of file +} diff --git a/packs/source/armor/Reinforced_Kevlar_Vest_W9gc014kriVkUpxq.json b/packs/source/armor/Reinforced_Kevlar_Vest_W9gc014kriVkUpxq.json index 870d4fb..942bb73 100644 --- a/packs/source/armor/Reinforced_Kevlar_Vest_W9gc014kriVkUpxq.json +++ b/packs/source/armor/Reinforced_Kevlar_Vest_W9gc014kriVkUpxq.json @@ -17,4 +17,4 @@ "img": "systems/deltagreen/assets/icons/kevlar-vest.svg", "effects": [], "_key": "!items!W9gc014kriVkUpxq" -} \ No newline at end of file +} diff --git a/packs/source/armor/Tactical_Body_Armor_Yc0n7fZZJaDKW7J1.json b/packs/source/armor/Tactical_Body_Armor_Yc0n7fZZJaDKW7J1.json index 3e64084..b2ddd9d 100644 --- a/packs/source/armor/Tactical_Body_Armor_Yc0n7fZZJaDKW7J1.json +++ b/packs/source/armor/Tactical_Body_Armor_Yc0n7fZZJaDKW7J1.json @@ -17,4 +17,4 @@ "img": "systems/deltagreen/assets/icons/kevlar-vest.svg", "effects": [], "_key": "!items!Yc0n7fZZJaDKW7J1" -} \ No newline at end of file +} diff --git a/packs/source/firearms/Heavy_Pistol_mvGLbgOB9TeGBfhr.json b/packs/source/firearms/Heavy_Pistol_mvGLbgOB9TeGBfhr.json index aea19de..8752fd6 100644 --- a/packs/source/firearms/Heavy_Pistol_mvGLbgOB9TeGBfhr.json +++ b/packs/source/firearms/Heavy_Pistol_mvGLbgOB9TeGBfhr.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/desert-eagle.svg", "effects": [], "_key": "!items!mvGLbgOB9TeGBfhr" -} \ No newline at end of file +} diff --git a/packs/source/firearms/Light_Pistol_7TSuCYbhLeHIRpod.json b/packs/source/firearms/Light_Pistol_7TSuCYbhLeHIRpod.json index 45973ad..52ad630 100644 --- a/packs/source/firearms/Light_Pistol_7TSuCYbhLeHIRpod.json +++ b/packs/source/firearms/Light_Pistol_7TSuCYbhLeHIRpod.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/walther-ppk.svg", "effects": [], "_key": "!items!7TSuCYbhLeHIRpod" -} \ No newline at end of file +} diff --git a/packs/source/firearms/Medium_Pistol_xb73X4SjsbuYs4D7.json b/packs/source/firearms/Medium_Pistol_xb73X4SjsbuYs4D7.json index 6550e51..3d6c6e4 100644 --- a/packs/source/firearms/Medium_Pistol_xb73X4SjsbuYs4D7.json +++ b/packs/source/firearms/Medium_Pistol_xb73X4SjsbuYs4D7.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/glock.svg", "effects": [], "_key": "!items!xb73X4SjsbuYs4D7" -} \ No newline at end of file +} diff --git a/packs/source/firearms/Rifle__Heavy__5JoNQn7l3KiOAHlE.json b/packs/source/firearms/Rifle__Heavy__5JoNQn7l3KiOAHlE.json index 7407751..69cb2af 100644 --- a/packs/source/firearms/Rifle__Heavy__5JoNQn7l3KiOAHlE.json +++ b/packs/source/firearms/Rifle__Heavy__5JoNQn7l3KiOAHlE.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/lee-enfield.svg", "effects": [], "_key": "!items!5JoNQn7l3KiOAHlE" -} \ No newline at end of file +} diff --git a/packs/source/firearms/Rifle__Light__42sHG2tugOGgtFLK.json b/packs/source/firearms/Rifle__Light__42sHG2tugOGgtFLK.json index e474173..18611be 100644 --- a/packs/source/firearms/Rifle__Light__42sHG2tugOGgtFLK.json +++ b/packs/source/firearms/Rifle__Light__42sHG2tugOGgtFLK.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/ak47.svg", "effects": [], "_key": "!items!42sHG2tugOGgtFLK" -} \ No newline at end of file +} diff --git a/packs/source/firearms/Rifle__Very_Heavy__ccNHepyVZVb6p49U.json b/packs/source/firearms/Rifle__Very_Heavy__ccNHepyVZVb6p49U.json index 92f4864..85a4f23 100644 --- a/packs/source/firearms/Rifle__Very_Heavy__ccNHepyVZVb6p49U.json +++ b/packs/source/firearms/Rifle__Very_Heavy__ccNHepyVZVb6p49U.json @@ -23,4 +23,4 @@ "_id": "ccNHepyVZVb6p49U", "effects": [], "_key": "!items!ccNHepyVZVb6p49U" -} \ No newline at end of file +} diff --git a/packs/source/firearms/Shotgun__Firing_Nonlethal__oQhWip2JTJYY18fS.json b/packs/source/firearms/Shotgun__Firing_Nonlethal__oQhWip2JTJYY18fS.json index 9997d9a..121f393 100644 --- a/packs/source/firearms/Shotgun__Firing_Nonlethal__oQhWip2JTJYY18fS.json +++ b/packs/source/firearms/Shotgun__Firing_Nonlethal__oQhWip2JTJYY18fS.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/sawed-off-shotgun.svg", "effects": [], "_key": "!items!oQhWip2JTJYY18fS" -} \ No newline at end of file +} diff --git a/packs/source/firearms/Shotgun__Firing_Shot__Zh1TVVNUFBxfxAOc.json b/packs/source/firearms/Shotgun__Firing_Shot__Zh1TVVNUFBxfxAOc.json index b1b201e..05b1e2d 100644 --- a/packs/source/firearms/Shotgun__Firing_Shot__Zh1TVVNUFBxfxAOc.json +++ b/packs/source/firearms/Shotgun__Firing_Shot__Zh1TVVNUFBxfxAOc.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/sawed-off-shotgun.svg", "effects": [], "_key": "!items!Zh1TVVNUFBxfxAOc" -} \ No newline at end of file +} diff --git a/packs/source/firearms/Shotgun__Firing_Shot__ZyOe653MI3bPZwQ0.json b/packs/source/firearms/Shotgun__Firing_Shot__ZyOe653MI3bPZwQ0.json index 0f92205..0d35356 100644 --- a/packs/source/firearms/Shotgun__Firing_Shot__ZyOe653MI3bPZwQ0.json +++ b/packs/source/firearms/Shotgun__Firing_Shot__ZyOe653MI3bPZwQ0.json @@ -29,4 +29,4 @@ }, "_id": "ZyOe653MI3bPZwQ0", "_key": "!items!ZyOe653MI3bPZwQ0" -} \ No newline at end of file +} diff --git a/packs/source/firearms/Shotgun__Firing_Slug__DruzlEXzmEMSwoSq.json b/packs/source/firearms/Shotgun__Firing_Slug__DruzlEXzmEMSwoSq.json index 227b159..93f71cc 100644 --- a/packs/source/firearms/Shotgun__Firing_Slug__DruzlEXzmEMSwoSq.json +++ b/packs/source/firearms/Shotgun__Firing_Slug__DruzlEXzmEMSwoSq.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/sawed-off-shotgun.svg", "effects": [], "_key": "!items!DruzlEXzmEMSwoSq" -} \ No newline at end of file +} diff --git a/packs/source/firearms/Submachine_Gun__SMG__0Gz1jcY28Psezqrv.json b/packs/source/firearms/Submachine_Gun__SMG__0Gz1jcY28Psezqrv.json index b474ba4..5fd4228 100644 --- a/packs/source/firearms/Submachine_Gun__SMG__0Gz1jcY28Psezqrv.json +++ b/packs/source/firearms/Submachine_Gun__SMG__0Gz1jcY28Psezqrv.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/spectre-m4.svg", "effects": [], "_key": "!items!0Gz1jcY28Psezqrv" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Baseball_Bat_qEM7Gz7raecORkj0.json b/packs/source/hand-to-hand-weapons/Baseball_Bat_qEM7Gz7raecORkj0.json index 8cbbbb9..3950d75 100644 --- a/packs/source/hand-to-hand-weapons/Baseball_Bat_qEM7Gz7raecORkj0.json +++ b/packs/source/hand-to-hand-weapons/Baseball_Bat_qEM7Gz7raecORkj0.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/baseball-bat.svg", "effects": [], "_key": "!items!qEM7Gz7raecORkj0" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Baton_c7Vl2gFQ9Tz8uQbM.json b/packs/source/hand-to-hand-weapons/Baton_c7Vl2gFQ9Tz8uQbM.json index 9a2fc76..05f1435 100644 --- a/packs/source/hand-to-hand-weapons/Baton_c7Vl2gFQ9Tz8uQbM.json +++ b/packs/source/hand-to-hand-weapons/Baton_c7Vl2gFQ9Tz8uQbM.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/telescopic-baton.svg", "effects": [], "_key": "!items!c7Vl2gFQ9Tz8uQbM" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Brass_Knuckles_TumiVMIYL7uCGrJW.json b/packs/source/hand-to-hand-weapons/Brass_Knuckles_TumiVMIYL7uCGrJW.json index a2e8d0e..12266c0 100644 --- a/packs/source/hand-to-hand-weapons/Brass_Knuckles_TumiVMIYL7uCGrJW.json +++ b/packs/source/hand-to-hand-weapons/Brass_Knuckles_TumiVMIYL7uCGrJW.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/brass-knuckles.svg", "effects": [], "_key": "!items!TumiVMIYL7uCGrJW" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Club_n0e4gZfCWsfwHcQH.json b/packs/source/hand-to-hand-weapons/Club_n0e4gZfCWsfwHcQH.json index c53cb1a..e3c6165 100644 --- a/packs/source/hand-to-hand-weapons/Club_n0e4gZfCWsfwHcQH.json +++ b/packs/source/hand-to-hand-weapons/Club_n0e4gZfCWsfwHcQH.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/baton.svg", "effects": [], "_key": "!items!n0e4gZfCWsfwHcQH" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Combat_Dagger_TvswuYGnr0Mt6aAg.json b/packs/source/hand-to-hand-weapons/Combat_Dagger_TvswuYGnr0Mt6aAg.json index cbb9297..98abb44 100644 --- a/packs/source/hand-to-hand-weapons/Combat_Dagger_TvswuYGnr0Mt6aAg.json +++ b/packs/source/hand-to-hand-weapons/Combat_Dagger_TvswuYGnr0Mt6aAg.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/bowie-knife.svg", "effects": [], "_key": "!items!TvswuYGnr0Mt6aAg" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Fixed_Bayonet_ZawdvRsFTJyB1SvW.json b/packs/source/hand-to-hand-weapons/Fixed_Bayonet_ZawdvRsFTJyB1SvW.json index 45c3547..3810dc3 100644 --- a/packs/source/hand-to-hand-weapons/Fixed_Bayonet_ZawdvRsFTJyB1SvW.json +++ b/packs/source/hand-to-hand-weapons/Fixed_Bayonet_ZawdvRsFTJyB1SvW.json @@ -23,4 +23,4 @@ "_id": "ZawdvRsFTJyB1SvW", "effects": [], "_key": "!items!ZawdvRsFTJyB1SvW" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Flashlight__Heavy__u5fnrg385Z79DUK6.json b/packs/source/hand-to-hand-weapons/Flashlight__Heavy__u5fnrg385Z79DUK6.json index 6b003f0..d117448 100644 --- a/packs/source/hand-to-hand-weapons/Flashlight__Heavy__u5fnrg385Z79DUK6.json +++ b/packs/source/hand-to-hand-weapons/Flashlight__Heavy__u5fnrg385Z79DUK6.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/flashlight.svg", "effects": [], "_key": "!items!u5fnrg385Z79DUK6" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Garotte_PkhlVFDhDUGqLdCW.json b/packs/source/hand-to-hand-weapons/Garotte_PkhlVFDhDUGqLdCW.json index 75eef5c..10b46e6 100644 --- a/packs/source/hand-to-hand-weapons/Garotte_PkhlVFDhDUGqLdCW.json +++ b/packs/source/hand-to-hand-weapons/Garotte_PkhlVFDhDUGqLdCW.json @@ -23,4 +23,4 @@ "_id": "PkhlVFDhDUGqLdCW", "effects": [], "_key": "!items!PkhlVFDhDUGqLdCW" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Hatchet_0gCwBTqSAbG9J20Y.json b/packs/source/hand-to-hand-weapons/Hatchet_0gCwBTqSAbG9J20Y.json index 4265024..1a574bb 100644 --- a/packs/source/hand-to-hand-weapons/Hatchet_0gCwBTqSAbG9J20Y.json +++ b/packs/source/hand-to-hand-weapons/Hatchet_0gCwBTqSAbG9J20Y.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/hatchet.svg", "effects": [], "_key": "!items!0gCwBTqSAbG9J20Y" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Knife_OsW9m877sce0LdsO.json b/packs/source/hand-to-hand-weapons/Knife_OsW9m877sce0LdsO.json index b3973d9..ad630ff 100644 --- a/packs/source/hand-to-hand-weapons/Knife_OsW9m877sce0LdsO.json +++ b/packs/source/hand-to-hand-weapons/Knife_OsW9m877sce0LdsO.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/switchblade.svg", "effects": [], "_key": "!items!OsW9m877sce0LdsO" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Large_Sword_ryiBL4PoYTutSaZ5.json b/packs/source/hand-to-hand-weapons/Large_Sword_ryiBL4PoYTutSaZ5.json index 61cff3e..c33f11d 100644 --- a/packs/source/hand-to-hand-weapons/Large_Sword_ryiBL4PoYTutSaZ5.json +++ b/packs/source/hand-to-hand-weapons/Large_Sword_ryiBL4PoYTutSaZ5.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/katana.svg", "effects": [], "_key": "!items!ryiBL4PoYTutSaZ5" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Rifle_Butt_JAhifOCkSG5Iwaeo.json b/packs/source/hand-to-hand-weapons/Rifle_Butt_JAhifOCkSG5Iwaeo.json index 130e5db..f4756ac 100644 --- a/packs/source/hand-to-hand-weapons/Rifle_Butt_JAhifOCkSG5Iwaeo.json +++ b/packs/source/hand-to-hand-weapons/Rifle_Butt_JAhifOCkSG5Iwaeo.json @@ -23,4 +23,4 @@ "_id": "JAhifOCkSG5Iwaeo", "effects": [], "_key": "!items!JAhifOCkSG5Iwaeo" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Spear_bhdeIJZJA4JEi1iW.json b/packs/source/hand-to-hand-weapons/Spear_bhdeIJZJA4JEi1iW.json index 940a393..ccae28e 100644 --- a/packs/source/hand-to-hand-weapons/Spear_bhdeIJZJA4JEi1iW.json +++ b/packs/source/hand-to-hand-weapons/Spear_bhdeIJZJA4JEi1iW.json @@ -23,4 +23,4 @@ "_id": "bhdeIJZJA4JEi1iW", "effects": [], "_key": "!items!bhdeIJZJA4JEi1iW" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Sword_b9hKP3QHJPzk45YD.json b/packs/source/hand-to-hand-weapons/Sword_b9hKP3QHJPzk45YD.json index c408ef6..e3f5f21 100644 --- a/packs/source/hand-to-hand-weapons/Sword_b9hKP3QHJPzk45YD.json +++ b/packs/source/hand-to-hand-weapons/Sword_b9hKP3QHJPzk45YD.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/stiletto.svg", "effects": [], "_key": "!items!b9hKP3QHJPzk45YD" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Two_handed_Sword_DUJXpTwNqHJCqv6E.json b/packs/source/hand-to-hand-weapons/Two_handed_Sword_DUJXpTwNqHJCqv6E.json index 5b78277..814f9ef 100644 --- a/packs/source/hand-to-hand-weapons/Two_handed_Sword_DUJXpTwNqHJCqv6E.json +++ b/packs/source/hand-to-hand-weapons/Two_handed_Sword_DUJXpTwNqHJCqv6E.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/two-handed-sword.svg", "effects": [], "_key": "!items!DUJXpTwNqHJCqv6E" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Unarmed_Attack_JQEMyFfCHx38gupS.json b/packs/source/hand-to-hand-weapons/Unarmed_Attack_JQEMyFfCHx38gupS.json index 1d27ec2..ec873e4 100644 --- a/packs/source/hand-to-hand-weapons/Unarmed_Attack_JQEMyFfCHx38gupS.json +++ b/packs/source/hand-to-hand-weapons/Unarmed_Attack_JQEMyFfCHx38gupS.json @@ -23,4 +23,4 @@ "_id": "JQEMyFfCHx38gupS", "effects": [], "_key": "!items!JQEMyFfCHx38gupS" -} \ No newline at end of file +} diff --git a/packs/source/hand-to-hand-weapons/Wood_Axe_77d2U7eSBn5AaQk7.json b/packs/source/hand-to-hand-weapons/Wood_Axe_77d2U7eSBn5AaQk7.json index 32016e7..e9d4be7 100644 --- a/packs/source/hand-to-hand-weapons/Wood_Axe_77d2U7eSBn5AaQk7.json +++ b/packs/source/hand-to-hand-weapons/Wood_Axe_77d2U7eSBn5AaQk7.json @@ -23,4 +23,4 @@ "img": "systems/deltagreen/assets/icons/wood-axe.svg", "effects": [], "_key": "!items!77d2U7eSBn5AaQk7" -} \ No newline at end of file +} diff --git a/packs/source/operation-code-name-generator-macro/Generate_Operation_Code_Name_YWm6lbQwW2la81fc.json b/packs/source/operation-code-name-generator-macro/Generate_Operation_Code_Name_YWm6lbQwW2la81fc.json index 0a2d51a..b526e60 100644 --- a/packs/source/operation-code-name-generator-macro/Generate_Operation_Code_Name_YWm6lbQwW2la81fc.json +++ b/packs/source/operation-code-name-generator-macro/Generate_Operation_Code_Name_YWm6lbQwW2la81fc.json @@ -18,4 +18,4 @@ }, "_id": "YWm6lbQwW2la81fc", "_key": "!macros!YWm6lbQwW2la81fc" -} \ No newline at end of file +} diff --git a/packs/source/operation-code-name-generator/Codename_Generator___Adjective_E5pMC6z88h7oJb9n.json b/packs/source/operation-code-name-generator/Codename_Generator___Adjective_E5pMC6z88h7oJb9n.json index 46582bb..ec417e8 100644 --- a/packs/source/operation-code-name-generator/Codename_Generator___Adjective_E5pMC6z88h7oJb9n.json +++ b/packs/source/operation-code-name-generator/Codename_Generator___Adjective_E5pMC6z88h7oJb9n.json @@ -8,10 +8,7 @@ "type": 0, "text": "Able", "weight": 1, - "range": [ - 1, - 1 - ], + "range": [1, 1], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -24,10 +21,7 @@ "type": 0, "text": "Acid", "weight": 1, - "range": [ - 2, - 2 - ], + "range": [2, 2], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -40,10 +34,7 @@ "type": 0, "text": "Active", "weight": 1, - "range": [ - 3, - 3 - ], + "range": [3, 3], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -56,10 +47,7 @@ "type": 0, "text": "Assured", "weight": 1, - "range": [ - 4, - 4 - ], + "range": [4, 4], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -72,10 +60,7 @@ "type": 0, "text": "Aztec", "weight": 1, - "range": [ - 5, - 5 - ], + "range": [5, 5], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -88,10 +73,7 @@ "type": 0, "text": "Big", "weight": 1, - "range": [ - 6, - 6 - ], + "range": [6, 6], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -104,10 +86,7 @@ "type": 0, "text": "Bumpy", "weight": 1, - "range": [ - 7, - 7 - ], + "range": [7, 7], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -120,10 +99,7 @@ "type": 0, "text": "Burnt", "weight": 1, - "range": [ - 8, - 8 - ], + "range": [8, 8], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -136,10 +112,7 @@ "type": 0, "text": "Calm", "weight": 1, - "range": [ - 9, - 9 - ], + "range": [9, 9], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -152,10 +125,7 @@ "type": 0, "text": "Celestial", "weight": 1, - "range": [ - 10, - 10 - ], + "range": [10, 10], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -168,10 +138,7 @@ "type": 0, "text": "Cold", "weight": 1, - "range": [ - 11, - 11 - ], + "range": [11, 11], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -184,10 +151,7 @@ "type": 0, "text": "Constant", "weight": 1, - "range": [ - 12, - 12 - ], + "range": [12, 12], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -200,10 +164,7 @@ "type": 0, "text": "Cryptic", "weight": 1, - "range": [ - 13, - 13 - ], + "range": [13, 13], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -216,10 +177,7 @@ "type": 0, "text": "Crystal", "weight": 1, - "range": [ - 14, - 14 - ], + "range": [14, 14], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -232,10 +190,7 @@ "type": 0, "text": "Dark", "weight": 1, - "range": [ - 15, - 15 - ], + "range": [15, 15], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -248,10 +203,7 @@ "type": 0, "text": "Dawn", "weight": 1, - "range": [ - 16, - 16 - ], + "range": [16, 16], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -264,10 +216,7 @@ "type": 0, "text": "Deep", "weight": 1, - "range": [ - 17, - 17 - ], + "range": [17, 17], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -280,10 +229,7 @@ "type": 0, "text": "Driving", "weight": 1, - "range": [ - 18, - 18 - ], + "range": [18, 18], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -296,10 +242,7 @@ "type": 0, "text": "Empty", "weight": 1, - "range": [ - 19, - 19 - ], + "range": [19, 19], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -312,10 +255,7 @@ "type": 0, "text": "Enduring", "weight": 1, - "range": [ - 20, - 20 - ], + "range": [20, 20], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -328,10 +268,7 @@ "type": 0, "text": "Flexible", "weight": 1, - "range": [ - 21, - 21 - ], + "range": [21, 21], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -344,10 +281,7 @@ "type": 0, "text": "Frequent", "weight": 1, - "range": [ - 22, - 22 - ], + "range": [22, 22], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -360,10 +294,7 @@ "type": 0, "text": "Fluid", "weight": 1, - "range": [ - 23, - 23 - ], + "range": [23, 23], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -376,10 +307,7 @@ "type": 0, "text": "Frozen", "weight": 1, - "range": [ - 24, - 24 - ], + "range": [24, 24], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -392,10 +320,7 @@ "type": 0, "text": "Gallant", "weight": 1, - "range": [ - 25, - 25 - ], + "range": [25, 25], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -408,10 +333,7 @@ "type": 0, "text": "Glass", "weight": 1, - "range": [ - 26, - 26 - ], + "range": [26, 26], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -424,10 +346,7 @@ "type": 0, "text": "Have", "weight": 1, - "range": [ - 27, - 27 - ], + "range": [27, 27], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -440,10 +359,7 @@ "type": 0, "text": "Hidden", "weight": 1, - "range": [ - 28, - 28 - ], + "range": [28, 28], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -456,10 +372,7 @@ "type": 0, "text": "High", "weight": 1, - "range": [ - 29, - 29 - ], + "range": [29, 29], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -472,10 +385,7 @@ "type": 0, "text": "Hot", "weight": 1, - "range": [ - 30, - 30 - ], + "range": [30, 30], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -488,10 +398,7 @@ "type": 0, "text": "Infinite", "weight": 1, - "range": [ - 31, - 31 - ], + "range": [31, 31], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -504,10 +411,7 @@ "type": 0, "text": "Instant", "weight": 1, - "range": [ - 32, - 32 - ], + "range": [32, 32], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -520,10 +424,7 @@ "type": 0, "text": "Jagged", "weight": 1, - "range": [ - 33, - 33 - ], + "range": [33, 33], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -536,10 +437,7 @@ "type": 0, "text": "Jolly", "weight": 1, - "range": [ - 34, - 34 - ], + "range": [34, 34], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -552,10 +450,7 @@ "type": 0, "text": "Juniper", "weight": 1, - "range": [ - 35, - 35 - ], + "range": [35, 35], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -568,10 +463,7 @@ "type": 0, "text": "Keen", "weight": 1, - "range": [ - 36, - 36 - ], + "range": [36, 36], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -584,10 +476,7 @@ "type": 0, "text": "Lazy", "weight": 1, - "range": [ - 37, - 37 - ], + "range": [37, 37], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -600,10 +489,7 @@ "type": 0, "text": "Lost", "weight": 1, - "range": [ - 38, - 38 - ], + "range": [38, 38], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -616,10 +502,7 @@ "type": 0, "text": "Middle", "weight": 1, - "range": [ - 39, - 39 - ], + "range": [39, 39], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -632,10 +515,7 @@ "type": 0, "text": "Neon", "weight": 1, - "range": [ - 40, - 40 - ], + "range": [40, 40], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -648,10 +528,7 @@ "type": 0, "text": "Noble", "weight": 1, - "range": [ - 41, - 41 - ], + "range": [41, 41], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -664,10 +541,7 @@ "type": 0, "text": "Orient", "weight": 1, - "range": [ - 42, - 42 - ], + "range": [42, 42], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -680,10 +554,7 @@ "type": 0, "text": "Pacific", "weight": 1, - "range": [ - 43, - 43 - ], + "range": [43, 43], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -696,10 +567,7 @@ "type": 0, "text": "Patient", "weight": 1, - "range": [ - 44, - 44 - ], + "range": [44, 44], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -712,10 +580,7 @@ "type": 0, "text": "Quick", "weight": 1, - "range": [ - 45, - 45 - ], + "range": [45, 45], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -728,10 +593,7 @@ "type": 0, "text": "Prime", "weight": 1, - "range": [ - 46, - 46 - ], + "range": [46, 46], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -744,10 +606,7 @@ "type": 0, "text": "Silent", "weight": 1, - "range": [ - 47, - 47 - ], + "range": [47, 47], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -760,10 +619,7 @@ "type": 0, "text": "Swift", "weight": 1, - "range": [ - 48, - 48 - ], + "range": [48, 48], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -776,10 +632,7 @@ "type": 0, "text": "Upper", "weight": 1, - "range": [ - 49, - 49 - ], + "range": [49, 49], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -792,10 +645,7 @@ "type": 0, "text": "Wild", "weight": 1, - "range": [ - 50, - 50 - ], + "range": [50, 50], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", diff --git a/packs/source/operation-code-name-generator/Codename_Generator___Color_z1U4mer6RZi2XE9J.json b/packs/source/operation-code-name-generator/Codename_Generator___Color_z1U4mer6RZi2XE9J.json index 0dccc43..68cc364 100644 --- a/packs/source/operation-code-name-generator/Codename_Generator___Color_z1U4mer6RZi2XE9J.json +++ b/packs/source/operation-code-name-generator/Codename_Generator___Color_z1U4mer6RZi2XE9J.json @@ -8,10 +8,7 @@ "type": 0, "text": "Amber", "weight": 1, - "range": [ - 1, - 1 - ], + "range": [1, 1], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -24,10 +21,7 @@ "type": 0, "text": "Aquamarine", "weight": 1, - "range": [ - 2, - 2 - ], + "range": [2, 2], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -40,10 +34,7 @@ "type": 0, "text": "Auburn", "weight": 1, - "range": [ - 3, - 3 - ], + "range": [3, 3], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -56,10 +47,7 @@ "type": 0, "text": "Azure", "weight": 1, - "range": [ - 4, - 4 - ], + "range": [4, 4], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -72,10 +60,7 @@ "type": 0, "text": "Beige", "weight": 1, - "range": [ - 5, - 5 - ], + "range": [5, 5], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -88,10 +73,7 @@ "type": 0, "text": "Black", "weight": 1, - "range": [ - 6, - 6 - ], + "range": [6, 6], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -104,10 +86,7 @@ "type": 0, "text": "Blue", "weight": 1, - "range": [ - 7, - 7 - ], + "range": [7, 7], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -120,10 +99,7 @@ "type": 0, "text": "Bronze", "weight": 1, - "range": [ - 8, - 8 - ], + "range": [8, 8], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -136,10 +112,7 @@ "type": 0, "text": "Brown", "weight": 1, - "range": [ - 9, - 9 - ], + "range": [9, 9], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -152,10 +125,7 @@ "type": 0, "text": "Burgundy", "weight": 1, - "range": [ - 10, - 10 - ], + "range": [10, 10], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -168,10 +138,7 @@ "type": 0, "text": "Carmine", "weight": 1, - "range": [ - 11, - 11 - ], + "range": [11, 11], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -184,10 +151,7 @@ "type": 0, "text": "Chocolate", "weight": 1, - "range": [ - 12, - 12 - ], + "range": [12, 12], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -200,10 +164,7 @@ "type": 0, "text": "Cobalt", "weight": 1, - "range": [ - 13, - 13 - ], + "range": [13, 13], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -216,10 +177,7 @@ "type": 0, "text": "Coffee", "weight": 1, - "range": [ - 14, - 14 - ], + "range": [14, 14], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -232,10 +190,7 @@ "type": 0, "text": "Copper", "weight": 1, - "range": [ - 15, - 15 - ], + "range": [15, 15], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -248,10 +203,7 @@ "type": 0, "text": "Crimson", "weight": 1, - "range": [ - 16, - 16 - ], + "range": [16, 16], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -264,10 +216,7 @@ "type": 0, "text": "Cyan", "weight": 1, - "range": [ - 17, - 17 - ], + "range": [17, 17], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -280,10 +229,7 @@ "type": 0, "text": "Emerald", "weight": 1, - "range": [ - 18, - 18 - ], + "range": [18, 18], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -296,10 +242,7 @@ "type": 0, "text": "Gold", "weight": 1, - "range": [ - 19, - 19 - ], + "range": [19, 19], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -312,10 +255,7 @@ "type": 0, "text": "Gray", "weight": 1, - "range": [ - 20, - 20 - ], + "range": [20, 20], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -328,10 +268,7 @@ "type": 0, "text": "Green", "weight": 1, - "range": [ - 21, - 21 - ], + "range": [21, 21], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -344,10 +281,7 @@ "type": 0, "text": "Ivory", "weight": 1, - "range": [ - 22, - 22 - ], + "range": [22, 22], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -360,10 +294,7 @@ "type": 0, "text": "Jade", "weight": 1, - "range": [ - 23, - 23 - ], + "range": [23, 23], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -376,10 +307,7 @@ "type": 0, "text": "Lemon", "weight": 1, - "range": [ - 24, - 24 - ], + "range": [24, 24], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -392,10 +320,7 @@ "type": 0, "text": "Lilac", "weight": 1, - "range": [ - 25, - 25 - ], + "range": [25, 25], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -408,10 +333,7 @@ "type": 0, "text": "Lime", "weight": 1, - "range": [ - 26, - 26 - ], + "range": [26, 26], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -424,10 +346,7 @@ "type": 0, "text": "Magenta", "weight": 1, - "range": [ - 27, - 27 - ], + "range": [27, 27], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -440,10 +359,7 @@ "type": 0, "text": "Maroon", "weight": 1, - "range": [ - 28, - 28 - ], + "range": [28, 28], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -456,10 +372,7 @@ "type": 0, "text": "Obsidian", "weight": 1, - "range": [ - 29, - 29 - ], + "range": [29, 29], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -472,10 +385,7 @@ "type": 0, "text": "Ochre", "weight": 1, - "range": [ - 30, - 30 - ], + "range": [30, 30], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -488,10 +398,7 @@ "type": 0, "text": "Olive", "weight": 1, - "range": [ - 31, - 31 - ], + "range": [31, 31], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -504,10 +411,7 @@ "type": 0, "text": "Orchid", "weight": 1, - "range": [ - 32, - 32 - ], + "range": [32, 32], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -520,10 +424,7 @@ "type": 0, "text": "Pink", "weight": 1, - "range": [ - 33, - 33 - ], + "range": [33, 33], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -536,10 +437,7 @@ "type": 0, "text": "Purple", "weight": 1, - "range": [ - 34, - 34 - ], + "range": [34, 34], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -552,10 +450,7 @@ "type": 0, "text": "Red", "weight": 1, - "range": [ - 35, - 35 - ], + "range": [35, 35], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -568,10 +463,7 @@ "type": 0, "text": "Rose", "weight": 1, - "range": [ - 36, - 36 - ], + "range": [36, 36], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -584,10 +476,7 @@ "type": 0, "text": "Rouge", "weight": 1, - "range": [ - 37, - 37 - ], + "range": [37, 37], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -600,10 +489,7 @@ "type": 0, "text": "Ruby", "weight": 1, - "range": [ - 38, - 38 - ], + "range": [38, 38], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -616,10 +502,7 @@ "type": 0, "text": "Sapphire", "weight": 1, - "range": [ - 39, - 39 - ], + "range": [39, 39], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -632,10 +515,7 @@ "type": 0, "text": "Scarlet", "weight": 1, - "range": [ - 40, - 40 - ], + "range": [40, 40], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -648,10 +528,7 @@ "type": 0, "text": "Silver", "weight": 1, - "range": [ - 41, - 41 - ], + "range": [41, 41], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -664,10 +541,7 @@ "type": 0, "text": "Slate", "weight": 1, - "range": [ - 42, - 42 - ], + "range": [42, 42], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -680,10 +554,7 @@ "type": 0, "text": "Tan", "weight": 1, - "range": [ - 43, - 43 - ], + "range": [43, 43], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -696,10 +567,7 @@ "type": 0, "text": "Teal", "weight": 1, - "range": [ - 44, - 44 - ], + "range": [44, 44], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -712,10 +580,7 @@ "type": 0, "text": "Turquoise", "weight": 1, - "range": [ - 45, - 45 - ], + "range": [45, 45], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -728,10 +593,7 @@ "type": 0, "text": "Ultramarine", "weight": 1, - "range": [ - 46, - 46 - ], + "range": [46, 46], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -744,10 +606,7 @@ "type": 0, "text": "Violet", "weight": 1, - "range": [ - 47, - 47 - ], + "range": [47, 47], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -760,10 +619,7 @@ "type": 0, "text": "Viridian", "weight": 1, - "range": [ - 48, - 48 - ], + "range": [48, 48], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -776,10 +632,7 @@ "type": 0, "text": "White", "weight": 1, - "range": [ - 49, - 49 - ], + "range": [49, 49], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -792,10 +645,7 @@ "type": 0, "text": "Yellow", "weight": 1, - "range": [ - 50, - 50 - ], + "range": [50, 50], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", diff --git a/packs/source/operation-code-name-generator/Codename_Generator___Noun_uSLhMbKn4GRvCcPd.json b/packs/source/operation-code-name-generator/Codename_Generator___Noun_uSLhMbKn4GRvCcPd.json index a220f4f..e4848fb 100644 --- a/packs/source/operation-code-name-generator/Codename_Generator___Noun_uSLhMbKn4GRvCcPd.json +++ b/packs/source/operation-code-name-generator/Codename_Generator___Noun_uSLhMbKn4GRvCcPd.json @@ -8,10 +8,7 @@ "type": 0, "text": "Ace", "weight": 1, - "range": [ - 1, - 1 - ], + "range": [1, 1], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -24,10 +21,7 @@ "type": 0, "text": "Aegis", "weight": 1, - "range": [ - 2, - 2 - ], + "range": [2, 2], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -40,10 +34,7 @@ "type": 0, "text": "Angel", "weight": 1, - "range": [ - 3, - 3 - ], + "range": [3, 3], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -56,10 +47,7 @@ "type": 0, "text": "Anvil", "weight": 1, - "range": [ - 4, - 4 - ], + "range": [4, 4], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -72,10 +60,7 @@ "type": 0, "text": "Archer", "weight": 1, - "range": [ - 5, - 5 - ], + "range": [5, 5], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -88,10 +73,7 @@ "type": 0, "text": "Azimuth", "weight": 1, - "range": [ - 6, - 6 - ], + "range": [6, 6], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -104,10 +86,7 @@ "type": 0, "text": "Ballgame", "weight": 1, - "range": [ - 7, - 7 - ], + "range": [7, 7], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -120,10 +99,7 @@ "type": 0, "text": "Bells", "weight": 1, - "range": [ - 8, - 8 - ], + "range": [8, 8], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -136,10 +112,7 @@ "type": 0, "text": "Branch", "weight": 1, - "range": [ - 9, - 9 - ], + "range": [9, 9], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -152,10 +125,7 @@ "type": 0, "text": "Breath", "weight": 1, - "range": [ - 10, - 10 - ], + "range": [10, 10], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -168,10 +138,7 @@ "type": 0, "text": "Buckle", "weight": 1, - "range": [ - 11, - 11 - ], + "range": [11, 11], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -184,10 +151,7 @@ "type": 0, "text": "Buzz", "weight": 1, - "range": [ - 12, - 12 - ], + "range": [12, 12], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -200,10 +164,7 @@ "type": 0, "text": "Castle", "weight": 1, - "range": [ - 13, - 13 - ], + "range": [13, 13], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -216,10 +177,7 @@ "type": 0, "text": "Chance", "weight": 1, - "range": [ - 14, - 14 - ], + "range": [14, 14], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -232,10 +190,7 @@ "type": 0, "text": "Cobra", "weight": 1, - "range": [ - 15, - 15 - ], + "range": [15, 15], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -248,10 +203,7 @@ "type": 0, "text": "Crown", "weight": 1, - "range": [ - 16, - 16 - ], + "range": [16, 16], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -264,10 +216,7 @@ "type": 0, "text": "Daze", "weight": 1, - "range": [ - 17, - 17 - ], + "range": [17, 17], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -280,10 +229,7 @@ "type": 0, "text": "Doughnut", "weight": 1, - "range": [ - 18, - 18 - ], + "range": [18, 18], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -296,10 +242,7 @@ "type": 0, "text": "Dream", "weight": 1, - "range": [ - 19, - 19 - ], + "range": [19, 19], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -312,10 +255,7 @@ "type": 0, "text": "Drive", "weight": 1, - "range": [ - 20, - 20 - ], + "range": [20, 20], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -328,10 +268,7 @@ "type": 0, "text": "Engine", "weight": 1, - "range": [ - 21, - 21 - ], + "range": [21, 21], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -344,10 +281,7 @@ "type": 0, "text": "Exchange", "weight": 1, - "range": [ - 22, - 22 - ], + "range": [22, 22], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -360,10 +294,7 @@ "type": 0, "text": "Express", "weight": 1, - "range": [ - 23, - 23 - ], + "range": [23, 23], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -376,10 +307,7 @@ "type": 0, "text": "Eye", "weight": 1, - "range": [ - 24, - 24 - ], + "range": [24, 24], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -392,10 +320,7 @@ "type": 0, "text": "Flash", "weight": 1, - "range": [ - 25, - 25 - ], + "range": [25, 25], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -408,10 +333,7 @@ "type": 0, "text": "Forge", "weight": 1, - "range": [ - 26, - 26 - ], + "range": [26, 26], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -424,10 +346,7 @@ "type": 0, "text": "Frost", "weight": 1, - "range": [ - 27, - 27 - ], + "range": [27, 27], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -440,10 +359,7 @@ "type": 0, "text": "Furrow", "weight": 1, - "range": [ - 28, - 28 - ], + "range": [28, 28], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -456,10 +372,7 @@ "type": 0, "text": "Gate", "weight": 1, - "range": [ - 29, - 29 - ], + "range": [29, 29], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -472,10 +385,7 @@ "type": 0, "text": "Glacier", "weight": 1, - "range": [ - 30, - 30 - ], + "range": [30, 30], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -488,10 +398,7 @@ "type": 0, "text": "Glory", "weight": 1, - "range": [ - 31, - 31 - ], + "range": [31, 31], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -504,10 +411,7 @@ "type": 0, "text": "Griffin", "weight": 1, - "range": [ - 32, - 32 - ], + "range": [32, 32], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -520,10 +424,7 @@ "type": 0, "text": "Hammer", "weight": 1, - "range": [ - 33, - 33 - ], + "range": [33, 33], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -536,10 +437,7 @@ "type": 0, "text": "Harvest", "weight": 1, - "range": [ - 34, - 34 - ], + "range": [34, 34], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -552,10 +450,7 @@ "type": 0, "text": "Hat", "weight": 1, - "range": [ - 35, - 35 - ], + "range": [35, 35], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -568,10 +463,7 @@ "type": 0, "text": "Hoop", "weight": 1, - "range": [ - 36, - 36 - ], + "range": [36, 36], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -584,10 +476,7 @@ "type": 0, "text": "Honey", "weight": 1, - "range": [ - 37, - 37 - ], + "range": [37, 37], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -600,10 +489,7 @@ "type": 0, "text": "Horizon", "weight": 1, - "range": [ - 38, - 38 - ], + "range": [38, 38], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -616,10 +502,7 @@ "type": 0, "text": "Jackal", "weight": 1, - "range": [ - 39, - 39 - ], + "range": [39, 39], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -632,10 +515,7 @@ "type": 0, "text": "Jewell", "weight": 1, - "range": [ - 40, - 40 - ], + "range": [40, 40], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -648,10 +528,7 @@ "type": 0, "text": "Jukebox", "weight": 1, - "range": [ - 41, - 41 - ], + "range": [41, 41], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -664,10 +541,7 @@ "type": 0, "text": "Junction", "weight": 1, - "range": [ - 42, - 42 - ], + "range": [42, 42], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -680,10 +554,7 @@ "type": 0, "text": "Keystone", "weight": 1, - "range": [ - 43, - 43 - ], + "range": [43, 43], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -696,10 +567,7 @@ "type": 0, "text": "Knight", "weight": 1, - "range": [ - 44, - 44 - ], + "range": [44, 44], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -712,10 +580,7 @@ "type": 0, "text": "Lift", "weight": 1, - "range": [ - 45, - 45 - ], + "range": [45, 45], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -728,10 +593,7 @@ "type": 0, "text": "Line", "weight": 1, - "range": [ - 46, - 46 - ], + "range": [46, 46], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -744,10 +606,7 @@ "type": 0, "text": "Light", "weight": 1, - "range": [ - 47, - 47 - ], + "range": [47, 47], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -760,10 +619,7 @@ "type": 0, "text": "Lotus", "weight": 1, - "range": [ - 48, - 48 - ], + "range": [48, 48], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -776,10 +632,7 @@ "type": 0, "text": "Mile", "weight": 1, - "range": [ - 49, - 49 - ], + "range": [49, 49], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -792,10 +645,7 @@ "type": 0, "text": "Mist", "weight": 1, - "range": [ - 50, - 50 - ], + "range": [50, 50], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -808,10 +658,7 @@ "type": 0, "text": "Mongoose", "weight": 1, - "range": [ - 51, - 51 - ], + "range": [51, 51], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -824,10 +671,7 @@ "type": 0, "text": "Moon", "weight": 1, - "range": [ - 52, - 52 - ], + "range": [52, 52], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -840,10 +684,7 @@ "type": 0, "text": "Mosaic", "weight": 1, - "range": [ - 53, - 53 - ], + "range": [53, 53], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -856,10 +697,7 @@ "type": 0, "text": "Mountain", "weight": 1, - "range": [ - 54, - 54 - ], + "range": [54, 54], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -872,10 +710,7 @@ "type": 0, "text": "Nickel", "weight": 1, - "range": [ - 55, - 55 - ], + "range": [55, 55], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -888,10 +723,7 @@ "type": 0, "text": "Night", "weight": 1, - "range": [ - 56, - 56 - ], + "range": [56, 56], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -904,10 +736,7 @@ "type": 0, "text": "Nimbus", "weight": 1, - "range": [ - 57, - 57 - ], + "range": [57, 57], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -920,10 +749,7 @@ "type": 0, "text": "Nugget", "weight": 1, - "range": [ - 58, - 58 - ], + "range": [58, 58], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -936,10 +762,7 @@ "type": 0, "text": "Octave", "weight": 1, - "range": [ - 59, - 59 - ], + "range": [59, 59], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -952,10 +775,7 @@ "type": 0, "text": "Odyssey", "weight": 1, - "range": [ - 60, - 60 - ], + "range": [60, 60], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -968,10 +788,7 @@ "type": 0, "text": "Palace", "weight": 1, - "range": [ - 61, - 61 - ], + "range": [61, 61], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -984,10 +801,7 @@ "type": 0, "text": "Paladin", "weight": 1, - "range": [ - 62, - 62 - ], + "range": [62, 62], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1000,10 +814,7 @@ "type": 0, "text": "Pipe", "weight": 1, - "range": [ - 63, - 63 - ], + "range": [63, 63], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1016,10 +827,7 @@ "type": 0, "text": "Player", "weight": 1, - "range": [ - 64, - 64 - ], + "range": [64, 64], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1032,10 +840,7 @@ "type": 0, "text": "Quartz", "weight": 1, - "range": [ - 65, - 65 - ], + "range": [65, 65], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1048,10 +853,7 @@ "type": 0, "text": "Quest", "weight": 1, - "range": [ - 66, - 66 - ], + "range": [66, 66], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1064,10 +866,7 @@ "type": 0, "text": "Rain", "weight": 1, - "range": [ - 67, - 67 - ], + "range": [67, 67], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1080,10 +879,7 @@ "type": 0, "text": "Reach", "weight": 1, - "range": [ - 68, - 68 - ], + "range": [68, 68], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1096,10 +892,7 @@ "type": 0, "text": "Ride", "weight": 1, - "range": [ - 69, - 69 - ], + "range": [69, 69], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1112,10 +905,7 @@ "type": 0, "text": "Ring", "weight": 1, - "range": [ - 70, - 70 - ], + "range": [70, 70], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1128,10 +918,7 @@ "type": 0, "text": "Safari", "weight": 1, - "range": [ - 71, - 71 - ], + "range": [71, 71], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1144,10 +931,7 @@ "type": 0, "text": "Sentry", "weight": 1, - "range": [ - 72, - 72 - ], + "range": [72, 72], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1160,10 +944,7 @@ "type": 0, "text": "Shadow", "weight": 1, - "range": [ - 73, - 73 - ], + "range": [73, 73], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1176,10 +957,7 @@ "type": 0, "text": "Shield", "weight": 1, - "range": [ - 74, - 74 - ], + "range": [74, 74], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1192,10 +970,7 @@ "type": 0, "text": "Siren", "weight": 1, - "range": [ - 75, - 75 - ], + "range": [75, 75], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1208,10 +983,7 @@ "type": 0, "text": "Slugger", "weight": 1, - "range": [ - 76, - 76 - ], + "range": [76, 76], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1224,10 +996,7 @@ "type": 0, "text": "Smoke", "weight": 1, - "range": [ - 77, - 77 - ], + "range": [77, 77], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1240,10 +1009,7 @@ "type": 0, "text": "Sonnet", "weight": 1, - "range": [ - 78, - 78 - ], + "range": [78, 78], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1256,10 +1022,7 @@ "type": 0, "text": "Spark", "weight": 1, - "range": [ - 79, - 79 - ], + "range": [79, 79], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1272,10 +1035,7 @@ "type": 0, "text": "Star", "weight": 1, - "range": [ - 80, - 80 - ], + "range": [80, 80], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1288,10 +1048,7 @@ "type": 0, "text": "Stare", "weight": 1, - "range": [ - 81, - 81 - ], + "range": [81, 81], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1304,10 +1061,7 @@ "type": 0, "text": "Storm", "weight": 1, - "range": [ - 82, - 82 - ], + "range": [82, 82], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1320,10 +1074,7 @@ "type": 0, "text": "Stranger", "weight": 1, - "range": [ - 83, - 83 - ], + "range": [83, 83], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1336,10 +1087,7 @@ "type": 0, "text": "Summer", "weight": 1, - "range": [ - 84, - 84 - ], + "range": [84, 84], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1352,10 +1100,7 @@ "type": 0, "text": "Swap", "weight": 1, - "range": [ - 85, - 85 - ], + "range": [85, 85], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1368,10 +1113,7 @@ "type": 0, "text": "Sword", "weight": 1, - "range": [ - 86, - 86 - ], + "range": [86, 86], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1384,10 +1126,7 @@ "type": 0, "text": "Talisman", "weight": 1, - "range": [ - 87, - 87 - ], + "range": [87, 87], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1400,10 +1139,7 @@ "type": 0, "text": "Tears", "weight": 1, - "range": [ - 88, - 88 - ], + "range": [88, 88], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1416,10 +1152,7 @@ "type": 0, "text": "Thorn", "weight": 1, - "range": [ - 89, - 89 - ], + "range": [89, 89], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1432,10 +1165,7 @@ "type": 0, "text": "Throne", "weight": 1, - "range": [ - 90, - 90 - ], + "range": [90, 90], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1448,10 +1178,7 @@ "type": 0, "text": "Trip", "weight": 1, - "range": [ - 91, - 91 - ], + "range": [91, 91], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1464,10 +1191,7 @@ "type": 0, "text": "Thunder", "weight": 1, - "range": [ - 92, - 92 - ], + "range": [92, 92], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1480,10 +1204,7 @@ "type": 0, "text": "Urge", "weight": 1, - "range": [ - 93, - 93 - ], + "range": [93, 93], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1496,10 +1217,7 @@ "type": 0, "text": "Usher", "weight": 1, - "range": [ - 94, - 94 - ], + "range": [94, 94], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1512,10 +1230,7 @@ "type": 0, "text": "Vanguard", "weight": 1, - "range": [ - 95, - 95 - ], + "range": [95, 95], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1528,10 +1243,7 @@ "type": 0, "text": "Venture", "weight": 1, - "range": [ - 96, - 96 - ], + "range": [96, 96], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1544,10 +1256,7 @@ "type": 0, "text": "Vision", "weight": 1, - "range": [ - 97, - 97 - ], + "range": [97, 97], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1560,10 +1269,7 @@ "type": 0, "text": "Voice", "weight": 1, - "range": [ - 98, - 98 - ], + "range": [98, 98], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1576,10 +1282,7 @@ "type": 0, "text": "Watch", "weight": 1, - "range": [ - 99, - 99 - ], + "range": [99, 99], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -1592,10 +1295,7 @@ "type": 0, "text": "Whisper", "weight": 1, - "range": [ - 100, - 100 - ], + "range": [100, 100], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", diff --git a/packs/source/operation-code-name-generator/Codename_Generator___Phonetic_hHTKKvSi4BJzBw25.json b/packs/source/operation-code-name-generator/Codename_Generator___Phonetic_hHTKKvSi4BJzBw25.json index 76d8c7d..1b1a215 100644 --- a/packs/source/operation-code-name-generator/Codename_Generator___Phonetic_hHTKKvSi4BJzBw25.json +++ b/packs/source/operation-code-name-generator/Codename_Generator___Phonetic_hHTKKvSi4BJzBw25.json @@ -8,10 +8,7 @@ "type": 0, "text": "Alpha", "weight": 1, - "range": [ - 1, - 1 - ], + "range": [1, 1], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -24,10 +21,7 @@ "type": 0, "text": "Apple", "weight": 1, - "range": [ - 2, - 2 - ], + "range": [2, 2], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -40,10 +34,7 @@ "type": 0, "text": "Baker", "weight": 1, - "range": [ - 3, - 3 - ], + "range": [3, 3], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -56,10 +47,7 @@ "type": 0, "text": "Bravo", "weight": 1, - "range": [ - 4, - 4 - ], + "range": [4, 4], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -72,10 +60,7 @@ "type": 0, "text": "Charlie", "weight": 1, - "range": [ - 5, - 5 - ], + "range": [5, 5], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -88,10 +73,7 @@ "type": 0, "text": "Delta", "weight": 1, - "range": [ - 6, - 6 - ], + "range": [6, 6], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -104,10 +86,7 @@ "type": 0, "text": "Dog", "weight": 1, - "range": [ - 7, - 7 - ], + "range": [7, 7], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -120,10 +99,7 @@ "type": 0, "text": "Echo", "weight": 1, - "range": [ - 8, - 8 - ], + "range": [8, 8], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -136,10 +112,7 @@ "type": 0, "text": "Foxtrot", "weight": 1, - "range": [ - 9, - 9 - ], + "range": [9, 9], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -152,10 +125,7 @@ "type": 0, "text": "Freddy", "weight": 1, - "range": [ - 10, - 10 - ], + "range": [10, 10], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -168,10 +138,7 @@ "type": 0, "text": "Golf", "weight": 1, - "range": [ - 11, - 11 - ], + "range": [11, 11], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -184,10 +151,7 @@ "type": 0, "text": "George", "weight": 1, - "range": [ - 12, - 12 - ], + "range": [12, 12], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -200,10 +164,7 @@ "type": 0, "text": "Howie", "weight": 1, - "range": [ - 13, - 13 - ], + "range": [13, 13], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -216,10 +177,7 @@ "type": 0, "text": "Hotel", "weight": 1, - "range": [ - 14, - 14 - ], + "range": [14, 14], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -232,10 +190,7 @@ "type": 0, "text": "India", "weight": 1, - "range": [ - 15, - 15 - ], + "range": [15, 15], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -248,10 +203,7 @@ "type": 0, "text": "Juliet", "weight": 1, - "range": [ - 16, - 16 - ], + "range": [16, 16], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -264,10 +216,7 @@ "type": 0, "text": "Kilo", "weight": 1, - "range": [ - 17, - 17 - ], + "range": [17, 17], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -280,10 +229,7 @@ "type": 0, "text": "Lima", "weight": 1, - "range": [ - 18, - 18 - ], + "range": [18, 18], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -296,10 +242,7 @@ "type": 0, "text": "Metro", "weight": 1, - "range": [ - 19, - 19 - ], + "range": [19, 19], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -312,10 +255,7 @@ "type": 0, "text": "Mother", "weight": 1, - "range": [ - 20, - 20 - ], + "range": [20, 20], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -328,10 +268,7 @@ "type": 0, "text": "November", "weight": 1, - "range": [ - 21, - 21 - ], + "range": [21, 21], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -344,10 +281,7 @@ "type": 0, "text": "Nuts", "weight": 1, - "range": [ - 22, - 22 - ], + "range": [22, 22], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -360,10 +294,7 @@ "type": 0, "text": "Oboe", "weight": 1, - "range": [ - 23, - 23 - ], + "range": [23, 23], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -376,10 +307,7 @@ "type": 0, "text": "Oscar", "weight": 1, - "range": [ - 24, - 24 - ], + "range": [24, 24], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -392,10 +320,7 @@ "type": 0, "text": "Papa", "weight": 1, - "range": [ - 25, - 25 - ], + "range": [25, 25], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -408,10 +333,7 @@ "type": 0, "text": "Quebec", "weight": 1, - "range": [ - 26, - 26 - ], + "range": [26, 26], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -424,10 +346,7 @@ "type": 0, "text": "Queen", "weight": 1, - "range": [ - 27, - 27 - ], + "range": [27, 27], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -440,10 +359,7 @@ "type": 0, "text": "Romeo", "weight": 1, - "range": [ - 28, - 28 - ], + "range": [28, 28], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -456,10 +372,7 @@ "type": 0, "text": "Sierra", "weight": 1, - "range": [ - 29, - 29 - ], + "range": [29, 29], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -472,10 +385,7 @@ "type": 0, "text": "Sugar", "weight": 1, - "range": [ - 30, - 30 - ], + "range": [30, 30], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -488,10 +398,7 @@ "type": 0, "text": "Tango", "weight": 1, - "range": [ - 31, - 31 - ], + "range": [31, 31], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -504,10 +411,7 @@ "type": 0, "text": "Tommy", "weight": 1, - "range": [ - 32, - 32 - ], + "range": [32, 32], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -520,10 +424,7 @@ "type": 0, "text": "Uncle", "weight": 1, - "range": [ - 33, - 33 - ], + "range": [33, 33], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -536,10 +437,7 @@ "type": 0, "text": "Union", "weight": 1, - "range": [ - 34, - 34 - ], + "range": [34, 34], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -552,10 +450,7 @@ "type": 0, "text": "Victor", "weight": 1, - "range": [ - 35, - 35 - ], + "range": [35, 35], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -568,10 +463,7 @@ "type": 0, "text": "Whisky", "weight": 1, - "range": [ - 36, - 36 - ], + "range": [36, 36], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -584,10 +476,7 @@ "type": 0, "text": "X-Ray", "weight": 1, - "range": [ - 37, - 37 - ], + "range": [37, 37], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -600,10 +489,7 @@ "type": 0, "text": "Yankee", "weight": 1, - "range": [ - 38, - 38 - ], + "range": [38, 38], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -616,10 +502,7 @@ "type": 0, "text": "Zebra", "weight": 1, - "range": [ - 39, - 39 - ], + "range": [39, 39], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -632,10 +515,7 @@ "type": 0, "text": "Zulu", "weight": 1, - "range": [ - 40, - 40 - ], + "range": [40, 40], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -648,10 +528,7 @@ "type": 0, "text": "Won", "weight": 1, - "range": [ - 41, - 41 - ], + "range": [41, 41], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -664,10 +541,7 @@ "type": 0, "text": "Two", "weight": 1, - "range": [ - 42, - 42 - ], + "range": [42, 42], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -680,10 +554,7 @@ "type": 0, "text": "Tree", "weight": 1, - "range": [ - 43, - 43 - ], + "range": [43, 43], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -696,10 +567,7 @@ "type": 0, "text": "Fower", "weight": 1, - "range": [ - 44, - 44 - ], + "range": [44, 44], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -712,10 +580,7 @@ "type": 0, "text": "Fife", "weight": 1, - "range": [ - 45, - 45 - ], + "range": [45, 45], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -728,10 +593,7 @@ "type": 0, "text": "Six", "weight": 1, - "range": [ - 46, - 46 - ], + "range": [46, 46], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -744,10 +606,7 @@ "type": 0, "text": "Seven", "weight": 1, - "range": [ - 47, - 47 - ], + "range": [47, 47], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -760,10 +619,7 @@ "type": 0, "text": "Ait", "weight": 1, - "range": [ - 48, - 48 - ], + "range": [48, 48], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -776,10 +632,7 @@ "type": 0, "text": "Niner", "weight": 1, - "range": [ - 49, - 49 - ], + "range": [49, 49], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -792,10 +645,7 @@ "type": 0, "text": "Zero", "weight": 1, - "range": [ - 50, - 50 - ], + "range": [50, 50], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", diff --git a/packs/source/operation-code-name-generator/Codename_Part_Combinations_i2KHsJlagC3QpcsW.json b/packs/source/operation-code-name-generator/Codename_Part_Combinations_i2KHsJlagC3QpcsW.json index e2b7669..4ef6024 100644 --- a/packs/source/operation-code-name-generator/Codename_Part_Combinations_i2KHsJlagC3QpcsW.json +++ b/packs/source/operation-code-name-generator/Codename_Part_Combinations_i2KHsJlagC3QpcsW.json @@ -8,10 +8,7 @@ "type": 0, "text": "Color-Noun", "weight": 1, - "range": [ - 1, - 1 - ], + "range": [1, 1], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -24,10 +21,7 @@ "type": 0, "text": "Adjective-Noun", "weight": 1, - "range": [ - 2, - 2 - ], + "range": [2, 2], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -40,10 +34,7 @@ "type": 0, "text": "Noun-Noun", "weight": 1, - "range": [ - 3, - 3 - ], + "range": [3, 3], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", @@ -56,10 +47,7 @@ "type": 0, "text": "Phonetic-Noun", "weight": 1, - "range": [ - 4, - 4 - ], + "range": [4, 4], "drawn": false, "flags": {}, "img": "icons/svg/d20-black.svg", diff --git a/system.json b/system.json index cb8a05a..9e8677d 100644 --- a/system.json +++ b/system.json @@ -13,20 +13,15 @@ { "name": "jalensailin", "discord": "jalensailin" - } + } ], "version": "1.3.1", "compatibility": { "minimum": "11", "verified": "11" }, - "esmodules": [ - "module/deltagreen.js" - ], - "styles": [ - "css/deltagreen.css", - "css/dialogue.css" - ], + "esmodules": ["module/deltagreen.js"], + "styles": ["css/deltagreen.css", "css/dialogue.css"], "languages": [ { "lang": "en", @@ -139,4 +134,4 @@ "gridUnits": "m", "primaryTokenAttribute": "health", "secondaryTokenAttribute": "wp" -} \ No newline at end of file +} diff --git a/template.json b/template.json index a5af475..f42a412 100644 --- a/template.json +++ b/template.json @@ -1,582 +1,552 @@ { - "Actor": { - "types": [ - "agent", - "unnatural", - "npc", - "vehicle" - ], - "templates": { - "base": { - "health": { - "value": 10, - "min": 0, - "max": 10 - }, - "wp": { - "value": 10, - "min": 0, - "max": 10 - }, - "statistics": { - "str": { - "value": 10, - "distinguishing_feature": "" - }, - "con": { - "value": 10, - "distinguishing_feature": "" - }, - "dex": { - "value": 10, - "distinguishing_feature": "" - }, - "int": { - "value": 10, - "distinguishing_feature": "" - }, - "pow": { - "value": 10, - "distinguishing_feature": "" - }, - "cha": { - "value": 10, - "distinguishing_feature": "" - } - } - }, - "human_skills": { - "skills": { - "accounting": { - "label": "Accounting", - "proficiency": 10, - "failure": false - }, - "alertness": { - "label": "Alertness", - "proficiency": 20, - "failure": false - }, - "anthropology": { - "label": "Anthropology", - "proficiency": 0, - "failure": false - }, - "archeology": { - "label": "Archeology", - "proficiency": 0, - "failure": false - }, - "artillery": { - "label": "Artillery", - "proficiency": 0, - "failure": false - }, - "athletics": { - "label": "Athletics", - "proficiency": 30, - "failure": false - }, - "bureaucracy": { - "label": "Bureaucracy", - "proficiency": 10, - "failure": false - }, - "computer_science": { - "label": "Computer Science", - "proficiency": 0, - "failure": false - }, - "criminology": { - "label": "Criminology", - "proficiency": 10, - "failure": false - }, - "demolitions": { - "label": "Demolitions", - "proficiency": 0, - "failure": false - }, - "disguise": { - "label": "Disguise", - "proficiency": 10, - "failure": false - }, - "dodge": { - "label": "Dodge", - "proficiency": 30, - "failure": false - }, - "drive": { - "label": "Drive", - "proficiency": 20, - "failure": false - }, - "firearms": { - "label": "Firearms", - "proficiency": 20, - "failure": false - }, - "first_aid": { - "label": "First Aid", - "proficiency": 10, - "failure": false - }, - "forensics": { - "label": "Forensics", - "proficiency": 0, - "failure": false - }, - "heavy_machiner": { - "label": "Heavy Machinery", - "proficiency": 10, - "failure": false - }, - "heavy_weapons": { - "label": "Heavy Weapons", - "proficiency": 0, - "failure": false - }, - "history": { - "label": "History", - "proficiency": 10, - "failure": false - }, - "humint": { - "label": "HUMINT", - "proficiency": 10, - "failure": false - }, - "law": { - "label": "Law", - "proficiency": 0, - "failure": false - }, - "medicine": { - "label": "Medicine", - "proficiency": 0, - "failure": false - }, - "melee_weapons": { - "label": "Melee Weapons", - "proficiency": 30, - "failure": false - }, - "navigate": { - "label": "Navigate", - "proficiency": 10, - "failure": false - }, - "occult": { - "label": "Occult", - "proficiency": 10, - "failure": false - }, - "persuade": { - "label": "Persuade", - "proficiency": 20, - "failure": false - }, - "pharmacy": { - "label": "Pharmacy", - "proficiency": 0, - "failure": false - }, - "psychotherapy": { - "label": "Psychotherapy", - "proficiency": 10, - "failure": false - }, - "ride": { - "label": "Ride", - "proficiency": 10, - "failure": false - }, - "search": { - "label": "Search", - "proficiency": 20, - "failure": false - }, - "sigint": { - "label": "SIGINT", - "proficiency": 0, - "failure": false - }, - "stealth": { - "label": "Stealth", - "proficiency": 10, - "failure": false - }, - "surgery": { - "label": "Surgery", - "proficiency": 0, - "failure": false - }, - "survival": { - "label": "Survival", - "proficiency": 10, - "failure": false - }, - "swim": { - "label": "Swim", - "proficiency": 20, - "failure": false - }, - "unarmed_combat": { - "label": "Unarmed Combat", - "proficiency": 40, - "failure": false - }, - "unnatural": { - "label": "Unnatural", - "proficiency": 0 - } - }, - "typedSkills":{ - "tskill_01": { - "label": "Painting", - "group": "Art", - "proficiency": 0, - "failure": false - } - } - }, - "unnatural_skills": { - "skills": { - "accounting": { - "label": "Accounting", - "proficiency": 0, - "failure": false - }, - "alertness": { - "label": "Alertness", - "proficiency": 50, - "failure": false - }, - "anthropology": { - "label": "Anthropology", - "proficiency": 0, - "failure": false - }, - "archeology": { - "label": "Archeology", - "proficiency": 0, - "failure": false - }, - "artillery": { - "label": "Artillery", - "proficiency": 0, - "failure": false - }, - "athletics": { - "label": "Athletics", - "proficiency": 50, - "failure": false - }, - "bureaucracy": { - "label": "Bureaucracy", - "proficiency": 0, - "failure": false - }, - "computer_science": { - "label": "Computer Science", - "proficiency": 0, - "failure": false - }, - "criminology": { - "label": "Criminology", - "proficiency": 0, - "failure": false - }, - "demolitions": { - "label": "Demolitions", - "proficiency": 0, - "failure": false - }, - "disguise": { - "label": "Disguise", - "proficiency": 0, - "failure": false - }, - "dodge": { - "label": "Dodge", - "proficiency": 50, - "failure": false - }, - "drive": { - "label": "Drive", - "proficiency": 0, - "failure": false - }, - "firearms": { - "label": "Firearms", - "proficiency": 0, - "failure": false - }, - "first_aid": { - "label": "First Aid", - "proficiency": 0, - "failure": false - }, - "forensics": { - "label": "Forensics", - "proficiency": 0, - "failure": false - }, - "heavy_machiner": { - "label": "Heavy Machinery", - "proficiency": 0, - "failure": false - }, - "heavy_weapons": { - "label": "Heavy Weapons", - "proficiency": 0, - "failure": false - }, - "history": { - "label": "History", - "proficiency": 0, - "failure": false - }, - "humint": { - "label": "HUMINT", - "proficiency": 0, - "failure": false - }, - "law": { - "label": "Law", - "proficiency": 0, - "failure": false - }, - "medicine": { - "label": "Medicine", - "proficiency": 0, - "failure": false - }, - "melee_weapons": { - "label": "Melee Weapons", - "proficiency": 50, - "failure": false - }, - "navigate": { - "label": "Navigate", - "proficiency": 0, - "failure": false - }, - "occult": { - "label": "Occult", - "proficiency": 0, - "failure": false - }, - "persuade": { - "label": "Persuade", - "proficiency": 0, - "failure": false - }, - "pharmacy": { - "label": "Pharmacy", - "proficiency": 0, - "failure": false - }, - "psychotherapy": { - "label": "Psychotherapy", - "proficiency": 0, - "failure": false - }, - "ride": { - "label": "Ride", - "proficiency": 0, - "failure": false - }, - "search": { - "label": "Search", - "proficiency": 0, - "failure": false - }, - "sigint": { - "label": "SIGINT", - "proficiency": 0, - "failure": false - }, - "stealth": { - "label": "Stealth", - "proficiency": 50, - "failure": false - }, - "surgery": { - "label": "Surgery", - "proficiency": 0, - "failure": false - }, - "survival": { - "label": "Survival", - "proficiency": 0, - "failure": false - }, - "swim": { - "label": "Swim", - "proficiency": 0, - "failure": false - }, - "unarmed_combat": { - "label": "Unarmed Combat", - "proficiency": 50, - "failure": false - }, - "unnatural": { - "label": "Unnatural", - "proficiency": 0 - } - }, - "typedSkills":{ - - } - } + "Actor": { + "types": ["agent", "unnatural", "npc", "vehicle"], + "templates": { + "base": { + "health": { + "value": 10, + "min": 0, + "max": 10 }, - "unnatural":{ - "templates":[ - "base", - "unnatural_skills" - ], - "sanity": { - "notes": "", - "failedLoss": "1D4", - "successLoss": "1" - }, - "schemaVersion": 1.0, - "notes": "", - "shortDescription": "", - "showUntrainedSkills": true + "wp": { + "value": 10, + "min": 0, + "max": 10 }, - "npc":{ - "templates": [ - "base", - "human_skills" - ], - "schemaVersion": 1.0, - "sanity": { - "value": 100, - "currentBreakingPoint": 101 - }, - "notes": "", - "shortDescription": "", - "showUntrainedSkills": true - }, - "vehicle":{ - "name": "", - "description": "", - "shortDescription": "", - "health": { - "value": 10, - "min": 0, - "max": 10 - }, - "speed": "", - "expense": "Standard", - "passengers": [] - }, - "agent": { - "templates": [ - "base", - "human_skills" - ], - "schemaVersion": 1.0, - "sanity": { - "value": 100, - "currentBreakingPoint": 101, - "adaptations": { - "violence": { - "incident1": false, - "incident2": false, - "incident3": false - }, - "helplessness": { - "incident1": false, - "incident2": false, - "incident3": false - } - } - }, - "physical":{ - "description": "(Physical description of agent)", - "wounds": "", - "firstAidAttempted": false - }, - "biography": { - "profession": "", - "employer": "", - "nationality": "", - "sex": "", - "age": "", - "education": "" - }, - "corruption":{ - "value": 0, - "haveSeenTheYellowSign": false, - "gift": "", - "insight": "" - } + "statistics": { + "str": { + "value": 10, + "distinguishing_feature": "" + }, + "con": { + "value": 10, + "distinguishing_feature": "" + }, + "dex": { + "value": 10, + "distinguishing_feature": "" + }, + "int": { + "value": 10, + "distinguishing_feature": "" + }, + "pow": { + "value": 10, + "distinguishing_feature": "" + }, + "cha": { + "value": 10, + "distinguishing_feature": "" + } } + }, + "human_skills": { + "skills": { + "accounting": { + "label": "Accounting", + "proficiency": 10, + "failure": false + }, + "alertness": { + "label": "Alertness", + "proficiency": 20, + "failure": false + }, + "anthropology": { + "label": "Anthropology", + "proficiency": 0, + "failure": false + }, + "archeology": { + "label": "Archeology", + "proficiency": 0, + "failure": false + }, + "artillery": { + "label": "Artillery", + "proficiency": 0, + "failure": false + }, + "athletics": { + "label": "Athletics", + "proficiency": 30, + "failure": false + }, + "bureaucracy": { + "label": "Bureaucracy", + "proficiency": 10, + "failure": false + }, + "computer_science": { + "label": "Computer Science", + "proficiency": 0, + "failure": false + }, + "criminology": { + "label": "Criminology", + "proficiency": 10, + "failure": false + }, + "demolitions": { + "label": "Demolitions", + "proficiency": 0, + "failure": false + }, + "disguise": { + "label": "Disguise", + "proficiency": 10, + "failure": false + }, + "dodge": { + "label": "Dodge", + "proficiency": 30, + "failure": false + }, + "drive": { + "label": "Drive", + "proficiency": 20, + "failure": false + }, + "firearms": { + "label": "Firearms", + "proficiency": 20, + "failure": false + }, + "first_aid": { + "label": "First Aid", + "proficiency": 10, + "failure": false + }, + "forensics": { + "label": "Forensics", + "proficiency": 0, + "failure": false + }, + "heavy_machiner": { + "label": "Heavy Machinery", + "proficiency": 10, + "failure": false + }, + "heavy_weapons": { + "label": "Heavy Weapons", + "proficiency": 0, + "failure": false + }, + "history": { + "label": "History", + "proficiency": 10, + "failure": false + }, + "humint": { + "label": "HUMINT", + "proficiency": 10, + "failure": false + }, + "law": { + "label": "Law", + "proficiency": 0, + "failure": false + }, + "medicine": { + "label": "Medicine", + "proficiency": 0, + "failure": false + }, + "melee_weapons": { + "label": "Melee Weapons", + "proficiency": 30, + "failure": false + }, + "navigate": { + "label": "Navigate", + "proficiency": 10, + "failure": false + }, + "occult": { + "label": "Occult", + "proficiency": 10, + "failure": false + }, + "persuade": { + "label": "Persuade", + "proficiency": 20, + "failure": false + }, + "pharmacy": { + "label": "Pharmacy", + "proficiency": 0, + "failure": false + }, + "psychotherapy": { + "label": "Psychotherapy", + "proficiency": 10, + "failure": false + }, + "ride": { + "label": "Ride", + "proficiency": 10, + "failure": false + }, + "search": { + "label": "Search", + "proficiency": 20, + "failure": false + }, + "sigint": { + "label": "SIGINT", + "proficiency": 0, + "failure": false + }, + "stealth": { + "label": "Stealth", + "proficiency": 10, + "failure": false + }, + "surgery": { + "label": "Surgery", + "proficiency": 0, + "failure": false + }, + "survival": { + "label": "Survival", + "proficiency": 10, + "failure": false + }, + "swim": { + "label": "Swim", + "proficiency": 20, + "failure": false + }, + "unarmed_combat": { + "label": "Unarmed Combat", + "proficiency": 40, + "failure": false + }, + "unnatural": { + "label": "Unnatural", + "proficiency": 0 + } + }, + "typedSkills": { + "tskill_01": { + "label": "Painting", + "group": "Art", + "proficiency": 0, + "failure": false + } + } + }, + "unnatural_skills": { + "skills": { + "accounting": { + "label": "Accounting", + "proficiency": 0, + "failure": false + }, + "alertness": { + "label": "Alertness", + "proficiency": 50, + "failure": false + }, + "anthropology": { + "label": "Anthropology", + "proficiency": 0, + "failure": false + }, + "archeology": { + "label": "Archeology", + "proficiency": 0, + "failure": false + }, + "artillery": { + "label": "Artillery", + "proficiency": 0, + "failure": false + }, + "athletics": { + "label": "Athletics", + "proficiency": 50, + "failure": false + }, + "bureaucracy": { + "label": "Bureaucracy", + "proficiency": 0, + "failure": false + }, + "computer_science": { + "label": "Computer Science", + "proficiency": 0, + "failure": false + }, + "criminology": { + "label": "Criminology", + "proficiency": 0, + "failure": false + }, + "demolitions": { + "label": "Demolitions", + "proficiency": 0, + "failure": false + }, + "disguise": { + "label": "Disguise", + "proficiency": 0, + "failure": false + }, + "dodge": { + "label": "Dodge", + "proficiency": 50, + "failure": false + }, + "drive": { + "label": "Drive", + "proficiency": 0, + "failure": false + }, + "firearms": { + "label": "Firearms", + "proficiency": 0, + "failure": false + }, + "first_aid": { + "label": "First Aid", + "proficiency": 0, + "failure": false + }, + "forensics": { + "label": "Forensics", + "proficiency": 0, + "failure": false + }, + "heavy_machiner": { + "label": "Heavy Machinery", + "proficiency": 0, + "failure": false + }, + "heavy_weapons": { + "label": "Heavy Weapons", + "proficiency": 0, + "failure": false + }, + "history": { + "label": "History", + "proficiency": 0, + "failure": false + }, + "humint": { + "label": "HUMINT", + "proficiency": 0, + "failure": false + }, + "law": { + "label": "Law", + "proficiency": 0, + "failure": false + }, + "medicine": { + "label": "Medicine", + "proficiency": 0, + "failure": false + }, + "melee_weapons": { + "label": "Melee Weapons", + "proficiency": 50, + "failure": false + }, + "navigate": { + "label": "Navigate", + "proficiency": 0, + "failure": false + }, + "occult": { + "label": "Occult", + "proficiency": 0, + "failure": false + }, + "persuade": { + "label": "Persuade", + "proficiency": 0, + "failure": false + }, + "pharmacy": { + "label": "Pharmacy", + "proficiency": 0, + "failure": false + }, + "psychotherapy": { + "label": "Psychotherapy", + "proficiency": 0, + "failure": false + }, + "ride": { + "label": "Ride", + "proficiency": 0, + "failure": false + }, + "search": { + "label": "Search", + "proficiency": 0, + "failure": false + }, + "sigint": { + "label": "SIGINT", + "proficiency": 0, + "failure": false + }, + "stealth": { + "label": "Stealth", + "proficiency": 50, + "failure": false + }, + "surgery": { + "label": "Surgery", + "proficiency": 0, + "failure": false + }, + "survival": { + "label": "Survival", + "proficiency": 0, + "failure": false + }, + "swim": { + "label": "Swim", + "proficiency": 0, + "failure": false + }, + "unarmed_combat": { + "label": "Unarmed Combat", + "proficiency": 50, + "failure": false + }, + "unnatural": { + "label": "Unnatural", + "proficiency": 0 + } + }, + "typedSkills": {} + } }, - "Item": { - "types": [ - "weapon", - "armor", - "motivation", - "bond", - "gear" - ], - "templates": { - "base": { - "name": "", - "description":"" - } - }, - "weapon": { - "templates": [ - "base" - ], - "skill": "", - "skillModifier": 0, - "customSkillTarget": 50, - "range": "10M", - "damage": "1D8", - "armorPiercing": 0, - "lethality": 10, - "isLethal": false, - "killRadius": "N/A", - "ammo": "", - "expense": "Standard", - "equipped": true - }, - "armor": { - "templates": [ - "base" - ], - "protection": 3, - "equipped": true, - "expense": "Standard" - }, - "motivation":{ - "templates": [ - "base" - ], - "disorder":"", - "crossedOut": false, - "disorderCured": false - }, - "bond":{ - "templates":[ - "base" - ], - "score": 10, - "relationship": "?", - "hasBeenDamagedSinceLastHomeScene": false - }, - "gear":{ - "templates":["base"], - "equipped": true, - "expense": "Standard" + "unnatural": { + "templates": ["base", "unnatural_skills"], + "sanity": { + "notes": "", + "failedLoss": "1D4", + "successLoss": "1" + }, + "schemaVersion": 1.0, + "notes": "", + "shortDescription": "", + "showUntrainedSkills": true + }, + "npc": { + "templates": ["base", "human_skills"], + "schemaVersion": 1.0, + "sanity": { + "value": 100, + "currentBreakingPoint": 101 + }, + "notes": "", + "shortDescription": "", + "showUntrainedSkills": true + }, + "vehicle": { + "name": "", + "description": "", + "shortDescription": "", + "health": { + "value": 10, + "min": 0, + "max": 10 + }, + "speed": "", + "expense": "Standard", + "passengers": [] + }, + "agent": { + "templates": ["base", "human_skills"], + "schemaVersion": 1.0, + "sanity": { + "value": 100, + "currentBreakingPoint": 101, + "adaptations": { + "violence": { + "incident1": false, + "incident2": false, + "incident3": false + }, + "helplessness": { + "incident1": false, + "incident2": false, + "incident3": false + } } + }, + "physical": { + "description": "(Physical description of agent)", + "wounds": "", + "firstAidAttempted": false + }, + "biography": { + "profession": "", + "employer": "", + "nationality": "", + "sex": "", + "age": "", + "education": "" + }, + "corruption": { + "value": 0, + "haveSeenTheYellowSign": false, + "gift": "", + "insight": "" + } } -} \ No newline at end of file + }, + "Item": { + "types": ["weapon", "armor", "motivation", "bond", "gear"], + "templates": { + "base": { + "name": "", + "description": "" + } + }, + "weapon": { + "templates": ["base"], + "skill": "", + "skillModifier": 0, + "customSkillTarget": 50, + "range": "10M", + "damage": "1D8", + "armorPiercing": 0, + "lethality": 10, + "isLethal": false, + "killRadius": "N/A", + "ammo": "", + "expense": "Standard", + "equipped": true + }, + "armor": { + "templates": ["base"], + "protection": 3, + "equipped": true, + "expense": "Standard" + }, + "motivation": { + "templates": ["base"], + "disorder": "", + "crossedOut": false, + "disorderCured": false + }, + "bond": { + "templates": ["base"], + "score": 10, + "relationship": "?", + "hasBeenDamagedSinceLastHomeScene": false + }, + "gear": { + "templates": ["base"], + "equipped": true, + "expense": "Standard" + } + } +}