From cc283986da1b4eff107776d0c3b96a25e5a1809e Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Mon, 6 Sep 2021 20:27:25 +0200 Subject: [PATCH 001/726] Get min max mov from chasers and preys --- module/items/sheets/chase.js | 58 +++++++++++++++++++++++++++++------- templates/items/chase.html | 8 ++++- 2 files changed, 54 insertions(+), 12 deletions(-) diff --git a/module/items/sheets/chase.js b/module/items/sheets/chase.js index db792a32..86324c59 100644 --- a/module/items/sheets/chase.js +++ b/module/items/sheets/chase.js @@ -58,13 +58,39 @@ export class CoC7ChaseSheet extends ItemSheet { this.participants.forEach(p => { data.participants.push(new _participant(p)) }) - data.preys = data.participants - .filter(p => p.chaser) - .sort((a, b) => a.mov - b.mov) - data.chasers = data.participants - .filter(p => !p.chaser) - .sort((a, b) => a.mov - b.mov) - + data.preys = + data.participants + .filter(p => !p.isChaser && p.isValid) + .sort((a, b) => a.mov - b.mov) || [] + data.chasers = + data.participants + .filter(p => p.isChaser && p.isValid) + .sort((a, b) => a.mov - b.mov) || [] + data.byDex = duplicate(data.participants).sort((a, b) => a.dex - b.dex) + + data.preysMinMov = data.preys.length + ? data.preys.reduce((prev, current) => + prev.mov < current.mov ? prev : current + ).mov + : -1 + + data.preysMaxMov = data.preys.length + ? data.preys.reduce((prev, current) => + prev.mov > current.mov ? prev : current + ).mov + : -1 + + data.chasersMinMov = data.chasers.length + ? data.chasers.reduce((prev, current) => + prev.mov < current.mov ? prev : current + ).mov + : -1 + + data.chasersMaxMov = data.chasers.length + ? data.chasers.reduce((prev, current) => + prev.mov > current.mov ? prev : current + ).mov + : -1 return data } @@ -111,9 +137,7 @@ export class CoC7ChaseSheet extends ItemSheet { html.find('.add-sign').click(this._onAddParticipant.bind(this)) - html - .find('.roll-participant') - .click(this._onRollParticipant.bind(this)) + html.find('.roll-participant').click(this._onRollParticipant.bind(this)) const participantDragDrop = new DragDrop({ dropSelector: '.participant', @@ -558,7 +582,7 @@ export class _participant { if (!isNaN(Number(this.data.dex))) this.data.hasValidDex = true else { this.data.hasValidDex = false - this.data.dex = undefined + this.data.dex = 0 } } @@ -569,6 +593,18 @@ export class _participant { return !!this.data.chaser } + get isValid () { + return this.hasValidDex && this.hasValidMov + } + + get hasValidDex () { + return !isNaN(Number(this.data.dex)) + } + + get hasValidMov () { + return !isNaN(Number(this.data.mov)) + } + get hasDriver () { return this.hasVehicle && this.hasActor } diff --git a/templates/items/chase.html b/templates/items/chase.html index 37405361..7aea512f 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -19,7 +19,7 @@ @@ -120,6 +120,12 @@ azertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbn +
+
Preys Min : {{preysMinMov}}
+
Preys Max : {{preysMaxMov}}
+
Chasers Min : {{chasersMinMov}}
+
Chasers Min : {{chasersMaxMov}}
+
\ No newline at end of file From f370b0f7ede440c0b587752eaaf4f38e4ec0f0f9 Mon Sep 17 00:00:00 2001 From: castanho Date: Mon, 6 Sep 2021 17:11:40 -0300 Subject: [PATCH 002/726] Remove chase/vehicle warning hook --- fvtt.config.js | 20 -------------------- module/hooks/render-actor-sheet.js | 11 ++--------- module/hooks/render-item-sheet.js | 11 ++--------- 3 files changed, 4 insertions(+), 38 deletions(-) delete mode 100644 fvtt.config.js diff --git a/fvtt.config.js b/fvtt.config.js deleted file mode 100644 index 36aad396..00000000 --- a/fvtt.config.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Enter the path to the Foundry Data Folder on userDataPath - * This can be found in the Foundry settings - * Examples: %localappdata%/FoundryVTT - * ~/Library/Application Support/FoundryVTT - * /home/$USER/.local/share/FoundryVTT - * Then rename this file to fvtt.config.js - * And then you can create a system build that will be sent directly - * to your Foundry folder by `npm run build` or `npm run watch` - * See CONTRIBUTING.md, under .github/ directory for more details - * After rename `fvtt.config.example.js` to `fvtt.config.js` consider run: - * `git update-index --assume-unchanged fvtt.config.example.js` - * This way Git does not assume the original file has been deleted from the repository - */ -const developmentOptions = { - systemFolderName: 'CoC7', - userDataPath: '/home/castanho/.local/share/FoundryVTT' -} - -export default developmentOptions diff --git a/module/hooks/render-actor-sheet.js b/module/hooks/render-actor-sheet.js index d81eefd1..b5976546 100644 --- a/module/hooks/render-actor-sheet.js +++ b/module/hooks/render-actor-sheet.js @@ -1,12 +1,5 @@ -/* global Hooks, ui */ +/* global Hooks */ export function listen () { - Hooks.on('renderActorSheet', async (data, html, options) => { - console.log(data) - if (data.document.type === 'vehicle') { - ui.notifications.warn('This feature is a work in progress and its use is still not recommended.') - await data.close() - await data.close() - } - }) + Hooks.on('renderActorSheet', async (data, html, options) => {}) } diff --git a/module/hooks/render-item-sheet.js b/module/hooks/render-item-sheet.js index 0f7223a4..6e3470da 100644 --- a/module/hooks/render-item-sheet.js +++ b/module/hooks/render-item-sheet.js @@ -1,12 +1,5 @@ -/* global Hooks, ui */ +/* global Hooks */ export function listen () { - Hooks.on('renderItemSheet', async (data, html, options) => { - console.log(data) - if (data.document.type === 'chase') { - ui.notifications.warn('This feature is a work in progress and its use is still not recommended.') - await data.close() - await data.close() - } - }) + Hooks.on('renderItemSheet', async (data, html, options) => {}) } From f31444ae41b86eb6f495e9a8eae711cb8a1ea51c Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Mon, 6 Sep 2021 23:32:21 +0200 Subject: [PATCH 003/726] Add tyni MCE custom style : keeper only --- assets/mce.css | 7 +++++++ module/apps/parser.js | 39 +++++++++++++++++++++++++++++++++++++++ module/coc7.js | 26 ++++++++++++++++++++++++++ system.json | 2 +- 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 assets/mce.css diff --git a/assets/mce.css b/assets/mce.css new file mode 100644 index 00000000..5f0fd8e0 --- /dev/null +++ b/assets/mce.css @@ -0,0 +1,7 @@ +section.keeper-only { + padding: 0 5px; + background: rgba(0, 255, 0, 0.05); + border-top: 1px solid #666; + border-bottom: 1px solid #666; + } + \ No newline at end of file diff --git a/module/apps/parser.js b/module/apps/parser.js index 20d460a4..67509a7e 100644 --- a/module/apps/parser.js +++ b/module/apps/parser.js @@ -120,6 +120,11 @@ export class CoC7Parser { } } + static async onInitEditor (editor) { + // editor con + ui.notifications.info('EDITOR IS INITIATED') + } + static ParseMessage ( message, html, @@ -212,6 +217,16 @@ export class CoC7Parser { } } + for (const element of html.find('.keeper-only')) { + if (!game.user.isGM) element.style.display = 'none' + } + + // for (const element of html.find('div.editor-content')){ + // if (element.outerHTML.toLocaleLowerCase().includes('[gm-only]')){ + // element.outerHTML = CoC7Parser.procesGMOnly( element.outerHTML) + // } + // } + // Bind the click to execute the check. // html.on('click', 'a.coc7-link', CoC7Parser._onCheck.bind(this)); html @@ -250,6 +265,30 @@ export class CoC7Parser { return html.innerHTML } + // static procesGMOnly (content){ + // // const gmOnlyRgx = new RegExp( + // // '(?:\[gm-only\])(.|\n)*?(?:\[\/gm-only\])', + // // 'gi' + // // ) + + // let replaced = content + + // const searchAndReplace = [ + // { search: '

[gm-only]', replace: '

'}, + // { search: '[/gm-only]

', replace: '

'}, + // { search: '[gm-only]', replace: '
Date: Mon, 6 Sep 2021 23:32:34 +0100 Subject: [PATCH 004/726] Fix item.base immediate returns Further updates for Foundry 0.9 --- module/actors/sheets/base.js | 4 ++-- module/items/item.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index f1ea94da..c46b855e 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -308,11 +308,11 @@ export class CoC7ActorSheet extends ActorSheet { : 0 let updatedExp = exp + parseInt(item.data.value) - skill.value if (updatedExp <= 0) updatedExp = null - await this.actor.updateEmbeddedEntity('OwnedItem', { + await this.actor.updateEmbeddedDocuments('Item', [{ _id: item._id, 'data.adjustments.experience': updatedExp, 'data.value': null - }) + }]) if (!item.data.adjustments) item.data.adjustments = {} item.data.adjustments.experience = updatedExp item.data.value = value diff --git a/module/items/item.js b/module/items/item.js index 01806933..320a6887 100644 --- a/module/items/item.js +++ b/module/items/item.js @@ -545,8 +545,8 @@ export class CoC7Item extends Item { } get _base () { - if (this.type !== 'skill') return null - if (typeof this.data.data.base !== 'string') return this.data.data.base + if (this.type !== 'skill') return [null, false] + if (typeof this.data.data.base !== 'string') return [this.data.data.base, false] if (this.data.data.base.includes('@')) { const parsed = {} for (const [key, value] of Object.entries(COC7.formula.actorsheet)) { From 28ab175e94b78a87f26995ede1dfa64462e59e07 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Tue, 7 Sep 2021 12:22:58 +0200 Subject: [PATCH 005/726] Configure TinyMCE and disable source code editing --- lang/en.json | 2 + module/coc7.js | 68 ++++++++++++++++++----------- module/scripts/register-settings.js | 8 ++++ 3 files changed, 53 insertions(+), 25 deletions(-) diff --git a/lang/en.json b/lang/en.json index d0826fb0..471758a5 100644 --- a/lang/en.json +++ b/lang/en.json @@ -798,6 +798,8 @@ "SETTINGS.AdviseAllPlayer": "Notify all players", "SETTINGS.OneBlockBackStory": "One block backstory", "SETTINGS.OneBlockBackStoryHint": "Turn backstory to one editor block, but you can format/add links.", + "SETTINGS.EnablePlayerSourceCode": "Enable code editing for players.", + "SETTINGS.EnablePlayerSourceCodeyHint": "!WARNING! When Enabling this, players will be able to see and edit 'keeper only' blocks.", "SETTINGS.EnableStatusIcons": "Enable status icons", "SETTINGS.EnableStatusIconsHint": "Set if combat and sanity effects icons are shown in tokens." } diff --git a/module/coc7.js b/module/coc7.js index 98cdd148..949cb795 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -212,20 +212,8 @@ Hooks.on('ready', async () => { activateGlobalListener() // setGlobalCssVar() - if (game.user.isGM) { - CONFIG.TinyMCE.content_css.push('/systems/CoC7/assets/mce.css') - CONFIG.TinyMCE.style_formats.push({ - title: 'CoC7', - items: [ - { - title: 'Keeper Only', - block: 'section', - classes: 'keeper-only', - wrapper: true - } - ] - }) - } else CONFIG.TinyMCE.content_style = '.keeper-only {display: none}' + + configureTinyMCE() game.socket.on('system.CoC7', async data => { if (data.type === 'updateChar') CoC7Utilities.updateCharSheets() @@ -409,23 +397,53 @@ Hooks.on('renderSceneControls', CoC7Menu.renderMenu) Hooks.on('dropCanvasData', CoC7Canvas.onDropSomething) -tinyMCE.PluginManager.add('CoC7_Editor_OnDrop', function (editor) { - editor.on('drop', event => CoC7Parser.onEditorDrop(event, editor)) -}) - -// tinyMCE.PluginManager.add('CoC7_Editor_OnInit', function (editor) { -// editor.on('init', () => CoC7Parser.onInitEditor( editor)) -// }) - -// CONFIG.TinyMCE.plugins = `CoC7_Editor_OnInit CoC7_Editor_OnDrop ${CONFIG.TinyMCE.plugins}` -CONFIG.TinyMCE.plugins = `CoC7_Editor_OnDrop ${CONFIG.TinyMCE.plugins}` - function activateGlobalListener () { const body = $('body') body.on('click', 'a.coc7-inline-check', CoC7Check._onClickInlineRoll) document.addEventListener('mousedown', _onLeftClick) } +/** + * Configuration of TinyMCE editor + */ +function configureTinyMCE () { + + // Add on drop event to tinyMCE to hendle the links drop + tinyMCE.PluginManager.add('CoC7_Editor_OnDrop', function (editor) { + editor.on('drop', event => CoC7Parser.onEditorDrop(event, editor)) + }) + + // Intercept MCE init + // tinyMCE.PluginManager.add('CoC7_Editor_OnInit', function (editor) { + // editor.on('init', () => CoC7Parser.onInitEditor( editor)) + // }) + + // Add custom plugins to list of plugins. + // CONFIG.TinyMCE.plugins = `CoC7_Editor_OnInit CoC7_Editor_OnDrop ${CONFIG.TinyMCE.plugins}` + CONFIG.TinyMCE.plugins = `CoC7_Editor_OnDrop ${CONFIG.TinyMCE.plugins}` + + if (game.user.isGM) { // Define css and menu for keeper only blocks + CONFIG.TinyMCE.content_css.push('/systems/CoC7/assets/mce.css') + CONFIG.TinyMCE.style_formats.push({ + title: 'CoC7', + items: [ + { + title: 'Keeper Only', + block: 'section', + classes: 'keeper-only', + wrapper: true + } + ] + }) + } else { + // Prevent player to edit and view source code if settings is disabled + if (!game.settings.get('CoC7', 'enablePlayerSourceCode')) + CONFIG.TinyMCE.toolbar = CONFIG.TinyMCE.toolbar.replace(' code', '') + // Hide keeper only blocks to players + CONFIG.TinyMCE.content_style = '.keeper-only {display: none}' + } +} + // function setGlobalCssVar(){ // const body = $('body') // body.css('--keeper-display', game.user.isGM ? '' : 'none') diff --git a/module/scripts/register-settings.js b/module/scripts/register-settings.js index 392e11c8..98a666b0 100644 --- a/module/scripts/register-settings.js +++ b/module/scripts/register-settings.js @@ -218,6 +218,14 @@ export function registerSettings () { default: false, type: Boolean }) + game.settings.register('CoC7', 'enablePlayerSourceCode', { + name: 'SETTINGS.EnablePlayerSourceCode', + hint: 'SETTINGS.EnablePlayerSourceCodeyHint', + scope: 'world', + config: true, + default: false, + type: Boolean + }) game.settings.register('CoC7', 'overrideSheetArtwork', { name: 'SETTINGS.OverrideSheetArtwork', hint: 'SETTINGS.OverrideSheetArtworkHint', From 01b87f02c6a5b2439aca05d20721714060c33738 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:29:08 +0000 Subject: [PATCH 006/726] Updated translations list --- .github/TRANSLATIONS.md | 646 ++++++++++++++++++++-------------------- 1 file changed, 327 insertions(+), 319 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 8487af20..bd69ad9f 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,325 +2,325 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **es**, **fr**, **pl**, **pt-BR**, **sv** - -| Key | cn | cs | de | ja | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **313** | **88** | **106** | **108** | **28** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ❌ | ✅ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MessageSelectedTargetIsNotControlled](#coc7messageselectedtargetisnotcontrolled) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ❌ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ❌ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ❌ | ✅ | +| Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **315** | **90** | **108** | **2** | **2** | **110** | **2** | **2** | **2** | **30** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectedTargetIsNotControlled](#coc7messageselectedtargetisnotcontrolled) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnablePlayerSourceCode](#settingsenableplayersourcecode) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.EnablePlayerSourceCodeyHint](#settingsenableplayersourcecodeyhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ##### CoC7.ActorImporter @@ -1466,6 +1466,14 @@ The following translations are currently up to date **es**, **fr**, **pl**, **pt `"SETTINGS.DoNotAdvise": "Keep it for yourself.",` +##### SETTINGS.EnablePlayerSourceCode + +`"SETTINGS.EnablePlayerSourceCode": "Enable code editing for players.",` + +##### SETTINGS.EnablePlayerSourceCodeyHint + +`"SETTINGS.EnablePlayerSourceCodeyHint": "!WARNING! When Enabling this, players will be able to see and edit 'keeper only' blocks.",` + ##### SETTINGS.EnableStatusIcons `"SETTINGS.EnableStatusIcons": "Enable status icons",` From 677bc8ce75125a0c5dc139d2d20510052461456b Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 7 Sep 2021 14:42:07 +0100 Subject: [PATCH 007/726] Restore CSS file name, to resolve hard coded dynamic edits to the CSS --- system.json | 2 +- webpack.config.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/system.json b/system.json index 57c30f87..9f3370d1 100644 --- a/system.json +++ b/system.json @@ -8,7 +8,7 @@ "compatibleCoreVersion": "0.8.9", "esmodules": ["bundle.js"], "templateVersion": 1, - "styles": ["style.css", "assets/mce.css"], + "styles": ["coc7g.css", "assets/mce.css"], "packs": [ { "label": "Skills", diff --git a/webpack.config.js b/webpack.config.js index b6b7406a..ad202503 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -123,7 +123,7 @@ const bundleScript = { ] }), new MiniCssExtractPlugin({ - filename: 'style.css', + filename: 'coc7g.css', insert: 'head' }), new WebpackBar({}) From e8805693ea0285218287fc466c9ded88ad55732b Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 7 Sep 2021 20:06:15 +0100 Subject: [PATCH 008/726] Further 0.9.0 preparation --- module/actors/actor.js | 46 +++++++----------------------------------- module/apps/link.js | 2 +- 2 files changed, 8 insertions(+), 40 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index c980a3d8..bbe47041 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -2367,7 +2367,7 @@ export class CoCActor extends Actor { if (skillData.pack) { const pack = game.packs.get(skillData.pack) if (pack.metadata.entity !== 'Item') return - item = await pack.getEntity(skillData.id) + item = await pack.getDocument(skillData.id) } else if (skillData.id) { item = game.items.get(skillData.id) } @@ -2404,10 +2404,7 @@ export class CoCActor extends Actor { }) if (create === true) { - /** MODIF 0.8.x **/ - // await this.createOwnedItem( duplicate(item.data)); - await this.createEmbeddedDocuments('Item', [duplicate(item.data)]) - /*****************/ + await this.createEmbeddedDocuments('Item', [duplicate(item)]) } else return skill = this.getSkillsByName(item.name) @@ -2467,7 +2464,7 @@ export class CoCActor extends Actor { const pack = weaponData.pack ? game.packs.get(weaponData.pack) : null if (pack) { if (pack.metadata.entity !== 'Item') return - item = await pack.getEntity(weaponData.id) + item = await pack.getDocument(weaponData.id) } else if (weaponData.id) { item = game.items.get(weaponData.id) } @@ -2489,42 +2486,13 @@ export class CoCActor extends Actor { create = true } }) + const actor = (typeof this.parent?.actor !== 'undefined' ? this.parent.actor : this) if (create === true) { - const mainSkill = item.data?.data?.skill?.main?.name - if (mainSkill) { - let skill = this.getSkillsByName(mainSkill)[0] - if (!skill) { - const name = mainSkill.match(/\(([^)]+)\)/) - ? mainSkill.match(/\(([^)]+)\)/)[1] - : mainSkill - skill = await this.createWeaponSkill( - name, - !!item.data.data.properties?.rngd - ) - } - if (skill) item.data.data.skill.main.id = skill._id - } // TODO : Else : selectionner le skill dans la liste ou en créer un nouveau. - - const secondSkill = item.data?.data?.skill?.alternativ?.name - if (secondSkill) { - let skill = this.getSkillsByName(secondSkill)[0] - if (!skill) { - const name = mainSkill.match(/\(([^)]+)\)/) - ? mainSkill.match(/\(([^)]+)\)/)[1] - : mainSkill - skill = await this.createWeaponSkill( - name, - !!item.data.data.properties?.rngd - ) - } - if (skill) item.data.data.skill.alternativ.id = skill._id - } // TODO : Else : selectionner le skill dans la liste ou en créer un nouveau. - - await this.createEmbeddedDocuments('Item', [duplicate(item.data)]) // MODIF: 0.8.x 'OwnedItmem' => 'Item + await actor.createEmbeddedDocuments('Item', [item.toJSON()]) } else return - weapons = this.getItemsFromName(item.name) - if (!weapons) return + weapons = actor.getItemsFromName(item.name) + if (!weapons.length) return await weapons[0].reload() } else { ui.notifications.warn( diff --git a/module/apps/link.js b/module/apps/link.js index 9ab9860f..06234404 100644 --- a/module/apps/link.js +++ b/module/apps/link.js @@ -74,7 +74,7 @@ export class CoC7Link { const pack = game.packs.get(this._linkData.pack) if (!pack) return false if (pack.metadata.entity !== 'Item') return undefined - this._item = await pack.getEntity(this._linkData.id) + this._item = await pack.getDocument(this._linkData.id) } if (this._linkData.fromDirectory) { From eb21072f86d1d95038c316797fa37d8087e17505 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 7 Sep 2021 21:10:10 +0100 Subject: [PATCH 009/726] Label attribute and characteristic links --- lang/en.json | 4 +- module/actors/sheets/base.js | 74 ++++++++++++++--------------- module/apps/link-creation-dialog.js | 28 ++++++----- module/apps/link.js | 6 +++ 4 files changed, 61 insertions(+), 51 deletions(-) diff --git a/lang/en.json b/lang/en.json index 471758a5..e5488ecb 100644 --- a/lang/en.json +++ b/lang/en.json @@ -652,8 +652,8 @@ "CoC7.InfoLessSkillThanOptions": "There's only {skillCount} and {optionsCount} options, adding all of them", "CoC7.InfoAllSkillsAlreadySelected": "All skills are already selected.", - "CoC7.MessageCheckRequestedWait": "Your keeper is requesting a {check}.
Wait before clicking!
", - "CoC7.MessageTargetCheckRequested": "Your keeper is requesting a {check} for {name}.", + "CoC7.MessageCheckRequestedWait": "{check} roll requested by your Keeper.
Wait before clicking!
", + "CoC7.MessageTargetCheckRequested": "Your keeper has requested {name} make a {check} roll.", "CoC7.MessageTitleSelectSingleUserForTarget": "Which user can respond to this attack", "CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.", "CoC7.MessageSelectedTargetIsNotControlled": "The token for {name} is owned by not controlled by a player so will not be able to react to combat actions.", diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index c46b855e..fd64897b 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -337,32 +337,32 @@ export class CoC7ActorSheet extends ActorSheet { a.data.properties.special && typeof a.data.specialization !== 'undefined' ? a.data.specialization - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() + a.name .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') .toLowerCase() : a.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() lcb = b.data.properties.special && typeof b.data.specialization !== 'undefined' ? b.data.specialization - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() + b.name .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') .toLowerCase() : b.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() } else { lca = a.name .normalize('NFD') @@ -388,30 +388,30 @@ export class CoC7ActorSheet extends ActorSheet { if (a.data.properties && b.data.properties) { lca = a.data.properties.special ? a.data.specialization - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() + a.name .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') .toLowerCase() : a.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() lcb = b.data.properties.special ? b.data.specialization - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() + b.name .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') .toLowerCase() : b.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() } else { lca = a.name .normalize('NFD') @@ -872,7 +872,7 @@ export class CoC7ActorSheet extends ActorSheet { html .find('a.coc7-link') - .on('click', async event => await CoC7Parser._onCheck(event)) + .on('click', event => CoC7Parser._onCheck(event)) html .find('a.coc7-link') .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) @@ -1517,19 +1517,19 @@ export class CoC7ActorSheet extends ActorSheet { if (isCtrlKey(event) && game.user.isGM && ['lck', 'san'].includes(attrib)) { const linkData = event.altKey ? { - check: 'sanloss', - hasPlayerOwner: this.actor.hasPlayerOwner, - actorKey: this.actor.actorKey, - forceModifiers: event.shiftKey - } + check: 'sanloss', + hasPlayerOwner: this.actor.hasPlayerOwner, + actorKey: this.actor.actorKey, + forceModifiers: event.shiftKey + } : { - check: 'check', - type: 'attribute', - name: attrib, - hasPlayerOwner: this.actor.hasPlayerOwner, - actorKey: this.actor.actorKey, - forceModifiers: event.shiftKey - } + check: 'check', + type: 'attribute', + name: attrib, + hasPlayerOwner: this.actor.hasPlayerOwner, + actorKey: this.actor.actorKey, + forceModifiers: event.shiftKey + } if (game.settings.get('core', 'rollMode') === 'blindroll') { linkData.blind = true } diff --git a/module/apps/link-creation-dialog.js b/module/apps/link-creation-dialog.js index 5fb2d50a..553425d6 100644 --- a/module/apps/link-creation-dialog.js +++ b/module/apps/link-creation-dialog.js @@ -31,6 +31,21 @@ export class CoC7LinkCreationDialog extends FormApplication { return new CoC7LinkCreationDialog(link, options) } + static get attributes () { + return [ + { + key: 'lck', + label: game.i18n.localize('CoC7.Luck'), + selected: false + }, + { + key: 'san', + label: game.i18n.localize('CoC7.Sanity'), + selected: false + } + ] + } + /** @override */ async getData () { const data = await super.getData() @@ -106,18 +121,7 @@ export class CoC7LinkCreationDialog extends FormApplication { } // Prepare characteristics - data.attributes = [ - { - key: 'lck', - label: game.i18n.localize('CoC7.Luck'), - selected: data.data.attributeKey === 'lck' - }, - { - key: 'san', - label: game.i18n.localize('CoC7.Sanity'), - selected: data.data.attributeKey === 'san' - } - ] + data.attributes = CoC7LinkCreationDialog.attributes.map(e => { e.selected = data.data.attributeKey === e.key; return e }) return data } diff --git a/module/apps/link.js b/module/apps/link.js index 06234404..007b4f3b 100644 --- a/module/apps/link.js +++ b/module/apps/link.js @@ -1,6 +1,8 @@ /* global duplicate, game, mergeObject */ import { chatHelper } from '../chat/helper.js' +import { CoCActor } from '../actors/actor.js' +import { CoC7LinkCreationDialog } from './link-creation-dialog.js' export class CoC7Link { constructor () { @@ -11,6 +13,10 @@ export class CoC7Link { } static async fromData (linkData) { + const label = CoC7LinkCreationDialog.attributes.concat(CoCActor.getCharacteristicDefinition()).filter(e => e.key === linkData.name).map(e => e.label) + if (label.length > 0) { + linkData.label = label[0] + } const link = new CoC7Link() await link.setData(linkData) return link From a73e6a92cf9590e740298975a817df794f90aedd Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 7 Sep 2021 20:14:16 +0000 Subject: [PATCH 010/726] Updated translations list --- .github/TRANSLATIONS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index bd69ad9f..b9a84371 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -880,7 +880,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry ##### CoC7.MessageCheckRequestedWait -`"CoC7.MessageCheckRequestedWait": "Your keeper is requesting a {check}.
Wait before clicking!
",` +`"CoC7.MessageCheckRequestedWait": "{check} roll requested by your Keeper.
Wait before clicking!
",` ##### CoC7.MessageSelectSingleUserForTarget @@ -892,7 +892,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry ##### CoC7.MessageTargetCheckRequested -`"CoC7.MessageTargetCheckRequested": "Your keeper is requesting a {check} for {name}.",` +`"CoC7.MessageTargetCheckRequested": "Your keeper has requested {name} make a {check} roll.",` ##### CoC7.MessageTitleSelectSingleUserForTarget From ddd819102c17e48a834d1d395173ac8ba9ce964a Mon Sep 17 00:00:00 2001 From: Pablo de la Concepcion Date: Wed, 8 Sep 2021 20:21:39 +0200 Subject: [PATCH 011/726] Fix the setMainAttackSkill of the NPC importer when it receives arrays instead of items. --- module/apps/actor-importer.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index 6749dd23..5ad002c4 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -342,6 +342,7 @@ export class CoC7ActorImporter { await npc .createEmbeddedDocuments('Item', [mainAttackSkill]) .then(async newSkills => { + console.debug('newskills', newSkills) // const newSkill = newSkills[0].clone() // newSkill.data.data.value = attack.data.range.normal.value await npc @@ -397,6 +398,12 @@ export class CoC7ActorImporter { * @param {CoC7Item} skill */ async setMainAttackSkill (weapon, skill) { + if (Array.isArray(skill) && skill.length >0) { + skill = skill[0] + } + if (Array.isArray(weapon) && weapon.length >0) { + weapon = weapon[0] + } return await weapon.update({ 'data.skill.main.id': skill.id, 'data.skill.main.name': skill.name, From 7d876970ca119e46e59c72fef91ae4cddb6c20ba Mon Sep 17 00:00:00 2001 From: Pablo de la Concepcion Date: Wed, 8 Sep 2021 23:49:47 +0200 Subject: [PATCH 012/726] Handle 00 special case for advantage/disadvantage rolls fixes #756 --- module/dice.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/module/dice.js b/module/dice.js index a12a435b..35396928 100644 --- a/module/dice.js +++ b/module/dice.js @@ -41,8 +41,27 @@ export class CoC7Dice { }) if (modif < 0) { result.tens.total = Math.max(...result.tens.results) + // Handle the 00 special case + if (result.unit.total === 0 && result.tens.results.includes(0)) { + result.tens.total = 0 + } } else { result.tens.total = Math.min(...result.tens.results) + // Handle the 00 special case + if (result.unit.total === 0 && result.tens.results.includes(0)) { + let tens_results_non_zero = [] + result.tens.results.forEach(r => { + if (r !== 0) { + tens_results_non_zero.push(r) + } + }) + if (tens_results_non_zero.length === 0) { + // All the tens dices are 0 + result.tens.total = 0 + } else { + result.tens.total = Math.min(...tens_results_non_zero) + } + } } result.total = result.unit.total + result.tens.total if (result.total === 0) { From 0a707aa06cac66724972c5190ee9dc8b5c7219ee Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 8 Sep 2021 23:00:27 +0100 Subject: [PATCH 013/726] Replace incomplete TinyMCE Keeper only block system with Keeper notes tab on all sheets. Resolve issue with createEmbeddedDocuments returning array in array. Add tabs to item and skill sheets. Make description for item an object to keep inline with other Item types. Update migration for Keeper notes and Item description value/keeper. --- assets/mce.css | 7 --- lang/en.json | 4 +- module/actors/actor.js | 59 +++++++++++++++--------- module/actors/sheets/creature-sheet.js | 2 +- module/actors/sheets/npc-sheet.js | 2 +- module/apps/actor-importer.js | 9 ---- module/apps/parser.js | 39 ---------------- module/coc7.js | 32 ------------- module/items/sheets/archetype.js | 2 + module/items/sheets/chase.js | 7 ++- module/items/sheets/item-sheet.js | 2 +- module/items/sheets/item-sheetV2.js | 11 +++-- module/items/sheets/occupation.js | 2 + module/items/sheets/setup.js | 1 + module/items/sheets/skill.js | 9 ++-- module/items/sheets/spell.js | 2 + module/items/sheets/status.js | 4 +- module/items/sheets/talent.js | 4 +- module/items/sheets/weapon-sheet.js | 1 + module/scripts/register-settings.js | 8 ---- module/updater.js | 31 ++++++++++++- styles/sheets/book.less | 9 ++++ styles/sheets/character.less | 11 +++++ styles/sheets/sheets.less | 9 ++++ styles/sheets/vehicle.less | 18 ++++++++ styles/system/variables.less | 1 + template.json | 41 ++++++++++++---- templates/actors/character-sheet-v2.html | 12 +++-- templates/actors/creature-sheet.html | 10 ++++ templates/actors/npc-sheet.html | 10 ++++ templates/actors/vehicle.html | 2 +- templates/items/archetype.html | 8 ++++ templates/items/book/main.hbs | 6 +-- templates/items/chase.html | 18 ++++++-- templates/items/item-sheetV2.html | 20 ++++++-- templates/items/occupation.html | 8 ++++ templates/items/setup.html | 14 +++--- templates/items/skill-sheet.html | 35 +++++++++----- templates/items/spell.html | 8 ++++ templates/items/status.html | 8 ++++ templates/items/talent.html | 8 ++++ templates/items/weapon-sheet.html | 12 ++++- 42 files changed, 324 insertions(+), 182 deletions(-) delete mode 100644 assets/mce.css diff --git a/assets/mce.css b/assets/mce.css deleted file mode 100644 index 5f0fd8e0..00000000 --- a/assets/mce.css +++ /dev/null @@ -1,7 +0,0 @@ -section.keeper-only { - padding: 0 5px; - background: rgba(0, 255, 0, 0.05); - border-top: 1px solid #666; - border-bottom: 1px solid #666; - } - \ No newline at end of file diff --git a/lang/en.json b/lang/en.json index e5488ecb..a380547c 100644 --- a/lang/en.json +++ b/lang/en.json @@ -616,7 +616,7 @@ "CoC7.DrawGun": "Draw your gun", "CoC7.GmTools": "Keeper's tools", - "CoC7.GmNotes": "GM's notes", + "CoC7.GmNotes": "Keeper's notes", "CoC7.DevPhase": "Development phase", "CoC7.DevPhaseEnabled": "Development phase enabled", "CoC7.DevPhaseDisabled": "Development phase disabled", @@ -798,8 +798,6 @@ "SETTINGS.AdviseAllPlayer": "Notify all players", "SETTINGS.OneBlockBackStory": "One block backstory", "SETTINGS.OneBlockBackStoryHint": "Turn backstory to one editor block, but you can format/add links.", - "SETTINGS.EnablePlayerSourceCode": "Enable code editing for players.", - "SETTINGS.EnablePlayerSourceCodeyHint": "!WARNING! When Enabling this, players will be able to see and edit 'keeper only' blocks.", "SETTINGS.EnableStatusIcons": "Enable status icons", "SETTINGS.EnableStatusIconsHint": "Set if combat and sanity effects icons are shown in tokens." } diff --git a/module/actors/actor.js b/module/actors/actor.js index bbe47041..de4fa66a 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -467,7 +467,7 @@ export class CoCActor extends Actor { } const created = await this.createEmbeddedDocuments('Item', [data], { renderSheet: showSheet - }) // MODIF: 0.8.x 'OwnedItmem' => 'Item + }) return created } @@ -511,8 +511,7 @@ export class CoCActor extends Actor { } await this.createEmbeddedDocuments('Item', [data], { renderSheet: !base - }) // MODIF: 0.8.x 'OwnedItmem' => 'Item - // const created = await this.createEmbeddedDocuments('OwnedItem', data, { renderSheet: !base}); + }) const skill = this.getSkillsByName(name) return skill[0] } @@ -556,7 +555,7 @@ export class CoCActor extends Actor { ) const attack = await this.createEmbeddedDocuments( - 'Item', // MODIF: 0.8.x 'OwnedItmem' => 'Item + 'Item', [ { name: 'Innate attack', @@ -576,12 +575,13 @@ export class CoCActor extends Actor { ], { renderSheet: false } ) - - const createdAttack = this.items.get(attack._id) - await createdAttack.update({ - 'data.skill.main.id': skill._id, - 'data.skill.main.name': skill.name - }) + if (skill.length > 0 && attack.length > 0) { + const createdAttack = this.items.get(attack[0].id) + await createdAttack.update({ + 'data.skill.main.id': skill[0].id, + 'data.skill.main.name': skill[0].name + }) + } } catch (err) { console.error('Creature init: ' + err.message) } @@ -601,7 +601,7 @@ export class CoCActor extends Actor { } const created = await this.createEmbeddedDocuments('Item', [data], { renderSheet: showSheet - }) // MODIF: 0.8.x 'OwnedItmem' => 'Item + }) return created } @@ -635,7 +635,6 @@ export class CoCActor extends Actor { index++ itemName = game.i18n.localize(COC7.newItemName) + ' ' + index } - return this.createItem(itemName, 1, showSheet) } @@ -664,7 +663,7 @@ export class CoCActor extends Actor { } await this.createEmbeddedDocuments('Item', [data], { renderSheet: showSheet - }) // MODIF: 0.8.x 'OwnedItmem' => 'Item + }) } async createBioSection (title = null) { @@ -728,6 +727,7 @@ export class CoCActor extends Actor { */ async createEmbeddedDocuments (embeddedName, dataArray, options) { const output = [] + let allCreated = [] for (const data of dataArray) { switch (data.type) { case 'skill': @@ -818,11 +818,14 @@ export class CoCActor extends Actor { } } - output.push(await super.createEmbeddedDocuments( + allCreated = await super.createEmbeddedDocuments( embeddedName, [data], options - )) + ) + for (const created of allCreated) { + output.push(created) + } break case 'weapon': { @@ -856,11 +859,14 @@ export class CoCActor extends Actor { if (skill) data.data.skill.alternativ.id = skill.id } // TODO : Else : selectionner le skill dans la liste ou en créer un nouveau. - output.push(await super.createEmbeddedDocuments( + allCreated = await super.createEmbeddedDocuments( embeddedName, [duplicate(data)], options - )) + ) + for (const created of allCreated) { + output.push(created) + } break } @@ -1033,7 +1039,7 @@ export class CoCActor extends Actor { // Add all skills await this.addUniqueItems(data.data.skills, 'archetype') - const newArchetype = await super.createEmbeddedDocuments( + const allCreated = await super.createEmbeddedDocuments( embeddedName, [data], options @@ -1043,7 +1049,9 @@ export class CoCActor extends Actor { 'data.development.archetype': this.archetypePoints }) - output.push(newArchetype) + for (const created of allCreated) { + output.push(created) + } } break @@ -1240,7 +1248,7 @@ export class CoCActor extends Actor { 'data.adjustments.occupation': Number(data.data.creditRating.min) }) - const newOccupation = await super.createEmbeddedDocuments( + allCreated = await super.createEmbeddedDocuments( embeddedName, [data], options @@ -1251,16 +1259,21 @@ export class CoCActor extends Actor { 'data.development.personal': this.personalPoints }) - output.push(newOccupation) + for (const created of allCreated) { + output.push(created) + } } break default: - output.push(await super.createEmbeddedDocuments( + allCreated = await super.createEmbeddedDocuments( embeddedName, [data], options - )) + ) + for (const created of allCreated) { + output.push(created) + } } } return output diff --git a/module/actors/sheets/creature-sheet.js b/module/actors/sheets/creature-sheet.js index 5e280b35..ef192819 100644 --- a/module/actors/sheets/creature-sheet.js +++ b/module/actors/sheets/creature-sheet.js @@ -137,7 +137,7 @@ export class CoC7CreatureSheet extends CoC7ActorSheet { static forceAuto (app, html) { const cell = html.find('.description.pannel.expanded') if (cell.length) { - cell.height(Math.max(130, html.height() - cell.position().top - 8) + 'px') + cell.height(Math.max(130, (html.height() - cell.position().top - 8) / cell.length) + 'px') } } diff --git a/module/actors/sheets/npc-sheet.js b/module/actors/sheets/npc-sheet.js index 68a82864..316f749e 100644 --- a/module/actors/sheets/npc-sheet.js +++ b/module/actors/sheets/npc-sheet.js @@ -59,7 +59,7 @@ export class CoC7NPCSheet extends CoC7ActorSheet { static forceAuto (app, html) { const cell = html.find('.description.pannel.expanded') if (cell.length) { - cell.height(Math.max(200, html.height() - cell.position().top - 8) + 'px') + cell.height(Math.max(200, (html.height() - cell.position().top - 8) / cell.length) + 'px') } } diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index 5ad002c4..918f26b1 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -342,9 +342,6 @@ export class CoC7ActorImporter { await npc .createEmbeddedDocuments('Item', [mainAttackSkill]) .then(async newSkills => { - console.debug('newskills', newSkills) - // const newSkill = newSkills[0].clone() - // newSkill.data.data.value = attack.data.range.normal.value await npc .createEmbeddedDocuments('Item', [attack]) .then(async createdAttacks => { @@ -398,12 +395,6 @@ export class CoC7ActorImporter { * @param {CoC7Item} skill */ async setMainAttackSkill (weapon, skill) { - if (Array.isArray(skill) && skill.length >0) { - skill = skill[0] - } - if (Array.isArray(weapon) && weapon.length >0) { - weapon = weapon[0] - } return await weapon.update({ 'data.skill.main.id': skill.id, 'data.skill.main.name': skill.name, diff --git a/module/apps/parser.js b/module/apps/parser.js index 67509a7e..20d460a4 100644 --- a/module/apps/parser.js +++ b/module/apps/parser.js @@ -120,11 +120,6 @@ export class CoC7Parser { } } - static async onInitEditor (editor) { - // editor con - ui.notifications.info('EDITOR IS INITIATED') - } - static ParseMessage ( message, html, @@ -217,16 +212,6 @@ export class CoC7Parser { } } - for (const element of html.find('.keeper-only')) { - if (!game.user.isGM) element.style.display = 'none' - } - - // for (const element of html.find('div.editor-content')){ - // if (element.outerHTML.toLocaleLowerCase().includes('[gm-only]')){ - // element.outerHTML = CoC7Parser.procesGMOnly( element.outerHTML) - // } - // } - // Bind the click to execute the check. // html.on('click', 'a.coc7-link', CoC7Parser._onCheck.bind(this)); html @@ -265,30 +250,6 @@ export class CoC7Parser { return html.innerHTML } - // static procesGMOnly (content){ - // // const gmOnlyRgx = new RegExp( - // // '(?:\[gm-only\])(.|\n)*?(?:\[\/gm-only\])', - // // 'gi' - // // ) - - // let replaced = content - - // const searchAndReplace = [ - // { search: '

[gm-only]', replace: '

'}, - // { search: '[/gm-only]

', replace: '

'}, - // { search: '[gm-only]', replace: ' + + {{#if isGM}} +
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+ {{/if}}
- - - diff --git a/templates/actors/creature-sheet.html b/templates/actors/creature-sheet.html index 8be7f093..1cae4758 100644 --- a/templates/actors/creature-sheet.html +++ b/templates/actors/creature-sheet.html @@ -384,6 +384,16 @@

{{item.name}}

{{/if}} + {{#if isGM}} +
+
+

{{localize 'CoC7.GmNotes'}}

+
+
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+
+ {{/if}}
diff --git a/templates/actors/npc-sheet.html b/templates/actors/npc-sheet.html index 412c91a3..120787a5 100644 --- a/templates/actors/npc-sheet.html +++ b/templates/actors/npc-sheet.html @@ -406,6 +406,16 @@

{{item.name}}

{{/if}} + {{#if isGM}} +
+
+

{{localize 'CoC7.GmNotes'}}

+
+
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+
+ {{/if}}
diff --git a/templates/actors/vehicle.html b/templates/actors/vehicle.html index 5571c7c5..a7aefeae 100644 --- a/templates/actors/vehicle.html +++ b/templates/actors/vehicle.html @@ -72,7 +72,7 @@
{{ localize "CoC7.Description" }}
{{#if isGM}}
{{ localize "CoC7.Details" }}
-
{{ localize "CoC7.GmNotes" }}
+
{{/if}} diff --git a/templates/items/archetype.html b/templates/items/archetype.html index f4fa802d..4fc6158e 100644 --- a/templates/items/archetype.html +++ b/templates/items/archetype.html @@ -25,6 +25,9 @@

{{ localize "CoC7.Description" }} {{ localize "CoC7.Details" }} {{ localize "CoC7.Skills" }} + {{#if isKeeper}} + + {{/if}} @@ -138,5 +141,10 @@

{{skill.displayName}} ({{skill.data.base}}%)

+ {{#if isKeeper}} +
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+ {{/if}}
diff --git a/templates/items/book/main.hbs b/templates/items/book/main.hbs index 994f9623..40441132 100644 --- a/templates/items/book/main.hbs +++ b/templates/items/book/main.hbs @@ -124,11 +124,9 @@ {{/if}} {{/if}} {{#if isKeeper}} - +
- - {{localize "CoC7.Notes"}} - +
{{/if}} diff --git a/templates/items/chase.html b/templates/items/chase.html index 7aea512f..5dd11558 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -18,9 +18,12 @@
@@ -115,7 +118,7 @@
- +
azertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbn
@@ -126,6 +129,11 @@
Chasers Min : {{chasersMinMov}}
Chasers Min : {{chasersMaxMov}}
+ {{#if isKeeper}} +
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+ {{/if}}
- \ No newline at end of file + diff --git a/templates/items/item-sheetV2.html b/templates/items/item-sheetV2.html index c7888426..28cb2c0b 100644 --- a/templates/items/item-sheetV2.html +++ b/templates/items/item-sheetV2.html @@ -1,5 +1,5 @@
-
+
@@ -20,11 +20,23 @@
-
+ -
- {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} +
+
+ {{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
+ {{#if isKeeper}} +
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+ {{/if}}
diff --git a/templates/items/occupation.html b/templates/items/occupation.html index ef4115cd..df380b18 100644 --- a/templates/items/occupation.html +++ b/templates/items/occupation.html @@ -28,6 +28,9 @@

{{ localize "CoC7.Description" }} {{#unless isOwned}}{{ localize "CoC7.Details" }}{{/unless}} {{ localize "CoC7.Skills" }} + {{#if isKeeper}} + + {{/if}} @@ -250,5 +253,10 @@

{{/unless}}
+ {{#if isKeeper}} +
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+ {{/if}} diff --git a/templates/items/setup.html b/templates/items/setup.html index d7681f9a..916b6c49 100644 --- a/templates/items/setup.html +++ b/templates/items/setup.html @@ -23,6 +23,9 @@

{{ localize "CoC7.Details" }} {{#if data.enableCharacterisitics}}{{ localize "CoC7.Characteristics" }}{{/if}} {{ localize "CoC7.Skills" }} + {{#if isKeeper}} + + {{/if}} @@ -186,12 +189,11 @@

{{ localize "CoC7.Characteristics" }}

{{/if}} - - - - - - + {{#if isKeeper}} +
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+ {{/if}} diff --git a/templates/items/skill-sheet.html b/templates/items/skill-sheet.html index 5c8d35b0..443c848b 100644 --- a/templates/items/skill-sheet.html +++ b/templates/items/skill-sheet.html @@ -24,31 +24,44 @@
- +
{{#each _properties as |property key|}} {{localize property.name}} - {{/each}}
- - - - -
- {{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
+ --}} + + +
+
+ {{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}} +
+ {{#if isKeeper}} +
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+ {{/if}} +
diff --git a/templates/items/spell.html b/templates/items/spell.html index 52a3a21a..cfd2c114 100644 --- a/templates/items/spell.html +++ b/templates/items/spell.html @@ -26,6 +26,9 @@

class="sheet-navigation tabs" data-group="primary"> {{ localize "CoC7.Description" }} {{ localize "CoC7.Details" }} + {{#if isKeeper}} + + {{/if}} @@ -106,6 +109,11 @@

{{ localize "CoC7.SpellCastingCost" }}

{{ localize "CoC7.Notes"}}

{{editor content=data.description.notes target="data.description.notes" button=true owner=owner editable=editable}} + {{#if isKeeper}} +
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+ {{/if}} diff --git a/templates/items/status.html b/templates/items/status.html index 2ce4457b..1e20c694 100644 --- a/templates/items/status.html +++ b/templates/items/status.html @@ -21,6 +21,9 @@

{{ localize "CoC7.Description" }} {{ localize "CoC7.Details" }} {{ localize "CoC7.Effects" }} + {{#if isKeeper}} + + {{/if}} @@ -64,6 +67,11 @@

{{ localize "CoC7.Notes"}}

To be implemented

+ {{#if isKeeper}} +
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+ {{/if}} diff --git a/templates/items/talent.html b/templates/items/talent.html index f98ebfd3..e4fe2f91 100644 --- a/templates/items/talent.html +++ b/templates/items/talent.html @@ -20,6 +20,9 @@

class="sheet-navigation tabs" data-group="primary"> {{ localize "CoC7.Description" }} {{ localize "CoC7.Details" }} + {{#if isKeeper}} + + {{/if}} @@ -75,6 +78,11 @@

{{ localize "CoC7.Details" }}

{{ localize "CoC7.Notes"}}

{{editor content=data.description.notes target="data.description.notes" button=true owner=owner editable=editable}} + {{#if isKeeper}} +
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+ {{/if}} diff --git a/templates/items/weapon-sheet.html b/templates/items/weapon-sheet.html index c834a6de..0c482df3 100644 --- a/templates/items/weapon-sheet.html +++ b/templates/items/weapon-sheet.html @@ -20,7 +20,7 @@ {{/each}} {{/if}} - {{/select}} + {{/select}} {{#if usesAlternateSkill}} @@ -87,6 +87,9 @@ {{!-- Sheet Body --}} @@ -153,8 +156,13 @@ -
+
{{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
+ {{#if isKeeper}} +
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+ {{/if}} From 83fc8004f3a018606726925b0e6dd0d7918c0b97 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 8 Sep 2021 22:04:24 +0000 Subject: [PATCH 014/726] Updated translations list --- .github/TRANSLATIONS.md | 648 ++++++++++++++++++++-------------------- 1 file changed, 320 insertions(+), 328 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index b9a84371..64e2d2c8 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,325 +2,325 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -| Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **315** | **90** | **108** | **2** | **2** | **110** | **2** | **2** | **2** | **30** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectedTargetIsNotControlled](#coc7messageselectedtargetisnotcontrolled) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnablePlayerSourceCode](#settingsenableplayersourcecode) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.EnablePlayerSourceCodeyHint](#settingsenableplayersourcecodeyhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +The following translations are currently up to date **es**, **fr**, **pl**, **pt-BR**, **sv** + +| Key | cn | cs | de | ja | zh-TW | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **313** | **88** | **106** | **108** | **28** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ❌ | ✅ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MessageSelectedTargetIsNotControlled](#coc7messageselectedtargetisnotcontrolled) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ❌ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ❌ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ❌ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ❌ | ✅ | ##### CoC7.ActorImporter @@ -664,7 +664,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry ##### CoC7.GmNotes -`"CoC7.GmNotes": "GM's notes",` +`"CoC7.GmNotes": "Keeper's notes",` ##### CoC7.GmTools @@ -1466,14 +1466,6 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"SETTINGS.DoNotAdvise": "Keep it for yourself.",` -##### SETTINGS.EnablePlayerSourceCode - -`"SETTINGS.EnablePlayerSourceCode": "Enable code editing for players.",` - -##### SETTINGS.EnablePlayerSourceCodeyHint - -`"SETTINGS.EnablePlayerSourceCodeyHint": "!WARNING! When Enabling this, players will be able to see and edit 'keeper only' blocks.",` - ##### SETTINGS.EnableStatusIcons `"SETTINGS.EnableStatusIcons": "Enable status icons",` From 6a63c08a3ef47accc018ba1eeff13c96e4dab429 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 9 Sep 2021 00:00:17 +0100 Subject: [PATCH 015/726] Tidy code --- module/dice.js | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/module/dice.js b/module/dice.js index 35396928..9a4ca40c 100644 --- a/module/dice.js +++ b/module/dice.js @@ -40,33 +40,14 @@ export class CoC7Dice { } }) if (modif < 0) { - result.tens.total = Math.max(...result.tens.results) - // Handle the 00 special case - if (result.unit.total === 0 && result.tens.results.includes(0)) { - result.tens.total = 0 - } + result.tens.total = result.unit.total === 0 && result.tens.results.includes(0) ? 100 : Math.max(...result.tens.results) + } else if (result.unit.total === 0) { + const dice = result.tens.results.filter(t => t > 0) + result.tens.total = dice.length === 0 ? 100 : Math.min(...dice) } else { result.tens.total = Math.min(...result.tens.results) - // Handle the 00 special case - if (result.unit.total === 0 && result.tens.results.includes(0)) { - let tens_results_non_zero = [] - result.tens.results.forEach(r => { - if (r !== 0) { - tens_results_non_zero.push(r) - } - }) - if (tens_results_non_zero.length === 0) { - // All the tens dices are 0 - result.tens.total = 0 - } else { - result.tens.total = Math.min(...tens_results_non_zero) - } - } } result.total = result.unit.total + result.tens.total - if (result.total === 0) { - result.total = 100 - } return result } From a585eff33ff7ae81d8c0e18f15980ccdf92ceba5 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 9 Sep 2021 00:12:33 +0100 Subject: [PATCH 016/726] Prevent JavaScript error on GM self role if no token selected --- module/check.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/module/check.js b/module/check.js index 337bd178..e7a938a7 100644 --- a/module/check.js +++ b/module/check.js @@ -1529,10 +1529,12 @@ export class CoC7Check { chatData.flavor = `[${this.actor.name}] ${chatData.flavor}` chatData.flags = { CoC7: { - GMSelfRoll: true, - originalSpeaker: duplicate(chatData.speaker) + GMSelfRoll: true } } + if (typeof chatData.speaker !== 'undefined') { + chatData.flags.CoC7.originalSpeaker = duplicate(chatData.speaker) + } if (game.user.isGM) { switch (game.settings.get('CoC7', 'selfRollWhisperTarget')) { case 'owners': From eeaa2d6a87557563ea5f1141adefa9abb51d5c80 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 9 Sep 2021 15:01:35 +0100 Subject: [PATCH 017/726] Implement HavlockV san loss from creature not being rolled fix --- module/chat/cards/san-check.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/chat/cards/san-check.js b/module/chat/cards/san-check.js index f26baa1a..3dc292ae 100644 --- a/module/chat/cards/san-check.js +++ b/module/chat/cards/san-check.js @@ -95,7 +95,7 @@ export class SanCheckCard extends ChatCardActor { : this.sanData.sanMin } - const formula = this.creature?.sanLoss ? this.sanCheck.passed : 0 + const formula = this.creature?.sanLoss(this.sanCheck.passed) || 0 if (formula) { if (!isNaN(Number(formula))) return Number(formula) return formula From f7b6d2c182866d0b2bb59f941de8fa1dbef63726 Mon Sep 17 00:00:00 2001 From: castanho Date: Fri, 10 Sep 2021 14:38:23 -0300 Subject: [PATCH 018/726] Add summarize/maximize header buttons --- lang/en.json | 3 +++ module/actors/sheets/character.js | 20 +++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lang/en.json b/lang/en.json index a380547c..4f679695 100644 --- a/lang/en.json +++ b/lang/en.json @@ -699,6 +699,9 @@ "CoC7.Migrate.ButtonSkip": "Skip", "CoC7.Migrate.ButtonOkay": "Okay", + "CoC7.Maximize": "Maximize", + "CoC7.Summarize": "Summarize", + "SETTINGS.TitleRules": "Rules", "SETTINGS.TitleInitiative": "Initiative Settings", "SETTINGS.TitleRoll": "Roll Settings", diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index 28a6854a..08331ed1 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -3,9 +3,23 @@ import { CoC7CharacterSheet } from './actor-sheet.js' export class CoC7CharacterSheetV2 extends CoC7CharacterSheet { - // constructor(...args) { - // super(...args); - // } + _getHeaderButtons () { + if (!this.summarized) this.summarized = false + let buttons = super._getHeaderButtons() + buttons = [ + { + label: this.summarized + ? game.i18n.localize('CoC7.Maximize') + : game.i18n.localize('CoC7.Summarize'), + class: 'test-extra-icon', + icon: this.summarized + ? 'fas fa-window-maximize' + : 'fas fa-window-minimize', + onclick: event => this.toggleSheetMode(event) + } + ].concat(buttons) + return buttons + } async getData () { const data = await super.getData() From c2ef78440768aa9b63636c4eef6d821591c4b0be Mon Sep 17 00:00:00 2001 From: castanho Date: Fri, 10 Sep 2021 14:39:23 -0300 Subject: [PATCH 019/726] Add character sheet index and loaders --- module/scripts/load-templates.js | 2 ++ templates/actors/character/index.html | 5 +++++ 2 files changed, 7 insertions(+) create mode 100644 templates/actors/character/index.html diff --git a/module/scripts/load-templates.js b/module/scripts/load-templates.js index f76ee969..d756eb1c 100644 --- a/module/scripts/load-templates.js +++ b/module/scripts/load-templates.js @@ -22,6 +22,8 @@ export const preloadHandlebarsTemplates = async function () { 'systems/CoC7/templates/actors/parts/development-controls.html', 'systems/CoC7/templates/actors/parts/vitals.html', 'systems/CoC7/templates/actors/parts/combat.html', + 'systems/CoC7/templates/actors/character-sheet-v2.html', + 'systems/CoC7/templates/actors/character/summary.html', 'systems/CoC7/templates/items/book/details.hbs' ] diff --git a/templates/actors/character/index.html b/templates/actors/character/index.html new file mode 100644 index 00000000..a80e25e1 --- /dev/null +++ b/templates/actors/character/index.html @@ -0,0 +1,5 @@ +{{#if summarized}} + {{> "systems/CoC7/templates/actors/character/summary.html"}} +{{else}} + {{> "systems/CoC7/templates/actors/character-sheet-v2.html"}} +{{/if}} From d74d924fd138accb01fb9f77786c57b3e9e77f84 Mon Sep 17 00:00:00 2001 From: castanho Date: Fri, 10 Sep 2021 14:39:53 -0300 Subject: [PATCH 020/726] Add summarized character sheet templates and styles --- styles/sheets/summary.less | 391 ++++++++++++++++++++++++ styles/system/index.less | 1 + templates/actors/character/summary.html | 203 ++++++++++++ 3 files changed, 595 insertions(+) create mode 100644 styles/sheets/summary.less create mode 100644 templates/actors/character/summary.html diff --git a/styles/sheets/summary.less b/styles/sheets/summary.less new file mode 100644 index 00000000..f05b0c1f --- /dev/null +++ b/styles/sheets/summary.less @@ -0,0 +1,391 @@ +.coc7.actor.character.summarized { + .window-content { + background: var(--other-sheet-bg); + background-repeat: repeat; + } + form { + background: var(--other-sheet-bg); + background-repeat: repeat; + } + font-family: customSheetFont, "Palatino Linotype", serif; + .container { + display: grid; + grid-template-columns: 1fr 1.35fr 1fr; + grid-template-rows: 0.05fr 1fr; + gap: 1px; + grid-template-areas: + "header header header" + "characteristics skills other"; + .rollable { + &:hover { + color: #000; + text-shadow: 0 0 10px red; + cursor: pointer; + } + } + .header { + grid-area: header; + min-height: 25px; + label { + line-height: 1; + } + .status-monitor { + color: darkgrey; + text-align: center; + } + .status-monitor.invert { + transform: rotateZ(180deg); + } + .status-monitor.status-on { + color: darkred; + } + .fas { + font-size: 12px; + } + .control { + line-height: 0.9; + max-width: fit-content; + margin-left: 5px; + } + .flexrow { + margin: 0 10px; + max-width: fit-content; + } + .current-value { + text-align: right; + padding-right: 0.25rem; + max-width: 25px; + input { + text-align: center; + } + } + .separator { + max-width: fit-content; + } + .max-value { + text-align: left; + padding-left: 0.25rem; + max-width: fit-content; + input { + background-color: rgba(0, 0, 0, 0.1); + max-width: fit-content; + } + } + span { + height: 1rem; + line-height: 1rem; + } + input { + background-color: transparent; + border: 0; + height: auto; + padding: 0; + font-weight: bold; + &:read-only { + border: 0px; + background-color: transparent; + box-shadow: none; + cursor: default; + } + } + } + .characteristics { + grid-area: characteristics; + flex: 1; + font-weight: bold; + display: flex; + flex-direction: column; + height: 100%; + .header { + flex: 1; + } + .footer { + flex: 1; + display: flex; + flex-direction: row; + .attribute { + flex: 0 0 25%; + display: grid; + grid-template-columns: auto 2rem; + align-items: center; + justify-content: center; + } + .attribute-label { + min-width: 0; + h2 { + border: 0; + padding: 0; + margin: 0; + line-height: 1.375rem; + font-size: 0.75rem; + color: var(--main-sheet-front-color); + font-weight: normal; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + } + .attribute-value { + text-align: center; + font-size: 0.75rem; + color: var(--main-sheet-front-color); + font-weight: normal; + input { + border: 0; + padding: 0; + font-size: 0.75rem; + color: var(--main-sheet-front-color); + background-color: @greyBackground; + font-weight: normal; + } + } + } + .char-boxes { + flex: 0 0 6rem; + justify-content: center; + display: grid; + grid-template-columns: repeat(4, 3.75rem); + grid-template-rows: repeat(2, 3rem); + } + .char-box { + display: grid; + grid-template-columns: 1rem 2.75rem; + grid-template-rows: 1rem 2rem; + grid-template-areas: + "rollIcon characName" + "characScore characScore"; + align-items: baseline; + .roll-icon { + color: var(--main-sheet-front-color); + grid-area: rollIcon; + line-height: 1.4rem; + } + .charac-name { + color: var(--main-sheet-front-color); + grid-area: characName; + line-height: 1.4rem; + } + .charac-score { + grid-area: characScore; + margin-top: 0.25rem; + margin-right: 0.5rem; + border-radius: 0.25rem; + color: var(--main-sheet-back-color); + background: @whiteBackground; + display: grid; + grid-template-columns: 2.375rem 0.875rem; + grid-template-rows: 0.875rem 0.875rem; + grid-template-areas: + "mainScore halfScore" + "mainScore fithScore"; + .main-score { + grid-area: mainScore; + justify-self: center; + align-self: center; + } + .half-score { + grid-area: halfScore; + font-size: 0.6rem; + justify-self: center; + align-self: center; + } + .fith-score { + grid-area: fithScore; + font-size: 0.6rem; + justify-self: center; + align-self: center; + } + input { + background: transparent; + border: 0; + font-weight: bold; + } + } + } + input { + text-align: center; + color: var(--main-sheet-back-color); + font-size: 1.3rem; + &:hover, + &:focus { + background: transparent; + } + &:read-only { + border: 1px solid transparent; + box-shadow: none; + cursor: default; + } + } + } + .skills { + grid-area: skills; + flex: 1; + flex-wrap: wrap; + width: auto; + flex-direction: column; + max-height: 125px; + .item-list { + margin: 0; + padding: 0; + display: flex; + width: auto; + height: 100%; + flex-direction: column; + flex-wrap: wrap; + .itemV2 { + max-height: 1.25rem; + width: 125px; + margin-right: 0.5rem; + display: grid; + font-size: 0.75rem; + grid-template-columns: 1rem auto 1.5rem 0.7rem; + border-bottom: 1px solid; + + &.specialization { + margin-left: 0.5rem; + width: var(--skill-specialization-length); + border-left: 1px solid; + } + + .item-image { + height: 0.875rem; + background-size: contain; + margin: 1px 0 0 0; + } + + .item-name { + // .cursive(); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding-left: 3px; + line-height: 1rem; + + input { + height: 1rem; + padding: 0; + overflow: visible; + background-color: @greyBackground; + color: var(--main-sheet-front-color); + } + } + + .item-score { + // .cursive(); + color: var(--main-sheet-back-color); + text-align: end; + margin-right: 2px; + line-height: 1rem; + + input { + height: 1rem; + padding: 0; + margin-right: 2px; + background-color: @greyBackground; + color: var(--main-sheet-back-color); + text-align: end; + } + } + + .item-controls { + // font-family: system-ui; + font-size: 0.625rem; + line-height: 1rem; + flex: 0 0 1.25rem; + display: block; + text-align: end; + width: max-content; + a:hover { + text-shadow: none; + color: var(--main-sheet-back-color); + } + + .item-control { + &.active { + color: goldenrod; + } + } + } + } + } + } + .other { + grid-area: other; + padding: 0 0 0 10px; + height: 100%; + overflow-y: auto; + ol { + margin: 0; + margin-bottom: 25px; + padding: 0; + } + .cash-row { + input { + border: 0; + } + span { + line-height: 1.4rem; + } + } + .item-list { + .itemV2 { + margin-right: 3px !important; + width: 10rem !important; + } + display: flex !important; + flex-direction: row !important; + flex-wrap: wrap !important; + } + .weapon-row { + max-height: 1.25rem; + font-size: 0.75rem; + display: grid; + border-bottom: 1px solid; + grid-template-columns: 1rem 5.5rem 2.5rem 2rem; + grid-template-rows: 1rem; + grid-template-areas: "image name damage weaponControl"; + .weapon-damage { + grid-area: damage; + color: var(--main-sheet-back-color); + text-align: end; + margin-right: 2px; + line-height: 1rem; + text-align: center; + } + .weapon-image { + height: 0.875rem; + grid-area: image; + background-size: contain; + margin: 1px 0 0 0; + } + .weapon-name { + grid-area: name; + height: 1rem; + line-height: 1rem; + padding-left: 3px; + font-size: 0.75rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .alternativ-skill { + flex: 0 0 24px; + } + .weapon-control { + text-align: center; + line-height: 1rem; + grid-area: weaponControl; + } + .weapon-controls { + line-height: 1rem; + text-align: center; + display: grid; + grid-template-columns: 1rem 1rem; + grid-template-rows: 1rem; + grid-area: weaponControl; + } + } + } + } +} diff --git a/styles/system/index.less b/styles/system/index.less index 61d4c965..7f245ca0 100644 --- a/styles/system/index.less +++ b/styles/system/index.less @@ -28,3 +28,4 @@ @import '../sheets/vehicle.less'; @import 'variables.less'; @import 'default-override.less'; +@import '../sheets/summary.less'; diff --git a/templates/actors/character/summary.html b/templates/actors/character/summary.html new file mode 100644 index 00000000..0e0413fc --- /dev/null +++ b/templates/actors/character/summary.html @@ -0,0 +1,203 @@ +
+
+
+
+ +
+ +
+
/
+
+ {{#if data.attribs.lck.auto}} + + {{else}} + + {{/if}} +
+
+
+ +
+ +
+
/
+
+ {{#if data.attribs.hp.auto}} + + {{else}} + + {{/if}} +
+
+ + + + + {{#if data.status.dead.value}} + + {{else}} + + {{/if}} +
+
+
+ +
+ +
+
/
+
+ {{#if data.attribs.san.auto}} + + {{else}} + + {{/if}} +
+
+ + + +
+
+ +
+
+
+ +
+ +
+
/
+
+ {{#if data.attribs.mp.auto}} + + {{else}} + + {{/if}} +
+
+
+
+
+ {{#each actor.characteristics as |characteristic key|}} +
+
+
{{characteristic.shortName}}
+
+
+ +
+
{{characteristic.hard}}
+
{{characteristic.extreme}}
+
+
+ {{/each}} +
+ +
+
+
    + {{#each topSkills as |skill|}} +
  1. +
    +
    {{skill.name}}
    +
    {{skill.data.value}}
    +
    + {{#unless skill.data.properties.noxpgain}} + {{#if skill.data.flags.developement}} + + {{else}} + + {{/if}} + {{/unless}} +
    +
  2. + {{/each}} +
+
+
+
    + {{#each topWeapons as |weapon|}} + {{#if weapon.data.properties.melee}} +
  1. +
    +
    +
    {{weapon.name}}
    + {{#if weapon.data.properties.thrown}} + + {{/if}} +
    +
    + {{weapon.data.range.normal.damage}} +
    +
    + {{#if weapon.data.properties.addb}}{{localize 'CoC7.WeaponAddb'}}{{/if}} + {{#if weapon.data.properties.ahdb}}{{localize 'CoC7.WeaponAhdb'}}{{/if}} +
    +
  2. + {{else}} +
  3. +
    +
    +
    {{weapon.name}}
    + {{#if weapon.usesAlternateSkill}} + + {{/if}} +
    +
    + {{weapon.data.range.normal.damage}} +
    +
    +
    + {{weapon.data.ammo}} +
    +
    + +
    +
    +
  4. + {{/if}} + {{/each}} +
+
+ + {{#if data.flags.manualCredit}} + + {{else}} + {{credit.spendingLevel}} + {{/if}} +
+
+ + {{#if data.flags.manualCredit}} + + {{else}} + {{credit.cash}} + {{/if}} + +
+
+
+
From 045297222b839a1c3cc605bd2722eab45377a59a Mon Sep 17 00:00:00 2001 From: castanho Date: Fri, 10 Sep 2021 14:41:22 -0300 Subject: [PATCH 021/726] Add toggle sheet mode function and edit default options --- module/actors/sheets/character.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index 08331ed1..59a8d897 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -21,11 +21,25 @@ export class CoC7CharacterSheetV2 extends CoC7CharacterSheet { return buttons } + async toggleSheetMode (event) { + console.log(event) + this.summarized = !this.summarized + await this.close() + const options = this.summarized + ? { + classes: ['coc7', 'actor', 'character', 'summarized'], + height: 200, + resizable: false, + width: 700 + } + : CoC7CharacterSheetV2.defaultOptions + await this.render(true, options) + } + async getData () { const data = await super.getData() - + data.summarized = this.summarized data.skillList = [] - let previousSpec = '' for (const skill of data.skills) { if (skill.data.properties.special) { @@ -50,7 +64,6 @@ export class CoC7CharacterSheetV2 extends CoC7CharacterSheet { data.data.infos.playername = user.name } } - return data } @@ -61,7 +74,7 @@ export class CoC7CharacterSheetV2 extends CoC7CharacterSheet { static get defaultOptions () { return mergeObject(super.defaultOptions, { classes: ['coc7', 'sheetV2', 'actor', 'character'], - template: 'systems/CoC7/templates/actors/character-sheet-v2.html', + template: 'systems/CoC7/templates/actors/character/index.html', width: 687, height: 623, resizable: true, From 6c48491c052bb3298cf96a9e63ebd505acff826b Mon Sep 17 00:00:00 2001 From: castanho Date: Fri, 10 Sep 2021 14:41:57 -0300 Subject: [PATCH 022/726] Add algorithm to filter top skills/weapons --- module/actors/sheets/character.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index 59a8d897..46a31fee 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -53,7 +53,18 @@ export class CoC7CharacterSheetV2 extends CoC7CharacterSheet { } data.skillList.push(skill) } - + data.topSkills = [...data.skills] + .sort((a, b) => { + return a.data.value - b.data.value + }) + .reverse() + .slice(0, 14) + data.topWeapons = [...data.meleeWpn, ...data.rangeWpn] + .sort((a, b) => { + return a.data.skill.main?.value - b.data.skill.main?.value + }) + .reverse() + .slice(0, 3) data.displayPlayerName = game.settings.get( 'CoC7', 'displayPlayerNameOnSheet' From 3fc2872273cd7a9d061f2e2e46752827165df600 Mon Sep 17 00:00:00 2001 From: castanho Date: Fri, 10 Sep 2021 15:03:28 -0300 Subject: [PATCH 023/726] Improve status view --- styles/sheets/summary.less | 12 ++++++++++++ templates/actors/character/summary.html | 3 --- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/styles/sheets/summary.less b/styles/sheets/summary.less index f05b0c1f..006af41a 100644 --- a/styles/sheets/summary.less +++ b/styles/sheets/summary.less @@ -39,6 +39,18 @@ .status-monitor.status-on { color: darkred; } + .status { + color: grey; + text-align: center; + a { + &.inative-status { + &:hover { + text-shadow: none !important; + cursor: default; + } + } + } + } .fas { font-size: 12px; } diff --git a/templates/actors/character/summary.html b/templates/actors/character/summary.html index 0e0413fc..e4c62b2e 100644 --- a/templates/actors/character/summary.html +++ b/templates/actors/character/summary.html @@ -61,9 +61,6 @@
-
- -
From df88b17e6ad02846a16492ef79ee0fba64a04971 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Fri, 10 Sep 2021 18:30:19 +0000 Subject: [PATCH 024/726] Updated translations list --- .github/TRANSLATIONS.md | 646 ++++++++++++++++++++-------------------- 1 file changed, 327 insertions(+), 319 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 64e2d2c8..1da4a18e 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,325 +2,325 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **es**, **fr**, **pl**, **pt-BR**, **sv** - -| Key | cn | cs | de | ja | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **313** | **88** | **106** | **108** | **28** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ❌ | ✅ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MessageSelectedTargetIsNotControlled](#coc7messageselectedtargetisnotcontrolled) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ❌ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ❌ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ❌ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ❌ | ✅ | +| Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **315** | **90** | **108** | **2** | **2** | **110** | **2** | **2** | **2** | **30** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectedTargetIsNotControlled](#coc7messageselectedtargetisnotcontrolled) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ##### CoC7.ActorImporter @@ -866,6 +866,10 @@ The following translations are currently up to date **es**, **fr**, **pl**, **pt `"CoC7.MaxSanloss": "Max loss",` +##### CoC7.Maximize + +`"CoC7.Maximize": "Maximize",` + ##### CoC7.MemoryRepressed `"CoC7.MemoryRepressed": "Your mind repressed the memory and buried it in your subconscious.",` @@ -1146,6 +1150,10 @@ The following translations are currently up to date **es**, **fr**, **pl**, **pt `"CoC7.Success": "Success",` +##### CoC7.Summarize + +`"CoC7.Summarize": "Summarize",` + ##### CoC7.Target `"CoC7.Target": "Target",` From fe74946d20dbe3d50550f53cb5fa851264fe8766 Mon Sep 17 00:00:00 2001 From: castanho Date: Fri, 10 Sep 2021 15:49:49 -0300 Subject: [PATCH 025/726] Remove console.log and format code --- lang/fr.json | 2 +- module/actors/actor.js | 30 ++++++++---- module/actors/sheets/base.js | 68 +++++++++++++------------- module/actors/sheets/character.js | 1 - module/actors/sheets/creature-sheet.js | 5 +- module/actors/sheets/npc-sheet.js | 5 +- module/apps/char-roll-dialog.js | 3 +- module/apps/link-creation-dialog.js | 5 +- module/apps/link.js | 5 +- module/chat/cards/combined-roll.js | 2 +- module/chat/cards/opposed-roll.js | 2 +- module/dice.js | 5 +- module/items/book/sheet.js | 2 +- module/items/item.js | 13 +++-- module/updater.js | 15 +++++- module/utilities.js | 12 ++++- styles/sheets/summary.less | 16 +++--- 17 files changed, 120 insertions(+), 71 deletions(-) diff --git a/lang/fr.json b/lang/fr.json index be8053b2..c7d5ab92 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -800,4 +800,4 @@ "SETTINGS.OneBlockBackStoryHint": "Transformer l'historique en un bloc éditable unique, mais vous pouvez y formater/ajouter des liens", "SETTINGS.EnableStatusIcons": "Active les icônes d'effet", "SETTINGS.EnableStatusIconsHint": "Définit si les icônes d'effets de combat et de santé mentale sont affichés dans les tokens." -} \ No newline at end of file +} diff --git a/module/actors/actor.js b/module/actors/actor.js index de4fa66a..52496087 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -232,15 +232,15 @@ export class CoCActor extends Actor { } let boutDurationText = this.isInABoutOfMadness ? boutRealTime - ? `${duration} ${game.i18n.localize('CoC7.rounds')}` - : `${duration} ${game.i18n.localize('CoC7.hours')}` + ? `${duration} ${game.i18n.localize('CoC7.rounds')}` + : `${duration} ${game.i18n.localize('CoC7.hours')}` : null const insanityDurationText = insaneDuration ? this.isInsane - ? indefiniteInstanity - ? null - : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` - : null + ? indefiniteInstanity + ? null + : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` + : null : null if (this.isInsane && !insanityDurationText && !indefiniteInstanity) { indefiniteInstanity = true @@ -267,8 +267,8 @@ export class CoCActor extends Actor { durationText: insanityDurationText || '', hint: this.isInsane ? indefiniteInstanity - ? game.i18n.localize('CoC7.IndefiniteInsanity') - : `${game.i18n.localize( + ? game.i18n.localize('CoC7.IndefiniteInsanity') + : `${game.i18n.localize( 'CoC7.TemporaryInsanity' )} ${insanityDurationText || ''}` : game.i18n.localize('CoC7.NotInsane') @@ -919,7 +919,16 @@ export class CoCActor extends Actor { } else { data.data.title = game.i18n.localize('CoC7.RollCharac') } - data.data.pointsWarning = !(data.data.characteristics.values.str !== null && data.data.characteristics.values.con !== null && data.data.characteristics.values.siz !== null && data.data.characteristics.values.dex !== null && data.data.characteristics.values.app !== null && data.data.characteristics.values.int !== null && data.data.characteristics.values.pow !== null && data.data.characteristics.values.edu !== null) + data.data.pointsWarning = !( + data.data.characteristics.values.str !== null && + data.data.characteristics.values.con !== null && + data.data.characteristics.values.siz !== null && + data.data.characteristics.values.dex !== null && + data.data.characteristics.values.app !== null && + data.data.characteristics.values.int !== null && + data.data.characteristics.values.pow !== null && + data.data.characteristics.values.edu !== null + ) const rolled = await CharacRollDialog.create(data.data) if (rolled) { const updateData = {} @@ -2499,7 +2508,8 @@ export class CoCActor extends Actor { create = true } }) - const actor = (typeof this.parent?.actor !== 'undefined' ? this.parent.actor : this) + const actor = + typeof this.parent?.actor !== 'undefined' ? this.parent.actor : this if (create === true) { await actor.createEmbeddedDocuments('Item', [item.toJSON()]) diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index fd64897b..617b230e 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -308,11 +308,13 @@ export class CoC7ActorSheet extends ActorSheet { : 0 let updatedExp = exp + parseInt(item.data.value) - skill.value if (updatedExp <= 0) updatedExp = null - await this.actor.updateEmbeddedDocuments('Item', [{ - _id: item._id, - 'data.adjustments.experience': updatedExp, - 'data.value': null - }]) + await this.actor.updateEmbeddedDocuments('Item', [ + { + _id: item._id, + 'data.adjustments.experience': updatedExp, + 'data.value': null + } + ]) if (!item.data.adjustments) item.data.adjustments = {} item.data.adjustments.experience = updatedExp item.data.value = value @@ -337,9 +339,9 @@ export class CoC7ActorSheet extends ActorSheet { a.data.properties.special && typeof a.data.specialization !== 'undefined' ? a.data.specialization - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() + a.name .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') @@ -352,9 +354,9 @@ export class CoC7ActorSheet extends ActorSheet { b.data.properties.special && typeof b.data.specialization !== 'undefined' ? b.data.specialization - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() + b.name .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') @@ -388,9 +390,9 @@ export class CoC7ActorSheet extends ActorSheet { if (a.data.properties && b.data.properties) { lca = a.data.properties.special ? a.data.specialization - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() + a.name .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') @@ -401,9 +403,9 @@ export class CoC7ActorSheet extends ActorSheet { .toLowerCase() lcb = b.data.properties.special ? b.data.specialization - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() + b.name .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') @@ -722,9 +724,7 @@ export class CoC7ActorSheet extends ActorSheet { html .find('.characteristic-label') .click(this._onRollCharacteriticTest.bind(this)) - html - .find('.skill-name.rollable') - .click(this._onRollSkillTest.bind(this)) + html.find('.skill-name.rollable').click(this._onRollSkillTest.bind(this)) html.find('.skill-image').click(this._onRollSkillTest.bind(this)) html .find('.attribute-label.rollable') @@ -870,9 +870,7 @@ export class CoC7ActorSheet extends ActorSheet { } }) - html - .find('a.coc7-link') - .on('click', event => CoC7Parser._onCheck(event)) + html.find('a.coc7-link').on('click', event => CoC7Parser._onCheck(event)) html .find('a.coc7-link') .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) @@ -1517,19 +1515,19 @@ export class CoC7ActorSheet extends ActorSheet { if (isCtrlKey(event) && game.user.isGM && ['lck', 'san'].includes(attrib)) { const linkData = event.altKey ? { - check: 'sanloss', - hasPlayerOwner: this.actor.hasPlayerOwner, - actorKey: this.actor.actorKey, - forceModifiers: event.shiftKey - } + check: 'sanloss', + hasPlayerOwner: this.actor.hasPlayerOwner, + actorKey: this.actor.actorKey, + forceModifiers: event.shiftKey + } : { - check: 'check', - type: 'attribute', - name: attrib, - hasPlayerOwner: this.actor.hasPlayerOwner, - actorKey: this.actor.actorKey, - forceModifiers: event.shiftKey - } + check: 'check', + type: 'attribute', + name: attrib, + hasPlayerOwner: this.actor.hasPlayerOwner, + actorKey: this.actor.actorKey, + forceModifiers: event.shiftKey + } if (game.settings.get('core', 'rollMode') === 'blindroll') { linkData.blind = true } diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index 46a31fee..e477ff94 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -22,7 +22,6 @@ export class CoC7CharacterSheetV2 extends CoC7CharacterSheet { } async toggleSheetMode (event) { - console.log(event) this.summarized = !this.summarized await this.close() const options = this.summarized diff --git a/module/actors/sheets/creature-sheet.js b/module/actors/sheets/creature-sheet.js index ef192819..219c5f63 100644 --- a/module/actors/sheets/creature-sheet.js +++ b/module/actors/sheets/creature-sheet.js @@ -137,7 +137,10 @@ export class CoC7CreatureSheet extends CoC7ActorSheet { static forceAuto (app, html) { const cell = html.find('.description.pannel.expanded') if (cell.length) { - cell.height(Math.max(130, (html.height() - cell.position().top - 8) / cell.length) + 'px') + cell.height( + Math.max(130, (html.height() - cell.position().top - 8) / cell.length) + + 'px' + ) } } diff --git a/module/actors/sheets/npc-sheet.js b/module/actors/sheets/npc-sheet.js index 316f749e..86ff10dd 100644 --- a/module/actors/sheets/npc-sheet.js +++ b/module/actors/sheets/npc-sheet.js @@ -59,7 +59,10 @@ export class CoC7NPCSheet extends CoC7ActorSheet { static forceAuto (app, html) { const cell = html.find('.description.pannel.expanded') if (cell.length) { - cell.height(Math.max(200, (html.height() - cell.position().top - 8) / cell.length) + 'px') + cell.height( + Math.max(200, (html.height() - cell.position().top - 8) / cell.length) + + 'px' + ) } } diff --git a/module/apps/char-roll-dialog.js b/module/apps/char-roll-dialog.js index facd2626..eae8a1f4 100644 --- a/module/apps/char-roll-dialog.js +++ b/module/apps/char-roll-dialog.js @@ -212,7 +212,8 @@ export class CharacRollDialog extends Dialog { if (data.characteristics.points.enabled) { if ( - Number(data.characteristics.points.total) !== Number(data.characteristics.points.value) + Number(data.characteristics.points.total) !== + Number(data.characteristics.points.value) ) { data.pointsWarning = true } diff --git a/module/apps/link-creation-dialog.js b/module/apps/link-creation-dialog.js index 553425d6..30e6856a 100644 --- a/module/apps/link-creation-dialog.js +++ b/module/apps/link-creation-dialog.js @@ -121,7 +121,10 @@ export class CoC7LinkCreationDialog extends FormApplication { } // Prepare characteristics - data.attributes = CoC7LinkCreationDialog.attributes.map(e => { e.selected = data.data.attributeKey === e.key; return e }) + data.attributes = CoC7LinkCreationDialog.attributes.map(e => { + e.selected = data.data.attributeKey === e.key + return e + }) return data } diff --git a/module/apps/link.js b/module/apps/link.js index 007b4f3b..ae810df2 100644 --- a/module/apps/link.js +++ b/module/apps/link.js @@ -13,7 +13,10 @@ export class CoC7Link { } static async fromData (linkData) { - const label = CoC7LinkCreationDialog.attributes.concat(CoCActor.getCharacteristicDefinition()).filter(e => e.key === linkData.name).map(e => e.label) + const label = CoC7LinkCreationDialog.attributes + .concat(CoCActor.getCharacteristicDefinition()) + .filter(e => e.key === linkData.name) + .map(e => e.label) if (label.length > 0) { linkData.label = label[0] } diff --git a/module/chat/cards/combined-roll.js b/module/chat/cards/combined-roll.js index d897a922..3469152f 100644 --- a/module/chat/cards/combined-roll.js +++ b/module/chat/cards/combined-roll.js @@ -218,7 +218,7 @@ export class CombinedCheckCard extends RollCard { } this.rolls = this.rolls.filter(roll => { - return (typeof roll.actor.data !== 'undefined') // Check if there's an actor set and if there's one and it doesnt exist remove him. + return typeof roll.actor.data !== 'undefined' // Check if there's an actor set and if there's one and it doesnt exist remove him. }) this._htmlRoll = await this.getHtmlRoll() diff --git a/module/chat/cards/opposed-roll.js b/module/chat/cards/opposed-roll.js index 9ba0f540..0bd1a92a 100644 --- a/module/chat/cards/opposed-roll.js +++ b/module/chat/cards/opposed-roll.js @@ -326,7 +326,7 @@ export class OpposedCheckCard extends RollCard { } this.rolls = this.rolls.filter(roll => { - return (typeof roll.actor.data !== 'undefined') // Check if there's an actor set and if there's one and it doesnt exist remove him. + return typeof roll.actor.data !== 'undefined' // Check if there's an actor set and if there's one and it doesnt exist remove him. }) if (this.combat) { diff --git a/module/dice.js b/module/dice.js index 9a4ca40c..177b978d 100644 --- a/module/dice.js +++ b/module/dice.js @@ -40,7 +40,10 @@ export class CoC7Dice { } }) if (modif < 0) { - result.tens.total = result.unit.total === 0 && result.tens.results.includes(0) ? 100 : Math.max(...result.tens.results) + result.tens.total = + result.unit.total === 0 && result.tens.results.includes(0) + ? 100 + : Math.max(...result.tens.results) } else if (result.unit.total === 0) { const dice = result.tens.results.filter(t => t > 0) result.tens.total = dice.length === 0 ? 100 : Math.min(...dice) diff --git a/module/items/book/sheet.js b/module/items/book/sheet.js index acfcc645..196456d5 100644 --- a/module/items/book/sheet.js +++ b/module/items/book/sheet.js @@ -29,7 +29,7 @@ export class CoC7BookSheet extends ItemSheet { data.isKeeper = game.user.isGM data.isOwned = this.item.isOwned data.spellsLearned = this.spellsLearned - data.exhausted = await this.item.checkExhaustion() !== false + data.exhausted = (await this.item.checkExhaustion()) !== false data.studyCompleted = this.item.data.data.study.progress === this.item.data.data.study.necessary return data diff --git a/module/items/item.js b/module/items/item.js index 320a6887..2bae3f59 100644 --- a/module/items/item.js +++ b/module/items/item.js @@ -546,7 +546,9 @@ export class CoC7Item extends Item { get _base () { if (this.type !== 'skill') return [null, false] - if (typeof this.data.data.base !== 'string') return [this.data.data.base, false] + if (typeof this.data.data.base !== 'string') { + return [this.data.data.base, false] + } if (this.data.data.base.includes('@')) { const parsed = {} for (const [key, value] of Object.entries(COC7.formula.actorsheet)) { @@ -567,9 +569,12 @@ export class CoC7Item extends Item { return [value, true] } - return [!isNaN(parseInt(this.data.data.base)) - ? parseInt(this.data.data.base) - : null, false] + return [ + !isNaN(parseInt(this.data.data.base)) + ? parseInt(this.data.data.base) + : null, + false + ] } async asyncBase () { diff --git a/module/updater.js b/module/updater.js index fd0935b8..cb706c75 100644 --- a/module/updater.js +++ b/module/updater.js @@ -212,7 +212,20 @@ export class Updater { } static _migrateItemKeeperNotes (item, updateData) { - if (['archetype', 'chase', 'item', 'occupation', 'setup', 'skill', 'spell', 'status', 'talent', 'weapon'].includes(item.type)) { + if ( + [ + 'archetype', + 'chase', + 'item', + 'occupation', + 'setup', + 'skill', + 'spell', + 'status', + 'talent', + 'weapon' + ].includes(item.type) + ) { if (typeof item.data.description === 'string') { updateData['data.description'] = { value: item.data.description, diff --git a/module/utilities.js b/module/utilities.js index 00ced3e6..b94ccd43 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -654,12 +654,20 @@ export class CoC7Utilities { textArea.focus() textArea.select() return new Promise((resolve, reject) => { - document.execCommand('copy') ? resolve() : reject(new Error('Unable to copy to clipboard, this is likely due to your browser security settings.')) + document.execCommand('copy') + ? resolve() + : reject( + new Error( + 'Unable to copy to clipboard, this is likely due to your browser security settings.' + ) + ) textArea.remove() }).catch(err => ui.notifications.error(err)) } } catch (err) { - ui.notifications.error('Unable to copy to clipboard, this is likely due to your browser security settings.') + ui.notifications.error( + 'Unable to copy to clipboard, this is likely due to your browser security settings.' + ) } } } diff --git a/styles/sheets/summary.less b/styles/sheets/summary.less index 006af41a..f58232e2 100644 --- a/styles/sheets/summary.less +++ b/styles/sheets/summary.less @@ -7,15 +7,15 @@ background: var(--other-sheet-bg); background-repeat: repeat; } - font-family: customSheetFont, "Palatino Linotype", serif; + font-family: customSheetFont, 'Palatino Linotype', serif; .container { display: grid; grid-template-columns: 1fr 1.35fr 1fr; grid-template-rows: 0.05fr 1fr; gap: 1px; grid-template-areas: - "header header header" - "characteristics skills other"; + 'header header header' + 'characteristics skills other'; .rollable { &:hover { color: #000; @@ -165,8 +165,8 @@ grid-template-columns: 1rem 2.75rem; grid-template-rows: 1rem 2rem; grid-template-areas: - "rollIcon characName" - "characScore characScore"; + 'rollIcon characName' + 'characScore characScore'; align-items: baseline; .roll-icon { color: var(--main-sheet-front-color); @@ -189,8 +189,8 @@ grid-template-columns: 2.375rem 0.875rem; grid-template-rows: 0.875rem 0.875rem; grid-template-areas: - "mainScore halfScore" - "mainScore fithScore"; + 'mainScore halfScore' + 'mainScore fithScore'; .main-score { grid-area: mainScore; justify-self: center; @@ -356,7 +356,7 @@ border-bottom: 1px solid; grid-template-columns: 1rem 5.5rem 2.5rem 2rem; grid-template-rows: 1rem; - grid-template-areas: "image name damage weaponControl"; + grid-template-areas: 'image name damage weaponControl'; .weapon-damage { grid-area: damage; color: var(--main-sheet-back-color); From 4eb95cd147e9a99f72135ed29c06cea75a808f79 Mon Sep 17 00:00:00 2001 From: castanho Date: Fri, 10 Sep 2021 16:07:49 -0300 Subject: [PATCH 026/726] Change book related files to html --- module/items/book/data.js | 2 +- module/items/book/sheet.js | 2 +- module/scripts/load-templates.js | 2 +- templates/items/book/{details.hbs => details.html} | 0 templates/items/book/{development.hbs => development.html} | 0 templates/items/book/{main.hbs => main.html} | 2 +- 6 files changed, 4 insertions(+), 4 deletions(-) rename templates/items/book/{details.hbs => details.html} (100%) rename templates/items/book/{development.hbs => development.html} (100%) rename templates/items/book/{main.hbs => main.html} (98%) diff --git a/module/items/book/data.js b/module/items/book/data.js index 8d2e55b2..ad4dce14 100644 --- a/module/items/book/data.js +++ b/module/items/book/data.js @@ -389,7 +389,7 @@ export class CoC7Book extends CoC7Item { )}` } } - const template = 'systems/CoC7/templates/items/book/development.hbs' + const template = 'systems/CoC7/templates/items/book/development.html' const html = await renderTemplate(template, { developments }) return await ChatMessage.create({ user: game.user.id, diff --git a/module/items/book/sheet.js b/module/items/book/sheet.js index 196456d5..b6c925f2 100644 --- a/module/items/book/sheet.js +++ b/module/items/book/sheet.js @@ -4,7 +4,7 @@ import { CoC7Utilities } from '../../utilities.js' export class CoC7BookSheet extends ItemSheet { static get defaultOptions () { return mergeObject(super.defaultOptions, { - template: 'systems/CoC7/templates/items/book/main.hbs', + template: 'systems/CoC7/templates/items/book/main.html', classes: ['coc7', 'item', 'book'], width: 500, height: 'auto', diff --git a/module/scripts/load-templates.js b/module/scripts/load-templates.js index d756eb1c..c4983929 100644 --- a/module/scripts/load-templates.js +++ b/module/scripts/load-templates.js @@ -25,7 +25,7 @@ export const preloadHandlebarsTemplates = async function () { 'systems/CoC7/templates/actors/character-sheet-v2.html', 'systems/CoC7/templates/actors/character/summary.html', - 'systems/CoC7/templates/items/book/details.hbs' + 'systems/CoC7/templates/items/book/details.html' ] /** Load the template parts */ diff --git a/templates/items/book/details.hbs b/templates/items/book/details.html similarity index 100% rename from templates/items/book/details.hbs rename to templates/items/book/details.html diff --git a/templates/items/book/development.hbs b/templates/items/book/development.html similarity index 100% rename from templates/items/book/development.hbs rename to templates/items/book/development.html diff --git a/templates/items/book/main.hbs b/templates/items/book/main.html similarity index 98% rename from templates/items/book/main.hbs rename to templates/items/book/main.html index 40441132..aadd6e4c 100644 --- a/templates/items/book/main.hbs +++ b/templates/items/book/main.html @@ -151,7 +151,7 @@ }}
- {{> "systems/CoC7/templates/items/book/details.hbs"}} + {{> "systems/CoC7/templates/items/book/details.html"}}
From 36e4a7b8aa37e3026d8bfd8545a4d45dd84d6ef4 Mon Sep 17 00:00:00 2001 From: castanho Date: Fri, 10 Sep 2021 16:13:41 -0300 Subject: [PATCH 027/726] Put monetary symbol before numeral --- module/actors/sheets/actor-sheet.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/module/actors/sheets/actor-sheet.js b/module/actors/sheets/actor-sheet.js index 489a53f6..dc06593e 100644 --- a/module/actors/sheets/actor-sheet.js +++ b/module/actors/sheets/actor-sheet.js @@ -69,23 +69,23 @@ export class CoC7CharacterSheet extends CoC7ActorSheet { if (!data.manualCredit) { data.credit = {} let factor - let moneySymbol + let monetarySymbol if (!data.data.credit) { factor = 1 - moneySymbol = '$' + monetarySymbol = '$' } else { factor = parseInt(data.data.credit.multiplier) ? parseInt(data.data.credit.multiplier) : 1 - moneySymbol = data.data.credit.monetarySymbol + monetarySymbol = data.data.credit.monetarySymbol ? data.data.credit.monetarySymbol : '$' } - data.credit.spendingLevel = `${this.actor.spendingLevel * - factor}${moneySymbol}` - data.credit.assets = `${this.actor.assets * factor}${moneySymbol}` - data.credit.cash = `${this.actor.cash * factor}${moneySymbol}` + data.credit.spendingLevel = `${monetarySymbol}${this.actor.spendingLevel * + factor}` + data.credit.assets = `${monetarySymbol}${this.actor.assets * factor}` + data.credit.cash = `${monetarySymbol}${this.actor.cash * factor}` } data.oneBlockBackStory = game.settings.get('CoC7', 'oneBlockBackstory') From f3788fde0408e31d611077ce6da619e1951842c4 Mon Sep 17 00:00:00 2001 From: castanho Date: Fri, 10 Sep 2021 16:32:51 -0300 Subject: [PATCH 028/726] Prepare changelog for next version --- .github/CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index adc6e554..777cf955 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,3 +1,20 @@ +## Version 0.6.8: + +When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. + +- Add keeper notes tab to all sheets. +- Add button for summarize character sheet, keeping only the essential stuff on minimalistic way. +- Fix error on actor importer when it receives an array, thanks to @pconception; +- Fix errors when override sheet artwork is enable, background type is not slice, and an inline style tag has been added; +- Fix sanity loss from creature not being rolled; +- Fix some Foundry warnings on console for deprecated stuff; +- Handle 00 special case for advantage/disadvantage rolls, thanks to @pconception; +- Now the monetary symbol goes before numeral on cash fields; +- Now skill sorting to support accented characters; +- Prevent error on keeper self roll if no token selected; +- Resolve issue with createEmbeddedDocuments returning array in array; +- Update character sheet to prevent reloading when editing backstory; + ## Version 0.6.7: When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. From e8f4464bdf0c667b7eb2a0a8ea0dff1b36cdcc54 Mon Sep 17 00:00:00 2001 From: castanho Date: Fri, 10 Sep 2021 16:58:36 -0300 Subject: [PATCH 029/726] Return to original green color --- styles/system/variables.less | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/styles/system/variables.less b/styles/system/variables.less index c24ae04c..8b3284bc 100644 --- a/styles/system/variables.less +++ b/styles/system/variables.less @@ -39,8 +39,7 @@ @colorOlive: #4b4a44; @colorCrimson: #44191a; @borderGroove: 2px groove #eeede0; -@sheetBackground: url('../assets/images/background.webp') repeat; -@colorGreen: #393; +@sheetBackground: url("../assets/images/background.webp") repeat; /* ----------------------------------------- */ /* Flexbox */ From 742f9aa9912f01213d08907175d0e8b7eae7e86b Mon Sep 17 00:00:00 2001 From: Rangertheman <81484515+Rangertheman@users.noreply.github.com> Date: Fri, 10 Sep 2021 23:13:16 +0200 Subject: [PATCH 030/726] Update sv.json --- lang/sv.json | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lang/sv.json b/lang/sv.json index f78c3399..b23407ba 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -97,9 +97,9 @@ "CoC7.SpellDetails": "Besvärjelsedetaljer", "CoC7.Details": "Detaljer", "CoC7.Other": "Annat", - "CoC7.rounds": "runda/rundor", - "CoC7.hours": "timme/timmar", - "CoC7.weeks": "vecka/veckor", + "CoC7.rounds": "rundor", + "CoC7.hours": "timmar", + "CoC7.weeks": "veckor", "CoC7.remove": "Ta bort", "CoC7.Any": "Valfri", "CoC7.All": "Alla", @@ -463,7 +463,7 @@ "CoC7.SANLoss": "Sinnesbelastning", "CoC7.SanityCheckPerformed": "Du utsattes för en traumatisk händelse.", "CoC7.InvoluntaryActionPerformed": "Du tappade självbehärskningen för en stund.", - "CoC7.SanityLost": "Sinneshälsa förlorades", + "CoC7.SanityLost": "Förlorad sinneshälsa", "CoC7.MemoryRepressed": "Ditt sinne undertryckte upplevelsen och begravde den djuppt i ditt undermedvetna", "CoC7.RememberEverything": "Du minns ALLT.", "CoC7.BoutOfMadnesslasted": "Din vansinnesepisod varade i", @@ -706,6 +706,9 @@ "CoC7.Migrate.ButtonSkip": "Hoppa över", "CoC7.Migrate.ButtonOkay": "Ok", + "CoC7.Maximize": "Maximera", + "CoC7.Summarize": "Summera", + "SETTINGS.TitleRules": "Regler", "SETTINGS.TitleInitiative": "Initiativinställningar", "SETTINGS.TitleRoll": "Tärningsslagsinställningar", From 4a3de0047c8cfdcc8ddeaac177ccf2782a9bb64c Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 11 Sep 2021 06:16:56 +0000 Subject: [PATCH 031/726] Updated translations list --- .github/TRANSLATIONS.md | 640 ++++++++++++++++++++-------------------- 1 file changed, 321 insertions(+), 319 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 1da4a18e..09b64738 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,325 +2,327 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -| Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **315** | **90** | **108** | **2** | **2** | **110** | **2** | **2** | **2** | **30** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectedTargetIsNotControlled](#coc7messageselectedtargetisnotcontrolled) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +The **sv** translation is currently up to date + +| Key | cn | cs | de | es | fr | ja | pl | pt-BR | zh-TW | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **315** | **90** | **108** | **2** | **2** | **110** | **2** | **2** | **30** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectedTargetIsNotControlled](#coc7messageselectedtargetisnotcontrolled) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.ActorImporter From f544baf3941a7d524e80bf39f7a04cebec0aa34a Mon Sep 17 00:00:00 2001 From: YOUR_NAME Date: Sat, 11 Sep 2021 18:22:07 +0100 Subject: [PATCH 032/726] Remove message 'The token for {name} is owned by not controlled by a player so will not be able to react to combat actions.' as it is no longer required Prevent JavaScript error when dragging setup Item onto creature Actor Prevent JavaScript error is opening a limited character sheet that attempts to update on load Trigger Dice So Nice on melee combat Remove unused css file from system.json --- lang/en.json | 1 - module/actors/actor.js | 2 +- module/actors/sheets/base.js | 2 +- module/chat.js | 7 +++++-- module/coc7.js | 37 +----------------------------------- system.json | 2 +- 6 files changed, 9 insertions(+), 42 deletions(-) diff --git a/lang/en.json b/lang/en.json index 4f679695..315daaa0 100644 --- a/lang/en.json +++ b/lang/en.json @@ -656,7 +656,6 @@ "CoC7.MessageTargetCheckRequested": "Your keeper has requested {name} make a {check} roll.", "CoC7.MessageTitleSelectSingleUserForTarget": "Which user can respond to this attack", "CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.", - "CoC7.MessageSelectedTargetIsNotControlled": "The token for {name} is owned by not controlled by a player so will not be able to react to combat actions.", "CoC7.MessageBoutOfMadnessTableNotFound": "The result from the madness table was not found, please check all your roll tables are created", "CoC7.MessageBoutOfMadnessItemNotFound": "The result from the madness table was not found, please check all your statuses are created", diff --git a/module/actors/actor.js b/module/actors/actor.js index 52496087..de7237d8 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -973,7 +973,7 @@ export class CoCActor extends Actor { } else { for (const sectionName of data.data.bioSections) { if ( - !this.data.data.biography.find( + !this.data.data.biography?.find( el => sectionName === el.title ) && sectionName diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 617b230e..181e8247 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -553,7 +553,7 @@ export class CoC7ActorSheet extends ActorSheet { data.data.attribs.db.value = this.actor.db data.data.attribs.build.value = this.actor.build - if (typeof this.actor.compendium === 'undefined') { + if (typeof this.actor.compendium === 'undefined' && this.actor.isOwner) { this.actor.update( { 'data.attribs.mov.value': this.actor.mov }, { render: false } diff --git a/module/chat.js b/module/chat.js index 98f2282d..1da4a9b5 100644 --- a/module/chat.js +++ b/module/chat.js @@ -15,6 +15,7 @@ import { OpposedCheckCard } from './chat/cards/opposed-roll.js' import { CombinedCheckCard } from './chat/cards/combined-roll.js' import { InteractiveChatCard } from './chat/interactive-chat-card.js' import { DamageCard } from './chat/cards/damage.js' +import { CoC7Dice } from './dice.js' const CHAT_COC7_MESSAGE = { FAKEROLL: @@ -901,13 +902,15 @@ export class CoC7Chat { case 'melee-initiator-roll': { const initiator = CoC7MeleeInitiator.getFromCard(card) - await initiator.performSkillCheck(event.currentTarget.dataset.skill) + const check = await initiator.performSkillCheck(event.currentTarget.dataset.skill) + await CoC7Dice.showRollDice3d(check.dice.roll) await initiator.publishCheckResult() break } case 'melee-target-roll': { const target = CoC7MeleeTarget.getFromCard(card) - await target.performSkillCheck(event.currentTarget.dataset.skill) + const check = await target.performSkillCheck(event.currentTarget.dataset.skill) + await CoC7Dice.showRollDice3d(check.dice.roll) await target.publishCheckResult() break } diff --git a/module/coc7.js b/module/coc7.js index 67cb69de..f3da3542 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -1,4 +1,4 @@ -/* global $, Combat, CONFIG, CONST, fromUuid, game, Hooks, tinyMCE, ui */ +/* global $, Combat, CONFIG, fromUuid, game, Hooks, tinyMCE */ import { CoC7NPCSheet } from './actors/sheets/npc-sheet.js' import { CoC7CreatureSheet } from './actors/sheets/creature-sheet.js' import { CoC7CharacterSheetV2 } from './actors/sheets/character.js' @@ -421,39 +421,4 @@ function _onLeftClick (event) { return event.shiftKey } -Hooks.on('targetToken', function (user, token, targeted) { - if (targeted) { - // Check if the targeted token is a player controlled token but no user controls it - let gmonly = true - if ( - token.actor.data.permission.default === CONST.ENTITY_PERMISSIONS.OWNER - ) { - gmonly = false - } else { - const gms = game.users.filter(a => a.isGM).map(a => a.id) - for (const [k, v] of Object.entries(token.actor.data.permission)) { - if ( - k !== 'default' && - v === CONST.ENTITY_PERMISSIONS.OWNER && - !gms.includes(k) - ) { - gmonly = false - } - } - } - if (!gmonly) { - const controlled = game.users.filter( - a => !a.isGM && a.data.character === token.actor.id - ) - if (controlled.length === 0) { - ui.notifications.error( - game.i18n.format('CoC7.MessageSelectedTargetIsNotControlled', { - name: token.name - }) - ) - } - } - } -}) - CONFIG.ui.compendium = CoC7CompendiumDirectory diff --git a/system.json b/system.json index 9f3370d1..9e951dbb 100644 --- a/system.json +++ b/system.json @@ -8,7 +8,7 @@ "compatibleCoreVersion": "0.8.9", "esmodules": ["bundle.js"], "templateVersion": 1, - "styles": ["coc7g.css", "assets/mce.css"], + "styles": ["coc7g.css"], "packs": [ { "label": "Skills", From 892f0a3ad560305f49d38e97a425703e297550dd Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 11 Sep 2021 17:25:27 +0000 Subject: [PATCH 033/726] Updated translations list --- .github/TRANSLATIONS.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 09b64738..3da2382d 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -6,7 +6,7 @@ The **sv** translation is currently up to date | Key | cn | cs | de | es | fr | ja | pl | pt-BR | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **315** | **90** | **108** | **2** | **2** | **110** | **2** | **2** | **30** | +| **Remaining**: | **314** | **90** | **107** | **2** | **2** | **109** | **2** | **2** | **30** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -149,7 +149,6 @@ The **sv** translation is currently up to date | [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | | [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | | [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectedTargetIsNotControlled](#coc7messageselectedtargetisnotcontrolled) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | | [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | | [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | | [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | @@ -892,10 +891,6 @@ The **sv** translation is currently up to date `"CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.",` -##### CoC7.MessageSelectedTargetIsNotControlled - -`"CoC7.MessageSelectedTargetIsNotControlled": "The token for {name} is owned by not controlled by a player so will not be able to react to combat actions.",` - ##### CoC7.MessageTargetCheckRequested `"CoC7.MessageTargetCheckRequested": "Your keeper has requested {name} make a {check} roll.",` From 62104345ff00678683e4368249f10634526798c5 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 11 Sep 2021 20:17:20 +0100 Subject: [PATCH 034/726] Fix character importer spells import --- module/actors/actor.js | 6 ++++-- module/apps/actor-importer.js | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index 52496087..dc13ea6d 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -1570,6 +1570,7 @@ export class CoCActor extends Actor { } async addItems (itemList, flag = null) { + const output = [] for (const item of itemList) { if (flag) { if (!item.data.flags) item.data.flags = {} @@ -1577,11 +1578,12 @@ export class CoCActor extends Actor { } /** MODIF 0.8.x **/ // await this.createOwnedItem( item, {renderSheet:false}); - await this.createEmbeddedDocuments('Item', [item], { + output.push(await this.createEmbeddedDocuments('Item', [item], { renderSheet: false - }) + })) /*****************/ } + return output } async addUniqueItem (skill, flag = null) { diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index 918f26b1..00704c4c 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -406,7 +406,7 @@ export class CoC7ActorImporter { async addTheSpells (pc, npc) { if (pc.spells !== null) { - pc.spells.forEach(async spell => { + for (const spell of pc.spells) { const created = await npc.addItems([ { name: spell, @@ -414,7 +414,7 @@ export class CoC7ActorImporter { } ]) console.debug(created) - }) + } } } From 6c7ed7bdf3c708bec79ae177fc73fd617fdd68b1 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 11 Sep 2021 22:19:38 +0100 Subject: [PATCH 035/726] Allow enter to be used on Actor Importer form Set placeholder text for each language to give an example character Hide Actor Importer debug message behind CONFIG.debug.CoC7Importer check Prevent importing Actor if textarea is empty Fix CoC7.ImportedUnnamedCharacter key Add Actor Import trigger to bottom of actor directory --- module/actor-directory.js | 20 ++++ module/apps/actor-importer-dialog.js | 31 ++++-- module/apps/actor-importer-regexp.js | 23 ++++- module/apps/actor-importer.js | 144 ++++++++++++++++++++------- module/coc7.js | 2 + styles/interface/compendium.less | 2 +- templates/apps/actor-importer.html | 4 +- 7 files changed, 172 insertions(+), 54 deletions(-) create mode 100644 module/actor-directory.js diff --git a/module/actor-directory.js b/module/actor-directory.js new file mode 100644 index 00000000..fa831ae5 --- /dev/null +++ b/module/actor-directory.js @@ -0,0 +1,20 @@ +/* global ActorDirectory, game */ +import { CoC7ActorImporterDialog } from './apps/actor-importer-dialog.js' + +export class CoC7ActorDirectory extends ActorDirectory { + activateListeners (html) { + super.activateListeners(html) + html + .find('footer.directory-footer') + .append( + '' + + game.i18n.localize('CoC7.ActorImporter') + + '' + ) + html.find('.actor-import').click(() => { + CoC7ActorImporterDialog.create({ + title: game.i18n.localize('CoC7.ActorImporter') + }) + }) + } +} diff --git a/module/apps/actor-importer-dialog.js b/module/apps/actor-importer-dialog.js index 24107346..4afcc7ff 100644 --- a/module/apps/actor-importer-dialog.js +++ b/module/apps/actor-importer-dialog.js @@ -1,14 +1,17 @@ /* global $, Dialog, game, renderTemplate, ui */ import { CoC7ActorImporter } from './actor-importer.js' +import { CoC7ActorImporterRegExp } from './actor-importer-regexp.js' export class CoC7ActorImporterDialog extends Dialog { activateListeners (html) { super.activateListeners(html) - html.on('submit', 'form', this._onSubmit.bind(this)) html .find('option[value=coc-' + game.i18n.lang + ']') .attr('selected', 'selected') + html.find('#coc-entity-lang').on('change', function (e) { + $('#coc-pasted-character-data').prop('placeholder', CoC7ActorImporterRegExp.getExampleText($(this).val())) + }).trigger('change') } /** @@ -24,14 +27,18 @@ export class CoC7ActorImporterDialog extends Dialog { inputs.convertFrom6E = $('#coc-convert-6E') .val() .trim() - console.debug('entity type:', inputs.entity) + if (CONFIG.debug.CoC7Importer) { + console.debug('entity type:', inputs.entity) + } inputs.lang = $('#coc-entity-lang') .val() .trim() let text = $('#coc-pasted-character-data') .val() .trim() - console.debug('received text', '##' + text + '##') + if (CONFIG.debug.CoC7Importer) { + console.debug('received text', '##' + text + '##') + } if (text[text.length] !== '.') { text += '.' // Add a dot a the end to help the regex find the end } @@ -44,12 +51,16 @@ export class CoC7ActorImporterDialog extends Dialog { * @param {html} html */ static async importActor (html) { - console.debug('html', html) + if (CONFIG.debug.CoC7Importer) { + console.debug('html', html) + } const inputs = await CoC7ActorImporterDialog.getInputs() const actor = new CoC7ActorImporter() const createdActor = await actor.createActor(inputs) // Actor created, Notify the user and show the sheet. - console.debug('createdActor:', createdActor) + if (CONFIG.debug.CoC7Importer) { + console.debug('createdActor:', createdActor) + } ui.notifications.info( 'Created ' + createdActor.data?.type?.toUpperCase() + @@ -61,8 +72,10 @@ export class CoC7ActorImporterDialog extends Dialog { // console.debug('updated:', updated) } - async _onSubmit (event) { - event.preventDefault() + submit (button) { + if ($('#coc-pasted-character-data').val().trim() !== '' || !button.callback) { + super.submit(button) + } } /** @@ -90,9 +103,7 @@ export class CoC7ActorImporterDialog extends Dialog { icon: '', label: game.i18n.localize('CoC7.Cancel') } - }, - default: 'import', - close: console.log('Closing:') + } }, { classes: ['coc7', 'dialog', 'actor-importer'], diff --git a/module/apps/actor-importer-regexp.js b/module/apps/actor-importer-regexp.js index 3557c2d9..9e1577fa 100644 --- a/module/apps/actor-importer-regexp.js +++ b/module/apps/actor-importer-regexp.js @@ -107,7 +107,8 @@ const englishRegExp = { rifleRegExp: /(Rifle|Shotgun|Carbine|Gauge |Lee-Enfield|Elephant)/i, smbRegExp: /(Submachine Gun|Thompson)/i, machineGunRegExp: /(Browning|Vickers)/i, - launchedWeapons: /(Molotov|Grenade|Dynamite)/i + launchedWeapons: /(Molotov|Grenade|Dynamite)/i, + example: 'Example Character, age 27\nSTR 75 CON 60 SIZ 80 DEX 70 APP 60 INT 80\nPOW 50 EDU 85 SAN 55 HP 14 DB: 1D4\nBuild: 1 Move: 7 MP: 10 Luck: 40 Armor: 1\nSAN loss: 1d4/1d8 # Attacks: 3\nCombat\nBite 50% (25/10), damage 1D6\nBrawl 30% (15/6), damage 1D3\nDerringer 40% (20/8), damage 1D8+1\nDodge 50% (25/10)\nSkills\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLanguages: English 80%, Eklo 5%.\nSpells: Summon NPC, Dispel NPC.' } // Regular expressions to parse actors from a french source @@ -157,7 +158,8 @@ const frenchRegExp = { rifleRegExp: /(Carabine|Lee-Enfield|Fusil)/i, smbRegExp: /(SMG|Thompson)/i, machineGunRegExp: /(Browning|Vickers|Mitrailleuse)/i, - launchedWeapons: /(Molotov|Grenade|Dynamite)/i + launchedWeapons: /(Molotov|Grenade|Dynamite)/i, + example: 'Example Character, ans 27\nFOR 75 CON 60 TAI 80 DEX 70 APP 60 INT 80\nPOU 50 ÉDU 85 SAN 55 PV 14 BD: 1D4\nCarrure: 1 Mvt: 7 PM: 10 Chance: 40 Armure: 1\nPerte de Santé mentale: 1d4/1d8\nAttaques\nAttaques par round: 3\nBite 50% (25/10), dommage 1D6\nBrawl 30% (15/6), dommage 1D3\nDerringer 40% (20/8), dommage 1D8+1\nEsquiver 50% (25/10)\nCompétences\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLangue: English 80%, Eklo 5%.\nSortilèges: Summon NPC, Dispel NPC.' } // Regular expressions to parse actors from a spanish source @@ -207,7 +209,8 @@ const spanishRegExp = { rifleRegExp: /(Rifle|Carabina|Lee-Enfield|Caza Elefantes|Fusil|Escopeta|Galga|Recortada)/i, smbRegExp: /(Subfusil|Thompson)/i, machineGunRegExp: /(Browning|Vickers|Ametralladora)/i, - launchedWeapons: /(Molotov||Granada|Dinamita)/i + launchedWeapons: /(Molotov||Granada|Dinamita)/i, + example: 'Example Character, 27 años\nFUE 75 CON 60 TAM 80 DES 70 APA 60 INT 80\nPOD 50 EDU 85 COR 55 PV 14 BD: 1D4\nCorpulencia: 1 Movimiento: 7 PM: 10 Suerte: 40 Armadura: 1\nPérdida de cordura: 1d4/1d8\nCombate\nNúmero de Ataques 3\nBite 50% (25/10), damage 1D6\nBrawl 30% (15/6), damage 1D3\nDerringer 40% (20/8), damage 1D8+1\nEsquivar 50% (25/10)\nHabilidades\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nIdiomas: English 80%, Eklo 5%.\nConjuros: Summon NPC, Dispel NPC.' } /** @@ -228,7 +231,9 @@ export class CoC7ActorImporterRegExp { * @returns an object with the set of regular expressions */ static getRegularExpressions (lang) { - console.debug('Set RegExp Lang: ', lang) + if (CONFIG.debug.CoC7Importer) { + console.debug('Set RegExp Lang: ', lang) + } switch (lang) { case 'es': return spanishRegExp @@ -238,4 +243,14 @@ export class CoC7ActorImporterRegExp { // By default use english regular expressions. return englishRegExp } + + static getExampleText (lang) { + switch (lang) { + case 'coc-es': + return spanishRegExp.example + case 'coc-fr': + return frenchRegExp.example + } + return englishRegExp.example + } } diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index 00704c4c..a99a4c7b 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -1,4 +1,4 @@ -/* global Actor, Folder, game, ui */ +/* global Actor, CONFIG, Folder, game, ui */ import { COC7 } from '../config.js' import { CoC7ActorImporterRegExp } from './actor-importer-regexp.js' @@ -33,7 +33,9 @@ export class CoC7ActorImporter { const extractedData = {} extractedData.name = this.processName(text) extractedData.age = this.extractValue(text, this.RE.ageRegExp) - console.debug('age', extractedData.age) + if (CONFIG.debug.CoC7Importer) { + console.debug('age', extractedData.age) + } extractedData.str = Number(this.extractValue(text, this.RE.strRegExp)) extractedData.con = Number(this.extractValue(text, this.RE.conRegExp)) extractedData.siz = Number(this.extractValue(text, this.RE.sizRegExp)) @@ -48,7 +50,9 @@ export class CoC7ActorImporter { extractedData.db = this.extractValue(text, this.RE.dbRegExp) extractedData.build = this.extractValue(text, this.RE.buildRegExp) extractedData.armor = this.extractValue(text, this.RE.armorRegExp) - console.debug('armor', extractedData.armor) + if (CONFIG.debug.CoC7Importer) { + console.debug('armor', extractedData.armor) + } extractedData.mov = Number(this.extractValue(text, this.RE.moveRegExp)) extractedData.lck = Number(this.extractValue(text, this.RE.luckRegExp)) extractedData.sanLoss = this.extractValue(text, this.RE.sanLossRegExp) @@ -58,13 +62,19 @@ export class CoC7ActorImporter { ) const attacks = this.extractValue(text, this.RE.attacksRegExp) - console.debug(attacks) + if (CONFIG.debug.CoC7Importer) { + console.debug(attacks) + } extractedData.attacks = await this.processAttacks(attacks) const spells = this.extractValue(text, this.RE.spellsRegExp) - console.debug(spells) + if (CONFIG.debug.CoC7Importer) { + console.debug(spells) + } extractedData.spells = await this.processSpells(spells) const skills = this.extractValue(text, this.RE.skillsRegExp) - console.debug(skills) + if (CONFIG.debug.CoC7Importer) { + console.debug(skills) + } extractedData.skills = await this.processSkills(skills) const dodge = this.RE.dodgeRegExp.exec(text) if (dodge !== null) { @@ -74,7 +84,9 @@ export class CoC7ActorImporter { }) } const languages = this.extractValue(text, this.RE.languagesRegExp) - console.debug(languages) + if (CONFIG.debug.CoC7Importer) { + console.debug(languages) + } extractedData.languages = await this.processSkills(languages) return extractedData @@ -90,7 +102,7 @@ export class CoC7ActorImporter { if (nameFound !== null) { return nameFound.groups.name } - return game.i18n.localize('COC7.ImportedUnnamedCharacter') + return game.i18n.localize('CoC7.ImportedUnnamedCharacter') } /** @@ -136,7 +148,9 @@ export class CoC7ActorImporter { weapon = this.RE.weaponRegExp.exec(attacks) } } - console.debug('attacks', results) + if (CONFIG.debug.CoC7Importer) { + console.debug('attacks', results) + } return results } @@ -153,7 +167,9 @@ export class CoC7ActorImporter { results.push(this.cleanString(s)) }) } - console.debug('spells', results) + if (CONFIG.debug.CoC7Importer) { + console.debug('spells', results) + } return results } @@ -186,13 +202,19 @@ export class CoC7ActorImporter { */ processSkills (skills) { const results = [] - console.debug('skills string', skills) + if (CONFIG.debug.CoC7Importer) { + console.debug('skills string', skills) + } if (skills !== null) { const skillsArr = skills.replace(/(\n|\r)/g, ' ').split(',') - console.debug('skillsArr', skillsArr) + if (CONFIG.debug.CoC7Importer) { + console.debug('skillsArr', skillsArr) + } skillsArr.forEach(skill => { const parsedSkill = this.RE.skillRegExp.exec(skill) - console.debug('parsedSkill', parsedSkill) + if (CONFIG.debug.CoC7Importer) { + console.debug('parsedSkill', parsedSkill) + } if (parsedSkill !== null) { const skillName = this.cleanString(parsedSkill.groups.skill) results.push({ @@ -202,7 +224,9 @@ export class CoC7ActorImporter { } }) } - console.debug('skills', results) + if (CONFIG.debug.CoC7Importer) { + console.debug('skills', results) + } return results } @@ -245,7 +269,9 @@ export class CoC7ActorImporter { case 'coc-creature': return 'creature' } - console.warn('entity type: ', entityTypeString) + if (CONFIG.debug.CoC7Importer) { + console.warn('entity type: ', entityTypeString) + } return 'npc' } @@ -329,7 +355,9 @@ export class CoC7ActorImporter { if (pc.attacksPerRound !== null) { updateData['data.special.attacksPerRound'] = Number(pc.attacksPerRound) } - console.debug('updateData:', updateData) + if (CONFIG.debug.CoC7Importer) { + console.debug('updateData:', updateData) + } await npc.update(updateData) } @@ -337,7 +365,9 @@ export class CoC7ActorImporter { if (pc.attacks !== null) { for (let i = 0; i < pc.attacks.length; i++) { const attack = pc.attacks[i] - console.debug('attack', attack) + if (CONFIG.debug.CoC7Importer) { + console.debug('attack', attack) + } const mainAttackSkill = await this.mainAttackSkill(attack) await npc .createEmbeddedDocuments('Item', [mainAttackSkill]) @@ -355,7 +385,9 @@ export class CoC7ActorImporter { createdAttacks[0], newSkills[0] ) - console.debug('createdAttack', createdAttack) + if (CONFIG.debug.CoC7Importer) { + console.debug('createdAttack', createdAttack) + } } }) }) @@ -366,18 +398,24 @@ export class CoC7ActorImporter { async mainAttackSkill (attack) { const skill = await this.weaponSkill(attack.name) if (skill !== null && typeof skill !== 'undefined') { - console.debug('skill', skill) + if (CONFIG.debug.CoC7Importer) { + console.debug('skill', skill) + } const skillClone = skill.clone({ data: { value: attack.data.range.normal.value } }) - console.debug('skillClone', skillClone) + if (CONFIG.debug.CoC7Importer) { + console.debug('skillClone', skillClone) + } return skillClone } - console.debug( - `Weapon skill not found for ${attack.name}, creating a new one` - ) + if (CONFIG.debug.CoC7Importer) { + console.debug( + `Weapon skill not found for ${attack.name}, creating a new one` + ) + } const newSkill = { name: attack.name, type: 'skill', @@ -385,7 +423,9 @@ export class CoC7ActorImporter { } newSkill.data.base = attack.data?.range?.normal?.value newSkill.data.value = attack.data?.range?.normal?.value - console.debug('newSkill', newSkill) + if (CONFIG.debug.CoC7Importer) { + console.debug('newSkill', newSkill) + } return newSkill } @@ -413,7 +453,9 @@ export class CoC7ActorImporter { type: 'spell' } ]) - console.debug(created) + if (CONFIG.debug.CoC7Importer) { + console.debug(created) + } } } } @@ -422,7 +464,9 @@ export class CoC7ActorImporter { if (pc.languages !== null) { for (const lang of pc.languages) { const created = await npc.createSkill(lang.name, lang.value) - console.debug(created) + if (CONFIG.debug.CoC7Importer) { + console.debug(created) + } } } } @@ -438,12 +482,20 @@ export class CoC7ActorImporter { clonedSkill.data.base = skill.value await npc .createEmbeddedDocuments('Item', [clonedSkill]) - .then(created => console.debug(created)) + .then(created => { + if (CONFIG.debug.CoC7Importer) { + console.debug(created) + } + }) // created.data.value = skill.value && console.debug(created)) } else { await npc .createSkill(skill.name, skill.value) - .then(created => console.debug(created)) + .then(created => { + if (CONFIG.debug.CoC7Importer) { + console.debug(created) + } + }) } } } @@ -458,27 +510,37 @@ export class CoC7ActorImporter { skill = await game.items.find( i => i.data.type === 'skill' && i.data.name === 'Handgun' ) - console.debug(`${weaponName} uses Handgun skill: ${skill}`) + if (CONFIG.debug.CoC7Importer) { + console.debug(`${weaponName} uses Handgun skill: ${skill}`) + } } else if (this.RE.rifleRegExp.exec(weaponName)) { skill = await game.items.find( i => i.data.type === 'skill' && i.data.name === 'Rifle/Shotgun' ) - console.debug(`${weaponName} uses Rifle skill: ${skill}`) + if (CONFIG.debug.CoC7Importer) { + console.debug(`${weaponName} uses Rifle skill: ${skill}`) + } } else if (this.RE.smbRegExp.exec(weaponName)) { skill = await game.items.find( i => i.data.type === 'skill' && i.data.name === 'Submachine Gun' ) - console.debug(`${weaponName} uses Submachine Gun skill: ${skill}`) + if (CONFIG.debug.CoC7Importer) { + console.debug(`${weaponName} uses Submachine Gun skill: ${skill}`) + } } else if (this.RE.machineGunRegExp.exec(weaponName)) { skill = await game.items.find( i => i.data.type === 'skill' && i.data.name === 'Machine Gun' ) - console.debug(`${weaponName} uses Machine Gun skill: ${skill}`) + if (CONFIG.debug.CoC7Importer) { + console.debug(`${weaponName} uses Machine Gun skill: ${skill}`) + } } else if (this.RE.launchedWeapons.exec(weaponName)) { skill = await game.items.find( i => i.data.type === 'skill' && i.data.name === 'Launch' ) - console.debug(`${weaponName} uses Launch skill: ${skill}`) + if (CONFIG.debug.CoC7Importer) { + console.debug(`${weaponName} uses Launch skill: ${skill}`) + } } return skill } @@ -494,7 +556,9 @@ export class CoC7ActorImporter { needsConversionResult = false } }) - console.debug('needsConversion:', needsConversionResult) + if (CONFIG.debug.CoC7Importer) { + console.debug('needsConversion:', needsConversionResult) + } return needsConversionResult } @@ -512,7 +576,9 @@ export class CoC7ActorImporter { ) || 'en' this.RE = CoC7ActorImporterRegExp.getRegularExpressions(lang) let character = await this.parseCharacter(inputs.text) - console.debug(character) + if (CONFIG.debug.CoC7Importer) { + console.debug(character) + } if ( (inputs.convertFrom6E === 'coc-guess' && this.needsConversion(character)) || @@ -530,7 +596,9 @@ export class CoC7ActorImporter { * @return the same object but with updated characteristics for 7 edition */ async convert7E (creature) { - console.debug('Converting creature', creature) + if (CONFIG.debug.CoC7Importer) { + console.debug('Converting creature', creature) + } ;['str', 'con', 'siz', 'dex', 'app', 'int', 'pow'].forEach(key => { creature[key] *= 5 }) @@ -547,7 +615,9 @@ export class CoC7ActorImporter { } else if (creature.db === '-1d6') { creature.db = -2 } - console.debug('Converted creature', creature) + if (CONFIG.debug.CoC7Importer) { + console.debug('Converted creature', creature) + } return creature } } diff --git a/module/coc7.js b/module/coc7.js index 67cb69de..c5700b26 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -15,6 +15,7 @@ import { CombinedCheckCard } from './chat/cards/combined-roll.js' import { DamageCard } from './chat/cards/damage.js' import { CoC7Canvas } from './apps/canvas.js' import { CoC7CompendiumDirectory } from './compendium-directory.js' +import { CoC7ActorDirectory } from './actor-directory.js' import { CoC7Hooks } from './hooks/index.js' import * as DiceBot from './dicebot.js' import '../styles/system/index.less' @@ -457,3 +458,4 @@ Hooks.on('targetToken', function (user, token, targeted) { }) CONFIG.ui.compendium = CoC7CompendiumDirectory +CONFIG.ui.actors = CoC7ActorDirectory diff --git a/styles/interface/compendium.less b/styles/interface/compendium.less index ad7f15e0..362e3175 100644 --- a/styles/interface/compendium.less +++ b/styles/interface/compendium.less @@ -1,4 +1,4 @@ -a.compendium-translation { +#sidebar a.compendium-translation, #sidebar a.actor-import { border-top: 2px groove #444; padding-top: 4px; font-size: 20px; diff --git a/templates/apps/actor-importer.html b/templates/apps/actor-importer.html index 75c86d30..0fe5cccf 100644 --- a/templates/apps/actor-importer.html +++ b/templates/apps/actor-importer.html @@ -27,6 +27,6 @@

{{localize 'CoC7.ActorImporter'}}

{{localize 'CoC7.PasteTheDataBelow'}}
+ style="min-height:300px" placeholder="">
- \ No newline at end of file + From fd9f526b97d1e9f16df3a25e961729814e2e5cb0 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 11 Sep 2021 22:23:42 +0100 Subject: [PATCH 036/726] npm run format --- module/apps/actor-importer-dialog.js | 21 ++++++++++++++++----- module/apps/actor-importer-regexp.js | 11 +++++++---- module/apps/actor-importer.js | 12 +++++------- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/module/apps/actor-importer-dialog.js b/module/apps/actor-importer-dialog.js index 4afcc7ff..126ea110 100644 --- a/module/apps/actor-importer-dialog.js +++ b/module/apps/actor-importer-dialog.js @@ -1,4 +1,4 @@ -/* global $, Dialog, game, renderTemplate, ui */ +/* global $, CONFIG, Dialog, game, renderTemplate, ui */ import { CoC7ActorImporter } from './actor-importer.js' import { CoC7ActorImporterRegExp } from './actor-importer-regexp.js' @@ -9,9 +9,15 @@ export class CoC7ActorImporterDialog extends Dialog { html .find('option[value=coc-' + game.i18n.lang + ']') .attr('selected', 'selected') - html.find('#coc-entity-lang').on('change', function (e) { - $('#coc-pasted-character-data').prop('placeholder', CoC7ActorImporterRegExp.getExampleText($(this).val())) - }).trigger('change') + html + .find('#coc-entity-lang') + .on('change', function (e) { + $('#coc-pasted-character-data').prop( + 'placeholder', + CoC7ActorImporterRegExp.getExampleText($(this).val()) + ) + }) + .trigger('change') } /** @@ -73,7 +79,12 @@ export class CoC7ActorImporterDialog extends Dialog { } submit (button) { - if ($('#coc-pasted-character-data').val().trim() !== '' || !button.callback) { + if ( + $('#coc-pasted-character-data') + .val() + .trim() !== '' || + !button.callback + ) { super.submit(button) } } diff --git a/module/apps/actor-importer-regexp.js b/module/apps/actor-importer-regexp.js index 9e1577fa..559c3aa1 100644 --- a/module/apps/actor-importer-regexp.js +++ b/module/apps/actor-importer-regexp.js @@ -1,4 +1,4 @@ -/* global game */ +/* global CONFIG, game */ const accentedCharacters = regexquote( 'áéíóàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ' @@ -108,7 +108,8 @@ const englishRegExp = { smbRegExp: /(Submachine Gun|Thompson)/i, machineGunRegExp: /(Browning|Vickers)/i, launchedWeapons: /(Molotov|Grenade|Dynamite)/i, - example: 'Example Character, age 27\nSTR 75 CON 60 SIZ 80 DEX 70 APP 60 INT 80\nPOW 50 EDU 85 SAN 55 HP 14 DB: 1D4\nBuild: 1 Move: 7 MP: 10 Luck: 40 Armor: 1\nSAN loss: 1d4/1d8 # Attacks: 3\nCombat\nBite 50% (25/10), damage 1D6\nBrawl 30% (15/6), damage 1D3\nDerringer 40% (20/8), damage 1D8+1\nDodge 50% (25/10)\nSkills\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLanguages: English 80%, Eklo 5%.\nSpells: Summon NPC, Dispel NPC.' + example: + 'Example Character, age 27\nSTR 75 CON 60 SIZ 80 DEX 70 APP 60 INT 80\nPOW 50 EDU 85 SAN 55 HP 14 DB: 1D4\nBuild: 1 Move: 7 MP: 10 Luck: 40 Armor: 1\nSAN loss: 1d4/1d8 # Attacks: 3\nCombat\nBite 50% (25/10), damage 1D6\nBrawl 30% (15/6), damage 1D3\nDerringer 40% (20/8), damage 1D8+1\nDodge 50% (25/10)\nSkills\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLanguages: English 80%, Eklo 5%.\nSpells: Summon NPC, Dispel NPC.' } // Regular expressions to parse actors from a french source @@ -159,7 +160,8 @@ const frenchRegExp = { smbRegExp: /(SMG|Thompson)/i, machineGunRegExp: /(Browning|Vickers|Mitrailleuse)/i, launchedWeapons: /(Molotov|Grenade|Dynamite)/i, - example: 'Example Character, ans 27\nFOR 75 CON 60 TAI 80 DEX 70 APP 60 INT 80\nPOU 50 ÉDU 85 SAN 55 PV 14 BD: 1D4\nCarrure: 1 Mvt: 7 PM: 10 Chance: 40 Armure: 1\nPerte de Santé mentale: 1d4/1d8\nAttaques\nAttaques par round: 3\nBite 50% (25/10), dommage 1D6\nBrawl 30% (15/6), dommage 1D3\nDerringer 40% (20/8), dommage 1D8+1\nEsquiver 50% (25/10)\nCompétences\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLangue: English 80%, Eklo 5%.\nSortilèges: Summon NPC, Dispel NPC.' + example: + 'Example Character, ans 27\nFOR 75 CON 60 TAI 80 DEX 70 APP 60 INT 80\nPOU 50 ÉDU 85 SAN 55 PV 14 BD: 1D4\nCarrure: 1 Mvt: 7 PM: 10 Chance: 40 Armure: 1\nPerte de Santé mentale: 1d4/1d8\nAttaques\nAttaques par round: 3\nBite 50% (25/10), dommage 1D6\nBrawl 30% (15/6), dommage 1D3\nDerringer 40% (20/8), dommage 1D8+1\nEsquiver 50% (25/10)\nCompétences\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLangue: English 80%, Eklo 5%.\nSortilèges: Summon NPC, Dispel NPC.' } // Regular expressions to parse actors from a spanish source @@ -210,7 +212,8 @@ const spanishRegExp = { smbRegExp: /(Subfusil|Thompson)/i, machineGunRegExp: /(Browning|Vickers|Ametralladora)/i, launchedWeapons: /(Molotov||Granada|Dinamita)/i, - example: 'Example Character, 27 años\nFUE 75 CON 60 TAM 80 DES 70 APA 60 INT 80\nPOD 50 EDU 85 COR 55 PV 14 BD: 1D4\nCorpulencia: 1 Movimiento: 7 PM: 10 Suerte: 40 Armadura: 1\nPérdida de cordura: 1d4/1d8\nCombate\nNúmero de Ataques 3\nBite 50% (25/10), damage 1D6\nBrawl 30% (15/6), damage 1D3\nDerringer 40% (20/8), damage 1D8+1\nEsquivar 50% (25/10)\nHabilidades\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nIdiomas: English 80%, Eklo 5%.\nConjuros: Summon NPC, Dispel NPC.' + example: + 'Example Character, 27 años\nFUE 75 CON 60 TAM 80 DES 70 APA 60 INT 80\nPOD 50 EDU 85 COR 55 PV 14 BD: 1D4\nCorpulencia: 1 Movimiento: 7 PM: 10 Suerte: 40 Armadura: 1\nPérdida de cordura: 1d4/1d8\nCombate\nNúmero de Ataques 3\nBite 50% (25/10), damage 1D6\nBrawl 30% (15/6), damage 1D3\nDerringer 40% (20/8), damage 1D8+1\nEsquivar 50% (25/10)\nHabilidades\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nIdiomas: English 80%, Eklo 5%.\nConjuros: Summon NPC, Dispel NPC.' } /** diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index a99a4c7b..1778f1e5 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -489,13 +489,11 @@ export class CoC7ActorImporter { }) // created.data.value = skill.value && console.debug(created)) } else { - await npc - .createSkill(skill.name, skill.value) - .then(created => { - if (CONFIG.debug.CoC7Importer) { - console.debug(created) - } - }) + await npc.createSkill(skill.name, skill.value).then(created => { + if (CONFIG.debug.CoC7Importer) { + console.debug(created) + } + }) } } } From acc16b93be3c7e60717323e4d61216e19dd1b3f8 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 11 Sep 2021 22:35:38 +0100 Subject: [PATCH 037/726] Add unable to copy to clipboard message to translation list --- lang/en.json | 2 ++ module/utilities.js | 8 ++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lang/en.json b/lang/en.json index 315daaa0..86f8c907 100644 --- a/lang/en.json +++ b/lang/en.json @@ -701,6 +701,8 @@ "CoC7.Maximize": "Maximize", "CoC7.Summarize": "Summarize", + "CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", + "SETTINGS.TitleRules": "Rules", "SETTINGS.TitleInitiative": "Initiative Settings", "SETTINGS.TitleRoll": "Roll Settings", diff --git a/module/utilities.js b/module/utilities.js index b94ccd43..ee9e2035 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -657,17 +657,13 @@ export class CoC7Utilities { document.execCommand('copy') ? resolve() : reject( - new Error( - 'Unable to copy to clipboard, this is likely due to your browser security settings.' + new Error(game.i18n.localize('CoC7.UnableToCopyToClipboard')) ) - ) textArea.remove() }).catch(err => ui.notifications.error(err)) } } catch (err) { - ui.notifications.error( - 'Unable to copy to clipboard, this is likely due to your browser security settings.' - ) + ui.notifications.error(game.i18n.localize('CoC7.UnableToCopyToClipboard')) } } } From 81102fef8419d7413995c7e82d6a08fcead41503 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 11 Sep 2021 21:37:03 +0000 Subject: [PATCH 038/726] Updated translations list --- .github/TRANSLATIONS.md | 643 ++++++++++++++++++++-------------------- 1 file changed, 323 insertions(+), 320 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 3da2382d..992903b4 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,326 +2,325 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The **sv** translation is currently up to date - -| Key | cn | cs | de | es | fr | ja | pl | pt-BR | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **314** | **90** | **107** | **2** | **2** | **109** | **2** | **2** | **30** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **315** | **91** | **108** | **3** | **3** | **110** | **3** | **3** | **1** | **31** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ##### CoC7.ActorImporter @@ -1171,6 +1170,10 @@ The **sv** translation is currently up to date `"CoC7.TotalDamage": "Total damage",` +##### CoC7.UnableToCopyToClipboard + +`"CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.",` + ##### CoC7.UnderlyingInsanity `"CoC7.UnderlyingInsanity": "Underlying insanity",` From 1d0f7bfa5a2531db765a058c6f9000773eb75936 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 12 Sep 2021 00:52:22 +0100 Subject: [PATCH 039/726] Disable melee buttons after clicked to prevent multiple clicks while waiting for dice so nice --- module/chat.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/chat.js b/module/chat.js index 1da4a9b5..339d95af 100644 --- a/module/chat.js +++ b/module/chat.js @@ -903,6 +903,7 @@ export class CoC7Chat { case 'melee-initiator-roll': { const initiator = CoC7MeleeInitiator.getFromCard(card) const check = await initiator.performSkillCheck(event.currentTarget.dataset.skill) + $(button).prop('disabled', true) await CoC7Dice.showRollDice3d(check.dice.roll) await initiator.publishCheckResult() break @@ -910,6 +911,7 @@ export class CoC7Chat { case 'melee-target-roll': { const target = CoC7MeleeTarget.getFromCard(card) const check = await target.performSkillCheck(event.currentTarget.dataset.skill) + $(button).prop('disabled', true) await CoC7Dice.showRollDice3d(check.dice.roll) await target.publishCheckResult() break From 150a2a1c6e583c254a2dfce66e340b642df47ee7 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 12 Sep 2021 00:58:39 +0100 Subject: [PATCH 040/726] Require socketlib 'socketlib is required' error message is not translated Move create chat message to socket function If socketlib is not enabled fallback to existing method --- module/chat/combat/melee-initiator.js | 16 ++++++-------- module/coc7.js | 10 ++++++++- module/hooks/socket.js | 32 +++++++++++++++++++++++++++ system.json | 6 +++++ 4 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 module/hooks/socket.js diff --git a/module/chat/combat/melee-initiator.js b/module/chat/combat/melee-initiator.js index a771c3af..dab8fe6d 100644 --- a/module/chat/combat/melee-initiator.js +++ b/module/chat/combat/melee-initiator.js @@ -3,7 +3,6 @@ import { CoC7Check } from '../../check.js' import { chatHelper, CoC7Roll } from '../helper.js' import { CoC7Chat } from '../../chat.js' -import { CoC7MeleeTarget } from './melee-target.js' import { CoC7MeleeResoltion } from './melee-resolution.js' import { ChatCardActor } from '../card-actor.js' @@ -113,14 +112,13 @@ export class CoC7MeleeInitiator extends ChatCardActor { check.successLevel === CoC7Check.successLevel.extreme || check.successLevel === CoC7Check.successLevel.critical if (this.hasTarget && !this.autoSuccess) { - const meleeTarget = new CoC7MeleeTarget( - this.targetKey, - this.messageId, - this.fastForward - ) - meleeTarget.initiatorKey = this.actorKey - const message = await meleeTarget.createChatCard() - this.targetCard = message.id + const message = await game.CoC7socket.executeAsGM('gmcreatemessageas', { + targetKey: this.targetKey, + messageId: this.messageId, + fastForward: this.fastForward, + actorKey: this.actorKey + }) + this.targetCard = message._id } if (this.autoSuccess && !this.check.isFumble) { diff --git a/module/coc7.js b/module/coc7.js index b16df968..28e1f7f7 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -1,4 +1,4 @@ -/* global $, Combat, CONFIG, fromUuid, game, Hooks, tinyMCE */ +/* global $, Combat, CONFIG, fromUuid, game, Hooks, tinyMCE, ui */ import { CoC7NPCSheet } from './actors/sheets/npc-sheet.js' import { CoC7CreatureSheet } from './actors/sheets/creature-sheet.js' import { CoC7CharacterSheetV2 } from './actors/sheets/character.js' @@ -19,6 +19,7 @@ import { CoC7ActorDirectory } from './actor-directory.js' import { CoC7Hooks } from './hooks/index.js' import * as DiceBot from './dicebot.js' import '../styles/system/index.less' +import { CoC7Socket } from './hooks/socket.js' Hooks.on('renderSettingsConfig', (app, html, options) => { const systemTab = $(app.form).find('.tab[data-tab=system]') @@ -137,6 +138,8 @@ Hooks.on('renderCombatTracker', (app, html, data) => DiceBot.listen() CoC7Hooks.listen() +Hooks.once('socketlib.ready', CoC7Socket) + Hooks.once('setup', function () { // Localize CONFIG objects once up-front const toLocalize = [ @@ -216,6 +219,11 @@ Hooks.on('ready', async () => { configureTinyMCE() + if (!game.modules.get('socketlib')?.active) { + ui.notifications.error('socketlib is required', { permanent: true }) + CoC7Socket(false) + } + game.socket.on('system.CoC7', async data => { if (data.type === 'updateChar') CoC7Utilities.updateCharSheets() diff --git a/module/hooks/socket.js b/module/hooks/socket.js new file mode 100644 index 00000000..52886a2c --- /dev/null +++ b/module/hooks/socket.js @@ -0,0 +1,32 @@ +/* global game, socketlib, ui */ +import { CoC7MeleeTarget } from '../chat/combat/melee-target.js' + +export function CoC7Socket (hasSocket = true) { + if (hasSocket) { + game.CoC7socket = socketlib.registerSystem('CoC7') + game.CoC7socket.register('gmcreatemessageas', gmcreatemessageas) + } else { + game.CoC7socket = { + executeAsGM: function (func, data) { + ui.notifications.error('socketlib is required', { permanent: true }) + switch (func) { + case 'gmcreatemessageas': + return gmcreatemessageas(data) + } + ui.notifications.error(game.i18n.format('socketlib fallback function {function} not registered', { function: func })) + return '' + } + } + } +} + +async function gmcreatemessageas (data) { + const meleeTarget = new CoC7MeleeTarget( + data.targetKey, + data.messageId, + data.fastForward + ) + meleeTarget.initiatorKey = data.actorKey + const message = await meleeTarget.createChatCard() + return message +} diff --git a/system.json b/system.json index 9e951dbb..425ba825 100644 --- a/system.json +++ b/system.json @@ -104,6 +104,12 @@ } ], "socket": true, + "dependencies": [ + { + "name": "socketlib", + "manifest": "https://raw.githubusercontent.com/manuelVo/foundryvtt-socketlib/master/module.json" + } + ], "gridDistance": 5, "gridUnits": "ft", "primaryTokenAttribute": "attribs.hp", From 871ffcb066e8258bb5c4b01b0d5524605f896482 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 12 Sep 2021 10:33:11 +0100 Subject: [PATCH 041/726] If current user is not a gm and socketlib is not enabled don't overwrite user If user can not update melee card show info message instead of error --- module/chat/combat/melee-initiator.js | 2 +- module/chat/combat/melee-target.js | 12 ++++++++++-- module/hooks/socket.js | 5 ++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/module/chat/combat/melee-initiator.js b/module/chat/combat/melee-initiator.js index dab8fe6d..f4427b42 100644 --- a/module/chat/combat/melee-initiator.js +++ b/module/chat/combat/melee-initiator.js @@ -118,7 +118,7 @@ export class CoC7MeleeInitiator extends ChatCardActor { fastForward: this.fastForward, actorKey: this.actorKey }) - this.targetCard = message._id + this.targetCard = message.id } if (this.autoSuccess && !this.check.isFumble) { diff --git a/module/chat/combat/melee-target.js b/module/chat/combat/melee-target.js index d4dbb6ea..caf146d9 100644 --- a/module/chat/combat/melee-target.js +++ b/module/chat/combat/melee-target.js @@ -133,7 +133,7 @@ export class CoC7MeleeTarget extends ChatCardActor { this[flag] = !this[flag] } - async createChatCard () { + async createChatCard ({ forceCurrentGameUser = false } = {}) { const html = await renderTemplate(this.template, this) const speakerData = {} @@ -203,6 +203,10 @@ export class CoC7MeleeTarget extends ChatCardActor { user = this.actor.user } + if (forceCurrentGameUser) { + user = game.user + } + const chatData = { user: user.id, speaker, @@ -222,8 +226,12 @@ export class CoC7MeleeTarget extends ChatCardActor { } async updateChatCard () { - const html = await renderTemplate(this.template, this) const message = game.messages.get(this.messageId) + if (!game.user.isGM && message.user.id !== game.user.id) { + ui.notifications.info('You are not able to interact with this message please ask your Keeper to select the options for you') + return + } + const html = await renderTemplate(this.template, this) const msg = await message.update({ content: html }) await ui.chat.updateMessage(msg, false) diff --git a/module/hooks/socket.js b/module/hooks/socket.js index 52886a2c..c539316d 100644 --- a/module/hooks/socket.js +++ b/module/hooks/socket.js @@ -11,6 +11,9 @@ export function CoC7Socket (hasSocket = true) { ui.notifications.error('socketlib is required', { permanent: true }) switch (func) { case 'gmcreatemessageas': + if (!game.user.isGM) { + data.forceCurrentGameUser = true + } return gmcreatemessageas(data) } ui.notifications.error(game.i18n.format('socketlib fallback function {function} not registered', { function: func })) @@ -27,6 +30,6 @@ async function gmcreatemessageas (data) { data.fastForward ) meleeTarget.initiatorKey = data.actorKey - const message = await meleeTarget.createChatCard() + const message = await meleeTarget.createChatCard({ forceCurrentGameUser: data.forceCurrentGameUser || false }) return message } From 2c8cbad351276f985bf163cfac506a0610e7c265 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 12 Sep 2021 13:26:36 +0100 Subject: [PATCH 042/726] Remove incorrect default character sheet --- module/scripts/register-sheets.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/module/scripts/register-sheets.js b/module/scripts/register-sheets.js index 4304a49e..952b64a3 100644 --- a/module/scripts/register-sheets.js +++ b/module/scripts/register-sheets.js @@ -1,6 +1,5 @@ -/* global Actors, Items, ItemSheet */ +/* global Actors, ActorSheet, Items, ItemSheet */ -import { CoC7ActorSheet } from '../actors/sheets/base.js' import { CoC7ArchetypeSheet } from '../items/sheets/archetype.js' import { CoC7BookSheet } from '../items/book/sheet.js' import { CoC7CharacterSheet } from '../actors/sheets/actor-sheet.js' @@ -20,7 +19,7 @@ import { CoC7VehicleSheet } from '../actors/sheets/vehicle.js' import { CoC7WeaponSheet } from '../items/sheets/weapon-sheet.js' export function registerSheets () { - Actors.unregisterSheet('core', CoC7ActorSheet) + Actors.unregisterSheet('core', ActorSheet) Actors.registerSheet('CoC7', CoC7NPCSheet, { types: ['npc'], makeDefault: true From 83405ced92c6124b4f17df8d6a7c84050d580e13 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 12 Sep 2021 16:16:57 +0100 Subject: [PATCH 043/726] Convert v1 character sheet to run from v2 character sheet fix statuses removal, add warning message about upcoming sheet removal --- lang/en.json | 1 + module/actors/sheets/actor-sheet.js | 152 ----- module/actors/sheets/character-v1.js | 17 + module/actors/sheets/character.js | 152 ++++- module/scripts/register-sheets.js | 2 +- styles/system/main.less | 19 +- templates/actors/character-sheet.html | 773 +++++++++++++------------- 7 files changed, 553 insertions(+), 563 deletions(-) delete mode 100644 module/actors/sheets/actor-sheet.js create mode 100644 module/actors/sheets/character-v1.js diff --git a/lang/en.json b/lang/en.json index 86f8c907..45e20952 100644 --- a/lang/en.json +++ b/lang/en.json @@ -702,6 +702,7 @@ "CoC7.Summarize": "Summarize", "CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", + "CoC7.WarningCharacterSheetV1Depreciated": "This character sheet will be removed with FoundryVTT v9 please change the Sheet to CoC7.CoC7CharacterSheetV2", "SETTINGS.TitleRules": "Rules", "SETTINGS.TitleInitiative": "Initiative Settings", diff --git a/module/actors/sheets/actor-sheet.js b/module/actors/sheets/actor-sheet.js deleted file mode 100644 index dc06593e..00000000 --- a/module/actors/sheets/actor-sheet.js +++ /dev/null @@ -1,152 +0,0 @@ -/* global game, mergeObject */ - -import { CoC7ActorSheet } from './base.js' - -/** - * Extend the basic ActorSheet with some very simple modifications - */ -export class CoC7CharacterSheet extends CoC7ActorSheet { - /** - * Prepare data for rendering the Actor sheet - * The prepared data object contains both the actor data as well as additional sheet options - */ - async getData () { - const data = await super.getData() - - if (this.actor.occupation) { - data.data.infos.occupation = this.actor.occupation.name - data.data.infos.occupationSet = true - } else data.data.infos.occupationSet = false - - if (this.actor.archetype) { - data.data.infos.archetype = this.actor.archetype.name - data.data.infos.archetypeSet = true - } else data.data.infos.archetypeSet = false - - data.totalExperience = this.actor.experiencePoints - data.totalOccupation = this.actor.occupationPointsSpent - data.invalidOccupationPoints = - Number(this.actor.occupationPointsSpent) !== - Number(this.actor.data.data.development?.occupation) - data.totalArchetype = this.actor.archetypePointsSpent - data.invalidArchetypePoints = - Number(this.actor.archetypePointsSpent) !== - Number(this.actor.data.data.development?.archetype) - data.totalPersonal = this.actor.personalPointsSpent - data.invalidPersonalPoints = - Number(this.actor.personalPointsSpent) !== - Number(this.actor.data.data.development?.personal) - data.creditRatingMax = Number( - this.actor.occupation?.data.data.creditRating.max - ) - data.creditRatingMin = Number( - this.actor.occupation?.data.data.creditRating.min - ) - data.invalidCreditRating = - this.actor.creditRatingSkill?.data.data.adjustments?.occupation > - data.creditRatingMax || - this.actor.creditRatingSkill?.data.data.adjustments?.occupation < - data.creditRatingMin - data.pulpTalentCount = data.itemsByType.talent?.length - ? data.itemsByType.talent?.length - : 0 - data.minPulpTalents = this.actor.archetype?.data.data.talents - ? this.actor.archetype?.data.data.talents - : 0 - data.invalidPulpTalents = data.pulpTalentCount < data.minPulpTalents - - data.hasSkillFlaggedForExp = this.actor.hasSkillFlaggedForExp - - data.allowDevelopment = game.settings.get('CoC7', 'developmentEnabled') - data.allowCharCreation = game.settings.get('CoC7', 'charCreationEnabled') - data.developmentRollForLuck = game.settings.get( - 'CoC7', - 'developmentRollForLuck' - ) - data.showDevPannel = data.allowDevelopment || data.allowCharCreation - - data.manualCredit = this.actor.getActorFlag('manualCredit') - if (!data.manualCredit) { - data.credit = {} - let factor - let monetarySymbol - if (!data.data.credit) { - factor = 1 - monetarySymbol = '$' - } else { - factor = parseInt(data.data.credit.multiplier) - ? parseInt(data.data.credit.multiplier) - : 1 - monetarySymbol = data.data.credit.monetarySymbol - ? data.data.credit.monetarySymbol - : '$' - } - - data.credit.spendingLevel = `${monetarySymbol}${this.actor.spendingLevel * - factor}` - data.credit.assets = `${monetarySymbol}${this.actor.assets * factor}` - data.credit.cash = `${monetarySymbol}${this.actor.cash * factor}` - } - - data.oneBlockBackStory = game.settings.get('CoC7', 'oneBlockBackstory') - - return data - } - - /* -------------------------------------------- */ - - activateListeners (html) { - super.activateListeners(html) - - if (this.actor.isOwner) { - // MODIF: 0.8.x owner deprecated => isOwner - html - .find('.skill-name.rollable.flagged4dev') - .click(async event => this._onSkillDev(event)) - html - .find('.reset-occupation') - .click(async () => await this.actor.resetOccupation()) - html - .find('.reset-archetype') - .click(async () => await this.actor.resetArchetype()) - html.find('.open-item').click(event => this._onItemDetails(event)) - html - .find('[name="data.attribs.hp.value"]') - .change(event => this.actor.setHealthStatusManually(event)) - } - } - - async _onSkillDev (event) { - event.preventDefault() - const skillId = event.currentTarget.closest('.item').dataset.itemId - await this.actor.developSkill(skillId, event.shiftKey) - } - - _onItemDetails (event) { - event.preventDefault() - const type = event.currentTarget.dataset.type - const item = this.actor[type] - if (item) item.sheet.render(true) - } - - /** - * Extend and override the default options used by the 5e Actor Sheet - * @returns {Object} - */ - static get defaultOptions () { - return mergeObject(super.defaultOptions, { - classes: ['coc7', 'sheet', 'actor', 'character'], - template: 'systems/CoC7/templates/actors/character-sheet.html', - width: 600, - height: 650, - dragDrop: [{ dragSelector: '.item', dropSelector: null }], - tabs: [ - { - navSelector: '.sheet-tabs', - contentSelector: '.sheet-body', - initial: 'skills' - } - ] - }) - } -} diff --git a/module/actors/sheets/character-v1.js b/module/actors/sheets/character-v1.js new file mode 100644 index 00000000..13826909 --- /dev/null +++ b/module/actors/sheets/character-v1.js @@ -0,0 +1,17 @@ +/* global mergeObject */ +import { CoC7CharacterSheetV2 } from './character.js' + +export class CoC7CharacterSheet extends CoC7CharacterSheetV2 { + /** + * Extend and override the default options used by the 5e Actor Sheet + * @returns {Object} + */ + static get defaultOptions () { + return mergeObject(super.defaultOptions, { + classes: ['coc7', 'sheet', 'actor', 'character'], + template: 'systems/CoC7/templates/actors/character-sheet.html', + width: 672, + height: 765 + }) + } +} diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index e477ff94..d9037090 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -1,24 +1,26 @@ /* global $, FontFace, game, mergeObject, ui */ +import { CoC7ActorSheet } from './base.js' -import { CoC7CharacterSheet } from './actor-sheet.js' - -export class CoC7CharacterSheetV2 extends CoC7CharacterSheet { +export class CoC7CharacterSheetV2 extends CoC7ActorSheet { _getHeaderButtons () { - if (!this.summarized) this.summarized = false - let buttons = super._getHeaderButtons() - buttons = [ - { - label: this.summarized - ? game.i18n.localize('CoC7.Maximize') - : game.i18n.localize('CoC7.Summarize'), - class: 'test-extra-icon', - icon: this.summarized - ? 'fas fa-window-maximize' - : 'fas fa-window-minimize', - onclick: event => this.toggleSheetMode(event) - } - ].concat(buttons) - return buttons + if (this.constructor.name === 'CoC7CharacterSheetV2') { + if (!this.summarized) this.summarized = false + let buttons = super._getHeaderButtons() + buttons = [ + { + label: this.summarized + ? game.i18n.localize('CoC7.Maximize') + : game.i18n.localize('CoC7.Summarize'), + class: 'test-extra-icon', + icon: this.summarized + ? 'fas fa-window-maximize' + : 'fas fa-window-minimize', + onclick: event => this.toggleSheetMode(event) + } + ].concat(buttons) + return buttons + } + return super._getHeaderButtons() } async toggleSheetMode (event) { @@ -37,6 +39,84 @@ export class CoC7CharacterSheetV2 extends CoC7CharacterSheet { async getData () { const data = await super.getData() + + if (this.actor.occupation) { + data.data.infos.occupation = this.actor.occupation.name + data.data.infos.occupationSet = true + } else data.data.infos.occupationSet = false + + if (this.actor.archetype) { + data.data.infos.archetype = this.actor.archetype.name + data.data.infos.archetypeSet = true + } else data.data.infos.archetypeSet = false + + data.totalExperience = this.actor.experiencePoints + data.totalOccupation = this.actor.occupationPointsSpent + data.invalidOccupationPoints = + Number(this.actor.occupationPointsSpent) !== + Number(this.actor.data.data.development?.occupation) + data.totalArchetype = this.actor.archetypePointsSpent + data.invalidArchetypePoints = + Number(this.actor.archetypePointsSpent) !== + Number(this.actor.data.data.development?.archetype) + data.totalPersonal = this.actor.personalPointsSpent + data.invalidPersonalPoints = + Number(this.actor.personalPointsSpent) !== + Number(this.actor.data.data.development?.personal) + data.creditRatingMax = Number( + this.actor.occupation?.data.data.creditRating.max + ) + data.creditRatingMin = Number( + this.actor.occupation?.data.data.creditRating.min + ) + data.invalidCreditRating = + this.actor.creditRatingSkill?.data.data.adjustments?.occupation > + data.creditRatingMax || + this.actor.creditRatingSkill?.data.data.adjustments?.occupation < + data.creditRatingMin + data.pulpTalentCount = data.itemsByType.talent?.length + ? data.itemsByType.talent?.length + : 0 + data.minPulpTalents = this.actor.archetype?.data.data.talents + ? this.actor.archetype?.data.data.talents + : 0 + data.invalidPulpTalents = data.pulpTalentCount < data.minPulpTalents + + data.hasSkillFlaggedForExp = this.actor.hasSkillFlaggedForExp + + data.allowDevelopment = game.settings.get('CoC7', 'developmentEnabled') + data.allowCharCreation = game.settings.get('CoC7', 'charCreationEnabled') + data.developmentRollForLuck = game.settings.get( + 'CoC7', + 'developmentRollForLuck' + ) + data.showDevPannel = data.allowDevelopment || data.allowCharCreation + + data.manualCredit = this.actor.getActorFlag('manualCredit') + if (!data.manualCredit) { + data.credit = {} + let factor + let monetarySymbol + if (!data.data.credit) { + factor = 1 + monetarySymbol = '$' + } else { + factor = parseInt(data.data.credit.multiplier) + ? parseInt(data.data.credit.multiplier) + : 1 + monetarySymbol = data.data.credit.monetarySymbol + ? data.data.credit.monetarySymbol + : '$' + } + + data.credit.spendingLevel = `${monetarySymbol}${this.actor.spendingLevel * + factor}` + data.credit.assets = `${monetarySymbol}${this.actor.assets * factor}` + data.credit.cash = `${monetarySymbol}${this.actor.cash * factor}` + } + + data.oneBlockBackStory = game.settings.get('CoC7', 'oneBlockBackstory') + data.summarized = this.summarized data.skillList = [] let previousSpec = '' @@ -99,9 +179,39 @@ export class CoC7CharacterSheetV2 extends CoC7CharacterSheet { }) } - // _onDragStart(event) { - // super._onDragStart(event); - // } + activateListeners (html) { + super.activateListeners(html) + + if (this.actor.isOwner) { + // MODIF: 0.8.x owner deprecated => isOwner + html + .find('.skill-name.rollable.flagged4dev') + .click(async event => this._onSkillDev(event)) + html + .find('.reset-occupation') + .click(async () => await this.actor.resetOccupation()) + html + .find('.reset-archetype') + .click(async () => await this.actor.resetArchetype()) + html.find('.open-item').click(event => this._onItemDetails(event)) + html + .find('[name="data.attribs.hp.value"]') + .change(event => this.actor.setHealthStatusManually(event)) + } + } + + async _onSkillDev (event) { + event.preventDefault() + const skillId = event.currentTarget.closest('.item').dataset.itemId + await this.actor.developSkill(skillId, event.shiftKey) + } + + _onItemDetails (event) { + event.preventDefault() + const type = event.currentTarget.dataset.type + const item = this.actor[type] + if (item) item.sheet.render(true) + } static renderSheet (sheet) { if (game.settings.get('CoC7', 'overrideSheetArtwork')) { diff --git a/module/scripts/register-sheets.js b/module/scripts/register-sheets.js index 952b64a3..996f851c 100644 --- a/module/scripts/register-sheets.js +++ b/module/scripts/register-sheets.js @@ -2,7 +2,7 @@ import { CoC7ArchetypeSheet } from '../items/sheets/archetype.js' import { CoC7BookSheet } from '../items/book/sheet.js' -import { CoC7CharacterSheet } from '../actors/sheets/actor-sheet.js' +import { CoC7CharacterSheet } from '../actors/sheets/character-v1.js' import { CoC7CharacterSheetV2 } from '../actors/sheets/character.js' import { CoC7ChaseSheet } from '../items/sheets/chase.js' import { CoC7CreatureSheet } from '../actors/sheets/creature-sheet.js' diff --git a/styles/system/main.less b/styles/system/main.less index 4433fac5..e432acc6 100644 --- a/styles/system/main.less +++ b/styles/system/main.less @@ -480,18 +480,29 @@ cursor: default; } } - .sheet-tabs { + .sheet-nav { flex: 0 0 20px; - margin-bottom: 5px; + margin: 4px 0 5px; + line-height: 20px; font-family: customSheetFont, 'Palatino Linotype', serif; font-size: 20px; border: 0; - .item { + .tab-name { line-height: 15px; margin: 0 10px; border-bottom: 3px solid #b5b3a4; + text-align: center; + &.keeper-only-tab { + flex: 0.3; + span { + vertical-align: bottom; + i { + color: @colorGreen; + } + } + } } - .item.active { + .tab-name.active { border-bottom: 3px solid #44191a; } } diff --git a/templates/actors/character-sheet.html b/templates/actors/character-sheet.html index ac9a16c2..fc476557 100644 --- a/templates/actors/character-sheet.html +++ b/templates/actors/character-sheet.html @@ -1,395 +1,398 @@ -
+ +
{{ localize 'CoC7.WarningCharacterSheetV1Depreciated' }}
+ {{!-- Sheet Header --}} +
+
+
+
+ + +
+ {{#if pulpCharacter}} +
+ + {{#if data.infos.archetypeSet}} + {{data.infos.archetype}} + {{#unless data.flags.locked}} + + {{/unless}} + {{else}} + + {{/if}} +
+
+ + +
+ {{/if}} +
+ + {{#if data.infos.occupationSet}} + {{data.infos.occupation}} + {{#unless data.flags.locked}} + + {{/unless}} + {{else}} + + {{/if}} +
+
+ + + + +
+
+ + +
+
+ + +
+
- {{!-- Sheet Header --}} -
-
-
-
- - -
- {{#if pulpCharacter}} -
- - {{#if data.infos.archetypeSet}} - {{data.infos.archetype}} - {{#unless data.flags.locked}} - - {{/unless}} - {{else}} - - {{/if}} -
-
- - -
- {{/if}} -
- - {{#if data.infos.occupationSet}} - {{data.infos.occupation}} - {{#unless data.flags.locked}} - - {{/unless}} - {{else}} - - {{/if}} -
-
- - - - -
-
- - -
-
- - -
-
+
+ {{#each data.characteristics as |characteristic key|}} +
+
{{localize characteristic.short}}
+ +
+ {{characteristic.hard}}
{{characteristic.extreme}} +
+
+ {{/each}} +
+ {{#if isDead}} +
+ +
+ {{else}} + {{#if isDying}} +
+ +
+ {{else}} + + {{/if}} + {{/if}} +
-
- {{#each data.characteristics as |characteristic key|}} -
-
{{localize characteristic.short}}
- {{#if characteristic.editable}} - - {{else}} - - {{/if}} -
- {{characteristic.hard}}
{{characteristic.extreme}} -
-
- {{/each}} -
- {{#if isDead}} -
- -
- {{else}} - {{#if isDying}} -
- -
- {{else}} - - {{/if}} - {{/if}} -
+
+
+ + + / + {{#if data.attribs.hp.auto}} + + {{else}} + + {{/if}} + {{#unless data.flags.locked}} +
+ {{/unless}} +
+
+ + + / + {{#if data.attribs.mp.auto}} + + {{else}} + + {{/if}} + {{#unless data.flags.locked}} +
+ {{/unless}} +
+
+ + + / + {{#if data.attribs.san.auto}} + + {{else}} + + {{/if}} + {{#unless data.flags.locked}} +
+ {{/unless}} +
+
+ + + +
+
+
+
+ + {{data.attribs.mov.value}} +
+
+ + {{#if data.attribs.db.auto}} + + {{else}} + + {{/if}} +
+
+ {{data.attribs.build.value}} +
+
+ + +
+
+
+
+ + +
+ + {{data.attribs.san.dailyLoss}} + +
+ + + + + -
-
- - - / - {{#if data.attribs.hp.auto}} - - {{else}} - - {{/if}} - {{#unless data.flags.locked}} -
- {{/unless}} -
-
- - - / - {{#if data.attribs.mp.auto}} - - {{else}} - - {{/if}} - {{#unless data.flags.locked}} -
- {{/unless}} -
-
- - - / - {{#if data.attribs.san.auto}} - - {{else}} - - {{/if}} - {{#unless data.flags.locked}} -
- {{/unless}} -
-
- - - -
-
-
-
- - {{data.attribs.mov.value}} -
-
- - {{#if data.attribs.db.auto}} - - - {{else}} - - {{/if}} -
-
- {{data.attribs.build.value}} -
-
- - -
-
-
-
- - -
- - {{data.attribs.san.dailyLoss}} - -
- - - - - +
+ {{#if isDying}} + + {{else}} +
+ {{/if}} +
+ + -
- {{#if isDying}} - - {{else}} -
- {{/if}} -
- - +
+ {{#if data.flags.locked}} + + {{else}} + + {{/if}} +
+
-
- {{#if data.flags.locked}} - - {{else}} - - {{/if}} -
- + {{!-- Sheet Tab Navigation --}} + - {{!-- Sheet Tab Navigation --}} - + {{!-- Sheet Body --}} +
+ {{#if showDevPannel}} +
+ {{> "systems/CoC7/templates/actors/parts/character-development.html"}} +
+ {{/if}} - {{!-- Sheet Body --}} -
- {{#if showDevPannel}} -
- {{> "systems/CoC7/templates/actors/parts/character-development.html"}} -
- {{/if}} + {{!-- Skills Tab --}} +
+ {{#unless data.flags.locked}} +
+
{{localize 'CoC7.AddSkill'}}
+
+ {{/unless}} + {{> "systems/CoC7/templates/actors/parts/actor-skills.html"}} +
- {{!-- Skills Tab --}} -
- {{#unless data.flags.locked}} -
-
{{localize 'CoC7.AddSkill'}}
-
- {{/unless}} - {{> "systems/CoC7/templates/actors/parts/actor-skills.html"}} -
+
+ {{> "systems/CoC7/templates/actors/parts/actor-weapons.html"}} +
-
- {{> "systems/CoC7/templates/actors/parts/actor-weapons.html"}} -
- -
-
-
- {{#unless data.flags.locked}} -
-
{{localize 'CoC7.AddItem'}}
-
- {{/unless}} -
    -
    -
  1. -
    -

    {{localize 'CoC7.Items'}}

    -
    -
  2. -
      - {{#each itemsByType.item as |item id|}} -
    1. -
      -

      {{item.name}}

      -
      - - -
      -
    2. - {{/each}} -
    -
    -
    -
  3. -
    -

    {{localize 'CoC7.Books'}}

    -
    -
  4. -
      - {{#each itemsByType.book as |item id|}} -
    1. -
      -

      {{item.name}}

      -
      - - -
      -
    2. - {{/each}} -
    -
    -
    -
  5. -
    -

    {{localize 'CoC7.Spells'}}

    -
    -
  6. -
      - {{#each itemsByType.spell as |item id|}} -
    1. -
      -

      {{item.name}}

      -
      - - -
      -
    2. - {{/each}} -
    -
    - {{#if pulpCharacter}} - {{#if itemsByType.talent}} -
    -
  7. -
    -

    {{localize 'CoC7.PulpTalents'}}

    -
    -
  8. -
      - {{#each itemsByType.talent as |item id|}} -
    1. -
      -

      {{item.name}}

      -
      - - -
      -
    2. - {{/each}} -
    -
    - {{/if}} - {{/if}} -
-
-
- {{#unless data.flags.locked}} -
- {{#if data.flags.manualCredit}} - -
- {{else}} - - - - - {{/if}} -
- -
-
- {{/unless}} -
- - {{#if data.flags.manualCredit}} - - {{else}} - {{credit.spendingLevel}} - {{/if}} -
-
- - {{#if data.flags.manualCredit}} - - {{else}} - {{credit.cash}} - {{/if}} - -
-
- - {{#if data.flags.manualCredit}} - - {{else}} - {{credit.assets}} - {{/if}} -
-
- -
- -
- -
-
-
-
+
+
+
+ {{#unless data.flags.locked}} +
+
{{localize 'CoC7.AddItem'}}
+
+ {{/unless}} +
    +
    +
  1. +
    +

    {{localize 'CoC7.Items'}}

    +
    +
  2. +
      + {{#each itemsByType.item as |item id|}} +
    1. +
      +

      {{item.name}}

      +
      + + +
      +
    2. + {{/each}} +
    +
    +
    +
  3. +
    +

    {{localize 'CoC7.Books'}}

    +
    +
  4. +
      + {{#each itemsByType.book as |item id|}} +
    1. +
      +

      {{item.name}}

      +
      + + +
      +
    2. + {{/each}} +
    +
    +
    +
  5. +
    +

    {{localize 'CoC7.Spells'}}

    +
    +
  6. +
      + {{#each itemsByType.spell as |item id|}} +
    1. +
      +

      {{item.name}}

      +
      + + +
      +
    2. + {{/each}} +
    +
    + {{#if pulpCharacter}} + {{#if itemsByType.talent}} +
    +
  7. +
    +

    {{localize 'CoC7.PulpTalents'}}

    +
    +
  8. +
      + {{#each itemsByType.talent as |item id|}} +
    1. +
      +

      {{item.name}}

      +
      + + +
      +
    2. + {{/each}} +
    +
    + {{/if}} + {{/if}} +
+
+
+ {{#unless data.flags.locked}} +
+ {{#if data.flags.manualCredit}} + +
+ {{else}} + + + + + {{/if}} +
+ +
+
+ {{/unless}} +
+ + {{#if data.flags.manualCredit}} + + {{else}} + {{credit.spendingLevel}} + {{/if}} +
+
+ + {{#if data.flags.manualCredit}} + + {{else}} + {{credit.cash}} + {{/if}} + +
+
+ + {{#if data.flags.manualCredit}} + + {{else}} + {{credit.assets}} + {{/if}} +
+
+ +
+ +
+ +
+
+
+
-
- {{#unless data.flags.locked}} -
-
{{localize 'CoC7.BackgroundNewSection'}}
-
- {{/unless}} -
- {{#each data.biography as |section index|}} -
- {{#if ../data.flags.locked}} -
- -
- {{else}} -
- -
-
- - {{#unless section.isFirst}}{{/unless}} - {{#unless section.isLast}}{{/unless}} -
-
- {{/if}} - - -
- {{/each}} -
-
-
- \ No newline at end of file +
+ {{#unless data.flags.locked}} +
+
{{localize 'CoC7.BackgroundNewSection'}}
+
+ {{/unless}} +
+ {{#each data.biography as |section index|}} +
+ {{#if ../data.flags.locked}} +
+ +
+ {{else}} +
+ +
+
+ + {{#unless section.isFirst}}{{/unless}} + {{#unless section.isLast}}{{/unless}} +
+
+ {{/if}} + +
+ {{/each}} +
+
+ + {{#if isGM}} +
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+ {{/if}} +
+ From ffd4fd730caa984f372950dcb888fe617ed25a11 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 12 Sep 2021 21:52:50 +0100 Subject: [PATCH 044/726] Embed socketlib in system --- assets/socketlib/CHANGELOG.md | 59 ++++ assets/socketlib/LICENSE | 21 ++ assets/socketlib/README.md | 174 ++++++++++++ assets/socketlib/module.json | 27 ++ assets/socketlib/src/errors.js | 41 +++ assets/socketlib/src/libwrapper_shim.js | 61 ++++ assets/socketlib/src/socketlib.js | 356 ++++++++++++++++++++++++ module/chat/combat/melee-initiator.js | 2 +- module/chat/combat/melee-target.js | 6 +- module/coc7.js | 5 - module/hooks/socket.js | 27 +- system.json | 6 +- webpack.config.js | 5 +- 13 files changed, 753 insertions(+), 37 deletions(-) create mode 100644 assets/socketlib/CHANGELOG.md create mode 100644 assets/socketlib/LICENSE create mode 100644 assets/socketlib/README.md create mode 100644 assets/socketlib/module.json create mode 100644 assets/socketlib/src/errors.js create mode 100644 assets/socketlib/src/libwrapper_shim.js create mode 100644 assets/socketlib/src/socketlib.js diff --git a/assets/socketlib/CHANGELOG.md b/assets/socketlib/CHANGELOG.md new file mode 100644 index 00000000..7bf89c9f --- /dev/null +++ b/assets/socketlib/CHANGELOG.md @@ -0,0 +1,59 @@ +## 1.0.9 +### Compatibility +- Verified compatibility with Foundry 0.8.9 + + +## 1.0.8 +### Compatibility +- Verified compatibility with Foundry 0.8.8 + + +## 1.0.7 +### Compatibility +- Verified compatibility with Foundry 0.8.7 + + +## 1.0.6 +### Compatibility +- Verified compatibility with Foundry 0.8.5 + + +## 1.0.5 +### Compatibility +- Add support for Foundry 0.8.2 + + +## 1.0.4 +### New features +- The `this` value of functions now contains the id of the user that triggered the function execution. +- Some network packets are now more efficient. + +### Bugfixes +- When an invalid user id is specified socketlib will now throw the correct error message. +- When a player disconnects the moment an execution has been scheduled for their client the execution function will now throw an exception, as it would if the player hadn't been connected in the first place. Previously the execution would just silently fail and the promise never resolve in such cases. + + +## 1.0.3 +### Bugfixes +- `executeFor` functions will no longer fail with an exception if a function scheduled to be called by the local user throws. + + +## 1.0.2 +### New API endpoints +- Added `executeForOthers` and `executeForOtherGMs` that execute for all users/all GMs except the local client. + +### Bugfixes +- `executeAsUser` and `executeForUsers` didn't execute locally if the id of the current user was passed in as recipient. +- `executeForEveryone` and `executeForAllGMs` now execute locally as well, as they should + + +## 1.0.1 +### New features +- Added support for game systems + +### Compatibility +- Add support for Foundry 0.8.1 + + +## 1.0.0 +### Initial release diff --git a/assets/socketlib/LICENSE b/assets/socketlib/LICENSE new file mode 100644 index 00000000..4dd8d0e4 --- /dev/null +++ b/assets/socketlib/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Manuel Vögele + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/assets/socketlib/README.md b/assets/socketlib/README.md new file mode 100644 index 00000000..15160d99 --- /dev/null +++ b/assets/socketlib/README.md @@ -0,0 +1,174 @@ +[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/staebchenfisch) + +# socketlib +A library for simplifying working with foundries sockets. This module does not have any user facing features. You only need to install it if one of the modules you use lists it as a dependency. + +This library makes it easy to execute functions in the clients of other connected users. Parameters can be passed to the remote functions as easy as they can be passed to regular functions and it's possible to retrieve the return value of the remote function via `await`. The features of socketlib are: +- **Execute a function as GM**: socketlib allows you to execute a function as a gm user. If a GM client is connected, that client will execute that function. The original client can wait for the GM to finish the execution of the function and retrieve the return value of the function via `await`. If multiple GMs are connected, socketlib will make sure only one of the GMs will execute the function. +- **Execute a function as another user**: socketlib allows you to execute a function in the client of another user. The original client can wait for the other user to finish execution of the function and retrieve the return value the function via `await`. +- **Execute a function for all users**: socketlib will execute a function in the clients of all other connected users. +- **Execute a function for all GMs**: socketlib will execute a function in the clients of all connected GMs. +- **Execute a function for a specified list of players**: socketlib will execute a function in the clients of several players that can be identified by their id. + +## API +Below is a small example code that demonstrates the usage of socketlib. All of socketlibs functions are accessible via `socketlib.`. Documentation for each of the available functions can be found blow the example code. + +### Example Code + +```javascript +let socket; + +Hooks.once("socketlib.ready", () => { + socket = socketlib.registerModule("my-module"); + socket.register("hello", showHelloMessage); + socket.register("add", add); +}); + +Hooks.once("ready", async () => { + // Let's send a greeting to all other connected users. + // Functions can either be called by their given name... + socket.executeForEveryone("hello", game.user.name); + // ...or by passing in the function that you'd like to call. + socket.executeForEveryone(showHelloMessage, game.user.name); + // The following function will be executed on a GM client. + // The return value will be sent back to us. + const result = await socket.executeAsGM("add", 5, 3); + console.log(`The GM client calculated: ${result}`); +}); + +function showHelloMessage(userName) { + console.log(`User ${userName} says hello!`); +} + +function add(a, b) { + console.log("The addition is performed on a GM client."); + return a + b; +} +``` + +The example code registers the hook `socketlib.ready` this hook is fired once socketlib has initialized and is ready to do it's job. The module registers itself with socketlib. This causes socketlib to start listening for socket messages coming in for the registered module. In addition the registration returns a socket that will be used for all further interactions with socketlib. + +To be able to call a function via socketlib, that function has to be registered in the socket on all clients and must be given a unique name. Since a function can only be called via socketlib if it has been registered on both the calling client and the executing client it's advisable to register all the relevant functions immediately after you've registered your module in socketlib. + +Once foundry is loaded up, the example code sends a hello message to all connected users. For illustrative purposes this is done twice, once by passing in the name given to the function during registration and once by passing in the function that should be called on the other clients. Both ways work. Afterwards the function `add` will be invoked on the client of *one* of the connected GMs. The add function will print a message into the log, which allows you to verify that the function is indeed being executed on the GMs client. The GM will perform the calculation and result, which will be sent back to the original client, which will write the result into it's own log. + +### Function documentation +#### socketlib.registerModule +```javascript +socketlib.registerModule(moduleName); +``` + +Call `registerModule` to make socketlib listen for sockets that come in for your module. This is the first function in socketlib that your module should call. + +- **moduleName** is the name of your module as specificed in your modules's manifest. + +**Return value**: A socket instance is returned, that is used for all further interactions with socketlib. + +#### socketlib.registerSystem +```javascript +registerSystem(systemId); +``` + +Call `registerSystem` to make socketlib listen for sockets that come in for your game system. This is the first function in socketlib that your game system should call. + +- **systemId** the id of your game system as specified in your game system's manifest. + +**Return value**: A socket instance is returned, that is used for all further interactions with socketlib. + +#### socket.register +```javascript +socket.register(name, func); +``` + +Registers a function that can subsequently be called using socketlib. It's important that the registration of a function is done on all connected clients before the function is being called via socketlib. Otherwise the call won't succeed. For this reason it's recommended to register all relevant functions during the `socketlib.ready` hook, immediatly after `socketlib.registerModule` has been called. + +- **name** is a name that is used to identify the function within socketlib. This name can be used to call the function later. This name must be unique among all names your module registers within socketlib. +- **func** is the function that's being registered within socketlib. + +**Return value**: This function has no return value. + +#### socket.executeAsGM +```javascript +async socket.executeAsGM(handler, parameters...); +``` + +Executes a function on the client of exactly one GM. If multiple GMs are connected, one of the GMs will be selected to execute the function. This function will fail if there is no GM connected. The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. + +- **handler** can either be the function that should be executed or the name given to that function during registration. +- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. + +**Return value**: The promise that this function returns will resolve once the GM has finished the execution of the invoked function and will yield the return value of that function. If the execution on the GM client fails for some reason, this function will fail with an appropriate Error as well. + +#### socket.executeAsUser +```javascript +async socket.executeAsUser(handler, userId, parameters...); +``` + +Executes a function on the client of the specified user. This function will fail if the specified user is not connected. The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. + +- **handler** can either be the function that should be executed or the name given to that function during registration. +- **userId** the id of the user that should execute this function. +- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. + +**Return value**: The promise that this function returns will resolve once the user has finished the execution of the invoked function and will yield the return value of that function. If the execution on other user's client fails for some reason, this function will fail with an appropriate Error as well. + +#### socket.executeForAllGMs +```javascript +async socket.executeForAllGMs(handler, parameters...); +``` + +Executes a function on the clients of all connected GMs. If the current user is a GM the function will be executed locally as well. The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. + +- **handler** can either be the function that should be executed or the name given to that function during registration. +- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. + +**Return value**: The promise returned by this function will resolve as soon as the request for execution has been sent to the connected GM clients and *will not* wait until those clients have finished processing that function. The promise will not yield any return value. + +#### socket.executeForOtherGMs +```javascript +async socket.executeForOtherGMs(handler, parameters...); +``` + +Executes a function on the clients of all connected GMs, except for the current user. If the current user is not a GM this function has the same behavior as [`socket.executeForAllGMs`](#socketexecuteasgm). The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. + +- **handler** can either be the function that should be executed or the name given to that function during registration. +- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. + +**Return value**: The promise returned by this function will resolve as soon as the request for execution has been sent to the connected GM clients and *will not* wait until those clients have finished processing that function. The promise will not yield any return value. + +#### socket.executeForEveryone +```javascript +async socket.executeForEveryone(handler, ...args); +``` + +Executes a function on all connected clients, including on the local client. The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. + +- **handler** can either be the function that should be executed or the name given to that function during registration. +- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. + +**Return value**: The promise returned by this function will resolve as soon as the request for execution has been sent to the connected clients and *will not* wait until those clients have finished processing that function. The promise will not yield any return value. + +#### socket.executeForOthers +```javascript +async socket.executeForOthers(handler, ...args); +``` + +Executes a function on all connected clients, but not locally. The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. + +- **handler** can either be the function that should be executed or the name given to that function during registration. +- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. + +**Return value**: The promise returned by this function will resolve as soon as the request for execution has been sent to the connected clients and *will not* wait until those clients have finished processing that function. The promise will not yield any return value. + +#### socket.executeForUsers +```javascript +async executeForUsers(handler, recipients, ...args); +``` + +Executes a function on the clients of a specified list of players. The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. + +- **handler** can either be the function that should be executed or the name given to that function during registration. +- **recipients** an array of user ids that should execute the function. +- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. + +**Return value**: The promise returned by this function will resolve as soon as the request for execution has been sent to the specified clients and *will not* wait until those clients have finished processing that function. The promise will not yield any return value. diff --git a/assets/socketlib/module.json b/assets/socketlib/module.json new file mode 100644 index 00000000..86964da4 --- /dev/null +++ b/assets/socketlib/module.json @@ -0,0 +1,27 @@ +{ + "name": "socketlib", + "title": "socketlib", + "description": "A library for easier handling of foundry sockets", + "version": "1.0.9", + "minimumCoreVersion" : "0.7.9", + "compatibleCoreVersion" : "0.8.9", + "library": true, + "authors": [ + { + "name": "Manuel Vögele", + "email": "develop@manuel-voegele.de", + "discord": "Stäbchenfisch#5107" + } + ], + "esmodules": [ + "src/libwrapper_shim.js", + "src/socketlib.js" + ], + "url": "https://github.com/manuelVo/foundryvtt-socketlib", + "download": "https://github.com/manuelVo/foundryvtt-socketlib/archive/v1.0.9.zip", + "manifest": "https://raw.githubusercontent.com/manuelVo/foundryvtt-socketlib/master/module.json", + "readme": "https://github.com/manuelVo/foundryvtt-socketlib/blob/master/README.md", + "changelog": "https://github.com/manuelVo/foundryvtt-socketlib/blob/master/CHANGELOG.md", + "bugs": "https://github.com/manuelVo/foundryvtt-socketlib/issues", + "allowBugReporter": false +} diff --git a/assets/socketlib/src/errors.js b/assets/socketlib/src/errors.js new file mode 100644 index 00000000..ec16df68 --- /dev/null +++ b/assets/socketlib/src/errors.js @@ -0,0 +1,41 @@ +export class SocketlibError extends Error { + constructor(...args) { + super(...args); + this.name = "SocketlibError"; + } +} + +export class SocketlibInternalError extends SocketlibError { + constructor(...args) { + super(...args); + this.name = "SocketlibInternalError"; + } +} + +export class SocketlibInvalidUserError extends SocketlibError { + constructor(...args) { + super(...args); + this.name = "SocketlibInvalidUserError"; + } +} + +export class SocketlibNoGMConnectedError extends SocketlibError { + constructor(...args) { + super(...args); + this.name = "SocketlibNoGMConnectedError"; + } +} + +export class SocketlibRemoteException extends SocketlibError { + constructor(...args) { + super(...args); + this.name = "SocketlibRemoteException"; + } +} + +export class SocketlibUnregisteredHandlerError extends SocketlibError { + constructor(...args) { + super(...args); + this.name = "SocketlibUnregisteredHandlerError"; + } +} diff --git a/assets/socketlib/src/libwrapper_shim.js b/assets/socketlib/src/libwrapper_shim.js new file mode 100644 index 00000000..dc761331 --- /dev/null +++ b/assets/socketlib/src/libwrapper_shim.js @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +// Copyright © 2021 fvtt-lib-wrapper Rui Pinheiro + +'use strict'; + +// A shim for the libWrapper library +export let libWrapper = undefined; + +Hooks.once('init', () => { + // Check if the real module is already loaded - if so, use it + if(globalThis.libWrapper && !(globalThis.libWrapper.is_fallback ?? true)) { + libWrapper = globalThis.libWrapper; + return; + } + + // Fallback implementation + libWrapper = class { + static get is_fallback() { return true }; + + static register(module, target, fn, type="MIXED", {chain=undefined}={}) { + const is_setter = target.endsWith('#set'); + target = !is_setter ? target : target.slice(0, -4); + const split = target.split('.'); + const fn_name = split.pop(); + const root_nm = split.splice(0,1)[0]; + const _eval = eval; // The browser doesn't expose all global variables (e.g. 'Game') inside globalThis, but it does to an eval. We copy it to a variable to have it run in global scope. + const obj = split.reduce((x,y)=>x[y], globalThis[root_nm] ?? _eval(root_nm)); + + let iObj = obj; + let descriptor = null; + while(iObj) { + descriptor = Object.getOwnPropertyDescriptor(iObj, fn_name); + if(descriptor) break; + iObj = Object.getPrototypeOf(iObj); + } + if(!descriptor || descriptor?.configurable === false) throw `libWrapper Shim: '${target}' does not exist, could not be found, or has a non-configurable descriptor.`; + + let original = null; + const wrapper = (chain ?? type != 'OVERRIDE') ? function() { return fn.call(this, original.bind(this), ...arguments); } : function() { return fn.apply(this, arguments); }; + + if(!is_setter) { + if(descriptor.value) { + original = descriptor.value; + descriptor.value = wrapper; + } + else { + original = descriptor.get; + descriptor.get = wrapper; + } + } + else { + if(!descriptor.set) throw `libWrapper Shim: '${target}' does not have a setter`; + original = descriptor.set; + descriptor.set = wrapper; + } + + descriptor.configurable = true; + Object.defineProperty(obj, fn_name, descriptor); + } + } +}); diff --git a/assets/socketlib/src/socketlib.js b/assets/socketlib/src/socketlib.js new file mode 100644 index 00000000..3938def7 --- /dev/null +++ b/assets/socketlib/src/socketlib.js @@ -0,0 +1,356 @@ +import {libWrapper} from "./libwrapper_shim.js"; +import * as errors from "./errors.js"; + +const RECIPIENT_TYPES = { + ONE_GM: 0, + ALL_GMS: 1, + EVERYONE: 2, +} + +const MESSAGE_TYPES = { + COMMAND: 0, + REQUEST: 1, + RESPONSE: 2, + RESULT: 3, + EXCEPTION: 4, + UNREGISTERED: 5, +} + +Hooks.once("init", () => { + // Adding a check so will fallback to module if installed + if (typeof window.socketlib === 'undefined') { + window.socketlib = new Socketlib(); + libWrapper.register("socketlib", "Users.prototype.constructor._handleUserActivity", handleUserActivity); + Hooks.callAll("socketlib.ready"); + } +}, "WRAPPER"); + +class Socketlib { + constructor() { + this.modules = new Map(); + this.system = undefined; + this.errors = errors; + } + + registerModule(moduleName) { + const existingSocket = this.modules.get(moduleName); + if (existingSocket) + return existingSocket; + const module = game.modules.get(moduleName); + if (!module?.active) { + console.error(`socketlib | Someone tried to register module '${moduleName}', but no module with that name is active. As a result the registration request has been ignored.`); + return undefined; + } + if (!module.data.socket) { + console.error(`socketlib | Failed to register socket for module '${moduleName}'. Please set '"socket":true' in your manifset and restart foundry (you need to reload your world - simply reloading your browser won't do).`); + return undefined; + } + const newSocket = new SocketlibSocket(moduleName, "module"); + this.modules.set(moduleName, newSocket); + return newSocket; + } + + registerSystem(systemId) { + if (game.system.id !== systemId) { + console.error(`socketlib | Someone tried to register system '${systemId}', but that system isn't active. As a result the registration request has been ignored.`); + return undefined; + } + const existingSocket = this.system; + if (existingSocket) + return existingSocket; + if (!game.system.data.socket) { + console.error(`socketlib | Failed to register socket for system '${systemId}'. Please set '"socket":true' in your manifest and restart foundry (you need to reload your world - simply reloading your browser won't do).`); + } + const newSocket = new SocketlibSocket(systemId, "system"); + this.system = newSocket; + return newSocket; + } +} + +class SocketlibSocket { + constructor(moduleName, moduleType) { + this.functions = new Map(); + this.socketName = `${moduleType}.${moduleName}`; + this.pendingRequests = new Map(); + game.socket.on(this.socketName, this._onSocketReceived.bind(this)); + } + + register(name, func) { + if (!(func instanceof Function)) { + console.error(`socketlib | Cannot register non-function as socket handler for '${name}' for '${this.socketName}'.`); + return; + } + if (this.functions.has(name)) { + console.warn(`socketlib | Function '${name}' is already registered for '${this.socketName}'. Ignoring registration request.`); + return; + } + this.functions.set(name, func); + } + + async executeAsGM(handler, ...args) { + const [name, func] = this._resolveFunction(handler); + if (game.user.isGM) { + return this._executeLocal(func, ...args); + } + else { + if (!game.users.find(isActiveGM)) { + throw new errors.SocketlibNoGMConnectedError(`Could not execute handler '${name}' (${func.name}) as GM, because no GM is connected.`); + } + return this._sendRequest(name, args, RECIPIENT_TYPES.ONE_GM); + } + } + + async executeAsUser(handler, userId, ...args) { + const [name, func] = this._resolveFunction(handler); + if (userId === game.userId) + return this._executeLocal(func, ...args); + const user = game.users.get(userId); + if (!user) + throw new errors.SocketlibInvalidUserError(`No user with id '${userId}' exists.`); + if (!user.active) + throw new errors.SocketlibInvalidUserError(`User '${user.name}' (${userId}) is not connected.`); + return this._sendRequest(name, args, [userId]); + } + + async executeForAllGMs(handler, ...args) { + const [name, func] = this._resolveFunction(handler); + this._sendCommand(name, args, RECIPIENT_TYPES.ALL_GMS); + if (game.user.isGM) { + try { + this._executeLocal(func, ...args); + } + catch (e) { + console.error(e); + } + } + } + + async executeForOtherGMs(handler, ...args) { + const [name, func] = this._resolveFunction(handler); + this._sendCommand(name, args, RECIPIENT_TYPES.ALL_GMS); + } + + async executeForEveryone(handler, ...args) { + const [name, func] = this._resolveFunction(handler); + this._sendCommand(name, args, RECIPIENT_TYPES.EVERYONE); + try { + this._executeLocal(func, ...args); + } catch (e) { + console.error(e); + } + } + + async executeForOthers(handler, ...args) { + const [name, func] = this._resolveFunction(handler); + this._sendCommand(name, args, RECIPIENT_TYPES.EVERYONE); + } + + async executeForUsers(handler, recipients, ...args) { + if (!(recipients instanceof Array)) + throw new TypeError("Recipients parameter must be an array of user ids."); + const [name, func] = this._resolveFunction(handler); + const currentUserIndex = recipients.indexOf(game.userId); + if (currentUserIndex >= 0) + recipients.splice(currentUserIndex, 1); + this._sendCommand(name, args, recipients); + if (currentUserIndex >= 0) { + try { + this._executeLocal(func, ...args); + } + catch (e) { + console.error(e); + } + } + } + + _sendRequest(handlerName, args, recipient) { + const message = {handlerName, args, recipient}; + message.id = randomID(); + message.type = MESSAGE_TYPES.REQUEST; + const promise = new Promise((resolve, reject) => this.pendingRequests.set(message.id, {handlerName, resolve, reject, recipient})); + game.socket.emit(this.socketName, message); + return promise; + } + + _sendCommand(handlerName, args, recipient) { + const message = {handlerName, args, recipient}; + message.type = MESSAGE_TYPES.COMMAND; + game.socket.emit(this.socketName, message); + } + + _sendResult(id, result) { + const message = {id, result}; + message.type = MESSAGE_TYPES.RESULT; + game.socket.emit(this.socketName, message); + } + + _sendError(id, type) { + const message = {id, type}; + message.userId = game.userId; + game.socket.emit(this.socketName, message); + } + + _executeLocal(func, ...args) { + const socketdata = {userId: game.userId}; + return func.call({socketdata}, ...args); + } + + _resolveFunction(func) { + if (func instanceof Function) { + const entry = Array.from(this.functions.entries()).find(([key, val]) => val === func); + if (!entry) + throw new errors.SocketlibUnregisteredHandlerError(`Function '${func.name}' has not been registered as a socket handler.`); + return [entry[0], func]; + } + else { + const fn = this.functions.get(func); + if (!fn) + throw new errors.SocketlibUnregisteredHandlerError(`No socket handler with the name '${func}' has been registered.`) + return [func, fn]; + } + } + + _onSocketReceived(message, senderId) { + if (message.type === MESSAGE_TYPES.COMMAND || message.type === MESSAGE_TYPES.REQUEST) + this._handleRequest(message, senderId); + else + this._handleResponse(message, senderId); + } + + async _handleRequest(message, senderId) { + const {handlerName, args, recipient, id, type} = message; + // Check if we're the recipient of the received message. If not, return early. + if (recipient instanceof Array) { + if (!recipient.includes(game.userId)) + return; + } + else { + switch (recipient) { + case RECIPIENT_TYPES.ONE_GM: + if (!isResponsibleGM()) + return; + break; + case RECIPIENT_TYPES.ALL_GMS: + if (!game.user.isGM) + return; + break; + case RECIPIENT_TYPES.EVERYONE: + break; + default: + console.error(`Unkown recipient '${recipient}' when trying to execute '${handlerName}' for '${this.socketName}'. This should never happen. If you see this message, please open an issue in the bug tracker of the socketlib repository.`); + return; + } + } + let name, func; + try { + [name, func] = this._resolveFunction(handlerName); + } + catch (e) { + if (e instanceof errors.SocketlibUnregisteredHandlerError && type === MESSAGE_TYPES.REQUEST) { + this._sendError(id, MESSAGE_TYPES.UNREGISTERED); + } + throw e; + } + const socketdata = {userId: senderId}; + const _this = {socketdata}; + if (type === MESSAGE_TYPES.COMMAND) { + func.call(_this, ...args); + } + else { + let result; + try { + result = await func.call(_this, ...args); + } + catch (e) { + console.error(`An exception occured while executing handler '${name}'.`); + this._sendError(id, MESSAGE_TYPES.EXCEPTION); + throw e; + } + this._sendResult(id, result); + } + } + + _handleResponse(message, senderId) { + const {id, result, type} = message; + const request = this.pendingRequests.get(id); + if (!request) + return; + if (!this._isResponseSenderValid(senderId, request.recipient)) { + console.warn("socketlib | Dropped a response that was received from the wrong user. This means that either someone is inserting messages into the socket or this is a socketlib issue. If the latter is the case please file a bug report in the socketlib repository.") + console.info(senderId, request.recipient); + return; + } + switch (type) { + case MESSAGE_TYPES.RESULT: + request.resolve(result); + break; + case MESSAGE_TYPES.EXCEPTION: + request.reject(new errors.SocketlibRemoteException(`An exception occured during remote execution of handler '${request.handlerName}'. Please see ${game.users.get(message.userId).name}'s error console for details.`)); + break; + case MESSAGE_TYPES.UNREGISTERED: + request.reject(new errors.SocketlibUnregisteredHandlerError(`Executing the handler '${request.handlerName}' has been refused by ${game.users.get(message.userId).name}'s client, because this handler hasn't been registered on that client.`)); + break; + default: + request.reject(new errors.SocketlibInternalError(`Unknown result type '${type}' for handler '${request.handlerName}'. This should never happen. If you see this message, please open an issue in the bug tracker of the socketlib repository.`)); + break; + } + this.pendingRequests.delete(id); + } + + _isResponseSenderValid(senderId, recipients) { + if (recipients === RECIPIENT_TYPES.ONE_GM && game.users.get(senderId).isGM) + return true; + if (recipients instanceof Array && recipients.includes(senderId)) + return true; + return false; + } +} + +function isResponsibleGM() { + if (!game.user.isGM) + return false; + const connectedGMs = game.users.filter(isActiveGM); + return !connectedGMs.some(other => other.data._id < game.user.data._id); +} + +function isActiveGM(user) { + return user.active && user.isGM; +} + +function handleUserActivity(wrapper, userId, activityData={}) { + const user = game.users.get(userId); + const wasActive = user.active; + const result = wrapper(userId, activityData); + + // If user disconnected + if (!user.active && wasActive) { + const modules = Array.from(socketlib.modules.values()); + if (socketlib.system) + modules.concat(socketlib.system); + const GMConnected = Boolean(game.users.find(isActiveGM)); + // Reject all promises that are still waiting for a response from this player + for (const socket of modules) { + const failedRequests = Array.from(socket.pendingRequests.entries()).filter(([id, request]) => { + const recipient = request.recipient; + const handlerName = request.handlerName; + if (recipient === RECIPIENT_TYPES.ONE_GM) { + if (!GMConnected) { + request.reject(new errors.SocketlibNoGMConnectedError(`Could not execute handler '${handlerName}' as GM, because all GMs disconnected while the execution was being dispatched.`)); + return true; + } + } + else if (recipient instanceof Array) { + if (recipient.includes(userId)) { + request.reject(new errors.SocketlibInvalidUserError(`User '${game.users.get(userId).name}' (${userId}) disconnected while handler '${handlerName}' was being dispatched.`)); + return true; + } + } + return false; + }); + for (const [id, request] of failedRequests) { + socket.pendingRequests.delete(id); + } + } + } + return result; +} diff --git a/module/chat/combat/melee-initiator.js b/module/chat/combat/melee-initiator.js index f4427b42..a1454791 100644 --- a/module/chat/combat/melee-initiator.js +++ b/module/chat/combat/melee-initiator.js @@ -118,7 +118,7 @@ export class CoC7MeleeInitiator extends ChatCardActor { fastForward: this.fastForward, actorKey: this.actorKey }) - this.targetCard = message.id + this.targetCard = message.id || message._id } if (this.autoSuccess && !this.check.isFumble) { diff --git a/module/chat/combat/melee-target.js b/module/chat/combat/melee-target.js index caf146d9..3d11c8bc 100644 --- a/module/chat/combat/melee-target.js +++ b/module/chat/combat/melee-target.js @@ -133,7 +133,7 @@ export class CoC7MeleeTarget extends ChatCardActor { this[flag] = !this[flag] } - async createChatCard ({ forceCurrentGameUser = false } = {}) { + async createChatCard () { const html = await renderTemplate(this.template, this) const speakerData = {} @@ -203,10 +203,6 @@ export class CoC7MeleeTarget extends ChatCardActor { user = this.actor.user } - if (forceCurrentGameUser) { - user = game.user - } - const chatData = { user: user.id, speaker, diff --git a/module/coc7.js b/module/coc7.js index 28e1f7f7..af831b18 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -219,11 +219,6 @@ Hooks.on('ready', async () => { configureTinyMCE() - if (!game.modules.get('socketlib')?.active) { - ui.notifications.error('socketlib is required', { permanent: true }) - CoC7Socket(false) - } - game.socket.on('system.CoC7', async data => { if (data.type === 'updateChar') CoC7Utilities.updateCharSheets() diff --git a/module/hooks/socket.js b/module/hooks/socket.js index c539316d..8c132d38 100644 --- a/module/hooks/socket.js +++ b/module/hooks/socket.js @@ -1,26 +1,9 @@ -/* global game, socketlib, ui */ +/* global game, socketlib */ import { CoC7MeleeTarget } from '../chat/combat/melee-target.js' -export function CoC7Socket (hasSocket = true) { - if (hasSocket) { - game.CoC7socket = socketlib.registerSystem('CoC7') - game.CoC7socket.register('gmcreatemessageas', gmcreatemessageas) - } else { - game.CoC7socket = { - executeAsGM: function (func, data) { - ui.notifications.error('socketlib is required', { permanent: true }) - switch (func) { - case 'gmcreatemessageas': - if (!game.user.isGM) { - data.forceCurrentGameUser = true - } - return gmcreatemessageas(data) - } - ui.notifications.error(game.i18n.format('socketlib fallback function {function} not registered', { function: func })) - return '' - } - } - } +export function CoC7Socket () { + game.CoC7socket = socketlib.registerSystem('CoC7') + game.CoC7socket.register('gmcreatemessageas', gmcreatemessageas) } async function gmcreatemessageas (data) { @@ -30,6 +13,6 @@ async function gmcreatemessageas (data) { data.fastForward ) meleeTarget.initiatorKey = data.actorKey - const message = await meleeTarget.createChatCard({ forceCurrentGameUser: data.forceCurrentGameUser || false }) + const message = await meleeTarget.createChatCard() return message } diff --git a/system.json b/system.json index 425ba825..892f3834 100644 --- a/system.json +++ b/system.json @@ -6,7 +6,11 @@ "author": "Miskatonic Investigative Society", "minimumCoreVersion": "0.8.6", "compatibleCoreVersion": "0.8.9", - "esmodules": ["bundle.js"], + "esmodules": [ + "assets/socketlib/src/libwrapper_shim.js", + "assets/socketlib/src/socketlib.js", + "bundle.js" + ], "templateVersion": 1, "styles": ["coc7g.css"], "packs": [ diff --git a/webpack.config.js b/webpack.config.js index ad202503..c14ca5a8 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,8 +1,7 @@ -import { dirname } from 'path' +import * as path from 'path' import { fileURLToPath } from 'url' import * as fs from 'fs' import * as os from 'os' -import * as path from 'path' import * as process from 'process' import CopyWebpackPlugin from 'copy-webpack-plugin' import CssMinimizerPlugin from 'css-minimizer-webpack-plugin' @@ -11,7 +10,7 @@ import MiniCssExtractPlugin from 'mini-css-extract-plugin' import TerserPlugin from 'terser-webpack-plugin' import WebpackBar from 'webpackbar' -const __dirname = dirname(fileURLToPath(import.meta.url)) +const __dirname = path.dirname(fileURLToPath(import.meta.url)) /** Set the run mode for @constant bundleScript */ const buildMode = From 95be69dea92dd40074eea49fbaa99001d4729140 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 12 Sep 2021 21:57:35 +0100 Subject: [PATCH 045/726] Add dynamic ui message --- lang/en.json | 1 + module/chat/combat/melee-target.js | 2 +- module/coc7.js | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lang/en.json b/lang/en.json index 86f8c907..b14e2a18 100644 --- a/lang/en.json +++ b/lang/en.json @@ -701,6 +701,7 @@ "CoC7.Maximize": "Maximize", "CoC7.Summarize": "Summarize", + "CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you", "CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", "SETTINGS.TitleRules": "Rules", diff --git a/module/chat/combat/melee-target.js b/module/chat/combat/melee-target.js index 3d11c8bc..fe7914b2 100644 --- a/module/chat/combat/melee-target.js +++ b/module/chat/combat/melee-target.js @@ -224,7 +224,7 @@ export class CoC7MeleeTarget extends ChatCardActor { async updateChatCard () { const message = game.messages.get(this.messageId) if (!game.user.isGM && message.user.id !== game.user.id) { - ui.notifications.info('You are not able to interact with this message please ask your Keeper to select the options for you') + ui.notifications.info(game.i18n.localize('CoC7.UnableToInteractWithChatCard')) return } const html = await renderTemplate(this.template, this) diff --git a/module/coc7.js b/module/coc7.js index af831b18..f6cd5eb6 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -1,4 +1,4 @@ -/* global $, Combat, CONFIG, fromUuid, game, Hooks, tinyMCE, ui */ +/* global $, Combat, CONFIG, fromUuid, game, Hooks, tinyMCE */ import { CoC7NPCSheet } from './actors/sheets/npc-sheet.js' import { CoC7CreatureSheet } from './actors/sheets/creature-sheet.js' import { CoC7CharacterSheetV2 } from './actors/sheets/character.js' From 51dcfffb71f338329f301b45729d774041821d54 Mon Sep 17 00:00:00 2001 From: castanho Date: Mon, 13 Sep 2021 08:19:45 -0300 Subject: [PATCH 046/726] Add keys to package.json --- package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index bd078a71..bfa354f9 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,7 @@ { "name": "fvtt-coc7", - "version": "0.6.6", + "version": "0.6.7", "description": "An unofficial implementation of Call of Cthulhu 7th Edition system for Foundry VTT.", - "main": "gulpfile.js", "scripts": { "build": "webpack --mode production", "format": "prettier-standard --format --changed", @@ -14,7 +13,7 @@ "url": "git+https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT.git" }, "keywords": [], - "author": "", + "author": "Miskatonic Investigative Society", "license": "GPL-3.0", "bugs": { "url": "https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT/issues" From 7a892c9d1a484fb09dc5bf942a3f1c3e182b00fd Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Mon, 13 Sep 2021 13:53:15 +0200 Subject: [PATCH 047/726] track --- module/items/sheets/chase.js | 88 ++++++++++++++++++++++++++++++++---- styles/sheets/chase.less | 19 ++++++++ template.json | 1 + templates/items/chase.html | 31 ++++++++----- 4 files changed, 117 insertions(+), 22 deletions(-) diff --git a/module/items/sheets/chase.js b/module/items/sheets/chase.js index 86324c59..904a286a 100644 --- a/module/items/sheets/chase.js +++ b/module/items/sheets/chase.js @@ -57,40 +57,76 @@ export class CoC7ChaseSheet extends ItemSheet { data.participants = [] this.participants.forEach(p => { data.participants.push(new _participant(p)) + p.index = data.participants.length - 1 }) + + // data.participants.sort( (a, b) => a.adjustedMov - b.adjustedMov) + data.preys = data.participants .filter(p => !p.isChaser && p.isValid) - .sort((a, b) => a.mov - b.mov) || [] + .sort((a, b) => a.adjustedMov - b.adjustedMov) || [] data.chasers = data.participants .filter(p => p.isChaser && p.isValid) - .sort((a, b) => a.mov - b.mov) || [] + .sort((a, b) => a.adjustedMov - b.adjustedMov) || [] data.byDex = duplicate(data.participants).sort((a, b) => a.dex - b.dex) data.preysMinMov = data.preys.length ? data.preys.reduce((prev, current) => - prev.mov < current.mov ? prev : current - ).mov + prev.adjustedMov < current.adjustedMov ? prev : current + ).adjustedMov : -1 data.preysMaxMov = data.preys.length ? data.preys.reduce((prev, current) => - prev.mov > current.mov ? prev : current - ).mov + prev.adjustedMov > current.adjustedMov ? prev : current + ).adjustedMov : -1 data.chasersMinMov = data.chasers.length ? data.chasers.reduce((prev, current) => - prev.mov < current.mov ? prev : current - ).mov + prev.adjustedMov < current.adjustedMov ? prev : current + ).adjustedMov : -1 data.chasersMaxMov = data.chasers.length ? data.chasers.reduce((prev, current) => - prev.mov > current.mov ? prev : current - ).mov + prev.adjustedMov > current.adjustedMov ? prev : current + ).adjustedMov : -1 + + data.chasers.forEach(p => { + if (p.adjustedMov < data.preysMinMov) p.tooSlow() + else p.includeInChase() + p.fastest = p.adjustedMov == data.chasersMaxMov + p.slowest = p.adjustedMov == data.chasersMinMov + }) + + data.preys.forEach(p => { + if (p.adjustedMov > data.chasersMaxMov) p.escaped() + else p.includeInChase() + p.fastest = p.adjustedMov == data.preysMaxMov + p.slowest = p.adjustedMov == data.preysMinMov + }) + + data.locations = [ + { + participant: null, + barrier:{ + skill: 'STR', + canBeBroken: true, + hp: 15 + } + }, + { + participant: [ this.participants[2]], + }, + { + participants: [ this.participants[0], this.participants[1]] + } + ] + return data } @@ -658,6 +694,38 @@ export class _participant { // }); // } + tooSlow () { + this.data.excluded = true + } + + includeInChase () { + this.data.excluded = false + this.data.escaped = false + } + + escaped () { + this.data.escaped = true + } + + set slowest (x) { + this.data.slowest = x + } + + set fastest (x) { + this.data.fastest = x + } + + get cssClass () { + const cssClasses = [] + if (this.isChaser) cssClasses.push('chaser') + else cssClasses.push('prey') + if (this.data.excluded) cssClasses.push('excluded', 'too_slow') + if (this.data.escaped) cssClasses.push('escaped') + if (this.data.fastest) cssClasses.push('fastest') + if (this.data.slowest) cssClasses.push('slowest') + return cssClasses.join(' ') + } + get speedCheck () { const check = {} if (this.data.speedCheck?.name) check.name = this.data.speedCheck.name diff --git a/styles/sheets/chase.less b/styles/sheets/chase.less index 20aa492f..218668b0 100644 --- a/styles/sheets/chase.less +++ b/styles/sheets/chase.less @@ -25,6 +25,25 @@ grid-template-rows: 2rem; grid-template-areas: 'p-side p-icon p-expand p-name p-init p-movement p-speed-check p-score p-roll p-adjust p-modified-mov p-control'; align-items: center; + margin-bottom: 2px; + + &.excluded { + background: rgba(255, 0, 0, 0.05); + } + + &.escaped { + background: rgba(0, 0, 255, 0.05); + } + + &.chaser.fastest { + border-top: green 1px solid; + border-bottom: green 1px solid; + } + + &.prey.slowest { + border-top: red 1px solid; + border-bottom: red 1px solid; + } &.drag-over { border: 1px solid red; diff --git a/template.json b/template.json index fb5e3ba1..8c146794 100644 --- a/template.json +++ b/template.json @@ -614,6 +614,7 @@ "startingRange": 1, "list": [] }, + "includeEscapees": false, "participants": [] } } diff --git a/templates/items/chase.html b/templates/items/chase.html index 7aea512f..dc0791d4 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -8,26 +8,38 @@
-
- - -
+
+
+ {{#each locations as |location i|}} +
+ {{/each}} +
+
+ + +
+
+ +
+
{{#each participants as |p i|}} -
+
{{#if p.isChaser}} @@ -114,12 +126,7 @@
-
- -
- azertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbnazertyuiopqsdfghjklmwxcvbn -
-
+
Preys Min : {{preysMinMov}}
Preys Max : {{preysMaxMov}}
From b164b8bb69fff47a8f293a4438bee76baade9ccd Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:17:21 +0100 Subject: [PATCH 048/726] Move socketlib to lib folder --- {assets => lib}/socketlib/CHANGELOG.md | 0 {assets => lib}/socketlib/LICENSE | 0 {assets => lib}/socketlib/README.md | 0 {assets => lib}/socketlib/module.json | 0 {assets => lib}/socketlib/src/errors.js | 0 {assets => lib}/socketlib/src/libwrapper_shim.js | 0 {assets => lib}/socketlib/src/socketlib.js | 0 system.json | 10 ++-------- webpack.config.js | 3 ++- 9 files changed, 4 insertions(+), 9 deletions(-) rename {assets => lib}/socketlib/CHANGELOG.md (100%) rename {assets => lib}/socketlib/LICENSE (100%) rename {assets => lib}/socketlib/README.md (100%) rename {assets => lib}/socketlib/module.json (100%) rename {assets => lib}/socketlib/src/errors.js (100%) rename {assets => lib}/socketlib/src/libwrapper_shim.js (100%) rename {assets => lib}/socketlib/src/socketlib.js (100%) diff --git a/assets/socketlib/CHANGELOG.md b/lib/socketlib/CHANGELOG.md similarity index 100% rename from assets/socketlib/CHANGELOG.md rename to lib/socketlib/CHANGELOG.md diff --git a/assets/socketlib/LICENSE b/lib/socketlib/LICENSE similarity index 100% rename from assets/socketlib/LICENSE rename to lib/socketlib/LICENSE diff --git a/assets/socketlib/README.md b/lib/socketlib/README.md similarity index 100% rename from assets/socketlib/README.md rename to lib/socketlib/README.md diff --git a/assets/socketlib/module.json b/lib/socketlib/module.json similarity index 100% rename from assets/socketlib/module.json rename to lib/socketlib/module.json diff --git a/assets/socketlib/src/errors.js b/lib/socketlib/src/errors.js similarity index 100% rename from assets/socketlib/src/errors.js rename to lib/socketlib/src/errors.js diff --git a/assets/socketlib/src/libwrapper_shim.js b/lib/socketlib/src/libwrapper_shim.js similarity index 100% rename from assets/socketlib/src/libwrapper_shim.js rename to lib/socketlib/src/libwrapper_shim.js diff --git a/assets/socketlib/src/socketlib.js b/lib/socketlib/src/socketlib.js similarity index 100% rename from assets/socketlib/src/socketlib.js rename to lib/socketlib/src/socketlib.js diff --git a/system.json b/system.json index 892f3834..6c781796 100644 --- a/system.json +++ b/system.json @@ -7,8 +7,8 @@ "minimumCoreVersion": "0.8.6", "compatibleCoreVersion": "0.8.9", "esmodules": [ - "assets/socketlib/src/libwrapper_shim.js", - "assets/socketlib/src/socketlib.js", + "lib/socketlib/src/libwrapper_shim.js", + "lib/socketlib/src/socketlib.js", "bundle.js" ], "templateVersion": 1, @@ -108,12 +108,6 @@ } ], "socket": true, - "dependencies": [ - { - "name": "socketlib", - "manifest": "https://raw.githubusercontent.com/manuelVo/foundryvtt-socketlib/master/module.json" - } - ], "gridDistance": 5, "gridUnits": "ft", "primaryTokenAttribute": "attribs.hp", diff --git a/webpack.config.js b/webpack.config.js index c14ca5a8..630ce484 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,7 +1,7 @@ -import * as path from 'path' import { fileURLToPath } from 'url' import * as fs from 'fs' import * as os from 'os' +import * as path from 'path' import * as process from 'process' import CopyWebpackPlugin from 'copy-webpack-plugin' import CssMinimizerPlugin from 'css-minimizer-webpack-plugin' @@ -113,6 +113,7 @@ const bundleScript = { patterns: [ { from: 'assets/', to: 'assets/' }, { from: 'lang/', to: 'lang/' }, + { from: 'lib/', to: 'lib/' }, { from: 'LICENSE' }, { from: 'packs/', to: 'packs/' }, { from: 'README.md' }, From bb5150c45c18a7500723347aa86492e99463f15e Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:42:26 +0100 Subject: [PATCH 049/726] Allow warning message to take up two lines to aid translations that are longer --- lang/en.json | 2 +- templates/actors/character-sheet.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lang/en.json b/lang/en.json index 45e20952..10581f4c 100644 --- a/lang/en.json +++ b/lang/en.json @@ -702,7 +702,7 @@ "CoC7.Summarize": "Summarize", "CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", - "CoC7.WarningCharacterSheetV1Depreciated": "This character sheet will be removed with FoundryVTT v9 please change the Sheet to CoC7.CoC7CharacterSheetV2", + "CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2", "SETTINGS.TitleRules": "Rules", "SETTINGS.TitleInitiative": "Initiative Settings", diff --git a/templates/actors/character-sheet.html b/templates/actors/character-sheet.html index fc476557..ab86a205 100644 --- a/templates/actors/character-sheet.html +++ b/templates/actors/character-sheet.html @@ -1,5 +1,5 @@
-
{{ localize 'CoC7.WarningCharacterSheetV1Depreciated' }}
+
{{ localize 'CoC7.WarningCharacterSheetV1Depreciated' }}
{{!-- Sheet Header --}}
From 73da37b59505bd495f3389eb0f7b57c1350a3a90 Mon Sep 17 00:00:00 2001 From: castanho Date: Mon, 13 Sep 2021 14:23:12 -0300 Subject: [PATCH 050/726] Improve contributing guidelines Remove dots at the end of each section, change link to TRANSLATIONS.md to use the organization reference. --- .github/CONTRIBUTING.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 444c2149..2c21b6c7 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -33,13 +33,13 @@ The more detail on reproducing, the better! Bugs are hard to fix if we can not r We are always looking for translators, there is a lot to translate, and we can not do it all. If you see any translations missing for you language, Feel free to look in the corresponding `*.json` file in the `lang` folder. Comparing against the `en.json` is a good idea, for a baseline. -For the list of missing translations, see: [TRANSLATIONS](https://github.com/HavlockV/CoC7-FoundryVTT/blob/develop/.github/TRANSLATIONS.md). +For the list of missing translations, see: [TRANSLATIONS](https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT/blob/develop/.github/TRANSLATIONS.md). -## Coding. +## Coding -### Requisites. +### Requisites -#### Git. +#### Git On Windows, grab an installer from here: https://git-scm.com/download/win and go with the default options (there will be a lot of option screens). @@ -55,7 +55,7 @@ If you are a new Git user, probably you will have to set it up with the followin `git config --global user.email "YOUR_EMAIL"` -#### Node.js (14+). +#### Node.js (14+) Grab an installer for any operating system from here: https://nodejs.org/en/download/ @@ -63,9 +63,9 @@ Follow the installation steps and then make sure everything went right with: `node -v` or `node --version` -## Setup. +## Setup -### Cloning the Repository. +### Cloning the Repository On the directory where you would like to pull your changes open the terminal or shell of your choice, run: @@ -75,7 +75,7 @@ This will create a local clone of the project repository. When prompted, enter your Github credentials. -### Initial Setup. +### Initial Setup Preferably, open your brand new local repository in the Integrated Development Environment (IDE) of your choice. We recommend [Visual Studio Code](#Visual-Studio-Code). @@ -109,7 +109,7 @@ After rename `fvtt.config.example.js` to `fvtt.config.js` consider run: This way Git does not assume the original file has been deleted from the repository. -### Contributing. +### Contributing The project structure is made as follows: @@ -119,7 +119,7 @@ While testing your changes within Foundry VTT, prefer run: `npm run watch` This way, Webpack and other dependencies will know whenever you make any relevant code changes and will run the build process only when necessary. -### Your First Code Contribution. +### Your First Code Contribution Unsure where to begin contributing? You can start by looking through these `beginner` and `help-wanted` issues! From 60169c7161f9ae9d9f4bb521c515db592ada98ea Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 13 Sep 2021 18:43:15 +0100 Subject: [PATCH 051/726] Remove files not needed for the system to function, add readme reference to socketlib --- .prettierignore | 1 + README.md | 2 + lib/socketlib/CHANGELOG.md | 59 ------------- lib/socketlib/README.md | 174 ------------------------------------- lib/socketlib/module.json | 27 ------ 5 files changed, 3 insertions(+), 260 deletions(-) delete mode 100644 lib/socketlib/CHANGELOG.md delete mode 100644 lib/socketlib/README.md delete mode 100644 lib/socketlib/module.json diff --git a/.prettierignore b/.prettierignore index e91f64f4..2e59003e 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,4 @@ *.css *.hbs *.html +lib/ diff --git a/README.md b/README.md index ad7eb6ca..c2f7eae8 100644 --- a/README.md +++ b/README.md @@ -60,4 +60,6 @@ Foundry VTT support is covered by [Limited License Agreement for Module Developm This project uses some assets from Game Icons, thanks to its [authors](https://game-icons.net/about.html#authors). +This project uses [socketlib](https://github.com/manuelVo/foundryvtt-socketlib) by Manuel Vögele which is licensed under [MIT](lib/socketlib/LICENSE). + This system uses trademarks and/or copyrights owned by Chaosium Inc/Moon Design Publications LLC, which are used under [Chaosium Inc's Fan Material Policy](https://www.chaosium.com/fan-material-policy/). We are expressly prohibited from charging you to use or access this content. This system is not published, endorsed, or specifically approved by Chaosium Inc. For more information about Chaosium Inc's products, please visit www.chaosium.com. diff --git a/lib/socketlib/CHANGELOG.md b/lib/socketlib/CHANGELOG.md deleted file mode 100644 index 7bf89c9f..00000000 --- a/lib/socketlib/CHANGELOG.md +++ /dev/null @@ -1,59 +0,0 @@ -## 1.0.9 -### Compatibility -- Verified compatibility with Foundry 0.8.9 - - -## 1.0.8 -### Compatibility -- Verified compatibility with Foundry 0.8.8 - - -## 1.0.7 -### Compatibility -- Verified compatibility with Foundry 0.8.7 - - -## 1.0.6 -### Compatibility -- Verified compatibility with Foundry 0.8.5 - - -## 1.0.5 -### Compatibility -- Add support for Foundry 0.8.2 - - -## 1.0.4 -### New features -- The `this` value of functions now contains the id of the user that triggered the function execution. -- Some network packets are now more efficient. - -### Bugfixes -- When an invalid user id is specified socketlib will now throw the correct error message. -- When a player disconnects the moment an execution has been scheduled for their client the execution function will now throw an exception, as it would if the player hadn't been connected in the first place. Previously the execution would just silently fail and the promise never resolve in such cases. - - -## 1.0.3 -### Bugfixes -- `executeFor` functions will no longer fail with an exception if a function scheduled to be called by the local user throws. - - -## 1.0.2 -### New API endpoints -- Added `executeForOthers` and `executeForOtherGMs` that execute for all users/all GMs except the local client. - -### Bugfixes -- `executeAsUser` and `executeForUsers` didn't execute locally if the id of the current user was passed in as recipient. -- `executeForEveryone` and `executeForAllGMs` now execute locally as well, as they should - - -## 1.0.1 -### New features -- Added support for game systems - -### Compatibility -- Add support for Foundry 0.8.1 - - -## 1.0.0 -### Initial release diff --git a/lib/socketlib/README.md b/lib/socketlib/README.md deleted file mode 100644 index 15160d99..00000000 --- a/lib/socketlib/README.md +++ /dev/null @@ -1,174 +0,0 @@ -[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/staebchenfisch) - -# socketlib -A library for simplifying working with foundries sockets. This module does not have any user facing features. You only need to install it if one of the modules you use lists it as a dependency. - -This library makes it easy to execute functions in the clients of other connected users. Parameters can be passed to the remote functions as easy as they can be passed to regular functions and it's possible to retrieve the return value of the remote function via `await`. The features of socketlib are: -- **Execute a function as GM**: socketlib allows you to execute a function as a gm user. If a GM client is connected, that client will execute that function. The original client can wait for the GM to finish the execution of the function and retrieve the return value of the function via `await`. If multiple GMs are connected, socketlib will make sure only one of the GMs will execute the function. -- **Execute a function as another user**: socketlib allows you to execute a function in the client of another user. The original client can wait for the other user to finish execution of the function and retrieve the return value the function via `await`. -- **Execute a function for all users**: socketlib will execute a function in the clients of all other connected users. -- **Execute a function for all GMs**: socketlib will execute a function in the clients of all connected GMs. -- **Execute a function for a specified list of players**: socketlib will execute a function in the clients of several players that can be identified by their id. - -## API -Below is a small example code that demonstrates the usage of socketlib. All of socketlibs functions are accessible via `socketlib.`. Documentation for each of the available functions can be found blow the example code. - -### Example Code - -```javascript -let socket; - -Hooks.once("socketlib.ready", () => { - socket = socketlib.registerModule("my-module"); - socket.register("hello", showHelloMessage); - socket.register("add", add); -}); - -Hooks.once("ready", async () => { - // Let's send a greeting to all other connected users. - // Functions can either be called by their given name... - socket.executeForEveryone("hello", game.user.name); - // ...or by passing in the function that you'd like to call. - socket.executeForEveryone(showHelloMessage, game.user.name); - // The following function will be executed on a GM client. - // The return value will be sent back to us. - const result = await socket.executeAsGM("add", 5, 3); - console.log(`The GM client calculated: ${result}`); -}); - -function showHelloMessage(userName) { - console.log(`User ${userName} says hello!`); -} - -function add(a, b) { - console.log("The addition is performed on a GM client."); - return a + b; -} -``` - -The example code registers the hook `socketlib.ready` this hook is fired once socketlib has initialized and is ready to do it's job. The module registers itself with socketlib. This causes socketlib to start listening for socket messages coming in for the registered module. In addition the registration returns a socket that will be used for all further interactions with socketlib. - -To be able to call a function via socketlib, that function has to be registered in the socket on all clients and must be given a unique name. Since a function can only be called via socketlib if it has been registered on both the calling client and the executing client it's advisable to register all the relevant functions immediately after you've registered your module in socketlib. - -Once foundry is loaded up, the example code sends a hello message to all connected users. For illustrative purposes this is done twice, once by passing in the name given to the function during registration and once by passing in the function that should be called on the other clients. Both ways work. Afterwards the function `add` will be invoked on the client of *one* of the connected GMs. The add function will print a message into the log, which allows you to verify that the function is indeed being executed on the GMs client. The GM will perform the calculation and result, which will be sent back to the original client, which will write the result into it's own log. - -### Function documentation -#### socketlib.registerModule -```javascript -socketlib.registerModule(moduleName); -``` - -Call `registerModule` to make socketlib listen for sockets that come in for your module. This is the first function in socketlib that your module should call. - -- **moduleName** is the name of your module as specificed in your modules's manifest. - -**Return value**: A socket instance is returned, that is used for all further interactions with socketlib. - -#### socketlib.registerSystem -```javascript -registerSystem(systemId); -``` - -Call `registerSystem` to make socketlib listen for sockets that come in for your game system. This is the first function in socketlib that your game system should call. - -- **systemId** the id of your game system as specified in your game system's manifest. - -**Return value**: A socket instance is returned, that is used for all further interactions with socketlib. - -#### socket.register -```javascript -socket.register(name, func); -``` - -Registers a function that can subsequently be called using socketlib. It's important that the registration of a function is done on all connected clients before the function is being called via socketlib. Otherwise the call won't succeed. For this reason it's recommended to register all relevant functions during the `socketlib.ready` hook, immediatly after `socketlib.registerModule` has been called. - -- **name** is a name that is used to identify the function within socketlib. This name can be used to call the function later. This name must be unique among all names your module registers within socketlib. -- **func** is the function that's being registered within socketlib. - -**Return value**: This function has no return value. - -#### socket.executeAsGM -```javascript -async socket.executeAsGM(handler, parameters...); -``` - -Executes a function on the client of exactly one GM. If multiple GMs are connected, one of the GMs will be selected to execute the function. This function will fail if there is no GM connected. The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. - -- **handler** can either be the function that should be executed or the name given to that function during registration. -- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. - -**Return value**: The promise that this function returns will resolve once the GM has finished the execution of the invoked function and will yield the return value of that function. If the execution on the GM client fails for some reason, this function will fail with an appropriate Error as well. - -#### socket.executeAsUser -```javascript -async socket.executeAsUser(handler, userId, parameters...); -``` - -Executes a function on the client of the specified user. This function will fail if the specified user is not connected. The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. - -- **handler** can either be the function that should be executed or the name given to that function during registration. -- **userId** the id of the user that should execute this function. -- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. - -**Return value**: The promise that this function returns will resolve once the user has finished the execution of the invoked function and will yield the return value of that function. If the execution on other user's client fails for some reason, this function will fail with an appropriate Error as well. - -#### socket.executeForAllGMs -```javascript -async socket.executeForAllGMs(handler, parameters...); -``` - -Executes a function on the clients of all connected GMs. If the current user is a GM the function will be executed locally as well. The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. - -- **handler** can either be the function that should be executed or the name given to that function during registration. -- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. - -**Return value**: The promise returned by this function will resolve as soon as the request for execution has been sent to the connected GM clients and *will not* wait until those clients have finished processing that function. The promise will not yield any return value. - -#### socket.executeForOtherGMs -```javascript -async socket.executeForOtherGMs(handler, parameters...); -``` - -Executes a function on the clients of all connected GMs, except for the current user. If the current user is not a GM this function has the same behavior as [`socket.executeForAllGMs`](#socketexecuteasgm). The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. - -- **handler** can either be the function that should be executed or the name given to that function during registration. -- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. - -**Return value**: The promise returned by this function will resolve as soon as the request for execution has been sent to the connected GM clients and *will not* wait until those clients have finished processing that function. The promise will not yield any return value. - -#### socket.executeForEveryone -```javascript -async socket.executeForEveryone(handler, ...args); -``` - -Executes a function on all connected clients, including on the local client. The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. - -- **handler** can either be the function that should be executed or the name given to that function during registration. -- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. - -**Return value**: The promise returned by this function will resolve as soon as the request for execution has been sent to the connected clients and *will not* wait until those clients have finished processing that function. The promise will not yield any return value. - -#### socket.executeForOthers -```javascript -async socket.executeForOthers(handler, ...args); -``` - -Executes a function on all connected clients, but not locally. The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. - -- **handler** can either be the function that should be executed or the name given to that function during registration. -- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. - -**Return value**: The promise returned by this function will resolve as soon as the request for execution has been sent to the connected clients and *will not* wait until those clients have finished processing that function. The promise will not yield any return value. - -#### socket.executeForUsers -```javascript -async executeForUsers(handler, recipients, ...args); -``` - -Executes a function on the clients of a specified list of players. The function must have been registered using [`socket.register`](#socketregister) before it can be invoked via this function. - -- **handler** can either be the function that should be executed or the name given to that function during registration. -- **recipients** an array of user ids that should execute the function. -- **parameters...** the parameters that should be passed to the called function. Pass the parameters in comma separated, as you would do for a regular function call. - -**Return value**: The promise returned by this function will resolve as soon as the request for execution has been sent to the specified clients and *will not* wait until those clients have finished processing that function. The promise will not yield any return value. diff --git a/lib/socketlib/module.json b/lib/socketlib/module.json deleted file mode 100644 index 86964da4..00000000 --- a/lib/socketlib/module.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "socketlib", - "title": "socketlib", - "description": "A library for easier handling of foundry sockets", - "version": "1.0.9", - "minimumCoreVersion" : "0.7.9", - "compatibleCoreVersion" : "0.8.9", - "library": true, - "authors": [ - { - "name": "Manuel Vögele", - "email": "develop@manuel-voegele.de", - "discord": "Stäbchenfisch#5107" - } - ], - "esmodules": [ - "src/libwrapper_shim.js", - "src/socketlib.js" - ], - "url": "https://github.com/manuelVo/foundryvtt-socketlib", - "download": "https://github.com/manuelVo/foundryvtt-socketlib/archive/v1.0.9.zip", - "manifest": "https://raw.githubusercontent.com/manuelVo/foundryvtt-socketlib/master/module.json", - "readme": "https://github.com/manuelVo/foundryvtt-socketlib/blob/master/README.md", - "changelog": "https://github.com/manuelVo/foundryvtt-socketlib/blob/master/CHANGELOG.md", - "bugs": "https://github.com/manuelVo/foundryvtt-socketlib/issues", - "allowBugReporter": false -} From 8709dc5ed52bcbc67721bf9834fd9bdbd5d485d4 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 13 Sep 2021 19:35:25 +0000 Subject: [PATCH 052/726] Updated translations list --- .github/TRANSLATIONS.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 992903b4..9a4bad63 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,7 +4,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **315** | **91** | **108** | **3** | **3** | **110** | **3** | **3** | **1** | **31** | +| **Remaining**: | **317** | **93** | **110** | **5** | **5** | **112** | **5** | **5** | **3** | **33** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -218,10 +218,12 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | | [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -1174,6 +1176,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.",` +##### CoC7.UnableToInteractWithChatCard + +`"CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you",` + ##### CoC7.UnderlyingInsanity `"CoC7.UnderlyingInsanity": "Underlying insanity",` @@ -1190,6 +1196,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.Vehicle": "Vehicle",` +##### CoC7.WarningCharacterSheetV1Depreciated + +`"CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2",` + ##### CoC7.WeaponUsesPerRoundHint `"CoC7.WeaponUsesPerRoundHint": "Attacks per round (1/3 : 1 attack every 3 rounds)",` From 1ea566967b9396c2ce30472b9378ce202e373fd0 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 13 Sep 2021 21:10:43 +0100 Subject: [PATCH 053/726] Experimental features setting toggle --- lang/en.json | 4 ++++ module/actors/sheets/vehicle.js | 3 ++- module/hooks/render-dialog.js | 6 ++++-- module/items/sheets/chase.js | 3 ++- module/scripts/register-settings.js | 9 ++++++++- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lang/en.json b/lang/en.json index b6dcbee0..051d04aa 100644 --- a/lang/en.json +++ b/lang/en.json @@ -705,6 +705,10 @@ "CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", "CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2", + "SETTINGS.ShowExperimentalFeatures": "Show Experimental Features", + "SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds", + "CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.", + "SETTINGS.TitleRules": "Rules", "SETTINGS.TitleInitiative": "Initiative Settings", "SETTINGS.TitleRoll": "Roll Settings", diff --git a/module/actors/sheets/vehicle.js b/module/actors/sheets/vehicle.js index 6bb644c0..a7709b6f 100644 --- a/module/actors/sheets/vehicle.js +++ b/module/actors/sheets/vehicle.js @@ -1,4 +1,4 @@ -/* global duplicate, expandObject, flattenObject, FormDataExtended, game, mergeObject */ +/* global duplicate, expandObject, flattenObject, FormDataExtended, game, mergeObject, ui */ import { CoC7ActorSheet } from './base.js' @@ -22,6 +22,7 @@ export class CoC7VehicleSheet extends CoC7ActorSheet { } async getData () { + ui.notifications.error(game.i18n.localize('CoC7.ExperimentalFeaturesWarning')) const data = await super.getData() data.properties = [] diff --git a/module/hooks/render-dialog.js b/module/hooks/render-dialog.js index d3340fcb..89d2783c 100644 --- a/module/hooks/render-dialog.js +++ b/module/hooks/render-dialog.js @@ -1,17 +1,19 @@ /* global game, Hooks */ - export function listen () { Hooks.on('renderDialog', (dialog, html) => { const form = html.find('form') if (form.is('#entity-create') && form.find('select').length !== 0) { const entityCreateSelectTag = form.find("[name='type']") const entitySortedList = [] + const showExperimental = !!game.settings.get('CoC7', 'experimentalFeatures') entityCreateSelectTag.children().each((o, entityOption) => { const key = entityOption.textContent?.capitalize() if (game.i18n.has(`CoC7.Entities.${key}`)) { entityOption.textContent = game.i18n.localize(`CoC7.Entities.${key}`) } - entitySortedList.push(entityOption) + if (!showExperimental && !['chase', 'vehicle'].includes(entityOption.value)) { + entitySortedList.push(entityOption) + } }) entityCreateSelectTag.empty() entityCreateSelectTag.append( diff --git a/module/items/sheets/chase.js b/module/items/sheets/chase.js index ecdf31f6..58331c89 100644 --- a/module/items/sheets/chase.js +++ b/module/items/sheets/chase.js @@ -1,4 +1,4 @@ -/* global DragDrop, duplicate, expandObject, flattenObject, FormDataExtended, game, getType, ItemSheet, mergeObject */ +/* global DragDrop, duplicate, expandObject, flattenObject, FormDataExtended, game, getType, ItemSheet, mergeObject, ui */ import { CoC7Chat } from '../../chat.js' import { chatHelper } from '../../chat/helper.js' @@ -47,6 +47,7 @@ export class CoC7ChaseSheet extends ItemSheet { /** @override */ getData (options = {}) { + ui.notifications.error(game.i18n.localize('CoC7.ExperimentalFeaturesWarning')) const data = super.getData(options) /** MODIF: 0.8.x **/ diff --git a/module/scripts/register-settings.js b/module/scripts/register-settings.js index 392e11c8..14ee0540 100644 --- a/module/scripts/register-settings.js +++ b/module/scripts/register-settings.js @@ -383,7 +383,14 @@ export function registerSettings () { type: Boolean, default: false }) - + game.settings.register('CoC7', 'experimentalFeatures', { + name: 'SETTINGS.ShowExperimentalFeatures', + hint: 'SETTINGS.ShowExperimentalFeaturesHint', + scope: 'world', + config: true, + type: Boolean, + default: false + }) /** * Other settings */ From 941b78215f6a557c5ad8f4a5b365c1814aa38fd1 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 14 Sep 2021 02:38:25 +0100 Subject: [PATCH 054/726] New actor type container, which can be placed in scenes and used to store items not help on person Create new spells and books on actors Trade items between Actors Drag and drop trade between Actors --- lang/en.json | 14 +- module/actors/actor.js | 83 ++++++- module/actors/sheets/base.js | 97 ++++++-- module/actors/sheets/container.js | 222 ++++++++++++++++++ module/coc7.js | 3 + module/config.js | 2 + module/hooks/drop-actor-sheet-data.js | 32 +++ module/hooks/socket.js | 25 +- module/scripts/load-templates.js | 1 + module/scripts/register-sheets.js | 5 + styles/sheets/actor.less | 12 + styles/sheets/book.less | 2 +- styles/sheets/character.less | 1 + styles/sheets/sheet.less | 6 +- styles/sheets/sheets.less | 2 +- styles/system/main.less | 2 +- template.json | 11 +- .../actors/parts/actor-inventory-items.html | 153 ++++++++++++ templates/actors/parts/actor-inventory.html | 113 +-------- templates/actors/storage-sheet.html | 43 ++++ 20 files changed, 676 insertions(+), 153 deletions(-) create mode 100644 module/actors/sheets/container.js create mode 100644 module/hooks/drop-actor-sheet-data.js create mode 100644 templates/actors/parts/actor-inventory-items.html create mode 100644 templates/actors/storage-sheet.html diff --git a/lang/en.json b/lang/en.json index b6dcbee0..20fa66af 100644 --- a/lang/en.json +++ b/lang/en.json @@ -2,6 +2,7 @@ "CoC7.title": "Call of Cthulhu 7h Edition (Unofficial)", "CoC7.Entities.Character": "Character", + "CoC7.Entities.Container": "Container", "CoC7.Entities.Creature": "Creature", "CoC7.Entities.Npc": "NPC", "CoC7.Entities.Vehicle": "Vehicle", @@ -89,6 +90,7 @@ "CoC7.Spells": "Spells", "CoC7.Spell": "Spell", "CoC7.Spells&Notes": "Spells & Notes", + "CoC7.Weapons": "Weapons", "CoC7.Effects": "Effects", "CoC7.Cost": "Cost", "CoC7.Source": "Source", @@ -400,7 +402,14 @@ "CoC7.AddItem": "Add item", "CoC7.EditItem": "Edit item", "CoC7.DeleteItem": "Delete Item", - "CoC7.AddWeapon": "Add Weapon", + "CoC7.TradeItem": "Trade / Store Item", + + "CoC7.NewBookName": "new book", + "CoC7.AddBook": "Add book", + "CoC7.NewSpellName": "new spell", + "CoC7.AddSpell": "Add spell", + + "CoC7.AddWeapon": "Add weapon", "CoC7.NewWeaponName": "new weapon", "CoC7.EditWeapon": "Edit Weapon", "CoC7.DeleteWeapon": "Delete Weapon", @@ -705,6 +714,9 @@ "CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", "CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2", + "CoC7.MessageTitleSelectUserToGiveTo": "Give item to another character", + "CoC7.MessageSelectUserToGiveTo": "Which character would you like to give this item to?", + "SETTINGS.TitleRules": "Rules", "SETTINGS.TitleInitiative": "Initiative Settings", "SETTINGS.TitleRoll": "Roll Settings", diff --git a/module/actors/actor.js b/module/actors/actor.js index 7c5c669a..6e3fe289 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -73,7 +73,12 @@ export class CoCActor extends Actor { { overwrite: false } ) } else if (data.type === 'vehicle') { - data.img = 'systems/CoC7/assets/icons/jeep.svg' // Change the icon for vehicle + data.img = 'systems/CoC7/assets/icons/jeep.svg' + } else if (data.type === 'container') { + data.img = 'icons/svg/chest.svg' + mergeObject(data.token, { + actorLink: true + }) } return super.create(data, options) } @@ -232,15 +237,15 @@ export class CoCActor extends Actor { } let boutDurationText = this.isInABoutOfMadness ? boutRealTime - ? `${duration} ${game.i18n.localize('CoC7.rounds')}` - : `${duration} ${game.i18n.localize('CoC7.hours')}` + ? `${duration} ${game.i18n.localize('CoC7.rounds')}` + : `${duration} ${game.i18n.localize('CoC7.hours')}` : null const insanityDurationText = insaneDuration ? this.isInsane - ? indefiniteInstanity - ? null - : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` - : null + ? indefiniteInstanity + ? null + : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` + : null : null if (this.isInsane && !insanityDurationText && !indefiniteInstanity) { indefiniteInstanity = true @@ -267,8 +272,8 @@ export class CoCActor extends Actor { durationText: insanityDurationText || '', hint: this.isInsane ? indefiniteInstanity - ? game.i18n.localize('CoC7.IndefiniteInsanity') - : `${game.i18n.localize( + ? game.i18n.localize('CoC7.IndefiniteInsanity') + : `${game.i18n.localize( 'CoC7.TemporaryInsanity' )} ${insanityDurationText || ''}` : game.i18n.localize('CoC7.NotInsane') @@ -605,6 +610,58 @@ export class CoCActor extends Actor { return created } + async createEmptyBook (event = null) { + const showSheet = event ? !event.shiftKey : true + if (!this.getItemIdByName(game.i18n.localize(COC7.newBookName))) { + return this.createBook(game.i18n.localize(COC7.newBookName), showSheet) + } + let index = 0 + let itemName = game.i18n.localize(COC7.newBookName) + ' ' + index + while (this.getItemIdByName(itemName)) { + index++ + itemName = game.i18n.localize(COC7.newBookName) + ' ' + index + } + return this.createBook(itemName, showSheet) + } + + async createBook (itemName, showSheet = false) { + const data = { + name: itemName, + type: 'book', + data: {} + } + const created = await this.createEmbeddedDocuments('Item', [data], { + renderSheet: showSheet + }) + return created + } + + async createEmptySpell (event = null) { + const showSheet = event ? !event.shiftKey : true + if (!this.getItemIdByName(game.i18n.localize(COC7.newSpellName))) { + return this.createSpell(game.i18n.localize(COC7.newSpellName), showSheet) + } + let index = 0 + let itemName = game.i18n.localize(COC7.newSpellName) + ' ' + index + while (this.getItemIdByName(itemName)) { + index++ + itemName = game.i18n.localize(COC7.newSpellName) + ' ' + index + } + return this.createSpell(itemName, showSheet) + } + + async createSpell (itemName, showSheet = false) { + const data = { + name: itemName, + type: 'spell', + data: {} + } + const created = await this.createEmbeddedDocuments('Item', [data], { + renderSheet: showSheet + }) + return created + } + async createEmptySkill (event = null) { const showSheet = event ? !event.shiftKey : true if (!this.getItemIdByName(game.i18n.localize(COC7.newSkillName))) { @@ -1578,9 +1635,11 @@ export class CoCActor extends Actor { } /** MODIF 0.8.x **/ // await this.createOwnedItem( item, {renderSheet:false}); - output.push(await this.createEmbeddedDocuments('Item', [item], { - renderSheet: false - })) + output.push( + await this.createEmbeddedDocuments('Item', [item], { + renderSheet: false + }) + ) /*****************/ } return output diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 181e8247..3e949beb 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -347,9 +347,9 @@ export class CoC7ActorSheet extends ActorSheet { .replace(/[\u0300-\u036f]/g, '') .toLowerCase() : a.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() lcb = b.data.properties.special && typeof b.data.specialization !== 'undefined' @@ -362,9 +362,9 @@ export class CoC7ActorSheet extends ActorSheet { .replace(/[\u0300-\u036f]/g, '') .toLowerCase() : b.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() } else { lca = a.name .normalize('NFD') @@ -375,9 +375,7 @@ export class CoC7ActorSheet extends ActorSheet { .replace(/[\u0300-\u036f]/g, '') .toLowerCase() } - if (lca < lcb) return -1 - if (lca > lcb) return 1 - return 0 + return lca.localeCompare(lcb) }) } @@ -398,9 +396,9 @@ export class CoC7ActorSheet extends ActorSheet { .replace(/[\u0300-\u036f]/g, '') .toLowerCase() : a.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() lcb = b.data.properties.special ? b.data.specialization .normalize('NFD') @@ -411,9 +409,9 @@ export class CoC7ActorSheet extends ActorSheet { .replace(/[\u0300-\u036f]/g, '') .toLowerCase() : b.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() } else { lca = a.name .normalize('NFD') @@ -537,7 +535,7 @@ export class CoC7ActorSheet extends ActorSheet { } // For compat with previous characters test if auto is definied, if not we define it - if (!['vehicle'].includes(this.actor.data.type)) { + if (!['vehicle', 'container'].includes(this.actor.data.type)) { const auto = this.actor.checkUndefinedAuto() data.data = mergeObject(data.data, auto) } else { @@ -802,18 +800,26 @@ export class CoC7ActorSheet extends ActorSheet { html.find('.add-item').click(ev => { switch (ev.currentTarget.dataset.type) { - case 'skill': - this.actor.createEmptySkill(ev) + case 'book': + this.actor.createEmptyBook(ev) break case 'item': this.actor.createEmptyItem(ev) break + case 'skill': + this.actor.createEmptySkill(ev) + break + case 'spell': + this.actor.createEmptySpell(ev) + break case 'weapon': this.actor.createEmptyWeapon(ev) break } }) + html.find('.item-trade').click(this._onTradeItem.bind(this)) + html.find('.add-new-section').click(() => { this.actor.createBioSection() }) @@ -919,6 +925,55 @@ export class CoC7ActorSheet extends ActorSheet { }) } + async _onTradeItem (event) { + const li = $(event.currentTarget).parents('.item') + const item = this.actor.items.get(li.data('itemId')) + let content = '

' + game.i18n.localize('CoC7.MessageSelectUserToGiveTo') + const message = { + actorFrom: this.actor.id, + scene: null, + actorTo: this.actor.id, + item: item.id + } + if (this.token?.actor) { + message.actorFrom = this.token.id + message.scene = this.token.parent.id + } + const actors = game.actors.filter(e => { + if (!['character', 'npc', 'creature', 'container'].includes(e.type)) { + return false + } + if (this.actor.id === e.id) { + return false + } + let visible = false + for (const [k, v] of Object.entries(e.data.permission)) { + if (k === 'default' || k === game.user.id) { + visible = visible || v !== CONST.ENTITY_PERMISSIONS.NONE + } + } + return visible + }) + content = content + '

' + await Dialog.prompt({ + title: game.i18n.localize('CoC7.MessageTitleSelectUserToGiveTo'), + content: content, + callback: html => { + const formData = new FormData(html[0].querySelector('#selectform')) + formData.forEach(function (value, name) { + if (name === 'user') { + message.actorTo = value + } + }) + } + }) + await game.CoC7socket.executeAsGM('gmtradeitemto', message) + } _onDragCharacteristic (event) { const box = event.currentTarget.parentElement const data = { @@ -1156,9 +1211,9 @@ export class CoC7ActorSheet extends ActorSheet { _onInventoryHeader (event) { event.preventDefault() - const li = $(event.currentTarget).parents('.inventory-section') - const details = li.find('ol') - details.toggle() + $(event.currentTarget) + .siblings('li') + .toggle() } async _onItemPopup (event) { diff --git a/module/actors/sheets/container.js b/module/actors/sheets/container.js new file mode 100644 index 00000000..e94f7846 --- /dev/null +++ b/module/actors/sheets/container.js @@ -0,0 +1,222 @@ +/* global ActorSheet, CONST, Dialog, game, mergeObject */ +import { CoC7Parser } from '../../apps/parser.js' +export class CoC7ContainerSheet extends ActorSheet { + /** + * Extend and override the default options used by the 5e Actor Sheet + * @returns {Object} + */ + static get defaultOptions () { + return mergeObject(super.defaultOptions, { + classes: ['coc7', 'sheet', 'actor', 'storage'], + template: 'systems/CoC7/templates/actors/storage-sheet.html', + width: 672, + height: 765, + dragDrop: [{ dragSelector: '.item', dropSelector: null }], + tabs: [ + { + navSelector: '.sheet-nav', + contentSelector: '.sheet-body', + initial: 'items' + } + ] + }) + } + + async _onDropFolder (event, data) { + if (!this.actor.isOwner) return [] + if (data.documentName !== 'Item') return [] + const folder = game.folders.get(data.id) + if (!folder) return [] + const items = folder.contents.filter(item => ['book', 'item', 'spell', 'weapon'].includes(item.type)).map(item => item.toJSON()) + if (items.length > 0) { + await this.actor.createEmbeddedDocuments('Item', items) + } + } + + onCloseSheet () { + } + + async getData () { + const data = await super.getData() + const sheetData = data.data + sheetData.isKeeper = game.user.isGM + sheetData.editable = this.isEditable + + sheetData.itemsByType = {} + if (data.items) { + for (const item of data.items) { + if (!Object.prototype.hasOwnProperty.call(sheetData.itemsByType, item.type)) { + sheetData.itemsByType[item.type] = [] + } + sheetData.itemsByType[item.type].push(item) + } + for (const itemType in sheetData.itemsByType) { + sheetData.itemsByType[itemType].sort((a, b) => { + return a.name.localeCompare(b.name) + }) + } + } + + sheetData.allowUnlock = + game.settings.get('CoC7', 'playerUnlockSheetMode') === 'always' || + game.user.isGM + + sheetData.showWeaponsInsteadOfStatus = true + + return sheetData + } + + activateListeners (html) { + super.activateListeners(html) + + html.find('.item-edit').click(ev => { + const li = $(ev.currentTarget).parents('.item') + const item = this.actor.items.get(li.data('itemId')) + item.sheet.render(true) + }) + + html.find('.inventory-header').click(this._onInventoryHeader.bind(this)) + + html.find('.item-trade').click(this._onTradeItem.bind(this)) + html.find('.show-detail').click(this._onItemSummary.bind(this)) + + html.find('.item-delete').click(async ev => { + const li = $(ev.currentTarget).parents('.item') + const itemToDelete = this.actor.items.get(li.data('itemId'), { + strict: true + }) + await itemToDelete.delete() + li.slideUp(200, () => this.render(false)) + }) + + html.find('.add-item').click(ev => { + switch (ev.currentTarget.dataset.type) { + case 'book': + this.actor.createEmptyBook(ev) + break + case 'item': + this.actor.createEmptyItem(ev) + break + case 'skill': + this.actor.createEmptySkill(ev) + break + case 'spell': + this.actor.createEmptySpell(ev) + break + case 'weapon': + this.actor.createEmptyWeapon(ev) + break + } + }) + + html.find('.lock').click(this._onLockClicked.bind(this)) + } + + async _onLockClicked (event) { + event.preventDefault() + const isLocked = this.actor.locked + this.actor.locked = !isLocked + } + + async _onTradeItem (event) { + const li = $(event.currentTarget).parents('.item') + const item = this.actor.items.get(li.data('itemId')) + let content = '

' + game.i18n.localize('CoC7.MessageSelectUserToGiveTo') + const message = { + actorFrom: this.actor.id, + scene: null, + actorTo: this.actor.id, + item: item.id + } + if (this.token?.actor) { + message.actorFrom = this.token.id + message.scene = this.token.parent.id + } + const actors = game.actors.filter(e => { + if (!['character', 'npc', 'creature', 'container'].includes(e.type)) { + return false + } + if (this.actor.id === e.id) { + return false + } + let visible = false + for (const [k, v] of Object.entries(e.data.permission)) { + if (k === 'default' || k === game.user.id) { + visible = visible || v !== CONST.ENTITY_PERMISSIONS.NONE + } + } + return visible + }) + content = content + '

' + await Dialog.prompt({ + title: game.i18n.localize('CoC7.MessageTitleSelectUserToGiveTo'), + content: content, + callback: html => { + const formData = new FormData(html[0].querySelector('#selectform')) + formData.forEach(function (value, name) { + if (name === 'user') { + message.actorTo = value + } + }) + } + }) + await game.CoC7socket.executeAsGM('gmtradeitemto', message) + } + + _onItemSummary (event) { + event.preventDefault() + const li = $(event.currentTarget).parents('.item') + const item = this.actor.items.get(li.data('item-id')) + const chatData = item.getChatData({ secrets: this.actor.isOwner }) + + // Toggle summary + if (li.hasClass('expanded')) { + const summary = li.children('.item-summary') + summary.slideUp(200, () => summary.remove()) + } else { + const div = $('
') + + const labels = $('
') + chatData.labels.forEach(p => + labels.append( + `
${p.name} :${p.value}
` + ) + ) + div.append(labels) + + div.append( + $(`
${chatData.description.value}
`) + ) + + if (item.data.data.properties?.spcl) { + const specialDiv = $( + `
${chatData.description.special}
` + ) + div.append(specialDiv) + } + + const props = $('
') + chatData.properties.forEach(p => + props.append( + `
${game.i18n.localize(p)}
` + ) + ) + div.append(props) + + li.append(div.hide()) + CoC7Parser.bindEventsHandler(div) + div.slideDown(200) + } + li.toggleClass('expanded') + // $(event.currentTarget).toggleClass('expanded'); + } + + _onInventoryHeader (event) { + event.preventDefault() + $(event.currentTarget).siblings('li').slideToggle(200) + } +} diff --git a/module/coc7.js b/module/coc7.js index f6cd5eb6..799a9659 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -20,6 +20,7 @@ import { CoC7Hooks } from './hooks/index.js' import * as DiceBot from './dicebot.js' import '../styles/system/index.less' import { CoC7Socket } from './hooks/socket.js' +import { DropActorSheetData } from './hooks/drop-actor-sheet-data.js' Hooks.on('renderSettingsConfig', (app, html, options) => { const systemTab = $(app.form).find('.tab[data-tab=system]') @@ -401,6 +402,8 @@ Hooks.on('renderSceneControls', CoC7Menu.renderMenu) Hooks.on('dropCanvasData', CoC7Canvas.onDropSomething) +Hooks.on('dropActorSheetData', DropActorSheetData) + function activateGlobalListener () { const body = $('body') body.on('click', 'a.coc7-inline-check', CoC7Check._onClickInlineRoll) diff --git a/module/config.js b/module/config.js index d6d4beed..85139ff4 100644 --- a/module/config.js +++ b/module/config.js @@ -138,7 +138,9 @@ COC7.status = { dead: 'dead' } +COC7.newBookName = 'CoC7.NewBookName' COC7.newSkillName = 'CoC7.NewSkillName' +COC7.newSpellName = 'CoC7.NewSpellName' COC7.newItemName = 'CoC7.NewItemName' COC7.newWeaponName = 'CoC7.NewWeaponName' diff --git a/module/hooks/drop-actor-sheet-data.js b/module/hooks/drop-actor-sheet-data.js new file mode 100644 index 00000000..0508fd50 --- /dev/null +++ b/module/hooks/drop-actor-sheet-data.js @@ -0,0 +1,32 @@ +/* global game */ +export function DropActorSheetData (actor, sheet, data) { + if (data.type === 'Item' && data.actorId) { + if (actor.data._id === data.actorId) { + return + } + let actorFrom = null + if (data.sceneId && data.tokenId) { + actorFrom = game.scenes.get(data.sceneId).tokens.get(data.tokenId).actor + } else { + actorFrom = game.actors.get(data.actorId) + } + switch (actor.data.type) { + case 'character': + case 'npc': + case 'creature': + if (!['chase'].includes(data.data.type)) { + return + } + break + case 'vehicle': + return + case 'container': + if (!['book', 'item', 'spell', 'weapon'].includes(data.data.type)) { + return + } + } + if (actorFrom) { + actorFrom.deleteEmbeddedDocuments('Item', [data.data._id]) + } + } +} diff --git a/module/hooks/socket.js b/module/hooks/socket.js index 8c132d38..b8a6e033 100644 --- a/module/hooks/socket.js +++ b/module/hooks/socket.js @@ -1,9 +1,10 @@ -/* global game, socketlib */ +/* global game, socketlib, ui */ import { CoC7MeleeTarget } from '../chat/combat/melee-target.js' export function CoC7Socket () { game.CoC7socket = socketlib.registerSystem('CoC7') game.CoC7socket.register('gmcreatemessageas', gmcreatemessageas) + game.CoC7socket.register('gmtradeitemto', gmtradeitemto) } async function gmcreatemessageas (data) { @@ -16,3 +17,25 @@ async function gmcreatemessageas (data) { const message = await meleeTarget.createChatCard() return message } + +async function gmtradeitemto (data) { + try { + let actor + if (data.scene) { + actor = game.scenes.get(data.scene).tokens.get(data.actorFrom).actor + } else { + actor = game.actors.get(data.actorFrom) + } + const item = actor.items.get(data.item) + const created = await game.actors + .get(data.actorTo) + .createEmbeddedDocuments('Item', [item.toJSON()]) + if (created) { + actor.deleteEmbeddedDocuments('Item', [item.id]) + } + } catch (e) { + ui.notifications.error(e) + return false + } + return true +} diff --git a/module/scripts/load-templates.js b/module/scripts/load-templates.js index c4983929..836b6752 100644 --- a/module/scripts/load-templates.js +++ b/module/scripts/load-templates.js @@ -15,6 +15,7 @@ export const preloadHandlebarsTemplates = async function () { 'systems/CoC7/templates/actors/parts/character-development.html', 'systems/CoC7/templates/actors/parts/actor-inventory.html', + 'systems/CoC7/templates/actors/parts/actor-inventory-items.html', 'systems/CoC7/templates/actors/parts/actor-background.html', 'systems/CoC7/templates/actors/parts/actor-skills-v2.html', 'systems/CoC7/templates/actors/parts/actor-weapons-v2.html', diff --git a/module/scripts/register-sheets.js b/module/scripts/register-sheets.js index 996f851c..8432a468 100644 --- a/module/scripts/register-sheets.js +++ b/module/scripts/register-sheets.js @@ -4,6 +4,7 @@ import { CoC7ArchetypeSheet } from '../items/sheets/archetype.js' import { CoC7BookSheet } from '../items/book/sheet.js' import { CoC7CharacterSheet } from '../actors/sheets/character-v1.js' import { CoC7CharacterSheetV2 } from '../actors/sheets/character.js' +import { CoC7ContainerSheet } from '../actors/sheets/container.js' import { CoC7ChaseSheet } from '../items/sheets/chase.js' import { CoC7CreatureSheet } from '../actors/sheets/creature-sheet.js' import { CoC7ItemSheet } from '../items/sheets/item-sheet.js' @@ -32,6 +33,10 @@ export function registerSheets () { types: ['creature'], makeDefault: true }) + Actors.registerSheet('CoC7', CoC7ContainerSheet, { + types: ['container'], + makeDefault: true + }) Actors.registerSheet('CoC7', CoC7CharacterSheet, { types: ['character'] }) Actors.registerSheet('CoC7', CoC7CharacterSheetV2, { types: ['character'], diff --git a/styles/sheets/actor.less b/styles/sheets/actor.less index 3b92faef..14195e17 100644 --- a/styles/sheets/actor.less +++ b/styles/sheets/actor.less @@ -157,4 +157,16 @@ } } } + + .unlock-control { + flex: 0 0 30px; + margin-top: 2px; + } + + .unlock-control-disabbled { + flex: 0 0 30px; + margin-top: 2px; + color: darkred; + cursor: not-allowed; + } } diff --git a/styles/sheets/book.less b/styles/sheets/book.less index 86d1afb0..8091ebc5 100644 --- a/styles/sheets/book.less +++ b/styles/sheets/book.less @@ -196,7 +196,7 @@ } } a.keeper-only-tab { - flex: 0.3; + flex: 0 0 30px; } a.keeper-only-tab span { vertical-align: bottom; diff --git a/styles/sheets/character.less b/styles/sheets/character.less index 86cd91ff..6e8fac83 100644 --- a/styles/sheets/character.less +++ b/styles/sheets/character.less @@ -364,6 +364,7 @@ height: 100%; flex-direction: column; flex-wrap: wrap; + margin: 0 0 10px; } .specialization-header { diff --git a/styles/sheets/sheet.less b/styles/sheets/sheet.less index b5096171..cd7f1292 100644 --- a/styles/sheets/sheet.less +++ b/styles/sheets/sheet.less @@ -92,7 +92,7 @@ background: rgba(0, 0, 0, 0.05); border: @borderGroove; font-weight: bold; - line-height: 15px; + line-height: 25px; h3 { margin: 0 -5px 0 0; @@ -133,13 +133,13 @@ .item-list { list-style: none; - margin: 0; + margin: 0 0 10px; padding: 0; } // Item Control Buttons .item-controls { - flex: 0 0 32px; + flex: 0 0 48px; .flexrow(); justify-content: flex-end; height: 16px; diff --git a/styles/sheets/sheets.less b/styles/sheets/sheets.less index 1204a1e0..7b870bc6 100644 --- a/styles/sheets/sheets.less +++ b/styles/sheets/sheets.less @@ -3,7 +3,7 @@ html { } a.keeper-only-tab { - flex: 0.3; + flex: 0 0 30px; color: @colorGreen; } diff --git a/styles/system/main.less b/styles/system/main.less index e432acc6..6c5a236e 100644 --- a/styles/system/main.less +++ b/styles/system/main.less @@ -493,7 +493,7 @@ border-bottom: 3px solid #b5b3a4; text-align: center; &.keeper-only-tab { - flex: 0.3; + flex: 0 0 30px; span { vertical-align: bottom; i { diff --git a/template.json b/template.json index 3e4f8055..c33bb344 100644 --- a/template.json +++ b/template.json @@ -1,6 +1,6 @@ { "Actor": { - "types": ["character", "npc", "creature", "vehicle"], + "types": ["character", "npc", "creature", "vehicle", "container"], "templates": { "characteristics": { "characteristics": { @@ -273,6 +273,15 @@ "properties": { "armed": false } + }, + "container": { + "description": { + "value": "", + "keeper": "" + }, + "flags": { + "locked": false + } } }, "Item": { diff --git a/templates/actors/parts/actor-inventory-items.html b/templates/actors/parts/actor-inventory-items.html new file mode 100644 index 00000000..290a3ab2 --- /dev/null +++ b/templates/actors/parts/actor-inventory-items.html @@ -0,0 +1,153 @@ +
+
    +
  1. +
    +
      +
    1. +
      +

      {{localize 'CoC7.Items'}}

      + {{#unless data.flags.locked}} +
      +
      {{localize 'CoC7.AddItem'}}
      +
      + {{/unless}} +
      +
    2. + {{#each itemsByType.item as |item id|}} +
    3. +
      +

      {{item.name}}

      +
      + + + +
      +
    4. + {{/each}} +
    +
    +
    +
      +
    1. +
      +

      {{localize 'CoC7.Books'}}

      + {{#unless data.flags.locked}} +
      +
      {{localize 'CoC7.AddBook'}}
      +
      + {{/unless}} +
      +
    2. + {{#each itemsByType.book as |item id|}} +
    3. +
      +

      {{item.name}}

      +
      + + + +
      +
    4. + {{/each}} +
    +
    +
    +
      +
    1. +
      +

      {{localize 'CoC7.Spells'}}

      + {{#unless data.flags.locked}} +
      +
      {{localize 'CoC7.AddSpell'}}
      +
      + {{/unless}} +
      +
    2. + {{#each itemsByType.spell as |item id|}} +
    3. +
      +

      {{item.name}}

      +
      + + + +
      +
    4. + {{/each}} +
    +
    + {{#if pulpCharacter}} + {{#if itemsByType.talent}} +
    +
      +
    1. +
      +

      {{localize 'CoC7.PulpTalents'}}

      +
      +
    2. + {{#each itemsByType.talent as |item id|}} +
    3. +
      +

      {{item.name}}

      +
      + + +
      +
    4. + {{/each}} +
    +
    + {{/if}} + {{/if}} + {{#if showWeaponsInsteadOfStatus}} +
    +
      +
    1. +
      +

      {{localize 'CoC7.Weapons'}}

      + {{#unless data.flags.locked}} +
      +
      {{localize 'CoC7.AddWeapon'}}
      +
      + {{/unless}} +
      +
    2. + {{#each itemsByType.weapon as |item id|}} +
    3. +
      +

      {{item.name}}

      +
      + + + +
      +
    4. + {{/each}} +
    +
    + {{else}} +
    +
      +
    1. +
      +

      {{localize 'CoC7.Status'}}

      +
      +
    2. + {{#each itemsByType.status as |item id|}} +
    3. +
      +

      {{item.name}}

      +
      + {{#if ../isGM}} + + + {{/if}} +
      +
    4. + {{/each}} +
    +
    + {{/if}} +
  2. +
+
diff --git a/templates/actors/parts/actor-inventory.html b/templates/actors/parts/actor-inventory.html index 9c61862e..1aa80767 100644 --- a/templates/actors/parts/actor-inventory.html +++ b/templates/actors/parts/actor-inventory.html @@ -1,114 +1,5 @@ -
-
- {{#unless data.flags.locked}} -
-
{{localize 'CoC7.AddItem'}}
-
- {{/unless}} -
    -
    -
  1. -
    -

    {{localize 'CoC7.Items'}}

    -
    -
  2. -
      - {{#each itemsByType.item as |item id|}} -
    1. -
      -

      {{item.name}}

      -
      - - -
      -
    2. - {{/each}} -
    -
    -
    -
  3. -
    -

    {{localize 'CoC7.Books'}}

    -
    -
  4. -
      - {{#each itemsByType.book as |item id|}} -
    1. -
      -

      {{item.name}}

      -
      - - -
      -
    2. - {{/each}} -
    -
    -
    -
  5. -
    -

    {{localize 'CoC7.Spells'}}

    -
    -
  6. -
      - {{#each itemsByType.spell as |item id|}} -
    1. -
      -

      {{item.name}}

      -
      - - -
      -
    2. - {{/each}} -
    -
    - {{#if pulpCharacter}} - {{#if itemsByType.talent}} -
    -
  7. -
    -

    {{localize 'CoC7.PulpTalents'}}

    -
    -
  8. -
      - {{#each itemsByType.talent as |item id|}} -
    1. -
      -

      {{item.name}}

      -
      - - -
      -
    2. - {{/each}} -
    -
    - {{/if}} - {{/if}} -
    -
  9. -
    -

    {{localize 'CoC7.Status'}}

    -
    -
  10. -
      - {{#each itemsByType.status as |item id|}} -
    1. -
      -

      {{item.name}}

      -
      - {{#if ../isGM}} - - - {{/if}} -
      -
    2. - {{/each}} -
    -
    -
-
+
+ {{> "systems/CoC7/templates/actors/parts/actor-inventory-items.html"}}
{{#unless data.flags.locked}}
diff --git a/templates/actors/storage-sheet.html b/templates/actors/storage-sheet.html new file mode 100644 index 00000000..b9439712 --- /dev/null +++ b/templates/actors/storage-sheet.html @@ -0,0 +1,43 @@ +
+
+
+

+ +

+
+ +
+ +
+
+ {{> "systems/CoC7/templates/actors/parts/actor-inventory-items.html"}} +
+
+ {{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}} +
+ {{#if isKeeper}} +
+ {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
+ {{/if}} +
+
From 859ab0ea1e7ed96bf879228a85d21e4a7b378418 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 14 Sep 2021 17:20:23 +0000 Subject: [PATCH 055/726] Updated translations list --- .github/TRANSLATIONS.md | 47 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 9a4bad63..d2e15b99 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,9 +4,11 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **317** | **93** | **110** | **5** | **5** | **112** | **5** | **5** | **3** | **33** | +| **Remaining**: | **326** | **102** | **119** | **14** | **14** | **121** | **14** | **14** | **12** | **42** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -71,6 +73,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | @@ -147,8 +150,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | @@ -162,6 +167,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | @@ -217,6 +224,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -225,6 +233,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -332,6 +341,14 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.ActorImporterSummary": "Import an NPC or Creature from description and stats. Just paste the corresponding plain text",` +##### CoC7.AddBook + +`"CoC7.AddBook": "Add book",` + +##### CoC7.AddSpell + +`"CoC7.AddSpell": "Add spell",` + ##### CoC7.AdvantageAttacker `"CoC7.AdvantageAttacker": "Advantage: Attacker",` @@ -588,6 +605,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.Entities.Chase": "Chase",` +##### CoC7.Entities.Container + +`"CoC7.Entities.Container": "Container",` + ##### CoC7.Entities.Creature `"CoC7.Entities.Creature": "Creature",` @@ -892,6 +913,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.",` +##### CoC7.MessageSelectUserToGiveTo + +`"CoC7.MessageSelectUserToGiveTo": "Which character would you like to give this item to?",` + ##### CoC7.MessageTargetCheckRequested `"CoC7.MessageTargetCheckRequested": "Your keeper has requested {name} make a {check} roll.",` @@ -900,6 +925,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.MessageTitleSelectSingleUserForTarget": "Which user can respond to this attack",` +##### CoC7.MessageTitleSelectUserToGiveTo + +`"CoC7.MessageTitleSelectUserToGiveTo": "Give item to another character",` + ##### CoC7.Migrate.ButtonOkay `"CoC7.Migrate.ButtonOkay": "Okay",` @@ -952,6 +981,14 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.MythosGain": "Mythos gain",` +##### CoC7.NewBookName + +`"CoC7.NewBookName": "new book",` + +##### CoC7.NewSpellName + +`"CoC7.NewSpellName": "new spell",` + ##### CoC7.NoConvert `"CoC7.NoConvert": "No Convert",` @@ -1172,6 +1209,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.TotalDamage": "Total damage",` +##### CoC7.TradeItem + +`"CoC7.TradeItem": "Trade / Store Item",` + ##### CoC7.UnableToCopyToClipboard `"CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.",` @@ -1204,6 +1245,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.WeaponUsesPerRoundHint": "Attacks per round (1/3 : 1 attack every 3 rounds)",` +##### CoC7.Weapons + +`"CoC7.Weapons": "Weapons",` + ##### CoC7.WhisperTo `"CoC7.WhisperTo": "Whisper to",` From 8fa5eb57eb24351adb90c00e2ab1c64b27786c5c Mon Sep 17 00:00:00 2001 From: castanho Date: Tue, 14 Sep 2021 16:21:01 -0300 Subject: [PATCH 056/726] Change game-icons to a separate library --- lib/game-icons/game-icons.css | 11933 ++++++++++ .../fonts => lib/game-icons}/game-icons.woff | Bin styles/system/game-icons.less | 19881 ---------------- styles/system/index.less | 60 +- system.json | 2 +- 5 files changed, 11963 insertions(+), 19913 deletions(-) create mode 100644 lib/game-icons/game-icons.css rename {assets/fonts => lib/game-icons}/game-icons.woff (100%) delete mode 100644 styles/system/game-icons.less diff --git a/lib/game-icons/game-icons.css b/lib/game-icons/game-icons.css new file mode 100644 index 00000000..16a70815 --- /dev/null +++ b/lib/game-icons/game-icons.css @@ -0,0 +1,11933 @@ +@font-face { + font-family: 'game-icons'; + src: url('./game-icons.woff') format('woff'); +} +.game-icon:before { + font-family: 'game-icons'; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-style: normal; + font-variant: normal; + font-weight: normal; + text-decoration: none; + text-transform: none; +} +.game-icon-police-badge:before { + content: '\E001'; +} +.game-icon-pistol-gun:before { + content: '\E002'; +} +.game-icon-arrest:before { + content: '\E003'; +} +.game-icon-banging-gavel:before { + content: '\E004'; +} +.game-icon-chalk-outline-murder:before { + content: '\E005'; +} +.game-icon-convict:before { + content: '\E006'; +} +.game-icon-crime-scene-tape:before { + content: '\E007'; +} +.game-icon-custodian-helmet:before { + content: '\E008'; +} +.game-icon-donut:before { + content: '\E009'; +} +.game-icon-evasion:before { + content: '\E00A'; +} +.game-icon-finger-print:before { + content: '\E00B'; +} +.game-icon-flashlight:before { + content: '\E00C'; +} +.game-icon-handcuffed:before { + content: '\E00D'; +} +.game-icon-id-card:before { + content: '\E00E'; +} +.game-icon-lock-picking:before { + content: '\E00F'; +} +.game-icon-megaphone:before { + content: '\E010'; +} +.game-icon-mp5:before { + content: '\E011'; +} +.game-icon-mug-shot:before { + content: '\E012'; +} +.game-icon-police-car:before { + content: '\E013'; +} +.game-icon-police-officer-head:before { + content: '\E014'; +} +.game-icon-police-target:before { + content: '\E015'; +} +.game-icon-prisoner:before { + content: '\E016'; +} +.game-icon-robber-mask:before { + content: '\E017'; +} +.game-icon-robber:before { + content: '\E018'; +} +.game-icon-sherlock-holmes:before { + content: '\E019'; +} +.game-icon-sniffing-dog:before { + content: '\E01A'; +} +.game-icon-spy:before { + content: '\E01B'; +} +.game-icon-stun-grenade:before { + content: '\E01C'; +} +.game-icon-tire-tracks:before { + content: '\E01D'; +} +.game-icon-traffic-lights-red:before { + content: '\E01E'; +} +.game-icon-walkie-talkie:before { + content: '\E01F'; +} +.game-icon-whistle:before { + content: '\E020'; +} +.game-icon-window-bars:before { + content: '\E021'; +} +.game-icon-arrow-scope:before { + content: '\E022'; +} +.game-icon-flash-grenade:before { + content: '\E023'; +} +.game-icon-handcuffs:before { + content: '\E024'; +} +.game-icon-law-star:before { + content: '\E025'; +} +.game-icon-magnifying-glass:before { + content: '\E026'; +} +.game-icon-manacles:before { + content: '\E027'; +} +.game-icon-riot-shield:before { + content: '\E028'; +} +.game-icon-kevlar:before { + content: '\E029'; +} +.game-icon-balaclava:before { + content: '\E02A'; +} +.game-icon-baton:before { + content: '\E02B'; +} +.game-icon-famas:before { + content: '\E02C'; +} +.game-icon-footsteps:before { + content: '\E02D'; +} +.game-icon-glock:before { + content: '\E02E'; +} +.game-icon-halt:before { + content: '\E02F'; +} +.game-icon-kevlar-vest:before { + content: '\E030'; +} +.game-icon-siren:before { + content: '\E031'; +} +.game-icon-steel-door:before { + content: '\E032'; +} +.game-icon-steyr-aug:before { + content: '\E033'; +} +.game-icon-switchblade:before { + content: '\E034'; +} +.game-icon-walther-ppk:before { + content: '\E035'; +} +.game-icon-swordman:before { + content: '\E036'; +} +.game-icon-swordwoman:before { + content: '\E037'; +} +.game-icon-american-shield:before { + content: '\E038'; +} +.game-icon-armor-downgrade:before { + content: '\E039'; +} +.game-icon-armor-upgrade:before { + content: '\E03A'; +} +.game-icon-attached-shield:before { + content: '\E03B'; +} +.game-icon-cross-shield:before { + content: '\E03C'; +} +.game-icon-dice-shield:before { + content: '\E03D'; +} +.game-icon-dragon-shield:before { + content: '\E03E'; +} +.game-icon-griffin-shield:before { + content: '\E03F'; +} +.game-icon-healing-shield:before { + content: '\E040'; +} +.game-icon-ribbon-shield:before { + content: '\E041'; +} +.game-icon-roman-shield:before { + content: '\E042'; +} +.game-icon-shield-bash:before { + content: '\E043'; +} +.game-icon-shield-impact:before { + content: '\E044'; +} +.game-icon-shield-opposition:before { + content: '\E045'; +} +.game-icon-templar-shield:before { + content: '\E046'; +} +.game-icon-temporary-shield:before { + content: '\E047'; +} +.game-icon-tribal-gear:before { + content: '\E048'; +} +.game-icon-trident-shield:before { + content: '\E049'; +} +.game-icon-vibrating-shield:before { + content: '\E04A'; +} +.game-icon-viking-shield:before { + content: '\E04B'; +} +.game-icon-arrows-shield:before { + content: '\E04C'; +} +.game-icon-battle-gear:before { + content: '\E04D'; +} +.game-icon-bell-shield:before { + content: '\E04E'; +} +.game-icon-black-hand-shield:before { + content: '\E04F'; +} +.game-icon-bolt-shield:before { + content: '\E050'; +} +.game-icon-bordered-shield:before { + content: '\E051'; +} +.game-icon-broken-shield:before { + content: '\E052'; +} +.game-icon-bubble-field:before { + content: '\E053'; +} +.game-icon-checked-shield:before { + content: '\E054'; +} +.game-icon-cracked-shield:before { + content: '\E055'; +} +.game-icon-crenulated-shield:before { + content: '\E056'; +} +.game-icon-edged-shield:before { + content: '\E057'; +} +.game-icon-energy-shield:before { + content: '\E058'; +} +.game-icon-eye-shield:before { + content: '\E059'; +} +.game-icon-fire-shield:before { + content: '\E05A'; +} +.game-icon-ice-shield:before { + content: '\E05B'; +} +.game-icon-layered-armor:before { + content: '\E05C'; +} +.game-icon-lightning-shield:before { + content: '\E05D'; +} +.game-icon-magic-shield:before { + content: '\E05E'; +} +.game-icon-rosa-shield:before { + content: '\E05F'; +} +.game-icon-shield-bounces:before { + content: '\E060'; +} +.game-icon-shield-echoes:before { + content: '\E061'; +} +.game-icon-shield-reflect:before { + content: '\E062'; +} +.game-icon-shieldcomb:before { + content: '\E063'; +} +.game-icon-skull-shield:before { + content: '\E064'; +} +.game-icon-slashed-shield:before { + content: '\E065'; +} +.game-icon-spartan:before { + content: '\E066'; +} +.game-icon-spiky-field:before { + content: '\E067'; +} +.game-icon-surrounded-shield:before { + content: '\E068'; +} +.game-icon-swords-emblem:before { + content: '\E069'; +} +.game-icon-winged-shield:before { + content: '\E06A'; +} +.game-icon-zebra-shield:before { + content: '\E06B'; +} +.game-icon-shield:before { + content: '\E06C'; +} +.game-icon-air-force:before { + content: '\E06D'; +} +.game-icon-shield-disabled:before { + content: '\E06E'; +} +.game-icon-round-shield:before { + content: '\E06F'; +} +.game-icon-chameleon-glyph:before { + content: '\E070'; +} +.game-icon-akhet:before { + content: '\E071'; +} +.game-icon-all-seeing-eye:before { + content: '\E072'; +} +.game-icon-anarchy:before { + content: '\E073'; +} +.game-icon-aquarius:before { + content: '\E074'; +} +.game-icon-aries:before { + content: '\E075'; +} +.game-icon-azul-flake:before { + content: '\E076'; +} +.game-icon-banknote:before { + content: '\E077'; +} +.game-icon-bowen-knot:before { + content: '\E078'; +} +.game-icon-caduceus:before { + content: '\E079'; +} +.game-icon-camargue-cross:before { + content: '\E07A'; +} +.game-icon-cancer:before { + content: '\E07B'; +} +.game-icon-capricorn:before { + content: '\E07C'; +} +.game-icon-check-mark:before { + content: '\E07D'; +} +.game-icon-cornucopia:before { + content: '\E07E'; +} +.game-icon-corporal:before { + content: '\E07F'; +} +.game-icon-credits-currency:before { + content: '\E080'; +} +.game-icon-dream-catcher:before { + content: '\E081'; +} +.game-icon-dwennimmen:before { + content: '\E082'; +} +.game-icon-easter-egg:before { + content: '\E083'; +} +.game-icon-ermine:before { + content: '\E084'; +} +.game-icon-eye-of-horus:before { + content: '\E085'; +} +.game-icon-f-clef:before { + content: '\E086'; +} +.game-icon-fallout-shelter:before { + content: '\E087'; +} +.game-icon-female:before { + content: '\E088'; +} +.game-icon-film-strip:before { + content: '\E089'; +} +.game-icon-fleur-de-lys:before { + content: '\E08A'; +} +.game-icon-flower-emblem:before { + content: '\E08B'; +} +.game-icon-freemasonry:before { + content: '\E08C'; +} +.game-icon-g-clef:before { + content: '\E08D'; +} +.game-icon-gear-stick-pattern:before { + content: '\E08E'; +} +.game-icon-gemini:before { + content: '\E08F'; +} +.game-icon-hell-crosses:before { + content: '\E090'; +} +.game-icon-heptagram:before { + content: '\E091'; +} +.game-icon-hieroglyph-y:before { + content: '\E092'; +} +.game-icon-horseshoe:before { + content: '\E093'; +} +.game-icon-info:before { + content: '\E094'; +} +.game-icon-jerusalem-cross:before { + content: '\E095'; +} +.game-icon-klingon:before { + content: '\E096'; +} +.game-icon-leo:before { + content: '\E097'; +} +.game-icon-liberty-wing:before { + content: '\E098'; +} +.game-icon-libra:before { + content: '\E099'; +} +.game-icon-logic-gate-and:before { + content: '\E09A'; +} +.game-icon-logic-gate-nand:before { + content: '\E09B'; +} +.game-icon-logic-gate-nor:before { + content: '\E09C'; +} +.game-icon-logic-gate-not:before { + content: '\E09D'; +} +.game-icon-logic-gate-nxor:before { + content: '\E09E'; +} +.game-icon-logic-gate-or:before { + content: '\E09F'; +} +.game-icon-logic-gate-xor:before { + content: '\E0A0'; +} +.game-icon-male:before { + content: '\E0A1'; +} +.game-icon-mona-lisa:before { + content: '\E0A2'; +} +.game-icon-nested-hexagons:before { + content: '\E0A3'; +} +.game-icon-ophiuchus:before { + content: '\E0A4'; +} +.game-icon-peace-dove:before { + content: '\E0A5'; +} +.game-icon-pisces:before { + content: '\E0A6'; +} +.game-icon-rod-of-asclepius:before { + content: '\E0A7'; +} +.game-icon-rss:before { + content: '\E0A8'; +} +.game-icon-rub-el-hizb:before { + content: '\E0A9'; +} +.game-icon-sagittarius:before { + content: '\E0AA'; +} +.game-icon-scorpio:before { + content: '\E0AB'; +} +.game-icon-slumbering-sanctuary:before { + content: '\E0AC'; +} +.game-icon-stop-sign:before { + content: '\E0AD'; +} +.game-icon-striped-sun:before { + content: '\E0AE'; +} +.game-icon-taurus:before { + content: '\E0AF'; +} +.game-icon-transform:before { + content: '\E0B0'; +} +.game-icon-triforce:before { + content: '\E0B1'; +} +.game-icon-trinacria:before { + content: '\E0B2'; +} +.game-icon-triquetra:before { + content: '\E0B3'; +} +.game-icon-venus-of-willendorf:before { + content: '\E0B4'; +} +.game-icon-virgo:before { + content: '\E0B5'; +} +.game-icon-virtual-marker:before { + content: '\E0B6'; +} +.game-icon-wanted-reward:before { + content: '\E0B7'; +} +.game-icon-warlock-eye:before { + content: '\E0B8'; +} +.game-icon-yin-yang:before { + content: '\E0B9'; +} +.game-icon-zigzag-hieroglyph:before { + content: '\E0BA'; +} +.game-icon-holosphere:before { + content: '\E0BB'; +} +.game-icon-power-button:before { + content: '\E0BC'; +} +.game-icon-ace:before { + content: '\E0BD'; +} +.game-icon-aerial-signal:before { + content: '\E0BE'; +} +.game-icon-ankh:before { + content: '\E0BF'; +} +.game-icon-artificial-hive:before { + content: '\E0C0'; +} +.game-icon-automatic-sas:before { + content: '\E0C1'; +} +.game-icon-barbed-sun:before { + content: '\E0C2'; +} +.game-icon-batwing-emblem:before { + content: '\E0C3'; +} +.game-icon-biohazard:before { + content: '\E0C4'; +} +.game-icon-black-flag:before { + content: '\E0C5'; +} +.game-icon-checkbox-tree:before { + content: '\E0C6'; +} +.game-icon-clover:before { + content: '\E0C7'; +} +.game-icon-coiling-curl:before { + content: '\E0C8'; +} +.game-icon-concentric-crescents:before { + content: '\E0C9'; +} +.game-icon-condor-emblem:before { + content: '\E0CA'; +} +.game-icon-conversation:before { + content: '\E0CB'; +} +.game-icon-cubeforce:before { + content: '\E0CC'; +} +.game-icon-cubes:before { + content: '\E0CD'; +} +.game-icon-cursed-star:before { + content: '\E0CE'; +} +.game-icon-cycle:before { + content: '\E0CF'; +} +.game-icon-divided-spiral:before { + content: '\E0D0'; +} +.game-icon-eagle-emblem:before { + content: '\E0D1'; +} +.game-icon-fluffy-trefoil:before { + content: '\E0D2'; +} +.game-icon-freedom-dove:before { + content: '\E0D3'; +} +.game-icon-gamepad-cross:before { + content: '\E0D4'; +} +.game-icon-gothic-cross:before { + content: '\E0D5'; +} +.game-icon-hawk-emblem:before { + content: '\E0D6'; +} +.game-icon-hazard-sign:before { + content: '\E0D7'; +} +.game-icon-holy-symbol:before { + content: '\E0D8'; +} +.game-icon-hospital-cross:before { + content: '\E0D9'; +} +.game-icon-interdiction:before { + content: '\E0DA'; +} +.game-icon-james-bond-aperture:before { + content: '\E0DB'; +} +.game-icon-justice-star:before { + content: '\E0DC'; +} +.game-icon-king:before { + content: '\E0DD'; +} +.game-icon-laser-warning:before { + content: '\E0DE'; +} +.game-icon-maze-cornea:before { + content: '\E0DF'; +} +.game-icon-maze-saw:before { + content: '\E0E0'; +} +.game-icon-moebius-star:before { + content: '\E0E1'; +} +.game-icon-moebius-trefoil:before { + content: '\E0E2'; +} +.game-icon-moebius-triangle:before { + content: '\E0E3'; +} +.game-icon-omega:before { + content: '\E0E4'; +} +.game-icon-orbital:before { + content: '\E0E5'; +} +.game-icon-over-infinity:before { + content: '\E0E6'; +} +.game-icon-pentagram-rose:before { + content: '\E0E7'; +} +.game-icon-perpendicular-rings:before { + content: '\E0E8'; +} +.game-icon-radial-balance:before { + content: '\E0E9'; +} +.game-icon-radioactive:before { + content: '\E0EA'; +} +.game-icon-recycle:before { + content: '\E0EB'; +} +.game-icon-ribbon:before { + content: '\E0EC'; +} +.game-icon-rss-2:before { + content: '\E0ED'; +} +.game-icon-rune-sword:before { + content: '\E0EE'; +} +.game-icon-scales:before { + content: '\E0EF'; +} +.game-icon-shiny-omega:before { + content: '\E0F0'; +} +.game-icon-shuriken-aperture:before { + content: '\E0F1'; +} +.game-icon-skull-crossed-bones:before { + content: '\E0F2'; +} +.game-icon-staryu:before { + content: '\E0F3'; +} +.game-icon-steelwing-emblem:before { + content: '\E0F4'; +} +.game-icon-totem-head:before { + content: '\E0F5'; +} +.game-icon-triorb:before { + content: '\E0F6'; +} +.game-icon-triple-beak:before { + content: '\E0F7'; +} +.game-icon-triple-corn:before { + content: '\E0F8'; +} +.game-icon-triple-plier:before { + content: '\E0F9'; +} +.game-icon-triple-yin:before { + content: '\E0FA'; +} +.game-icon-ubisoft-sun:before { + content: '\E0FB'; +} +.game-icon-zigzag-cage:before { + content: '\E0FC'; +} +.game-icon-cancel:before { + content: '\E0FD'; +} +.game-icon-clover-spiked:before { + content: '\E0FE'; +} +.game-icon-clover-2:before { + content: '\E0FF'; +} +.game-icon-doubled:before { + content: '\E100'; +} +.game-icon-expander:before { + content: '\E101'; +} +.game-icon-help:before { + content: '\E102'; +} +.game-icon-hive:before { + content: '\E103'; +} +.game-icon-mass-driver:before { + content: '\E104'; +} +.game-icon-nodular:before { + content: '\E105'; +} +.game-icon-nuclear:before { + content: '\E106'; +} +.game-icon-overmind:before { + content: '\E107'; +} +.game-icon-pulse:before { + content: '\E108'; +} +.game-icon-reactor:before { + content: '\E109'; +} +.game-icon-regeneration:before { + content: '\E10A'; +} +.game-icon-slow-blob:before { + content: '\E10B'; +} +.game-icon-spawn-node:before { + content: '\E10C'; +} +.game-icon-infinity:before { + content: '\E10D'; +} +.game-icon-allied-star:before { + content: '\E10E'; +} +.game-icon-balkenkreuz:before { + content: '\E10F'; +} +.game-icon-bat:before { + content: '\E110'; +} +.game-icon-clubs:before { + content: '\E111'; +} +.game-icon-diamonds:before { + content: '\E112'; +} +.game-icon-divided-square:before { + content: '\E113'; +} +.game-icon-hearts:before { + content: '\E114'; +} +.game-icon-iron-cross:before { + content: '\E115'; +} +.game-icon-pentacle:before { + content: '\E116'; +} +.game-icon-spades:before { + content: '\E117'; +} +.game-icon-card-10-clubs:before { + content: '\E118'; +} +.game-icon-card-10-diamonds:before { + content: '\E119'; +} +.game-icon-card-10-hearts:before { + content: '\E11A'; +} +.game-icon-card-10-spades:before { + content: '\E11B'; +} +.game-icon-card-2-clubs:before { + content: '\E11C'; +} +.game-icon-card-2-diamonds:before { + content: '\E11D'; +} +.game-icon-card-2-hearts:before { + content: '\E11E'; +} +.game-icon-card-2-spades:before { + content: '\E11F'; +} +.game-icon-card-3-clubs:before { + content: '\E120'; +} +.game-icon-card-3-diamonds:before { + content: '\E121'; +} +.game-icon-card-3-hearts:before { + content: '\E122'; +} +.game-icon-card-3-spades:before { + content: '\E123'; +} +.game-icon-card-4-clubs:before { + content: '\E124'; +} +.game-icon-card-4-diamonds:before { + content: '\E125'; +} +.game-icon-card-4-hearts:before { + content: '\E126'; +} +.game-icon-card-4-spades:before { + content: '\E127'; +} +.game-icon-card-5-clubs:before { + content: '\E128'; +} +.game-icon-card-5-diamonds:before { + content: '\E129'; +} +.game-icon-card-5-hearts:before { + content: '\E12A'; +} +.game-icon-card-5-spades:before { + content: '\E12B'; +} +.game-icon-card-6-clubs:before { + content: '\E12C'; +} +.game-icon-card-6-diamonds:before { + content: '\E12D'; +} +.game-icon-card-6-hearts:before { + content: '\E12E'; +} +.game-icon-card-6-spades:before { + content: '\E12F'; +} +.game-icon-card-7-clubs:before { + content: '\E130'; +} +.game-icon-card-7-diamonds:before { + content: '\E131'; +} +.game-icon-card-7-hearts:before { + content: '\E132'; +} +.game-icon-card-7-spades:before { + content: '\E133'; +} +.game-icon-card-8-clubs:before { + content: '\E134'; +} +.game-icon-card-8-diamonds:before { + content: '\E135'; +} +.game-icon-card-8-hearts:before { + content: '\E136'; +} +.game-icon-card-8-spades:before { + content: '\E137'; +} +.game-icon-card-9-clubs:before { + content: '\E138'; +} +.game-icon-card-9-diamonds:before { + content: '\E139'; +} +.game-icon-card-9-hearts:before { + content: '\E13A'; +} +.game-icon-card-9-spades:before { + content: '\E13B'; +} +.game-icon-card-ace-clubs:before { + content: '\E13C'; +} +.game-icon-card-ace-diamonds:before { + content: '\E13D'; +} +.game-icon-card-ace-hearts:before { + content: '\E13E'; +} +.game-icon-card-ace-spades:before { + content: '\E13F'; +} +.game-icon-card-jack-clubs:before { + content: '\E140'; +} +.game-icon-card-jack-diamonds:before { + content: '\E141'; +} +.game-icon-card-jack-hearts:before { + content: '\E142'; +} +.game-icon-card-jack-spades:before { + content: '\E143'; +} +.game-icon-card-king-clubs:before { + content: '\E144'; +} +.game-icon-card-king-diamonds:before { + content: '\E145'; +} +.game-icon-card-king-hearts:before { + content: '\E146'; +} +.game-icon-card-king-spades:before { + content: '\E147'; +} +.game-icon-card-queen-clubs:before { + content: '\E148'; +} +.game-icon-card-queen-diamonds:before { + content: '\E149'; +} +.game-icon-card-queen-hearts:before { + content: '\E14A'; +} +.game-icon-card-queen-spades:before { + content: '\E14B'; +} +.game-icon-card-discard:before { + content: '\E14C'; +} +.game-icon-card-draw:before { + content: '\E14D'; +} +.game-icon-card-pick:before { + content: '\E14E'; +} +.game-icon-card-random:before { + content: '\E14F'; +} +.game-icon-3d-meeple:before { + content: '\E150'; +} +.game-icon-abbot-meeple:before { + content: '\E151'; +} +.game-icon-ages:before { + content: '\E152'; +} +.game-icon-backgammon:before { + content: '\E153'; +} +.game-icon-buy-card:before { + content: '\E154'; +} +.game-icon-card-burn:before { + content: '\E155'; +} +.game-icon-card-exchange:before { + content: '\E156'; +} +.game-icon-card-joker:before { + content: '\E157'; +} +.game-icon-coins:before { + content: '\E158'; +} +.game-icon-conway-life-glider:before { + content: '\E159'; +} +.game-icon-dice-six-faces-three:before { + content: '\E15A'; +} +.game-icon-domino-tiles:before { + content: '\E15B'; +} +.game-icon-empty-chessboard:before { + content: '\E15C'; +} +.game-icon-meeple-army:before { + content: '\E15D'; +} +.game-icon-meeple-circle:before { + content: '\E15E'; +} +.game-icon-meeple-group:before { + content: '\E15F'; +} +.game-icon-meeple-king:before { + content: '\E160'; +} +.game-icon-meeple:before { + content: '\E161'; +} +.game-icon-opposite-hearts:before { + content: '\E162'; +} +.game-icon-pay-money:before { + content: '\E163'; +} +.game-icon-perspective-dice-six-faces-four:before { + content: '\E164'; +} +.game-icon-player-base:before { + content: '\E165'; +} +.game-icon-player-next:before { + content: '\E166'; +} +.game-icon-player-previous:before { + content: '\E167'; +} +.game-icon-player-time:before { + content: '\E168'; +} +.game-icon-receive-money:before { + content: '\E169'; +} +.game-icon-rolling-dice-cup:before { + content: '\E16A'; +} +.game-icon-rolling-dices:before { + content: '\E16B'; +} +.game-icon-round-table:before { + content: '\E16C'; +} +.game-icon-rule-book:before { + content: '\E16D'; +} +.game-icon-sell-card:before { + content: '\E16E'; +} +.game-icon-stack:before { + content: '\E16F'; +} +.game-icon-tabletop-players:before { + content: '\E170'; +} +.game-icon-team-downgrade:before { + content: '\E171'; +} +.game-icon-team-upgrade:before { + content: '\E172'; +} +.game-icon-tic-tac-toe:before { + content: '\E173'; +} +.game-icon-token:before { + content: '\E174'; +} +.game-icon-two-coins:before { + content: '\E175'; +} +.game-icon-up-card:before { + content: '\E176'; +} +.game-icon-honeycomb:before { + content: '\E177'; +} +.game-icon-hourglass:before { + content: '\E178'; +} +.game-icon-pawn:before { + content: '\E179'; +} +.game-icon-poker-hand:before { + content: '\E17A'; +} +.game-icon-sands-of-time:before { + content: '\E17B'; +} +.game-icon-stopwatch:before { + content: '\E17C'; +} +.game-icon-suits:before { + content: '\E17D'; +} +.game-icon-card-pickup:before { + content: '\E17E'; +} +.game-icon-card-play:before { + content: '\E17F'; +} +.game-icon-chess-bishop:before { + content: '\E180'; +} +.game-icon-chess-king:before { + content: '\E181'; +} +.game-icon-chess-knight:before { + content: '\E182'; +} +.game-icon-chess-pawn:before { + content: '\E183'; +} +.game-icon-chess-queen:before { + content: '\E184'; +} +.game-icon-chess-rook:before { + content: '\E185'; +} +.game-icon-hexes:before { + content: '\E186'; +} +.game-icon-brutal-helm:before { + content: '\E187'; +} +.game-icon-dwarf-helmet:before { + content: '\E188'; +} +.game-icon-dwarf-king:before { + content: '\E189'; +} +.game-icon-elf-helmet:before { + content: '\E18A'; +} +.game-icon-american-football-helmet:before { + content: '\E18B'; +} +.game-icon-astronaut-helmet:before { + content: '\E18C'; +} +.game-icon-bandana:before { + content: '\E18D'; +} +.game-icon-bandit:before { + content: '\E18E'; +} +.game-icon-billed-cap:before { + content: '\E18F'; +} +.game-icon-black-knight-helm:before { + content: '\E190'; +} +.game-icon-captain-hat-profile:before { + content: '\E191'; +} +.game-icon-chef-toque:before { + content: '\E192'; +} +.game-icon-closed-barbute:before { + content: '\E193'; +} +.game-icon-cork-hat:before { + content: '\E194'; +} +.game-icon-coronation:before { + content: '\E195'; +} +.game-icon-crenel-crown:before { + content: '\E196'; +} +.game-icon-deshret-red-crown:before { + content: '\E197'; +} +.game-icon-diving-helmet:before { + content: '\E198'; +} +.game-icon-dunce-cap:before { + content: '\E199'; +} +.game-icon-fez:before { + content: '\E19A'; +} +.game-icon-flower-hat:before { + content: '\E19B'; +} +.game-icon-frog-prince:before { + content: '\E19C'; +} +.game-icon-full-motorcycle-helmet:before { + content: '\E19D'; +} +.game-icon-galea:before { + content: '\E19E'; +} +.game-icon-gauls-helm:before { + content: '\E19F'; +} +.game-icon-graduate-cap:before { + content: '\E1A0'; +} +.game-icon-hazmat-suit:before { + content: '\E1A1'; +} +.game-icon-hedjet-white-crown:before { + content: '\E1A2'; +} +.game-icon-imperial-crown:before { + content: '\E1A3'; +} +.game-icon-jester-hat:before { + content: '\E1A4'; +} +.game-icon-jewel-crown:before { + content: '\E1A5'; +} +.game-icon-light-helm:before { + content: '\E1A6'; +} +.game-icon-magic-hat:before { + content: '\E1A7'; +} +.game-icon-magick-trick:before { + content: '\E1A8'; +} +.game-icon-mining-helmet:before { + content: '\E1A9'; +} +.game-icon-mustache:before { + content: '\E1AA'; +} +.game-icon-nefertiti:before { + content: '\E1AB'; +} +.game-icon-outback-hat:before { + content: '\E1AC'; +} +.game-icon-overlord-helm:before { + content: '\E1AD'; +} +.game-icon-party-hat:before { + content: '\E1AE'; +} +.game-icon-phrygian-cap:before { + content: '\E1AF'; +} +.game-icon-pilgrim-hat:before { + content: '\E1B0'; +} +.game-icon-pirate-hat:before { + content: '\E1B1'; +} +.game-icon-plague-doctor-profile:before { + content: '\E1B2'; +} +.game-icon-pope-crown:before { + content: '\E1B3'; +} +.game-icon-propeller-beanie:before { + content: '\E1B4'; +} +.game-icon-pschent-double-crown:before { + content: '\E1B5'; +} +.game-icon-robin-hood-hat:before { + content: '\E1B6'; +} +.game-icon-samurai-helmet:before { + content: '\E1B7'; +} +.game-icon-samus-helmet:before { + content: '\E1B8'; +} +.game-icon-sombrero:before { + content: '\E1B9'; +} +.game-icon-spartan-helmet:before { + content: '\E1BA'; +} +.game-icon-throne-king:before { + content: '\E1BB'; +} +.game-icon-tiara:before { + content: '\E1BC'; +} +.game-icon-turban:before { + content: '\E1BD'; +} +.game-icon-ushanka:before { + content: '\E1BE'; +} +.game-icon-viking-helmet:before { + content: '\E1BF'; +} +.game-icon-war-bonnet:before { + content: '\E1C0'; +} +.game-icon-warlock-hood:before { + content: '\E1C1'; +} +.game-icon-western-hat:before { + content: '\E1C2'; +} +.game-icon-winter-hat:before { + content: '\E1C3'; +} +.game-icon-barbute:before { + content: '\E1C4'; +} +.game-icon-cowled:before { + content: '\E1C5'; +} +.game-icon-cracked-helm:before { + content: '\E1C6'; +} +.game-icon-crested-helmet:before { + content: '\E1C7'; +} +.game-icon-crown-coin:before { + content: '\E1C8'; +} +.game-icon-crown-of-thorns:before { + content: '\E1C9'; +} +.game-icon-crown:before { + content: '\E1CA'; +} +.game-icon-crowned-heart:before { + content: '\E1CB'; +} +.game-icon-crowned-skull:before { + content: '\E1CC'; +} +.game-icon-fedora:before { + content: '\E1CD'; +} +.game-icon-heavy-helm:before { + content: '\E1CE'; +} +.game-icon-helmet-head-shot:before { + content: '\E1CF'; +} +.game-icon-hood:before { + content: '\E1D0'; +} +.game-icon-horned-helm:before { + content: '\E1D1'; +} +.game-icon-laurel-crown:before { + content: '\E1D2'; +} +.game-icon-laurels:before { + content: '\E1D3'; +} +.game-icon-pointy-hat:before { + content: '\E1D4'; +} +.game-icon-queen-crown:before { + content: '\E1D5'; +} +.game-icon-sharp-crown:before { + content: '\E1D6'; +} +.game-icon-top-hat:before { + content: '\E1D7'; +} +.game-icon-visored-helm:before { + content: '\E1D8'; +} +.game-icon-helmet:before { + content: '\E1D9'; +} +.game-icon-brodie-helmet:before { + content: '\E1DA'; +} +.game-icon-pickelhaube:before { + content: '\E1DB'; +} +.game-icon-stahlhelm:before { + content: '\E1DC'; +} +.game-icon-wooden-helmet:before { + content: '\E1DD'; +} +.game-icon-nun-face:before { + content: '\E1DE'; +} +.game-icon-witch-face:before { + content: '\E1DF'; +} +.game-icon-barbarian:before { + content: '\E1E0'; +} +.game-icon-dwarf-face:before { + content: '\E1E1'; +} +.game-icon-executioner-hood:before { + content: '\E1E2'; +} +.game-icon-female-vampire:before { + content: '\E1E3'; +} +.game-icon-fish-monster:before { + content: '\E1E4'; +} +.game-icon-goblin-head:before { + content: '\E1E5'; +} +.game-icon-golem-head:before { + content: '\E1E6'; +} +.game-icon-kenku-head:before { + content: '\E1E7'; +} +.game-icon-monk-face:before { + content: '\E1E8'; +} +.game-icon-ogre:before { + content: '\E1E9'; +} +.game-icon-orc-head:before { + content: '\E1EA'; +} +.game-icon-vampire-dracula:before { + content: '\E1EB'; +} +.game-icon-wizard-face:before { + content: '\E1EC'; +} +.game-icon-woman-elf-face:before { + content: '\E1ED'; +} +.game-icon-cultist:before { + content: '\E1EE'; +} +.game-icon-diablo-skull:before { + content: '\E1EF'; +} +.game-icon-dragon-head:before { + content: '\E1F0'; +} +.game-icon-troll:before { + content: '\E1F1'; +} +.game-icon-crossbow:before { + content: '\E1F2'; +} +.game-icon-annexation:before { + content: '\E1F3'; +} +.game-icon-broken-arrow:before { + content: '\E1F4'; +} +.game-icon-forward-sun:before { + content: '\E1F5'; +} +.game-icon-dodge:before { + content: '\E1F6'; +} +.game-icon-overhead:before { + content: '\E1F7'; +} +.game-icon-sideswipe:before { + content: '\E1F8'; +} +.game-icon-thrust:before { + content: '\E1F9'; +} +.game-icon-underhand:before { + content: '\E1FA'; +} +.game-icon-achilles-heel:before { + content: '\E1FB'; +} +.game-icon-anticlockwise-rotation:before { + content: '\E1FC'; +} +.game-icon-archer:before { + content: '\E1FD'; +} +.game-icon-arrow-cursor:before { + content: '\E1FE'; +} +.game-icon-arrow-wings:before { + content: '\E1FF'; +} +.game-icon-avoidance:before { + content: '\E200'; +} +.game-icon-backward-time:before { + content: '\E201'; +} +.game-icon-body-height:before { + content: '\E202'; +} +.game-icon-bow-arrow:before { + content: '\E203'; +} +.game-icon-box-unpacking:before { + content: '\E204'; +} +.game-icon-brain-dump:before { + content: '\E205'; +} +.game-icon-chart:before { + content: '\E206'; +} +.game-icon-clockwise-rotation:before { + content: '\E207'; +} +.game-icon-cloud-download:before { + content: '\E208'; +} +.game-icon-cloud-upload:before { + content: '\E209'; +} +.game-icon-contract:before { + content: '\E20A'; +} +.game-icon-dart:before { + content: '\E20B'; +} +.game-icon-detour:before { + content: '\E20C'; +} +.game-icon-direction-sign:before { + content: '\E20D'; +} +.game-icon-encirclement:before { + content: '\E20E'; +} +.game-icon-expand:before { + content: '\E20F'; +} +.game-icon-expense:before { + content: '\E210'; +} +.game-icon-flag-objective:before { + content: '\E211'; +} +.game-icon-growth:before { + content: '\E212'; +} +.game-icon-horizontal-flip:before { + content: '\E213'; +} +.game-icon-join:before { + content: '\E214'; +} +.game-icon-misdirection:before { + content: '\E215'; +} +.game-icon-move:before { + content: '\E216'; +} +.game-icon-plain-arrow:before { + content: '\E217'; +} +.game-icon-progression:before { + content: '\E218'; +} +.game-icon-quiver:before { + content: '\E219'; +} +.game-icon-save-arrow:before { + content: '\E21A'; +} +.game-icon-slalom:before { + content: '\E21B'; +} +.game-icon-spear-feather:before { + content: '\E21C'; +} +.game-icon-spearfishing:before { + content: '\E21D'; +} +.game-icon-split-arrows:before { + content: '\E21E'; +} +.game-icon-sun-spear:before { + content: '\E21F'; +} +.game-icon-target-prize:before { + content: '\E220'; +} +.game-icon-thrust-bend:before { + content: '\E221'; +} +.game-icon-tree-growth:before { + content: '\E222'; +} +.game-icon-upgrade:before { + content: '\E223'; +} +.game-icon-vertical-flip:before { + content: '\E224'; +} +.game-icon-water-recycling:before { + content: '\E225'; +} +.game-icon-aerodynamic-harpoon:before { + content: '\E226'; +} +.game-icon-arrow-cluster:before { + content: '\E227'; +} +.game-icon-arrow-dunk:before { + content: '\E228'; +} +.game-icon-arrow-flights:before { + content: '\E229'; +} +.game-icon-arrowed:before { + content: '\E22A'; +} +.game-icon-arrowhead:before { + content: '\E22B'; +} +.game-icon-back-forth:before { + content: '\E22C'; +} +.game-icon-barbed-arrow:before { + content: '\E22D'; +} +.game-icon-barbed-spear:before { + content: '\E22E'; +} +.game-icon-bottom-right-3d-arrow:before { + content: '\E22F'; +} +.game-icon-bowman:before { + content: '\E230'; +} +.game-icon-branch-arrow:before { + content: '\E231'; +} +.game-icon-broadhead-arrow:before { + content: '\E232'; +} +.game-icon-chained-arrow-heads:before { + content: '\E233'; +} +.game-icon-charged-arrow:before { + content: '\E234'; +} +.game-icon-cheerful:before { + content: '\E235'; +} +.game-icon-chemical-arrow:before { + content: '\E236'; +} +.game-icon-crosshair-arrow:before { + content: '\E237'; +} +.game-icon-cupidon-arrow:before { + content: '\E238'; +} +.game-icon-divergence:before { + content: '\E239'; +} +.game-icon-divert:before { + content: '\E23A'; +} +.game-icon-double-shot:before { + content: '\E23B'; +} +.game-icon-energy-arrow:before { + content: '\E23C'; +} +.game-icon-falling-boulder:before { + content: '\E23D'; +} +.game-icon-fast-arrow:before { + content: '\E23E'; +} +.game-icon-flaming-arrow:before { + content: '\E23F'; +} +.game-icon-frayed-arrow:before { + content: '\E240'; +} +.game-icon-frozen-arrow:before { + content: '\E241'; +} +.game-icon-headshot:before { + content: '\E242'; +} +.game-icon-heavy-arrow:before { + content: '\E243'; +} +.game-icon-high-shot:before { + content: '\E244'; +} +.game-icon-ice-spear:before { + content: '\E245'; +} +.game-icon-imbricated-arrows:before { + content: '\E246'; +} +.game-icon-impact-point:before { + content: '\E247'; +} +.game-icon-interleaved-arrows:before { + content: '\E248'; +} +.game-icon-lift:before { + content: '\E249'; +} +.game-icon-lob-arrow:before { + content: '\E24A'; +} +.game-icon-middle-arrow:before { + content: '\E24B'; +} +.game-icon-on-target:before { + content: '\E24C'; +} +.game-icon-orb-direction:before { + content: '\E24D'; +} +.game-icon-paper-arrow:before { + content: '\E24E'; +} +.game-icon-pentarrows-tornado:before { + content: '\E24F'; +} +.game-icon-pierced-body:before { + content: '\E250'; +} +.game-icon-pierced-heart:before { + content: '\E251'; +} +.game-icon-piercing-sword:before { + content: '\E252'; +} +.game-icon-pocket-bow:before { + content: '\E253'; +} +.game-icon-profit:before { + content: '\E254'; +} +.game-icon-rally-the-troops:before { + content: '\E255'; +} +.game-icon-rapidshare-arrow:before { + content: '\E256'; +} +.game-icon-return-arrow:before { + content: '\E257'; +} +.game-icon-self-love:before { + content: '\E258'; +} +.game-icon-slicing-arrow:before { + content: '\E259'; +} +.game-icon-smash-arrows:before { + content: '\E25A'; +} +.game-icon-spear-hook:before { + content: '\E25B'; +} +.game-icon-spears:before { + content: '\E25C'; +} +.game-icon-spine-arrow:before { + content: '\E25D'; +} +.game-icon-spiral-arrow:before { + content: '\E25E'; +} +.game-icon-spotted-arrowhead:before { + content: '\E25F'; +} +.game-icon-stone-spear:before { + content: '\E260'; +} +.game-icon-striking-arrows:before { + content: '\E261'; +} +.game-icon-striking-clamps:before { + content: '\E262'; +} +.game-icon-supersonic-arrow:before { + content: '\E263'; +} +.game-icon-target-arrows:before { + content: '\E264'; +} +.game-icon-target-shot:before { + content: '\E265'; +} +.game-icon-thorn-helix:before { + content: '\E266'; +} +.game-icon-thorned-arrow:before { + content: '\E267'; +} +.game-icon-thrown-spear:before { + content: '\E268'; +} +.game-icon-trade:before { + content: '\E269'; +} +.game-icon-tron-arrow:before { + content: '\E26A'; +} +.game-icon-uncertainty:before { + content: '\E26B'; +} +.game-icon-wavy-itinerary:before { + content: '\E26C'; +} +.game-icon-wide-arrow-dunk:before { + content: '\E26D'; +} +.game-icon-william-tell-skull:before { + content: '\E26E'; +} +.game-icon-william-tell:before { + content: '\E26F'; +} +.game-icon-winged-arrow:before { + content: '\E270'; +} +.game-icon-zig-arrow:before { + content: '\E271'; +} +.game-icon-bunker-assault:before { + content: '\E272'; +} +.game-icon-trench-assault:before { + content: '\E273'; +} +.game-icon-fall-down:before { + content: '\E274'; +} +.game-icon-pounce:before { + content: '\E275'; +} +.game-icon-bullseye:before { + content: '\E276'; +} +.game-icon-flying-shuriken:before { + content: '\E277'; +} +.game-icon-kusarigama:before { + content: '\E278'; +} +.game-icon-north-star-shuriken:before { + content: '\E279'; +} +.game-icon-sharp-shuriken:before { + content: '\E27A'; +} +.game-icon-shuriken:before { + content: '\E27B'; +} +.game-icon-star-shuriken:before { + content: '\E27C'; +} +.game-icon-three-pointed-shuriken:before { + content: '\E27D'; +} +.game-icon-whirlpool-shuriken:before { + content: '\E27E'; +} +.game-icon-ninja-star:before { + content: '\E27F'; +} +.game-icon-shepherds-crook:before { + content: '\E280'; +} +.game-icon-armored-boomerang:before { + content: '\E281'; +} +.game-icon-baseball-bat:before { + content: '\E282'; +} +.game-icon-bo:before { + content: '\E283'; +} +.game-icon-bone-mace:before { + content: '\E284'; +} +.game-icon-boomerang-cross:before { + content: '\E285'; +} +.game-icon-boomerang:before { + content: '\E286'; +} +.game-icon-bow-string:before { + content: '\E287'; +} +.game-icon-brass-knuckles:before { + content: '\E288'; +} +.game-icon-broken-axe:before { + content: '\E289'; +} +.game-icon-claymore-explosive:before { + content: '\E28A'; +} +.game-icon-crescent-staff:before { + content: '\E28B'; +} +.game-icon-crowbar:before { + content: '\E28C'; +} +.game-icon-dagger-rose:before { + content: '\E28D'; +} +.game-icon-detonator:before { + content: '\E28E'; +} +.game-icon-flail:before { + content: '\E28F'; +} +.game-icon-flamethrower-soldier:before { + content: '\E290'; +} +.game-icon-flamethrower:before { + content: '\E291'; +} +.game-icon-flanged-mace:before { + content: '\E292'; +} +.game-icon-gun-rose:before { + content: '\E293'; +} +.game-icon-heavy-bullets:before { + content: '\E294'; +} +.game-icon-human-cannonball:before { + content: '\E295'; +} +.game-icon-hunting-bolas:before { + content: '\E296'; +} +.game-icon-laser-turret:before { + content: '\E297'; +} +.game-icon-lasso:before { + content: '\E298'; +} +.game-icon-lead-pipe:before { + content: '\E299'; +} +.game-icon-lunar-wand:before { + content: '\E29A'; +} +.game-icon-magic-trident:before { + content: '\E29B'; +} +.game-icon-missile-launcher:before { + content: '\E29C'; +} +.game-icon-monkey-wrench:before { + content: '\E29D'; +} +.game-icon-mortar:before { + content: '\E29E'; +} +.game-icon-nunchaku:before { + content: '\E29F'; +} +.game-icon-panzerfaust:before { + content: '\E2A0'; +} +.game-icon-reload-gun-barrel:before { + content: '\E2A1'; +} +.game-icon-revolver:before { + content: '\E2A2'; +} +.game-icon-saber-and-pistol:before { + content: '\E2A3'; +} +.game-icon-sai:before { + content: '\E2A4'; +} +.game-icon-sawed-off-shotgun:before { + content: '\E2A5'; +} +.game-icon-sharp-axe:before { + content: '\E2A6'; +} +.game-icon-silver-bullet:before { + content: '\E2A7'; +} +.game-icon-skull-staff:before { + content: '\E2A8'; +} +.game-icon-sling:before { + content: '\E2A9'; +} +.game-icon-slingshot:before { + content: '\E2AA'; +} +.game-icon-stake-hammer:before { + content: '\E2AB'; +} +.game-icon-submarine-missile:before { + content: '\E2AC'; +} +.game-icon-switch-weapon:before { + content: '\E2AD'; +} +.game-icon-sword-brandish:before { + content: '\E2AE'; +} +.game-icon-thor-hammer:before { + content: '\E2AF'; +} +.game-icon-tomahawk:before { + content: '\E2B0'; +} +.game-icon-torpedo:before { + content: '\E2B1'; +} +.game-icon-umbrella-bayonet:before { + content: '\E2B2'; +} +.game-icon-uzi:before { + content: '\E2B3'; +} +.game-icon-walking-turret:before { + content: '\E2B4'; +} +.game-icon-war-axe:before { + content: '\E2B5'; +} +.game-icon-war-pick:before { + content: '\E2B6'; +} +.game-icon-warhammer:before { + content: '\E2B7'; +} +.game-icon-winged-scepter:before { + content: '\E2B8'; +} +.game-icon-wood-club:before { + content: '\E2B9'; +} +.game-icon-zat-gun:before { + content: '\E2BA'; +} +.game-icon-all-for-one:before { + content: '\E2BB'; +} +.game-icon-andromeda-chain:before { + content: '\E2BC'; +} +.game-icon-archery-target:before { + content: '\E2BD'; +} +.game-icon-autogun:before { + content: '\E2BE'; +} +.game-icon-axe-in-stump:before { + content: '\E2BF'; +} +.game-icon-backstab:before { + content: '\E2C0'; +} +.game-icon-battered-axe:before { + content: '\E2C1'; +} +.game-icon-battle-axe:before { + content: '\E2C2'; +} +.game-icon-beam-wake:before { + content: '\E2C3'; +} +.game-icon-blunderbuss:before { + content: '\E2C4'; +} +.game-icon-bolas:before { + content: '\E2C5'; +} +.game-icon-bolter-gun:before { + content: '\E2C6'; +} +.game-icon-broken-bottle:before { + content: '\E2C7'; +} +.game-icon-bullets:before { + content: '\E2C8'; +} +.game-icon-cannon-ball:before { + content: '\E2C9'; +} +.game-icon-cannon-shot:before { + content: '\E2CA'; +} +.game-icon-cannon:before { + content: '\E2CB'; +} +.game-icon-crossed-pistols:before { + content: '\E2CC'; +} +.game-icon-crossed-sabres:before { + content: '\E2CD'; +} +.game-icon-crossed-swords:before { + content: '\E2CE'; +} +.game-icon-crystal-wand:before { + content: '\E2CF'; +} +.game-icon-dripping-knife:before { + content: '\E2D0'; +} +.game-icon-fairy-wand:before { + content: '\E2D1'; +} +.game-icon-flaming-trident:before { + content: '\E2D2'; +} +.game-icon-grapple:before { + content: '\E2D3'; +} +.game-icon-grenade:before { + content: '\E2D4'; +} +.game-icon-gunshot:before { + content: '\E2D5'; +} +.game-icon-halberd-shuriken:before { + content: '\E2D6'; +} +.game-icon-harpoon-chain:before { + content: '\E2D7'; +} +.game-icon-harpoon-trident:before { + content: '\E2D8'; +} +.game-icon-laser-blast:before { + content: '\E2D9'; +} +.game-icon-lightning-bow:before { + content: '\E2DA'; +} +.game-icon-mace-head:before { + content: '\E2DB'; +} +.game-icon-machete:before { + content: '\E2DC'; +} +.game-icon-minigun:before { + content: '\E2DD'; +} +.game-icon-missile-pod:before { + content: '\E2DE'; +} +.game-icon-missile-swarm:before { + content: '\E2DF'; +} +.game-icon-pincers:before { + content: '\E2E0'; +} +.game-icon-ray-gun:before { + content: '\E2E1'; +} +.game-icon-reticule:before { + content: '\E2E2'; +} +.game-icon-saber-slash:before { + content: '\E2E3'; +} +.game-icon-sabers-choc:before { + content: '\E2E4'; +} +.game-icon-sacrificial-dagger:before { + content: '\E2E5'; +} +.game-icon-scalpel-strike:before { + content: '\E2E6'; +} +.game-icon-scythe:before { + content: '\E2E7'; +} +.game-icon-sentry-gun:before { + content: '\E2E8'; +} +.game-icon-shuriken-2:before { + content: '\E2E9'; +} +.game-icon-slavery-whip:before { + content: '\E2EA'; +} +.game-icon-sparkling-sabre:before { + content: '\E2EB'; +} +.game-icon-spiked-mace:before { + content: '\E2EC'; +} +.game-icon-spray:before { + content: '\E2ED'; +} +.game-icon-stiletto:before { + content: '\E2EE'; +} +.game-icon-supersonic-bullet:before { + content: '\E2EF'; +} +.game-icon-sword-clash:before { + content: '\E2F0'; +} +.game-icon-sword-in-stone:before { + content: '\E2F1'; +} +.game-icon-sword-spade:before { + content: '\E2F2'; +} +.game-icon-tesla-turret:before { + content: '\E2F3'; +} +.game-icon-trefoil-shuriken:before { + content: '\E2F4'; +} +.game-icon-trident:before { + content: '\E2F5'; +} +.game-icon-wave-strike:before { + content: '\E2F6'; +} +.game-icon-whip:before { + content: '\E2F7'; +} +.game-icon-winged-sword:before { + content: '\E2F8'; +} +.game-icon-wizard-staff:before { + content: '\E2F9'; +} +.game-icon-anti-aircraft-gun:before { + content: '\E2FA'; +} +.game-icon-field-gun:before { + content: '\E2FB'; +} +.game-icon-ammo-box:before { + content: '\E2FC'; +} +.game-icon-chaingun:before { + content: '\E2FD'; +} +.game-icon-duel:before { + content: '\E2FE'; +} +.game-icon-grenade-2:before { + content: '\E2FF'; +} +.game-icon-laser-gun:before { + content: '\E300'; +} +.game-icon-rifle:before { + content: '\E301'; +} +.game-icon-shotgun:before { + content: '\E302'; +} +.game-icon-turret:before { + content: '\E303'; +} +.game-icon-bayonet:before { + content: '\E304'; +} +.game-icon-drop-weapon:before { + content: '\E305'; +} +.game-icon-gladius:before { + content: '\E306'; +} +.game-icon-lee-enfield:before { + content: '\E307'; +} +.game-icon-luger:before { + content: '\E308'; +} +.game-icon-nuclear-bomb:before { + content: '\E309'; +} +.game-icon-spiked-ball:before { + content: '\E30A'; +} +.game-icon-spiked-bat:before { + content: '\E30B'; +} +.game-icon-stick-grenade:before { + content: '\E30C'; +} +.game-icon-tec-9:before { + content: '\E30D'; +} +.game-icon-telescopic-baton:before { + content: '\E30E'; +} +.game-icon-teller-mine:before { + content: '\E30F'; +} +.game-icon-orb-wand:before { + content: '\E310'; +} +.game-icon-flame:before { + content: '\E311'; +} +.game-icon-bellows:before { + content: '\E312'; +} +.game-icon-brasero:before { + content: '\E313'; +} +.game-icon-burning-forest:before { + content: '\E314'; +} +.game-icon-camp-cooking-pot:before { + content: '\E315'; +} +.game-icon-candles:before { + content: '\E316'; +} +.game-icon-dice-fire:before { + content: '\E317'; +} +.game-icon-fire-extinguisher:before { + content: '\E318'; +} +.game-icon-fire-flower:before { + content: '\E319'; +} +.game-icon-fire-gem:before { + content: '\E31A'; +} +.game-icon-fire-shrine:before { + content: '\E31B'; +} +.game-icon-fire-spell-cast:before { + content: '\E31C'; +} +.game-icon-fireplace:before { + content: '\E31D'; +} +.game-icon-firewall:before { + content: '\E31E'; +} +.game-icon-fish-smoking:before { + content: '\E31F'; +} +.game-icon-flint-spark:before { + content: '\E320'; +} +.game-icon-furnace:before { + content: '\E321'; +} +.game-icon-gas-stove:before { + content: '\E322'; +} +.game-icon-lighter:before { + content: '\E323'; +} +.game-icon-lightning-flame:before { + content: '\E324'; +} +.game-icon-marshmallows:before { + content: '\E325'; +} +.game-icon-matchbox:before { + content: '\E326'; +} +.game-icon-primitive-torch:before { + content: '\E327'; +} +.game-icon-pyre:before { + content: '\E328'; +} +.game-icon-torch:before { + content: '\E329'; +} +.game-icon-alien-fire:before { + content: '\E32A'; +} +.game-icon-arson:before { + content: '\E32B'; +} +.game-icon-burning-book:before { + content: '\E32C'; +} +.game-icon-burning-dot:before { + content: '\E32D'; +} +.game-icon-burning-embers:before { + content: '\E32E'; +} +.game-icon-burning-eye:before { + content: '\E32F'; +} +.game-icon-burning-meteor:before { + content: '\E330'; +} +.game-icon-burning-passion:before { + content: '\E331'; +} +.game-icon-burning-tree:before { + content: '\E332'; +} +.game-icon-caldera:before { + content: '\E333'; +} +.game-icon-campfire:before { + content: '\E334'; +} +.game-icon-candle-flame:before { + content: '\E335'; +} +.game-icon-candle-holder:before { + content: '\E336'; +} +.game-icon-candle-light:before { + content: '\E337'; +} +.game-icon-candlebright:before { + content: '\E338'; +} +.game-icon-celebration-fire:before { + content: '\E339'; +} +.game-icon-dragon-breath:before { + content: '\E33A'; +} +.game-icon-ember-shot:before { + content: '\E33B'; +} +.game-icon-eruption:before { + content: '\E33C'; +} +.game-icon-fire-ace:before { + content: '\E33D'; +} +.game-icon-fire-axe:before { + content: '\E33E'; +} +.game-icon-fire-bomb:before { + content: '\E33F'; +} +.game-icon-fire-bottle:before { + content: '\E340'; +} +.game-icon-fire-bowl:before { + content: '\E341'; +} +.game-icon-fire-breath:before { + content: '\E342'; +} +.game-icon-fire-dash:before { + content: '\E343'; +} +.game-icon-fire-punch:before { + content: '\E344'; +} +.game-icon-fire-ray:before { + content: '\E345'; +} +.game-icon-fire-ring:before { + content: '\E346'; +} +.game-icon-fire-silhouette:before { + content: '\E347'; +} +.game-icon-fire-tail:before { + content: '\E348'; +} +.game-icon-fire-wave:before { + content: '\E349'; +} +.game-icon-fire-zone:before { + content: '\E34A'; +} +.game-icon-fireball:before { + content: '\E34B'; +} +.game-icon-firework-rocket:before { + content: '\E34C'; +} +.game-icon-flame-claws:before { + content: '\E34D'; +} +.game-icon-flame-spin:before { + content: '\E34E'; +} +.game-icon-flame-tunnel:before { + content: '\E34F'; +} +.game-icon-flamed-leaf:before { + content: '\E350'; +} +.game-icon-flaming-claw:before { + content: '\E351'; +} +.game-icon-flaming-sheet:before { + content: '\E352'; +} +.game-icon-fluffy-flame:before { + content: '\E353'; +} +.game-icon-frostfire:before { + content: '\E354'; +} +.game-icon-heartburn:before { + content: '\E355'; +} +.game-icon-heat-haze:before { + content: '\E356'; +} +.game-icon-hot-spices:before { + content: '\E357'; +} +.game-icon-ifrit:before { + content: '\E358'; +} +.game-icon-kindle:before { + content: '\E359'; +} +.game-icon-lantern-flame:before { + content: '\E35A'; +} +.game-icon-lit-candelabra:before { + content: '\E35B'; +} +.game-icon-match-head:before { + content: '\E35C'; +} +.game-icon-match-tip:before { + content: '\E35D'; +} +.game-icon-molotov:before { + content: '\E35E'; +} +.game-icon-plasma-bolt:before { + content: '\E35F'; +} +.game-icon-pyromaniac:before { + content: '\E360'; +} +.game-icon-salamander:before { + content: '\E361'; +} +.game-icon-small-fire:before { + content: '\E362'; +} +.game-icon-spark-spirit:before { + content: '\E363'; +} +.game-icon-three-burning-balls:before { + content: '\E364'; +} +.game-icon-thrown-charcoal:before { + content: '\E365'; +} +.game-icon-unfriendly-fire:before { + content: '\E366'; +} +.game-icon-volcano:before { + content: '\E367'; +} +.game-icon-wildfires:before { + content: '\E368'; +} +.game-icon-blast:before { + content: '\E369'; +} +.game-icon-blaster:before { + content: '\E36A'; +} +.game-icon-burn:before { + content: '\E36B'; +} +.game-icon-fire:before { + content: '\E36C'; +} +.game-icon-fireflake:before { + content: '\E36D'; +} +.game-icon-flamer:before { + content: '\E36E'; +} +.game-icon-hot-surface:before { + content: '\E36F'; +} +.game-icon-lava:before { + content: '\E370'; +} +.game-icon-lucifer-cannon:before { + content: '\E371'; +} +.game-icon-burning-skull:before { + content: '\E372'; +} +.game-icon-mite-alt:before { + content: '\E373'; +} +.game-icon-spider-alt:before { + content: '\E374'; +} +.game-icon-spider-face:before { + content: '\E375'; +} +.game-icon-earth-worm:before { + content: '\E376'; +} +.game-icon-flying-trout:before { + content: '\E377'; +} +.game-icon-polar-bear:before { + content: '\E378'; +} +.game-icon-plants-and-animals:before { + content: '\E379'; +} +.game-icon-animal-hide:before { + content: '\E37A'; +} +.game-icon-bat-2:before { + content: '\E37B'; +} +.game-icon-bear-head:before { + content: '\E37C'; +} +.game-icon-camel-head:before { + content: '\E37D'; +} +.game-icon-cassowary-head:before { + content: '\E37E'; +} +.game-icon-charging-bull:before { + content: '\E37F'; +} +.game-icon-chicken:before { + content: '\E380'; +} +.game-icon-clownfish:before { + content: '\E381'; +} +.game-icon-cow:before { + content: '\E382'; +} +.game-icon-cricket:before { + content: '\E383'; +} +.game-icon-deer-track:before { + content: '\E384'; +} +.game-icon-dog-bowl:before { + content: '\E385'; +} +.game-icon-dog-house:before { + content: '\E386'; +} +.game-icon-dolphin:before { + content: '\E387'; +} +.game-icon-duck:before { + content: '\E388'; +} +.game-icon-eagle-head:before { + content: '\E389'; +} +.game-icon-elephant-head:before { + content: '\E38A'; +} +.game-icon-elephant:before { + content: '\E38B'; +} +.game-icon-falcon-moon:before { + content: '\E38C'; +} +.game-icon-feline:before { + content: '\E38D'; +} +.game-icon-finch:before { + content: '\E38E'; +} +.game-icon-flamingo:before { + content: '\E38F'; +} +.game-icon-fox-tail:before { + content: '\E390'; +} +.game-icon-giant-squid:before { + content: '\E391'; +} +.game-icon-gorilla:before { + content: '\E392'; +} +.game-icon-griffin-symbol:before { + content: '\E393'; +} +.game-icon-honey-jar:before { + content: '\E394'; +} +.game-icon-horse-head:before { + content: '\E395'; +} +.game-icon-ivory-tusks:before { + content: '\E396'; +} +.game-icon-kangaroo:before { + content: '\E397'; +} +.game-icon-koala:before { + content: '\E398'; +} +.game-icon-labrador-head:before { + content: '\E399'; +} +.game-icon-lynx-head:before { + content: '\E39A'; +} +.game-icon-manta-ray:before { + content: '\E39B'; +} +.game-icon-moon-bats:before { + content: '\E39C'; +} +.game-icon-panda:before { + content: '\E39D'; +} +.game-icon-penguin:before { + content: '\E39E'; +} +.game-icon-pinata:before { + content: '\E39F'; +} +.game-icon-praying-mantis:before { + content: '\E3A0'; +} +.game-icon-rabbit:before { + content: '\E3A1'; +} +.game-icon-rat:before { + content: '\E3A2'; +} +.game-icon-rhinoceros-horn:before { + content: '\E3A3'; +} +.game-icon-rooster:before { + content: '\E3A4'; +} +.game-icon-saddle:before { + content: '\E3A5'; +} +.game-icon-sea-star:before { + content: '\E3A6'; +} +.game-icon-seahorse:before { + content: '\E3A7'; +} +.game-icon-shark-bite:before { + content: '\E3A8'; +} +.game-icon-shark-fin:before { + content: '\E3A9'; +} +.game-icon-sheep:before { + content: '\E3AA'; +} +.game-icon-snail-eyes:before { + content: '\E3AB'; +} +.game-icon-sperm-whale:before { + content: '\E3AC'; +} +.game-icon-stable:before { + content: '\E3AD'; +} +.game-icon-tiger-head:before { + content: '\E3AE'; +} +.game-icon-tiger:before { + content: '\E3AF'; +} +.game-icon-tortoise:before { + content: '\E3B0'; +} +.game-icon-toucan:before { + content: '\E3B1'; +} +.game-icon-trojan-horse:before { + content: '\E3B2'; +} +.game-icon-udder:before { + content: '\E3B3'; +} +.game-icon-whale-tail:before { + content: '\E3B4'; +} +.game-icon-wool:before { + content: '\E3B5'; +} +.game-icon-worms:before { + content: '\E3B6'; +} +.game-icon-yarn:before { + content: '\E3B7'; +} +.game-icon-ammonite-fossil:before { + content: '\E3B8'; +} +.game-icon-ammonite:before { + content: '\E3B9'; +} +.game-icon-angler-fish:before { + content: '\E3BA'; +} +.game-icon-angular-spider:before { + content: '\E3BB'; +} +.game-icon-animal-skull:before { + content: '\E3BC'; +} +.game-icon-armadillo-tail:before { + content: '\E3BD'; +} +.game-icon-bat-wing:before { + content: '\E3BE'; +} +.game-icon-bee:before { + content: '\E3BF'; +} +.game-icon-bird-twitter:before { + content: '\E3C0'; +} +.game-icon-boar-tusks:before { + content: '\E3C1'; +} +.game-icon-bull-horns:before { + content: '\E3C2'; +} +.game-icon-bull:before { + content: '\E3C3'; +} +.game-icon-butterfly-warning:before { + content: '\E3C4'; +} +.game-icon-butterfly:before { + content: '\E3C5'; +} +.game-icon-cat:before { + content: '\E3C6'; +} +.game-icon-centipede:before { + content: '\E3C7'; +} +.game-icon-chicken-leg:before { + content: '\E3C8'; +} +.game-icon-cobweb:before { + content: '\E3C9'; +} +.game-icon-crab-claw:before { + content: '\E3CA'; +} +.game-icon-crab:before { + content: '\E3CB'; +} +.game-icon-croc-jaws:before { + content: '\E3CC'; +} +.game-icon-crossed-claws:before { + content: '\E3CD'; +} +.game-icon-crow-dive:before { + content: '\E3CE'; +} +.game-icon-desert-skull:before { + content: '\E3CF'; +} +.game-icon-dinosaur-rex:before { + content: '\E3D0'; +} +.game-icon-dragonfly:before { + content: '\E3D1'; +} +.game-icon-earwig:before { + content: '\E3D2'; +} +.game-icon-evil-bat:before { + content: '\E3D3'; +} +.game-icon-fish-corpse:before { + content: '\E3D4'; +} +.game-icon-fishbone:before { + content: '\E3D5'; +} +.game-icon-flat-paw-print:before { + content: '\E3D6'; +} +.game-icon-food-chain:before { + content: '\E3D7'; +} +.game-icon-fox-head:before { + content: '\E3D8'; +} +.game-icon-frog:before { + content: '\E3D9'; +} +.game-icon-gecko:before { + content: '\E3DA'; +} +.game-icon-gold-scarab:before { + content: '\E3DB'; +} +.game-icon-grasping-claws:before { + content: '\E3DC'; +} +.game-icon-hanging-spider:before { + content: '\E3DD'; +} +.game-icon-hollow-cat:before { + content: '\E3DE'; +} +.game-icon-hoof:before { + content: '\E3DF'; +} +.game-icon-horse-head-2:before { + content: '\E3E0'; +} +.game-icon-hound:before { + content: '\E3E1'; +} +.game-icon-insect-jaws:before { + content: '\E3E2'; +} +.game-icon-jellyfish:before { + content: '\E3E3'; +} +.game-icon-lamprey-mouth:before { + content: '\E3E4'; +} +.game-icon-leeching-worm:before { + content: '\E3E5'; +} +.game-icon-lion:before { + content: '\E3E6'; +} +.game-icon-maggot:before { + content: '\E3E7'; +} +.game-icon-masked-spider:before { + content: '\E3E8'; +} +.game-icon-minotaur:before { + content: '\E3E9'; +} +.game-icon-mite:before { + content: '\E3EA'; +} +.game-icon-monkey:before { + content: '\E3EB'; +} +.game-icon-mouse:before { + content: '\E3EC'; +} +.game-icon-octopus:before { + content: '\E3ED'; +} +.game-icon-ouroboros:before { + content: '\E3EE'; +} +.game-icon-owl:before { + content: '\E3EF'; +} +.game-icon-parmecia:before { + content: '\E3F0'; +} +.game-icon-parrot-head:before { + content: '\E3F1'; +} +.game-icon-paw-front:before { + content: '\E3F2'; +} +.game-icon-paw-heart:before { + content: '\E3F3'; +} +.game-icon-paw-print:before { + content: '\E3F4'; +} +.game-icon-paw:before { + content: '\E3F5'; +} +.game-icon-raven:before { + content: '\E3F6'; +} +.game-icon-roast-chicken:before { + content: '\E3F7'; +} +.game-icon-sad-crab:before { + content: '\E3F8'; +} +.game-icon-scarab-beetle:before { + content: '\E3F9'; +} +.game-icon-scorpion-tail:before { + content: '\E3FA'; +} +.game-icon-scorpion:before { + content: '\E3FB'; +} +.game-icon-sea-serpent:before { + content: '\E3FC'; +} +.game-icon-seated-mouse:before { + content: '\E3FD'; +} +.game-icon-shark-jaws:before { + content: '\E3FE'; +} +.game-icon-snail:before { + content: '\E3FF'; +} +.game-icon-snake-bite:before { + content: '\E400'; +} +.game-icon-snake-totem:before { + content: '\E401'; +} +.game-icon-snake:before { + content: '\E402'; +} +.game-icon-sonic-screech:before { + content: '\E403'; +} +.game-icon-spider-web:before { + content: '\E404'; +} +.game-icon-spiked-snail:before { + content: '\E405'; +} +.game-icon-squid-head:before { + content: '\E406'; +} +.game-icon-squid:before { + content: '\E407'; +} +.game-icon-stag-head:before { + content: '\E408'; +} +.game-icon-stomp:before { + content: '\E409'; +} +.game-icon-swan:before { + content: '\E40A'; +} +.game-icon-tick:before { + content: '\E40B'; +} +.game-icon-top-paw:before { + content: '\E40C'; +} +.game-icon-trilobite:before { + content: '\E40D'; +} +.game-icon-turd:before { + content: '\E40E'; +} +.game-icon-turtle-shell:before { + content: '\E40F'; +} +.game-icon-turtle:before { + content: '\E410'; +} +.game-icon-virus:before { + content: '\E411'; +} +.game-icon-vulture:before { + content: '\E412'; +} +.game-icon-wasp-sting:before { + content: '\E413'; +} +.game-icon-web-spit:before { + content: '\E414'; +} +.game-icon-werewolf:before { + content: '\E415'; +} +.game-icon-wolf-head:before { + content: '\E416'; +} +.game-icon-wolf-howl:before { + content: '\E417'; +} +.game-icon-wolverine-claws:before { + content: '\E418'; +} +.game-icon-worm-mouth:before { + content: '\E419'; +} +.game-icon-big-egg:before { + content: '\E41A'; +} +.game-icon-claw:before { + content: '\E41B'; +} +.game-icon-poison:before { + content: '\E41C'; +} +.game-icon-bear-face:before { + content: '\E41D'; +} +.game-icon-donkey:before { + content: '\E41E'; +} +.game-icon-goat:before { + content: '\E41F'; +} +.game-icon-long-legged-spider:before { + content: '\E420'; +} +.game-icon-mounted-knight:before { + content: '\E421'; +} +.game-icon-pegasus:before { + content: '\E422'; +} +.game-icon-pig:before { + content: '\E423'; +} +.game-icon-amber-mosquito:before { + content: '\E424'; +} +.game-icon-ant:before { + content: '\E425'; +} +.game-icon-ants:before { + content: '\E426'; +} +.game-icon-beehive:before { + content: '\E427'; +} +.game-icon-bug-net:before { + content: '\E428'; +} +.game-icon-butterfly-flower:before { + content: '\E429'; +} +.game-icon-caterpillar:before { + content: '\E42A'; +} +.game-icon-cigale:before { + content: '\E42B'; +} +.game-icon-claws:before { + content: '\E42C'; +} +.game-icon-fly:before { + content: '\E42D'; +} +.game-icon-flying-beetle:before { + content: '\E42E'; +} +.game-icon-ladybug:before { + content: '\E42F'; +} +.game-icon-shrimp:before { + content: '\E430'; +} +.game-icon-spider-eye:before { + content: '\E431'; +} +.game-icon-tree-beehive:before { + content: '\E432'; +} +.game-icon-apple-maggot:before { + content: '\E433'; +} +.game-icon-beetle-shell:before { + content: '\E434'; +} +.game-icon-dripping-honey:before { + content: '\E435'; +} +.game-icon-long-antennae-bug:before { + content: '\E436'; +} +.game-icon-opening-shell:before { + content: '\E437'; +} +.game-icon-spotted-bug:before { + content: '\E438'; +} +.game-icon-acrobatic:before { + content: '\E439'; +} +.game-icon-catch:before { + content: '\E43A'; +} +.game-icon-running-ninja:before { + content: '\E43B'; +} +.game-icon-button-finger:before { + content: '\E43C'; +} +.game-icon-chat-bubble:before { + content: '\E43D'; +} +.game-icon-choice:before { + content: '\E43E'; +} +.game-icon-convince:before { + content: '\E43F'; +} +.game-icon-crafting:before { + content: '\E440'; +} +.game-icon-discussion:before { + content: '\E441'; +} +.game-icon-drinking:before { + content: '\E442'; +} +.game-icon-eating:before { + content: '\E443'; +} +.game-icon-flying-fox:before { + content: '\E444'; +} +.game-icon-hiking:before { + content: '\E445'; +} +.game-icon-hive-mind:before { + content: '\E446'; +} +.game-icon-jump-across:before { + content: '\E447'; +} +.game-icon-kneeling:before { + content: '\E448'; +} +.game-icon-leapfrog:before { + content: '\E449'; +} +.game-icon-look-at:before { + content: '\E44A'; +} +.game-icon-miner:before { + content: '\E44B'; +} +.game-icon-night-sleep:before { + content: '\E44C'; +} +.game-icon-public-speaker:before { + content: '\E44D'; +} +.game-icon-pull:before { + content: '\E44E'; +} +.game-icon-push:before { + content: '\E44F'; +} +.game-icon-shaking-hands:before { + content: '\E450'; +} +.game-icon-shrug:before { + content: '\E451'; +} +.game-icon-skills:before { + content: '\E452'; +} +.game-icon-stairs-goal:before { + content: '\E453'; +} +.game-icon-teacher:before { + content: '\E454'; +} +.game-icon-team-idea:before { + content: '\E455'; +} +.game-icon-think:before { + content: '\E456'; +} +.game-icon-throwing-ball:before { + content: '\E457'; +} +.game-icon-uprising:before { + content: '\E458'; +} +.game-icon-vote:before { + content: '\E459'; +} +.game-icon-walk:before { + content: '\E45A'; +} +.game-icon-boot-kick:before { + content: '\E45B'; +} +.game-icon-boot-stomp:before { + content: '\E45C'; +} +.game-icon-disintegrate:before { + content: '\E45D'; +} +.game-icon-dodging:before { + content: '\E45E'; +} +.game-icon-drowning:before { + content: '\E45F'; +} +.game-icon-fruiting:before { + content: '\E460'; +} +.game-icon-grab:before { + content: '\E461'; +} +.game-icon-journey:before { + content: '\E462'; +} +.game-icon-juggler:before { + content: '\E463'; +} +.game-icon-meditation:before { + content: '\E464'; +} +.game-icon-mining:before { + content: '\E465'; +} +.game-icon-muscle-up:before { + content: '\E466'; +} +.game-icon-pointing:before { + content: '\E467'; +} +.game-icon-pouring-chalice:before { + content: '\E468'; +} +.game-icon-prayer:before { + content: '\E469'; +} +.game-icon-run:before { + content: '\E46A'; +} +.game-icon-screaming:before { + content: '\E46B'; +} +.game-icon-shouting:before { + content: '\E46C'; +} +.game-icon-sing:before { + content: '\E46D'; +} +.game-icon-slap:before { + content: '\E46E'; +} +.game-icon-snatch:before { + content: '\E46F'; +} +.game-icon-sprint:before { + content: '\E470'; +} +.game-icon-stick-splitting:before { + content: '\E471'; +} +.game-icon-stone-crafting:before { + content: '\E472'; +} +.game-icon-swallow:before { + content: '\E473'; +} +.game-icon-targeting:before { + content: '\E474'; +} +.game-icon-tearing:before { + content: '\E475'; +} +.game-icon-teleport:before { + content: '\E476'; +} +.game-icon-transfuse:before { + content: '\E477'; +} +.game-icon-vomiting:before { + content: '\E478'; +} +.game-icon-crush:before { + content: '\E479'; +} +.game-icon-amputation:before { + content: '\E47A'; +} +.game-icon-read:before { + content: '\E47B'; +} +.game-icon-talk:before { + content: '\E47C'; +} +.game-icon-africa:before { + content: '\E47D'; +} +.game-icon-algeria:before { + content: '\E47E'; +} +.game-icon-angola:before { + content: '\E47F'; +} +.game-icon-antarctica:before { + content: '\E480'; +} +.game-icon-atlas:before { + content: '\E481'; +} +.game-icon-australia:before { + content: '\E482'; +} +.game-icon-belgium:before { + content: '\E483'; +} +.game-icon-binoculars:before { + content: '\E484'; +} +.game-icon-black-sea:before { + content: '\E485'; +} +.game-icon-bolivia:before { + content: '\E486'; +} +.game-icon-brazil:before { + content: '\E487'; +} +.game-icon-bulgaria:before { + content: '\E488'; +} +.game-icon-cambodia:before { + content: '\E489'; +} +.game-icon-colombia:before { + content: '\E48A'; +} +.game-icon-corsica:before { + content: '\E48B'; +} +.game-icon-crossroad:before { + content: '\E48C'; +} +.game-icon-direction-signs:before { + content: '\E48D'; +} +.game-icon-earth-africa-europe:before { + content: '\E48E'; +} +.game-icon-earth-america:before { + content: '\E48F'; +} +.game-icon-earth-asia-oceania:before { + content: '\E490'; +} +.game-icon-ecology:before { + content: '\E491'; +} +.game-icon-egypt:before { + content: '\E492'; +} +.game-icon-france:before { + content: '\E493'; +} +.game-icon-guatemala:before { + content: '\E494'; +} +.game-icon-hungary:before { + content: '\E495'; +} +.game-icon-iceland:before { + content: '\E496'; +} +.game-icon-iraq:before { + content: '\E497'; +} +.game-icon-italia:before { + content: '\E498'; +} +.game-icon-japan:before { + content: '\E499'; +} +.game-icon-kenya:before { + content: '\E49A'; +} +.game-icon-latvia:before { + content: '\E49B'; +} +.game-icon-libya:before { + content: '\E49C'; +} +.game-icon-mesh-network:before { + content: '\E49D'; +} +.game-icon-mexico:before { + content: '\E49E'; +} +.game-icon-moldova:before { + content: '\E49F'; +} +.game-icon-mongolia:before { + content: '\E4A0'; +} +.game-icon-nigeria:before { + content: '\E4A1'; +} +.game-icon-paraguay:before { + content: '\E4A2'; +} +.game-icon-path-distance:before { + content: '\E4A3'; +} +.game-icon-peru:before { + content: '\E4A4'; +} +.game-icon-portugal:before { + content: '\E4A5'; +} +.game-icon-position-marker:before { + content: '\E4A6'; +} +.game-icon-radar-cross-section:before { + content: '\E4A7'; +} +.game-icon-road:before { + content: '\E4A8'; +} +.game-icon-sextant:before { + content: '\E4A9'; +} +.game-icon-south-africa:before { + content: '\E4AA'; +} +.game-icon-south-america:before { + content: '\E4AB'; +} +.game-icon-south-korea:before { + content: '\E4AC'; +} +.game-icon-spain:before { + content: '\E4AD'; +} +.game-icon-sri-lanka:before { + content: '\E4AE'; +} +.game-icon-switzerland:before { + content: '\E4AF'; +} +.game-icon-tanzania:before { + content: '\E4B0'; +} +.game-icon-texas:before { + content: '\E4B1'; +} +.game-icon-trail:before { + content: '\E4B2'; +} +.game-icon-tunisia:before { + content: '\E4B3'; +} +.game-icon-uruguay:before { + content: '\E4B4'; +} +.game-icon-venezuela:before { + content: '\E4B5'; +} +.game-icon-wireframe-globe:before { + content: '\E4B6'; +} +.game-icon-compass:before { + content: '\E4B7'; +} +.game-icon-globe:before { + content: '\E4B8'; +} +.game-icon-spyglass:before { + content: '\E4B9'; +} +.game-icon-treasure-map:before { + content: '\E4BA'; +} +.game-icon-wooden-sign:before { + content: '\E4BB'; +} +.game-icon-world:before { + content: '\E4BC'; +} +.game-icon-digital-trace:before { + content: '\E4BD'; +} +.game-icon-orbit:before { + content: '\E4BE'; +} +.game-icon-battleship:before { + content: '\E4BF'; +} +.game-icon-great-war-tank:before { + content: '\E4C0'; +} +.game-icon-occupy:before { + content: '\E4C1'; +} +.game-icon-barracks-tent:before { + content: '\E4C2'; +} +.game-icon-barracks:before { + content: '\E4C3'; +} +.game-icon-caltrops:before { + content: '\E4C4'; +} +.game-icon-hammer-sickle:before { + content: '\E4C5'; +} +.game-icon-military-fort:before { + content: '\E4C6'; +} +.game-icon-union-jack:before { + content: '\E4C7'; +} +.game-icon-usa-flag:before { + content: '\E4C8'; +} +.game-icon-battle-tank:before { + content: '\E4C9'; +} +.game-icon-bombing-run:before { + content: '\E4CA'; +} +.game-icon-gas-mask:before { + content: '\E4CB'; +} +.game-icon-mushroom-cloud:before { + content: '\E4CC'; +} +.game-icon-sunrise:before { + content: '\E4CD'; +} +.game-icon-tank:before { + content: '\E4CE'; +} +.game-icon-artillery-shell:before { + content: '\E4CF'; +} +.game-icon-biplane:before { + content: '\E4D0'; +} +.game-icon-bunker:before { + content: '\E4D1'; +} +.game-icon-damaged-house:before { + content: '\E4D2'; +} +.game-icon-lost-limb:before { + content: '\E4D3'; +} +.game-icon-military-ambulance:before { + content: '\E4D4'; +} +.game-icon-c96:before { + content: '\E4D5'; +} +.game-icon-carpet-bombing:before { + content: '\E4D6'; +} +.game-icon-flatbed-covered:before { + content: '\E4D7'; +} +.game-icon-flatbed:before { + content: '\E4D8'; +} +.game-icon-mp-40:before { + content: '\E4D9'; +} +.game-icon-tank-tread:before { + content: '\E4DA'; +} +.game-icon-thompson-m1:before { + content: '\E4DB'; +} +.game-icon-trench-body-armor:before { + content: '\E4DC'; +} +.game-icon-trench-knife:before { + content: '\E4DD'; +} +.game-icon-trench-spade:before { + content: '\E4DE'; +} +.game-icon-bad-gnome:before { + content: '\E4DF'; +} +.game-icon-boar-ensign:before { + content: '\E4E0'; +} +.game-icon-carnyx:before { + content: '\E4E1'; +} +.game-icon-fomorian:before { + content: '\E4E2'; +} +.game-icon-holy-oak:before { + content: '\E4E3'; +} +.game-icon-oppidum:before { + content: '\E4E4'; +} +.game-icon-torc:before { + content: '\E4E5'; +} +.game-icon-tree-face:before { + content: '\E4E6'; +} +.game-icon-bagpipes:before { + content: '\E4E7'; +} +.game-icon-harp:before { + content: '\E4E8'; +} +.game-icon-magic-potion:before { + content: '\E4E9'; +} +.game-icon-sickle:before { + content: '\E4EA'; +} +.game-icon-heavy-thorny-triskelion:before { + content: '\E4EB'; +} +.game-icon-robe:before { + content: '\E4EC'; +} +.game-icon-medusa-head:before { + content: '\E4ED'; +} +.game-icon-transparent-slime:before { + content: '\E4EE'; +} +.game-icon-dragon-head-2:before { + content: '\E4EF'; +} +.game-icon-alien-bug:before { + content: '\E4F0'; +} +.game-icon-alien-egg:before { + content: '\E4F1'; +} +.game-icon-anubis:before { + content: '\E4F2'; +} +.game-icon-bottled-shadow:before { + content: '\E4F3'; +} +.game-icon-brain-tentacle:before { + content: '\E4F4'; +} +.game-icon-brute:before { + content: '\E4F5'; +} +.game-icon-bullet-bill:before { + content: '\E4F6'; +} +.game-icon-bully-minion:before { + content: '\E4F7'; +} +.game-icon-carnivorous-plant:before { + content: '\E4F8'; +} +.game-icon-ceiling-barnacle:before { + content: '\E4F9'; +} +.game-icon-centaur:before { + content: '\E4FA'; +} +.game-icon-daemon-pull:before { + content: '\E4FB'; +} +.game-icon-devil-mask:before { + content: '\E4FC'; +} +.game-icon-djinn:before { + content: '\E4FD'; +} +.game-icon-drakkar-dragon:before { + content: '\E4FE'; +} +.game-icon-egyptian-sphinx:before { + content: '\E4FF'; +} +.game-icon-fairy:before { + content: '\E500'; +} +.game-icon-floating-ghost:before { + content: '\E501'; +} +.game-icon-floating-tentacles:before { + content: '\E502'; +} +.game-icon-gargoyle:before { + content: '\E503'; +} +.game-icon-giant:before { + content: '\E504'; +} +.game-icon-grasping-slug:before { + content: '\E505'; +} +.game-icon-greek-sphinx:before { + content: '\E506'; +} +.game-icon-half-body-crawling:before { + content: '\E507'; +} +.game-icon-horned-reptile:before { + content: '\E508'; +} +.game-icon-horus:before { + content: '\E509'; +} +.game-icon-ice-golem:before { + content: '\E50A'; +} +.game-icon-jawless-cyclop:before { + content: '\E50B'; +} +.game-icon-kraken-tentacle:before { + content: '\E50C'; +} +.game-icon-mermaid:before { + content: '\E50D'; +} +.game-icon-metroid:before { + content: '\E50E'; +} +.game-icon-mimic-chest:before { + content: '\E50F'; +} +.game-icon-mummy-head:before { + content: '\E510'; +} +.game-icon-oni:before { + content: '\E511'; +} +.game-icon-pick-of-destiny:before { + content: '\E512'; +} +.game-icon-purple-tentacle:before { + content: '\E513'; +} +.game-icon-resting-vampire:before { + content: '\E514'; +} +.game-icon-rock-golem:before { + content: '\E515'; +} +.game-icon-sasquatch:before { + content: '\E516'; +} +.game-icon-shambling-mound:before { + content: '\E517'; +} +.game-icon-shambling-zombie:before { + content: '\E518'; +} +.game-icon-slime:before { + content: '\E519'; +} +.game-icon-spiked-dragon-head:before { + content: '\E51A'; +} +.game-icon-swallower:before { + content: '\E51B'; +} +.game-icon-swamp-bat:before { + content: '\E51C'; +} +.game-icon-thwomp:before { + content: '\E51D'; +} +.game-icon-troglodyte:before { + content: '\E51E'; +} +.game-icon-unicorn:before { + content: '\E51F'; +} +.game-icon-beast-eye:before { + content: '\E520'; +} +.game-icon-behold:before { + content: '\E521'; +} +.game-icon-bestial-fangs:before { + content: '\E522'; +} +.game-icon-cracked-alien-skull:before { + content: '\E523'; +} +.game-icon-cyclops:before { + content: '\E524'; +} +.game-icon-daemon-skull:before { + content: '\E525'; +} +.game-icon-dinosaur-bones:before { + content: '\E526'; +} +.game-icon-dinosaur-egg:before { + content: '\E527'; +} +.game-icon-double-dragon:before { + content: '\E528'; +} +.game-icon-dragon-spiral:before { + content: '\E529'; +} +.game-icon-ent-mouth:before { + content: '\E52A'; +} +.game-icon-evil-book:before { + content: '\E52B'; +} +.game-icon-evil-comet:before { + content: '\E52C'; +} +.game-icon-evil-fork:before { + content: '\E52D'; +} +.game-icon-evil-minion:before { + content: '\E52E'; +} +.game-icon-evil-moon:before { + content: '\E52F'; +} +.game-icon-evil-tree:before { + content: '\E530'; +} +.game-icon-eyestalk:before { + content: '\E531'; +} +.game-icon-fairy-2:before { + content: '\E532'; +} +.game-icon-fleshy-mass:before { + content: '\E533'; +} +.game-icon-frankenstein-creature:before { + content: '\E534'; +} +.game-icon-ghost:before { + content: '\E535'; +} +.game-icon-gluttonous-smile:before { + content: '\E536'; +} +.game-icon-gooey-daemon:before { + content: '\E537'; +} +.game-icon-grim-reaper:before { + content: '\E538'; +} +.game-icon-harpy:before { + content: '\E539'; +} +.game-icon-haunting:before { + content: '\E53A'; +} +.game-icon-horned-skull:before { + content: '\E53B'; +} +.game-icon-hydra-shot:before { + content: '\E53C'; +} +.game-icon-hydra:before { + content: '\E53D'; +} +.game-icon-imp-laugh:before { + content: '\E53E'; +} +.game-icon-imp:before { + content: '\E53F'; +} +.game-icon-infested-mass:before { + content: '\E540'; +} +.game-icon-lizardman:before { + content: '\E541'; +} +.game-icon-pretty-fangs:before { + content: '\E542'; +} +.game-icon-sea-dragon:before { + content: '\E543'; +} +.game-icon-sharp-smile:before { + content: '\E544'; +} +.game-icon-spectre:before { + content: '\E545'; +} +.game-icon-toad-teeth:before { + content: '\E546'; +} +.game-icon-triton-head:before { + content: '\E547'; +} +.game-icon-vile-fluid:before { + content: '\E548'; +} +.game-icon-witch-flight:before { + content: '\E549'; +} +.game-icon-wyvern:before { + content: '\E54A'; +} +.game-icon-sea-creature:before { + content: '\E54B'; +} +.game-icon-carrier:before { + content: '\E54C'; +} +.game-icon-cruiser:before { + content: '\E54D'; +} +.game-icon-dreadnought:before { + content: '\E54E'; +} +.game-icon-iron-hulled-warship:before { + content: '\E54F'; +} +.game-icon-boat-engine:before { + content: '\E550'; +} +.game-icon-boat-fishing:before { + content: '\E551'; +} +.game-icon-boat-horizon:before { + content: '\E552'; +} +.game-icon-boat-propeller:before { + content: '\E553'; +} +.game-icon-canoe:before { + content: '\E554'; +} +.game-icon-caravel:before { + content: '\E555'; +} +.game-icon-cargo-ship:before { + content: '\E556'; +} +.game-icon-crow-nest:before { + content: '\E557'; +} +.game-icon-drakkar:before { + content: '\E558'; +} +.game-icon-figurehead:before { + content: '\E559'; +} +.game-icon-fishing-boat:before { + content: '\E55A'; +} +.game-icon-galley:before { + content: '\E55B'; +} +.game-icon-harbor-dock:before { + content: '\E55C'; +} +.game-icon-iceberg:before { + content: '\E55D'; +} +.game-icon-life-buoy:before { + content: '\E55E'; +} +.game-icon-mini-submarine:before { + content: '\E55F'; +} +.game-icon-mooring-bollard:before { + content: '\E560'; +} +.game-icon-paddle-steamer:before { + content: '\E561'; +} +.game-icon-paddles:before { + content: '\E562'; +} +.game-icon-paper-boat:before { + content: '\E563'; +} +.game-icon-periscope:before { + content: '\E564'; +} +.game-icon-raft:before { + content: '\E565'; +} +.game-icon-sail:before { + content: '\E566'; +} +.game-icon-sailboat:before { + content: '\E567'; +} +.game-icon-ship-bow:before { + content: '\E568'; +} +.game-icon-ship-wheel:before { + content: '\E569'; +} +.game-icon-ship-wreck:before { + content: '\E56A'; +} +.game-icon-sinagot:before { + content: '\E56B'; +} +.game-icon-sinking-ship:before { + content: '\E56C'; +} +.game-icon-speed-boat:before { + content: '\E56D'; +} +.game-icon-submarine:before { + content: '\E56E'; +} +.game-icon-trireme:before { + content: '\E56F'; +} +.game-icon-wood-canoe:before { + content: '\E570'; +} +.game-icon-anchor:before { + content: '\E571'; +} +.game-icon-galleon:before { + content: '\E572'; +} +.game-icon-shooner-sailboat:before { + content: '\E573'; +} +.game-icon-small-fishing-sailboat:before { + content: '\E574'; +} +.game-icon-nautilus-shell:before { + content: '\E575'; +} +.game-icon-algae:before { + content: '\E576'; +} +.game-icon-buoy:before { + content: '\E577'; +} +.game-icon-coral:before { + content: '\E578'; +} +.game-icon-fishing-pole:before { + content: '\E579'; +} +.game-icon-fishing-spoon:before { + content: '\E57A'; +} +.game-icon-fishing:before { + content: '\E57B'; +} +.game-icon-flood:before { + content: '\E57C'; +} +.game-icon-helicoprion:before { + content: '\E57D'; +} +.game-icon-high-tide:before { + content: '\E57E'; +} +.game-icon-island:before { + content: '\E57F'; +} +.game-icon-knot:before { + content: '\E580'; +} +.game-icon-life-jacket:before { + content: '\E581'; +} +.game-icon-lighthouse:before { + content: '\E582'; +} +.game-icon-low-tide:before { + content: '\E583'; +} +.game-icon-mussel:before { + content: '\E584'; +} +.game-icon-offshore-platform:before { + content: '\E585'; +} +.game-icon-oyster:before { + content: '\E586'; +} +.game-icon-plesiosaurus:before { + content: '\E587'; +} +.game-icon-pulley-hook:before { + content: '\E588'; +} +.game-icon-rope-coil:before { + content: '\E589'; +} +.game-icon-sand-castle:before { + content: '\E58A'; +} +.game-icon-scuba-mask:before { + content: '\E58B'; +} +.game-icon-scuba-tanks:before { + content: '\E58C'; +} +.game-icon-sea-cliff:before { + content: '\E58D'; +} +.game-icon-sea-turtle:before { + content: '\E58E'; +} +.game-icon-seagull:before { + content: '\E58F'; +} +.game-icon-surf-board:before { + content: '\E590'; +} +.game-icon-surfer-van:before { + content: '\E591'; +} +.game-icon-swimfins:before { + content: '\E592'; +} +.game-icon-tall-bridge:before { + content: '\E593'; +} +.game-icon-wave-surfer:before { + content: '\E594'; +} +.game-icon-wooden-pier:before { + content: '\E595'; +} +.game-icon-at-sea:before { + content: '\E596'; +} +.game-icon-big-wave:before { + content: '\E597'; +} +.game-icon-cargo-crane:before { + content: '\E598'; +} +.game-icon-fishing-hook:before { + content: '\E599'; +} +.game-icon-fishing-net:before { + content: '\E59A'; +} +.game-icon-water-splash:before { + content: '\E59B'; +} +.game-icon-wave-crest:before { + content: '\E59C'; +} +.game-icon-waves:before { + content: '\E59D'; +} +.game-icon-snorkel:before { + content: '\E59E'; +} +.game-icon-ram:before { + content: '\E59F'; +} +.game-icon-armadillo:before { + content: '\E5A0'; +} +.game-icon-basset-hound-head:before { + content: '\E5A1'; +} +.game-icon-bastet:before { + content: '\E5A2'; +} +.game-icon-beaver:before { + content: '\E5A3'; +} +.game-icon-bison:before { + content: '\E5A4'; +} +.game-icon-buffalo-head:before { + content: '\E5A5'; +} +.game-icon-camel:before { + content: '\E5A6'; +} +.game-icon-cavalry:before { + content: '\E5A7'; +} +.game-icon-juggling-seal:before { + content: '\E5A8'; +} +.game-icon-jumping-dog:before { + content: '\E5A9'; +} +.game-icon-mammoth:before { + content: '\E5AA'; +} +.game-icon-mandrill-head:before { + content: '\E5AB'; +} +.game-icon-rabbit-head:before { + content: '\E5AC'; +} +.game-icon-raccoon-head:before { + content: '\E5AD'; +} +.game-icon-ram-profile:before { + content: '\E5AE'; +} +.game-icon-saber-toothed-cat-head:before { + content: '\E5AF'; +} +.game-icon-sitting-dog:before { + content: '\E5B0'; +} +.game-icon-squirrel:before { + content: '\E5B1'; +} +.game-icon-walrus-head:before { + content: '\E5B2'; +} +.game-icon-direwolf:before { + content: '\E5B3'; +} +.game-icon-snout:before { + content: '\E5B4'; +} +.game-icon-acoustic-megaphone:before { + content: '\E5B5'; +} +.game-icon-alarm-clock:before { + content: '\E5B6'; +} +.game-icon-audio-cassette:before { + content: '\E5B7'; +} +.game-icon-boombox:before { + content: '\E5B8'; +} +.game-icon-compact-disc:before { + content: '\E5B9'; +} +.game-icon-djembe:before { + content: '\E5BA'; +} +.game-icon-drum:before { + content: '\E5BB'; +} +.game-icon-elf-ear:before { + content: '\E5BC'; +} +.game-icon-film-spool:before { + content: '\E5BD'; +} +.game-icon-flute:before { + content: '\E5BE'; +} +.game-icon-gong:before { + content: '\E5BF'; +} +.game-icon-guitar-bass-head:before { + content: '\E5C0'; +} +.game-icon-guitar-head:before { + content: '\E5C1'; +} +.game-icon-headphones:before { + content: '\E5C2'; +} +.game-icon-heart-beats:before { + content: '\E5C3'; +} +.game-icon-human-ear:before { + content: '\E5C4'; +} +.game-icon-jack-plug:before { + content: '\E5C5'; +} +.game-icon-maracas:before { + content: '\E5C6'; +} +.game-icon-metronome:before { + content: '\E5C7'; +} +.game-icon-microphone:before { + content: '\E5C8'; +} +.game-icon-musical-keyboard:before { + content: '\E5C9'; +} +.game-icon-musical-notes:before { + content: '\E5CA'; +} +.game-icon-musical-score:before { + content: '\E5CB'; +} +.game-icon-mute:before { + content: '\E5CC'; +} +.game-icon-ocarina:before { + content: '\E5CD'; +} +.game-icon-old-microphone:before { + content: '\E5CE'; +} +.game-icon-pan-flute:before { + content: '\E5CF'; +} +.game-icon-phone:before { + content: '\E5D0'; +} +.game-icon-piano-keys:before { + content: '\E5D1'; +} +.game-icon-pocket-radio:before { + content: '\E5D2'; +} +.game-icon-radio-tower:before { + content: '\E5D3'; +} +.game-icon-ringing-alarm:before { + content: '\E5D4'; +} +.game-icon-saxophone:before { + content: '\E5D5'; +} +.game-icon-silenced:before { + content: '\E5D6'; +} +.game-icon-sound-off:before { + content: '\E5D7'; +} +.game-icon-sound-on:before { + content: '\E5D8'; +} +.game-icon-speaker-off:before { + content: '\E5D9'; +} +.game-icon-speaker:before { + content: '\E5DA'; +} +.game-icon-tambourine:before { + content: '\E5DB'; +} +.game-icon-trumpet-flag:before { + content: '\E5DC'; +} +.game-icon-trumpet:before { + content: '\E5DD'; +} +.game-icon-vuvuzelas:before { + content: '\E5DE'; +} +.game-icon-xylophone:before { + content: '\E5DF'; +} +.game-icon-amplitude:before { + content: '\E5E0'; +} +.game-icon-anthem:before { + content: '\E5E1'; +} +.game-icon-bugle-call:before { + content: '\E5E2'; +} +.game-icon-carillon:before { + content: '\E5E3'; +} +.game-icon-double-quaver:before { + content: '\E5E4'; +} +.game-icon-echo-ripples:before { + content: '\E5E5'; +} +.game-icon-guitar:before { + content: '\E5E6'; +} +.game-icon-hunting-horn:before { + content: '\E5E7'; +} +.game-icon-love-howl:before { + content: '\E5E8'; +} +.game-icon-love-song:before { + content: '\E5E9'; +} +.game-icon-lyre:before { + content: '\E5EA'; +} +.game-icon-movement-sensor:before { + content: '\E5EB'; +} +.game-icon-music-spell:before { + content: '\E5EC'; +} +.game-icon-resonance:before { + content: '\E5ED'; +} +.game-icon-ringing-bell:before { + content: '\E5EE'; +} +.game-icon-silence:before { + content: '\E5EF'; +} +.game-icon-sonic-boom:before { + content: '\E5F0'; +} +.game-icon-sonic-shout:before { + content: '\E5F1'; +} +.game-icon-tune-pitch:before { + content: '\E5F2'; +} +.game-icon-ultrasound:before { + content: '\E5F3'; +} +.game-icon-vibrating-ball:before { + content: '\E5F4'; +} +.game-icon-zigzag-tune:before { + content: '\E5F5'; +} +.game-icon-hearing-disabled:before { + content: '\E5F6'; +} +.game-icon-sound-waves:before { + content: '\E5F7'; +} +.game-icon-violin:before { + content: '\E5F8'; +} +.game-icon-chariot:before { + content: '\E5F9'; +} +.game-icon-catapult:before { + content: '\E5FA'; +} +.game-icon-amphora:before { + content: '\E5FB'; +} +.game-icon-ancient-columns:before { + content: '\E5FC'; +} +.game-icon-ancient-ruins:before { + content: '\E5FD'; +} +.game-icon-aqueduct:before { + content: '\E5FE'; +} +.game-icon-broken-pottery:before { + content: '\E5FF'; +} +.game-icon-caesar:before { + content: '\E600'; +} +.game-icon-classical-knowledge:before { + content: '\E601'; +} +.game-icon-coliseum:before { + content: '\E602'; +} +.game-icon-column-vase:before { + content: '\E603'; +} +.game-icon-discobolus:before { + content: '\E604'; +} +.game-icon-greaves:before { + content: '\E605'; +} +.game-icon-greek-temple:before { + content: '\E606'; +} +.game-icon-icarus:before { + content: '\E607'; +} +.game-icon-ionic-column:before { + content: '\E608'; +} +.game-icon-jug:before { + content: '\E609'; +} +.game-icon-medieval-pavilion:before { + content: '\E60A'; +} +.game-icon-menhir:before { + content: '\E60B'; +} +.game-icon-olive:before { + content: '\E60C'; +} +.game-icon-palisade:before { + content: '\E60D'; +} +.game-icon-roman-toga:before { + content: '\E60E'; +} +.game-icon-sandal:before { + content: '\E60F'; +} +.game-icon-stone-bust:before { + content: '\E610'; +} +.game-icon-stone-path:before { + content: '\E611'; +} +.game-icon-water-fountain:before { + content: '\E612'; +} +.game-icon-wax-tablet:before { + content: '\E613'; +} +.game-icon-capitol:before { + content: '\E614'; +} +.game-icon-grapes:before { + content: '\E615'; +} +.game-icon-maze:before { + content: '\E616'; +} +.game-icon-wingfoot:before { + content: '\E617'; +} +.game-icon-ballista:before { + content: '\E618'; +} +.game-icon-pauldrons:before { + content: '\E619'; +} +.game-icon-pteruges:before { + content: '\E61A'; +} +.game-icon-siege-ram:before { + content: '\E61B'; +} +.game-icon-air-balloon:before { + content: '\E61C'; +} +.game-icon-airplane-arrival:before { + content: '\E61D'; +} +.game-icon-airplane-departure:before { + content: '\E61E'; +} +.game-icon-ambulance:before { + content: '\E61F'; +} +.game-icon-apollo-capsule:before { + content: '\E620'; +} +.game-icon-bulldozer:before { + content: '\E621'; +} +.game-icon-bus:before { + content: '\E622'; +} +.game-icon-car-door:before { + content: '\E623'; +} +.game-icon-car-key:before { + content: '\E624'; +} +.game-icon-car-seat:before { + content: '\E625'; +} +.game-icon-car-wheel:before { + content: '\E626'; +} +.game-icon-caravan:before { + content: '\E627'; +} +.game-icon-city-car:before { + content: '\E628'; +} +.game-icon-coal-wagon:before { + content: '\E629'; +} +.game-icon-commercial-airplane:before { + content: '\E62A'; +} +.game-icon-cycling:before { + content: '\E62B'; +} +.game-icon-delivery-drone:before { + content: '\E62C'; +} +.game-icon-dutch-bike:before { + content: '\E62D'; +} +.game-icon-farm-tractor:before { + content: '\E62E'; +} +.game-icon-flat-tire:before { + content: '\E62F'; +} +.game-icon-food-truck:before { + content: '\E630'; +} +.game-icon-forklift:before { + content: '\E631'; +} +.game-icon-gas-pump:before { + content: '\E632'; +} +.game-icon-gear-stick:before { + content: '\E633'; +} +.game-icon-hang-glider:before { + content: '\E634'; +} +.game-icon-helicopter-tail:before { + content: '\E635'; +} +.game-icon-helicopter:before { + content: '\E636'; +} +.game-icon-home-garage:before { + content: '\E637'; +} +.game-icon-interceptor-ship:before { + content: '\E638'; +} +.game-icon-jeep:before { + content: '\E639'; +} +.game-icon-jet-fighter:before { + content: '\E63A'; +} +.game-icon-kick-scooter:before { + content: '\E63B'; +} +.game-icon-level-crossing:before { + content: '\E63C'; +} +.game-icon-lunar-module:before { + content: '\E63D'; +} +.game-icon-mars-curiosity:before { + content: '\E63E'; +} +.game-icon-mars-pathfinder:before { + content: '\E63F'; +} +.game-icon-mechanic-garage:before { + content: '\E640'; +} +.game-icon-mine-truck:before { + content: '\E641'; +} +.game-icon-mine-wagon:before { + content: '\E642'; +} +.game-icon-old-wagon:before { + content: '\E643'; +} +.game-icon-plane-wing:before { + content: '\E644'; +} +.game-icon-rail-road:before { + content: '\E645'; +} +.game-icon-railway:before { + content: '\E646'; +} +.game-icon-rocket-thruster:before { + content: '\E647'; +} +.game-icon-ropeway:before { + content: '\E648'; +} +.game-icon-scooter:before { + content: '\E649'; +} +.game-icon-scout-ship:before { + content: '\E64A'; +} +.game-icon-siege-tower:before { + content: '\E64B'; +} +.game-icon-skateboard:before { + content: '\E64C'; +} +.game-icon-space-shuttle:before { + content: '\E64D'; +} +.game-icon-spaceship:before { + content: '\E64E'; +} +.game-icon-speedometer:before { + content: '\E64F'; +} +.game-icon-starfighter:before { + content: '\E650'; +} +.game-icon-stealth-bomber:before { + content: '\E651'; +} +.game-icon-steam-locomotive:before { + content: '\E652'; +} +.game-icon-steering-wheel:before { + content: '\E653'; +} +.game-icon-subway:before { + content: '\E654'; +} +.game-icon-tire-iron-cross:before { + content: '\E655'; +} +.game-icon-tire-iron:before { + content: '\E656'; +} +.game-icon-tracked-robot:before { + content: '\E657'; +} +.game-icon-traffic-lights-green:before { + content: '\E658'; +} +.game-icon-traffic-lights-orange:before { + content: '\E659'; +} +.game-icon-traffic-lights-ready-to-go:before { + content: '\E65A'; +} +.game-icon-trebuchet:before { + content: '\E65B'; +} +.game-icon-truck:before { + content: '\E65C'; +} +.game-icon-turbine:before { + content: '\E65D'; +} +.game-icon-ufo:before { + content: '\E65E'; +} +.game-icon-unicycle:before { + content: '\E65F'; +} +.game-icon-velocipede:before { + content: '\E660'; +} +.game-icon-walking-scout:before { + content: '\E661'; +} +.game-icon-bomber:before { + content: '\E662'; +} +.game-icon-heavy-fighter:before { + content: '\E663'; +} +.game-icon-light-fighter:before { + content: '\E664'; +} +.game-icon-afterburn:before { + content: '\E665'; +} +.game-icon-cartwheel:before { + content: '\E666'; +} +.game-icon-forward-field:before { + content: '\E667'; +} +.game-icon-jetpack:before { + content: '\E668'; +} +.game-icon-missile-mech:before { + content: '\E669'; +} +.game-icon-rocket-flight:before { + content: '\E66A'; +} +.game-icon-rocket:before { + content: '\E66B'; +} +.game-icon-strafe:before { + content: '\E66C'; +} +.game-icon-jet-pack:before { + content: '\E66D'; +} +.game-icon-airplane:before { + content: '\E66E'; +} +.game-icon-apc:before { + content: '\E66F'; +} +.game-icon-f1-car:before { + content: '\E670'; +} +.game-icon-glider:before { + content: '\E671'; +} +.game-icon-hang-glider-2:before { + content: '\E672'; +} +.game-icon-jeep-2:before { + content: '\E673'; +} +.game-icon-race-car:before { + content: '\E674'; +} +.game-icon-zeppelin:before { + content: '\E675'; +} +.game-icon-dread:before { + content: '\E676'; +} +.game-icon-distraction:before { + content: '\E677'; +} +.game-icon-angry-eyes:before { + content: '\E678'; +} +.game-icon-confrontation:before { + content: '\E679'; +} +.game-icon-dead-head:before { + content: '\E67A'; +} +.game-icon-enrage:before { + content: '\E67B'; +} +.game-icon-idea:before { + content: '\E67C'; +} +.game-icon-liar:before { + content: '\E67D'; +} +.game-icon-wisdom:before { + content: '\E67E'; +} +.game-icon-artificial-intelligence:before { + content: '\E67F'; +} +.game-icon-awareness:before { + content: '\E680'; +} +.game-icon-back-pain:before { + content: '\E681'; +} +.game-icon-brain-freeze:before { + content: '\E682'; +} +.game-icon-chained-heart:before { + content: '\E683'; +} +.game-icon-coma:before { + content: '\E684'; +} +.game-icon-delighted:before { + content: '\E685'; +} +.game-icon-despair:before { + content: '\E686'; +} +.game-icon-distraction-2:before { + content: '\E687'; +} +.game-icon-drama-masks:before { + content: '\E688'; +} +.game-icon-extra-lucid:before { + content: '\E689'; +} +.game-icon-gluttony:before { + content: '\E68A'; +} +.game-icon-hidden:before { + content: '\E68B'; +} +.game-icon-imprisoned:before { + content: '\E68C'; +} +.game-icon-mirror-mirror:before { + content: '\E68D'; +} +.game-icon-mouth-watering:before { + content: '\E68E'; +} +.game-icon-nothing-to-say:before { + content: '\E68F'; +} +.game-icon-oppression:before { + content: '\E690'; +} +.game-icon-paranoia:before { + content: '\E691'; +} +.game-icon-sensuousness:before { + content: '\E692'; +} +.game-icon-sleepy:before { + content: '\E693'; +} +.game-icon-sly:before { + content: '\E694'; +} +.game-icon-smitten:before { + content: '\E695'; +} +.game-icon-stoned-skull:before { + content: '\E696'; +} +.game-icon-strong:before { + content: '\E697'; +} +.game-icon-surprised-skull:before { + content: '\E698'; +} +.game-icon-surprised:before { + content: '\E699'; +} +.game-icon-suspicious:before { + content: '\E69A'; +} +.game-icon-temptation:before { + content: '\E69B'; +} +.game-icon-terror:before { + content: '\E69C'; +} +.game-icon-worried-eyes:before { + content: '\E69D'; +} +.game-icon-cement-shoes:before { + content: '\E69E'; +} +.game-icon-knockout:before { + content: '\E69F'; +} +.game-icon-smoke-bomb:before { + content: '\E6A0'; +} +.game-icon-barbecue:before { + content: '\E6A1'; +} +.game-icon-chimney:before { + content: '\E6A2'; +} +.game-icon-cigar:before { + content: '\E6A3'; +} +.game-icon-cigarette:before { + content: '\E6A4'; +} +.game-icon-nuclear-plant:before { + content: '\E6A5'; +} +.game-icon-smoking-pipe:before { + content: '\E6A6'; +} +.game-icon-smoking-volcano:before { + content: '\E6A7'; +} +.game-icon-steam-blast:before { + content: '\E6A8'; +} +.game-icon-steam:before { + content: '\E6A9'; +} +.game-icon-aerosol:before { + content: '\E6AA'; +} +.game-icon-bottle-vapors:before { + content: '\E6AB'; +} +.game-icon-bubbling-bowl:before { + content: '\E6AC'; +} +.game-icon-cloudy-fork:before { + content: '\E6AD'; +} +.game-icon-fizzing-flask:before { + content: '\E6AE'; +} +.game-icon-fluffy-swirl:before { + content: '\E6AF'; +} +.game-icon-fragrance:before { + content: '\E6B0'; +} +.game-icon-incense:before { + content: '\E6B1'; +} +.game-icon-poison-gas:before { + content: '\E6B2'; +} +.game-icon-smoking-finger:before { + content: '\E6B3'; +} +.game-icon-smoking-orb:before { + content: '\E6B4'; +} +.game-icon-poison-cloud:before { + content: '\E6B5'; +} +.game-icon-bird-cage:before { + content: '\E6B6'; +} +.game-icon-bird-house:before { + content: '\E6B7'; +} +.game-icon-chicken-oven:before { + content: '\E6B8'; +} +.game-icon-cuauhtli:before { + content: '\E6B9'; +} +.game-icon-duck-palm:before { + content: '\E6BA'; +} +.game-icon-eating-pelican:before { + content: '\E6BB'; +} +.game-icon-egyptian-bird:before { + content: '\E6BC'; +} +.game-icon-fried-eggs:before { + content: '\E6BD'; +} +.game-icon-goose:before { + content: '\E6BE'; +} +.game-icon-hummingbird:before { + content: '\E6BF'; +} +.game-icon-ibis:before { + content: '\E6C0'; +} +.game-icon-incubator:before { + content: '\E6C1'; +} +.game-icon-kiwi-bird:before { + content: '\E6C2'; +} +.game-icon-nest-birds:before { + content: '\E6C3'; +} +.game-icon-nest-eggs:before { + content: '\E6C4'; +} +.game-icon-new-born:before { + content: '\E6C5'; +} +.game-icon-ostrich:before { + content: '\E6C6'; +} +.game-icon-plastic-duck:before { + content: '\E6C7'; +} +.game-icon-shoebill-stork:before { + content: '\E6C8'; +} +.game-icon-stork-delivery:before { + content: '\E6C9'; +} +.game-icon-swallow-2:before { + content: '\E6CA'; +} +.game-icon-bird-claw:before { + content: '\E6CB'; +} +.game-icon-bird-limb:before { + content: '\E6CC'; +} +.game-icon-bird-mask:before { + content: '\E6CD'; +} +.game-icon-dove:before { + content: '\E6CE'; +} +.game-icon-egg-clutch:before { + content: '\E6CF'; +} +.game-icon-falling-ovoid:before { + content: '\E6D0'; +} +.game-icon-feather:before { + content: '\E6D1'; +} +.game-icon-feathered-wing:before { + content: '\E6D2'; +} +.game-icon-scarecrow:before { + content: '\E6D3'; +} +.game-icon-sparrow:before { + content: '\E6D4'; +} +.game-icon-two-feathers:before { + content: '\E6D5'; +} +.game-icon-winged-leg:before { + content: '\E6D6'; +} +.game-icon-fish-cooked:before { + content: '\E6D7'; +} +.game-icon-fried-fish:before { + content: '\E6D8'; +} +.game-icon-aquarium:before { + content: '\E6D9'; +} +.game-icon-canned-fish:before { + content: '\E6DA'; +} +.game-icon-circling-fish:before { + content: '\E6DB'; +} +.game-icon-double-fish:before { + content: '\E6DC'; +} +.game-icon-eel:before { + content: '\E6DD'; +} +.game-icon-fish-bucket:before { + content: '\E6DE'; +} +.game-icon-fish-eggs:before { + content: '\E6DF'; +} +.game-icon-fish-escape:before { + content: '\E6E0'; +} +.game-icon-fish-scales:before { + content: '\E6E1'; +} +.game-icon-fishing-jig:before { + content: '\E6E2'; +} +.game-icon-fishing-lure:before { + content: '\E6E3'; +} +.game-icon-flatfish:before { + content: '\E6E4'; +} +.game-icon-lucky-fisherman:before { + content: '\E6E5'; +} +.game-icon-piranha:before { + content: '\E6E6'; +} +.game-icon-school-of-fish:before { + content: '\E6E7'; +} +.game-icon-sushis:before { + content: '\E6E8'; +} +.game-icon-tadpole:before { + content: '\E6E9'; +} +.game-icon-tropical-fish:before { + content: '\E6EA'; +} +.game-icon-salmon:before { + content: '\E6EB'; +} +.game-icon-fairy-wings:before { + content: '\E6EC'; +} +.game-icon-flying-target:before { + content: '\E6ED'; +} +.game-icon-hand-wing:before { + content: '\E6EE'; +} +.game-icon-heart-wings:before { + content: '\E6EF'; +} +.game-icon-pterodactylus:before { + content: '\E6F0'; +} +.game-icon-spiky-wing:before { + content: '\E6F1'; +} +.game-icon-angel-outfit:before { + content: '\E6F2'; +} +.game-icon-angel-wings:before { + content: '\E6F3'; +} +.game-icon-bat-blade:before { + content: '\E6F4'; +} +.game-icon-curly-wing:before { + content: '\E6F5'; +} +.game-icon-fluffy-wing:before { + content: '\E6F6'; +} +.game-icon-holy-grail:before { + content: '\E6F7'; +} +.game-icon-quill:before { + content: '\E6F8'; +} +.game-icon-wing-cloak:before { + content: '\E6F9'; +} +.game-icon-winged-emblem:before { + content: '\E6FA'; +} +.game-icon-evil-wings:before { + content: '\E6FB'; +} +.game-icon-tumulus:before { + content: '\E6FC'; +} +.game-icon-death-juice:before { + content: '\E6FD'; +} +.game-icon-egyptian-urns:before { + content: '\E6FE'; +} +.game-icon-grave-flowers:before { + content: '\E6FF'; +} +.game-icon-graveyard:before { + content: '\E700'; +} +.game-icon-half-dead:before { + content: '\E701'; +} +.game-icon-morgue-feet:before { + content: '\E702'; +} +.game-icon-sarcophagus:before { + content: '\E703'; +} +.game-icon-skeletal-hand:before { + content: '\E704'; +} +.game-icon-slipknot:before { + content: '\E705'; +} +.game-icon-carrion:before { + content: '\E706'; +} +.game-icon-coffin:before { + content: '\E707'; +} +.game-icon-dead-eye:before { + content: '\E708'; +} +.game-icon-dead-wood:before { + content: '\E709'; +} +.game-icon-death-zone:before { + content: '\E70A'; +} +.game-icon-decapitation:before { + content: '\E70B'; +} +.game-icon-gibbet:before { + content: '\E70C'; +} +.game-icon-guillotine:before { + content: '\E70D'; +} +.game-icon-internal-injury:before { + content: '\E70E'; +} +.game-icon-life-in-the-balance:before { + content: '\E70F'; +} +.game-icon-pirate-grave:before { + content: '\E710'; +} +.game-icon-reaper-scythe:before { + content: '\E711'; +} +.game-icon-tombstone:before { + content: '\E712'; +} +.game-icon-suicide:before { + content: '\E713'; +} +.game-icon-telefrag:before { + content: '\E714'; +} +.game-icon-tombstone-2:before { + content: '\E715'; +} +.game-icon-hasty-grave:before { + content: '\E716'; +} +.game-icon-raise-zombie:before { + content: '\E717'; +} +.game-icon-bad-breath:before { + content: '\E718'; +} +.game-icon-chainsaw:before { + content: '\E719'; +} +.game-icon-jerrycan:before { + content: '\E71A'; +} +.game-icon-brain:before { + content: '\E71B'; +} +.game-icon-dark-squad:before { + content: '\E71C'; +} +.game-icon-evil-hand:before { + content: '\E71D'; +} +.game-icon-ragged-wound:before { + content: '\E71E'; +} +.game-icon-asian-lantern:before { + content: '\E71F'; +} +.game-icon-bed-lamp:before { + content: '\E720'; +} +.game-icon-ceiling-light:before { + content: '\E721'; +} +.game-icon-double-street-lights:before { + content: '\E722'; +} +.game-icon-dungeon-gate:before { + content: '\E723'; +} +.game-icon-dungeon-light:before { + content: '\E724'; +} +.game-icon-flexible-lamp:before { + content: '\E725'; +} +.game-icon-fog-light:before { + content: '\E726'; +} +.game-icon-inspiration:before { + content: '\E727'; +} +.game-icon-led:before { + content: '\E728'; +} +.game-icon-light-projector:before { + content: '\E729'; +} +.game-icon-old-lantern:before { + content: '\E72A'; +} +.game-icon-prism:before { + content: '\E72B'; +} +.game-icon-smart:before { + content: '\E72C'; +} +.game-icon-street-light:before { + content: '\E72D'; +} +.game-icon-wall-light:before { + content: '\E72E'; +} +.game-icon-candle-skull:before { + content: '\E72F'; +} +.game-icon-desk-lamp:before { + content: '\E730'; +} +.game-icon-double-face-mask:before { + content: '\E731'; +} +.game-icon-duality:before { + content: '\E732'; +} +.game-icon-eclipse:before { + content: '\E733'; +} +.game-icon-expanded-rays:before { + content: '\E734'; +} +.game-icon-explosion-rays:before { + content: '\E735'; +} +.game-icon-explosive-materials:before { + content: '\E736'; +} +.game-icon-gooey-eyed-sun:before { + content: '\E737'; +} +.game-icon-interstellar-path:before { + content: '\E738'; +} +.game-icon-lantern:before { + content: '\E739'; +} +.game-icon-laser-precision:before { + content: '\E73A'; +} +.game-icon-laser-sparks:before { + content: '\E73B'; +} +.game-icon-laserburn:before { + content: '\E73C'; +} +.game-icon-light-bulb:before { + content: '\E73D'; +} +.game-icon-magic-lamp:before { + content: '\E73E'; +} +.game-icon-paper-lantern:before { + content: '\E73F'; +} +.game-icon-radar-sweep:before { + content: '\E740'; +} +.game-icon-shiny-entrance:before { + content: '\E741'; +} +.game-icon-sun:before { + content: '\E742'; +} +.game-icon-sunbeams:before { + content: '\E743'; +} +.game-icon-sundial:before { + content: '\E744'; +} +.game-icon-two-shadows:before { + content: '\E745'; +} +.game-icon-unlit-candelabra:before { + content: '\E746'; +} +.game-icon-laser-burst:before { + content: '\E747'; +} +.game-icon-camping-tent:before { + content: '\E748'; +} +.game-icon-cave-entrance:before { + content: '\E749'; +} +.game-icon-circle-forest:before { + content: '\E74A'; +} +.game-icon-desert:before { + content: '\E74B'; +} +.game-icon-forest-camp:before { + content: '\E74C'; +} +.game-icon-forest:before { + content: '\E74D'; +} +.game-icon-fuji:before { + content: '\E74E'; +} +.game-icon-grass:before { + content: '\E74F'; +} +.game-icon-high-grass:before { + content: '\E750'; +} +.game-icon-hills:before { + content: '\E751'; +} +.game-icon-jungle:before { + content: '\E752'; +} +.game-icon-monument-valley:before { + content: '\E753'; +} +.game-icon-mountain-cave:before { + content: '\E754'; +} +.game-icon-mountain-road:before { + content: '\E755'; +} +.game-icon-oasis:before { + content: '\E756'; +} +.game-icon-park-bench:before { + content: '\E757'; +} +.game-icon-path-tile:before { + content: '\E758'; +} +.game-icon-river:before { + content: '\E759'; +} +.game-icon-stone-stack:before { + content: '\E75A'; +} +.game-icon-summits:before { + content: '\E75B'; +} +.game-icon-sunrise-2:before { + content: '\E75C'; +} +.game-icon-sunset:before { + content: '\E75D'; +} +.game-icon-swamp:before { + content: '\E75E'; +} +.game-icon-uluru:before { + content: '\E75F'; +} +.game-icon-underground-cave:before { + content: '\E760'; +} +.game-icon-waterfall:before { + content: '\E761'; +} +.game-icon-earth-crack:before { + content: '\E762'; +} +.game-icon-field:before { + content: '\E763'; +} +.game-icon-flowers:before { + content: '\E764'; +} +.game-icon-mountains:before { + content: '\E765'; +} +.game-icon-mountaintop:before { + content: '\E766'; +} +.game-icon-peaks:before { + content: '\E767'; +} +.game-icon-pine-tree:before { + content: '\E768'; +} +.game-icon-quicksand:before { + content: '\E769'; +} +.game-icon-stalagtite:before { + content: '\E76A'; +} +.game-icon-three-leaves:before { + content: '\E76B'; +} +.game-icon-valley:before { + content: '\E76C'; +} +.game-icon-wind-hole:before { + content: '\E76D'; +} +.game-icon-axe-in-log:before { + content: '\E76E'; +} +.game-icon-bamboo-fountain:before { + content: '\E76F'; +} +.game-icon-barrel:before { + content: '\E770'; +} +.game-icon-berry-bush:before { + content: '\E771'; +} +.game-icon-bonsai-tree:before { + content: '\E772'; +} +.game-icon-chestnut-leaf:before { + content: '\E773'; +} +.game-icon-chisel:before { + content: '\E774'; +} +.game-icon-crosscut-saw:before { + content: '\E775'; +} +.game-icon-crucifix:before { + content: '\E776'; +} +.game-icon-deku-tree:before { + content: '\E777'; +} +.game-icon-dough-roller:before { + content: '\E778'; +} +.game-icon-empty-wood-bucket-handle:before { + content: '\E779'; +} +.game-icon-empty-wood-bucket:before { + content: '\E77A'; +} +.game-icon-forest-entrance:before { + content: '\E77B'; +} +.game-icon-fruit-tree:before { + content: '\E77C'; +} +.game-icon-full-wood-bucket-handle:before { + content: '\E77D'; +} +.game-icon-full-wood-bucket:before { + content: '\E77E'; +} +.game-icon-greenhouse:before { + content: '\E77F'; +} +.game-icon-half-log:before { + content: '\E780'; +} +.game-icon-hand-saw:before { + content: '\E781'; +} +.game-icon-hanging-sign:before { + content: '\E782'; +} +.game-icon-log:before { + content: '\E783'; +} +.game-icon-oak-leaf:before { + content: '\E784'; +} +.game-icon-packed-planks:before { + content: '\E785'; +} +.game-icon-palm-tree:before { + content: '\E786'; +} +.game-icon-planks:before { + content: '\E787'; +} +.game-icon-solid-leaf:before { + content: '\E788'; +} +.game-icon-spiked-trunk:before { + content: '\E789'; +} +.game-icon-stakes-fence:before { + content: '\E78A'; +} +.game-icon-stick-frame:before { + content: '\E78B'; +} +.game-icon-stump-regrowth:before { + content: '\E78C'; +} +.game-icon-table:before { + content: '\E78D'; +} +.game-icon-totem:before { + content: '\E78E'; +} +.game-icon-tree-door:before { + content: '\E78F'; +} +.game-icon-tree-roots:before { + content: '\E790'; +} +.game-icon-tree-swing:before { + content: '\E791'; +} +.game-icon-trunk-mushroom:before { + content: '\E792'; +} +.game-icon-watchtower:before { + content: '\E793'; +} +.game-icon-water-diviner-stick:before { + content: '\E794'; +} +.game-icon-wood-beam:before { + content: '\E795'; +} +.game-icon-wood-cabin:before { + content: '\E796'; +} +.game-icon-wood-frame:before { + content: '\E797'; +} +.game-icon-wood-pile:before { + content: '\E798'; +} +.game-icon-wood-stick:before { + content: '\E799'; +} +.game-icon-wooden-clogs:before { + content: '\E79A'; +} +.game-icon-wooden-crate:before { + content: '\E79B'; +} +.game-icon-wooden-pegleg:before { + content: '\E79C'; +} +.game-icon-acorn:before { + content: '\E79D'; +} +.game-icon-beech:before { + content: '\E79E'; +} +.game-icon-circular-sawblade:before { + content: '\E79F'; +} +.game-icon-curled-leaf:before { + content: '\E7A0'; +} +.game-icon-falling-leaf:before { + content: '\E7A1'; +} +.game-icon-leaf-swirl:before { + content: '\E7A2'; +} +.game-icon-linden-leaf:before { + content: '\E7A3'; +} +.game-icon-maple-leaf:before { + content: '\E7A4'; +} +.game-icon-oak:before { + content: '\E7A5'; +} +.game-icon-root-tip:before { + content: '\E7A6'; +} +.game-icon-totem-mask:before { + content: '\E7A7'; +} +.game-icon-tree-branch:before { + content: '\E7A8'; +} +.game-icon-tribal-mask:before { + content: '\E7A9'; +} +.game-icon-vine-leaf:before { + content: '\E7AA'; +} +.game-icon-wood-axe:before { + content: '\E7AB'; +} +.game-icon-wooden-door:before { + content: '\E7AC'; +} +.game-icon-wooden-fence:before { + content: '\E7AD'; +} +.game-icon-zigzag-leaf:before { + content: '\E7AE'; +} +.game-icon-circular-saw:before { + content: '\E7AF'; +} +.game-icon-logging:before { + content: '\E7B0'; +} +.game-icon-candlestick-phone:before { + content: '\E7B1'; +} +.game-icon-coal-pile:before { + content: '\E7B2'; +} +.game-icon-corset:before { + content: '\E7B3'; +} +.game-icon-lorgnette:before { + content: '\E7B4'; +} +.game-icon-pipes:before { + content: '\E7B5'; +} +.game-icon-steampunk-goggles:before { + content: '\E7B6'; +} +.game-icon-tower-bridge:before { + content: '\E7B7'; +} +.game-icon-clockwork:before { + content: '\E7B8'; +} +.game-icon-cog:before { + content: '\E7B9'; +} +.game-icon-cogsplosion:before { + content: '\E7BA'; +} +.game-icon-gears:before { + content: '\E7BB'; +} +.game-icon-pokecog:before { + content: '\E7BC'; +} +.game-icon-spectacles:before { + content: '\E7BD'; +} +.game-icon-teapot:before { + content: '\E7BE'; +} +.game-icon-umbrella:before { + content: '\E7BF'; +} +.game-icon-pocket-watch:before { + content: '\E7C0'; +} +.game-icon-old-king:before { + content: '\E7C1'; +} +.game-icon-ninja-head:before { + content: '\E7C2'; +} +.game-icon-air-man:before { + content: '\E7C3'; +} +.game-icon-baby-face:before { + content: '\E7C4'; +} +.game-icon-blindfold:before { + content: '\E7C5'; +} +.game-icon-brain-leak:before { + content: '\E7C6'; +} +.game-icon-cleopatra:before { + content: '\E7C7'; +} +.game-icon-clown:before { + content: '\E7C8'; +} +.game-icon-egyptian-profile:before { + content: '\E7C9'; +} +.game-icon-eyepatch:before { + content: '\E7CA'; +} +.game-icon-headband-knot:before { + content: '\E7CB'; +} +.game-icon-invisible-face:before { + content: '\E7CC'; +} +.game-icon-mecha-head:before { + content: '\E7CD'; +} +.game-icon-mecha-mask:before { + content: '\E7CE'; +} +.game-icon-metal-golem-head:before { + content: '\E7CF'; +} +.game-icon-nose-front:before { + content: '\E7D0'; +} +.game-icon-nose-side:before { + content: '\E7D1'; +} +.game-icon-nurse-female:before { + content: '\E7D2'; +} +.game-icon-nurse-male:before { + content: '\E7D3'; +} +.game-icon-pirate-captain:before { + content: '\E7D4'; +} +.game-icon-plane-pilot:before { + content: '\E7D5'; +} +.game-icon-portrait:before { + content: '\E7D6'; +} +.game-icon-quick-man:before { + content: '\E7D7'; +} +.game-icon-robot-antennas:before { + content: '\E7D8'; +} +.game-icon-robot-helmet:before { + content: '\E7D9'; +} +.game-icon-star-struck:before { + content: '\E7DA'; +} +.game-icon-sunglasses:before { + content: '\E7DB'; +} +.game-icon-viking-head:before { + content: '\E7DC'; +} +.game-icon-alien-stare:before { + content: '\E7DD'; +} +.game-icon-beard:before { + content: '\E7DE'; +} +.game-icon-brain-stem:before { + content: '\E7DF'; +} +.game-icon-brainstorm:before { + content: '\E7E0'; +} +.game-icon-comb:before { + content: '\E7E1'; +} +.game-icon-diamonds-smile:before { + content: '\E7E2'; +} +.game-icon-doctor-face:before { + content: '\E7E3'; +} +.game-icon-frontal-lobe:before { + content: '\E7E4'; +} +.game-icon-gaze:before { + content: '\E7E5'; +} +.game-icon-iron-mask:before { + content: '\E7E6'; +} +.game-icon-mad-scientist:before { + content: '\E7E7'; +} +.game-icon-nailed-head:before { + content: '\E7E8'; +} +.game-icon-ninja-mask:before { + content: '\E7E9'; +} +.game-icon-one-eyed:before { + content: '\E7EA'; +} +.game-icon-pig-face:before { + content: '\E7EB'; +} +.game-icon-psychic-waves:before { + content: '\E7EC'; +} +.game-icon-pummeled:before { + content: '\E7ED'; +} +.game-icon-pumpkin-lantern:before { + content: '\E7EE'; +} +.game-icon-pumpkin-mask:before { + content: '\E7EF'; +} +.game-icon-razor-blade:before { + content: '\E7F0'; +} +.game-icon-spectacle-lenses:before { + content: '\E7F1'; +} +.game-icon-spiked-halo:before { + content: '\E7F2'; +} +.game-icon-tear-tracks:before { + content: '\E7F3'; +} +.game-icon-tooth:before { + content: '\E7F4'; +} +.game-icon-overkill:before { + content: '\E7F5'; +} +.game-icon-headshot-2:before { + content: '\E7F6'; +} +.game-icon-cobra:before { + content: '\E7F7'; +} +.game-icon-dimetrodon:before { + content: '\E7F8'; +} +.game-icon-diplodocus:before { + content: '\E7F9'; +} +.game-icon-frog-foot:before { + content: '\E7FA'; +} +.game-icon-ninja-velociraptor:before { + content: '\E7FB'; +} +.game-icon-parasaurolophus:before { + content: '\E7FC'; +} +.game-icon-rattlesnake:before { + content: '\E7FD'; +} +.game-icon-reptile-tail:before { + content: '\E7FE'; +} +.game-icon-sand-snake:before { + content: '\E7FF'; +} +.game-icon-sauropod-head:before { + content: '\E800'; +} +.game-icon-snake-egg:before { + content: '\E801'; +} +.game-icon-snake-jar:before { + content: '\E802'; +} +.game-icon-snake-spiral:before { + content: '\E803'; +} +.game-icon-snake-tongue:before { + content: '\E804'; +} +.game-icon-stegosaurus-scales:before { + content: '\E805'; +} +.game-icon-t-rex-skull:before { + content: '\E806'; +} +.game-icon-triceratops-head:before { + content: '\E807'; +} +.game-icon-velociraptor-tracks:before { + content: '\E808'; +} +.game-icon-velociraptor:before { + content: '\E809'; +} +.game-icon-lizard-tongue:before { + content: '\E80A'; +} +.game-icon-cobra-2:before { + content: '\E80B'; +} +.game-icon-defensive-wall:before { + content: '\E80C'; +} +.game-icon-3d-stairs:before { + content: '\E80D'; +} +.game-icon-airtight-hatch:before { + content: '\E80E'; +} +.game-icon-arabic-door:before { + content: '\E80F'; +} +.game-icon-arc-triomphe:before { + content: '\E810'; +} +.game-icon-ascending-block:before { + content: '\E811'; +} +.game-icon-bank:before { + content: '\E812'; +} +.game-icon-barn:before { + content: '\E813'; +} +.game-icon-barricade:before { + content: '\E814'; +} +.game-icon-barrier:before { + content: '\E815'; +} +.game-icon-base-dome:before { + content: '\E816'; +} +.game-icon-block-house:before { + content: '\E817'; +} +.game-icon-boxing-ring:before { + content: '\E818'; +} +.game-icon-brick-pile:before { + content: '\E819'; +} +.game-icon-brick-wall:before { + content: '\E81A'; +} +.game-icon-broken-wall:before { + content: '\E81B'; +} +.game-icon-byzantin-temple:before { + content: '\E81C'; +} +.game-icon-cage:before { + content: '\E81D'; +} +.game-icon-carousel:before { + content: '\E81E'; +} +.game-icon-castle-ruins:before { + content: '\E81F'; +} +.game-icon-castle:before { + content: '\E820'; +} +.game-icon-church:before { + content: '\E821'; +} +.game-icon-closed-doors:before { + content: '\E822'; +} +.game-icon-concrete-bag:before { + content: '\E823'; +} +.game-icon-congress:before { + content: '\E824'; +} +.game-icon-control-tower:before { + content: '\E825'; +} +.game-icon-crane:before { + content: '\E826'; +} +.game-icon-crypt-entrance:before { + content: '\E827'; +} +.game-icon-dam:before { + content: '\E828'; +} +.game-icon-djed-pillar:before { + content: '\E829'; +} +.game-icon-egyptian-pyramids:before { + content: '\E82A'; +} +.game-icon-egyptian-temple:before { + content: '\E82B'; +} +.game-icon-elevator:before { + content: '\E82C'; +} +.game-icon-entry-door:before { + content: '\E82D'; +} +.game-icon-escalator:before { + content: '\E82E'; +} +.game-icon-evil-tower:before { + content: '\E82F'; +} +.game-icon-exit-door:before { + content: '\E830'; +} +.game-icon-factory:before { + content: '\E831'; +} +.game-icon-family-house:before { + content: '\E832'; +} +.game-icon-floating-platforms:before { + content: '\E833'; +} +.game-icon-gate:before { + content: '\E834'; +} +.game-icon-goblin-camp:before { + content: '\E835'; +} +.game-icon-gold-mine:before { + content: '\E836'; +} +.game-icon-granary:before { + content: '\E837'; +} +.game-icon-great-pyramid:before { + content: '\E838'; +} +.game-icon-habitat-dome:before { + content: '\E839'; +} +.game-icon-hill-fort:before { + content: '\E83A'; +} +.game-icon-hobbit-dwelling:before { + content: '\E83B'; +} +.game-icon-hospital:before { + content: '\E83C'; +} +.game-icon-house:before { + content: '\E83D'; +} +.game-icon-hut:before { + content: '\E83E'; +} +.game-icon-huts-village:before { + content: '\E83F'; +} +.game-icon-i-beam:before { + content: '\E840'; +} +.game-icon-igloo:before { + content: '\E841'; +} +.game-icon-indian-palace:before { + content: '\E842'; +} +.game-icon-kid-slide:before { + content: '\E843'; +} +.game-icon-ladder:before { + content: '\E844'; +} +.game-icon-louvre-pyramid:before { + content: '\E845'; +} +.game-icon-mayan-pyramid:before { + content: '\E846'; +} +.game-icon-medieval-barracks:before { + content: '\E847'; +} +.game-icon-medieval-gate:before { + content: '\E848'; +} +.game-icon-moai:before { + content: '\E849'; +} +.game-icon-modern-city:before { + content: '\E84A'; +} +.game-icon-mushroom-house:before { + content: '\E84B'; +} +.game-icon-obelisk:before { + content: '\E84C'; +} +.game-icon-observatory:before { + content: '\E84D'; +} +.game-icon-oil-pump:before { + content: '\E84E'; +} +.game-icon-oil-rig:before { + content: '\E84F'; +} +.game-icon-pagoda:before { + content: '\E850'; +} +.game-icon-pisa-tower:before { + content: '\E851'; +} +.game-icon-post-office:before { + content: '\E852'; +} +.game-icon-pylon:before { + content: '\E853'; +} +.game-icon-refinery:before { + content: '\E854'; +} +.game-icon-rempart:before { + content: '\E855'; +} +.game-icon-round-silo:before { + content: '\E856'; +} +.game-icon-saint-basil-cathedral:before { + content: '\E857'; +} +.game-icon-saloon-doors:before { + content: '\E858'; +} +.game-icon-saloon:before { + content: '\E859'; +} +.game-icon-samara-mosque:before { + content: '\E85A'; +} +.game-icon-secret-door:before { + content: '\E85B'; +} +.game-icon-shinto-shrine:before { + content: '\E85C'; +} +.game-icon-shop:before { + content: '\E85D'; +} +.game-icon-space-needle:before { + content: '\E85E'; +} +.game-icon-spooky-house:before { + content: '\E85F'; +} +.game-icon-stairs:before { + content: '\E860'; +} +.game-icon-stockpiles:before { + content: '\E861'; +} +.game-icon-stone-wall:before { + content: '\E862'; +} +.game-icon-sverd-i-fjell:before { + content: '\E863'; +} +.game-icon-sydney-opera-house:before { + content: '\E864'; +} +.game-icon-tee-pipe:before { + content: '\E865'; +} +.game-icon-temple-gate:before { + content: '\E866'; +} +.game-icon-theater-curtains:before { + content: '\E867'; +} +.game-icon-tipi:before { + content: '\E868'; +} +.game-icon-tower-flag:before { + content: '\E869'; +} +.game-icon-traffic-cone:before { + content: '\E86A'; +} +.game-icon-triple-gate:before { + content: '\E86B'; +} +.game-icon-tv-tower:before { + content: '\E86C'; +} +.game-icon-viking-church:before { + content: '\E86D'; +} +.game-icon-viking-longhouse:before { + content: '\E86E'; +} +.game-icon-village:before { + content: '\E86F'; +} +.game-icon-warp-pipe:before { + content: '\E870'; +} +.game-icon-water-tank:before { + content: '\E871'; +} +.game-icon-water-tower:before { + content: '\E872'; +} +.game-icon-well:before { + content: '\E873'; +} +.game-icon-wheelbarrow:before { + content: '\E874'; +} +.game-icon-wind-turbine:before { + content: '\E875'; +} +.game-icon-windmill:before { + content: '\E876'; +} +.game-icon-window:before { + content: '\E877'; +} +.game-icon-windpump:before { + content: '\E878'; +} +.game-icon-castle-2:before { + content: '\E879'; +} +.game-icon-demolish:before { + content: '\E87A'; +} +.game-icon-fountain:before { + content: '\E87B'; +} +.game-icon-guarded-tower:before { + content: '\E87C'; +} +.game-icon-heart-tower:before { + content: '\E87D'; +} +.game-icon-locked-fortress:before { + content: '\E87E'; +} +.game-icon-magic-gate:before { + content: '\E87F'; +} +.game-icon-magic-portal:before { + content: '\E880'; +} +.game-icon-mucous-pillar:before { + content: '\E881'; +} +.game-icon-portculis:before { + content: '\E882'; +} +.game-icon-radar-dish:before { + content: '\E883'; +} +.game-icon-stone-tower:before { + content: '\E884'; +} +.game-icon-tower-fall:before { + content: '\E885'; +} +.game-icon-white-tower:before { + content: '\E886'; +} +.game-icon-wrecking-ball:before { + content: '\E887'; +} +.game-icon-elven-castle:before { + content: '\E888'; +} +.game-icon-arena:before { + content: '\E889'; +} +.game-icon-brazil-flag:before { + content: '\E88A'; +} +.game-icon-checkered-flag:before { + content: '\E88B'; +} +.game-icon-conqueror:before { + content: '\E88C'; +} +.game-icon-corner-flag:before { + content: '\E88D'; +} +.game-icon-european-flag:before { + content: '\E88E'; +} +.game-icon-golf-flag:before { + content: '\E88F'; +} +.game-icon-hill-conquest:before { + content: '\E890'; +} +.game-icon-knight-banner:before { + content: '\E891'; +} +.game-icon-level-end-flag:before { + content: '\E892'; +} +.game-icon-party-flags:before { + content: '\E893'; +} +.game-icon-pirate-flag:before { + content: '\E894'; +} +.game-icon-planet-conquest:before { + content: '\E895'; +} +.game-icon-south-africa-flag:before { + content: '\E896'; +} +.game-icon-star-flag:before { + content: '\E897'; +} +.game-icon-truce:before { + content: '\E898'; +} +.game-icon-tusks-flag:before { + content: '\E899'; +} +.game-icon-vertical-banner:before { + content: '\E89A'; +} +.game-icon-broken-ribbon:before { + content: '\E89B'; +} +.game-icon-flying-flag:before { + content: '\E89C'; +} +.game-icon-spinning-ribbons:before { + content: '\E89D'; +} +.game-icon-tattered-banner:before { + content: '\E89E'; +} +.game-icon-curling-stone:before { + content: '\E89F'; +} +.game-icon-frozen-body:before { + content: '\E8A0'; +} +.game-icon-frozen-ring:before { + content: '\E8A1'; +} +.game-icon-fur-boot:before { + content: '\E8A2'; +} +.game-icon-hockey:before { + content: '\E8A3'; +} +.game-icon-ice-cream-cone:before { + content: '\E8A4'; +} +.game-icon-ice-cubes:before { + content: '\E8A5'; +} +.game-icon-ice-iris:before { + content: '\E8A6'; +} +.game-icon-ice-pop:before { + content: '\E8A7'; +} +.game-icon-ice-skate:before { + content: '\E8A8'; +} +.game-icon-ice-spell-cast:before { + content: '\E8A9'; +} +.game-icon-melting-ice-cube:before { + content: '\E8AA'; +} +.game-icon-ski-boot:before { + content: '\E8AB'; +} +.game-icon-stalactites:before { + content: '\E8AC'; +} +.game-icon-thermometer-cold:before { + content: '\E8AD'; +} +.game-icon-winter-gloves:before { + content: '\E8AE'; +} +.game-icon-beveled-star:before { + content: '\E8AF'; +} +.game-icon-cold-heart:before { + content: '\E8B0'; +} +.game-icon-eskimo:before { + content: '\E8B1'; +} +.game-icon-frozen-block:before { + content: '\E8B2'; +} +.game-icon-frozen-orb:before { + content: '\E8B3'; +} +.game-icon-ice-bolt:before { + content: '\E8B4'; +} +.game-icon-ice-bomb:before { + content: '\E8B5'; +} +.game-icon-ice-cube:before { + content: '\E8B6'; +} +.game-icon-icebergs:before { + content: '\E8B7'; +} +.game-icon-icicles-aura:before { + content: '\E8B8'; +} +.game-icon-icicles-fence:before { + content: '\E8B9'; +} +.game-icon-snow-bottle:before { + content: '\E8BA'; +} +.game-icon-snowflake-1:before { + content: '\E8BB'; +} +.game-icon-snowflake-2:before { + content: '\E8BC'; +} +.game-icon-snowing:before { + content: '\E8BD'; +} +.game-icon-snowman:before { + content: '\E8BE'; +} +.game-icon-flake:before { + content: '\E8BF'; +} +.game-icon-hooded-assassin:before { + content: '\E8C0'; +} +.game-icon-hooded-figure:before { + content: '\E8C1'; +} +.game-icon-ninja-heroic-stance:before { + content: '\E8C2'; +} +.game-icon-arm-bandage:before { + content: '\E8C3'; +} +.game-icon-arm-sling:before { + content: '\E8C4'; +} +.game-icon-blacksmith:before { + content: '\E8C5'; +} +.game-icon-body-balance:before { + content: '\E8C6'; +} +.game-icon-caveman:before { + content: '\E8C7'; +} +.game-icon-character:before { + content: '\E8C8'; +} +.game-icon-contortionist:before { + content: '\E8C9'; +} +.game-icon-cook:before { + content: '\E8CA'; +} +.game-icon-cryo-chamber:before { + content: '\E8CB'; +} +.game-icon-egyptian-walk:before { + content: '\E8CC'; +} +.game-icon-face-to-face:before { + content: '\E8CD'; +} +.game-icon-farmer:before { + content: '\E8CE'; +} +.game-icon-guards:before { + content: '\E8CF'; +} +.game-icon-high-kick:before { + content: '\E8D0'; +} +.game-icon-high-punch:before { + content: '\E8D1'; +} +.game-icon-human-pyramid:before { + content: '\E8D2'; +} +.game-icon-invisible:before { + content: '\E8D3'; +} +.game-icon-jumping-rope:before { + content: '\E8D4'; +} +.game-icon-knee-bandage:before { + content: '\E8D5'; +} +.game-icon-lovers:before { + content: '\E8D6'; +} +.game-icon-medallist:before { + content: '\E8D7'; +} +.game-icon-mighty-force:before { + content: '\E8D8'; +} +.game-icon-person:before { + content: '\E8D9'; +} +.game-icon-pikeman:before { + content: '\E8DA'; +} +.game-icon-ringmaster:before { + content: '\E8DB'; +} +.game-icon-sleeping-bag:before { + content: '\E8DC'; +} +.game-icon-spiked-wall:before { + content: '\E8DD'; +} +.game-icon-strong-man:before { + content: '\E8DE'; +} +.game-icon-sun-priest:before { + content: '\E8DF'; +} +.game-icon-three-friends:before { + content: '\E8E0'; +} +.game-icon-tightrope:before { + content: '\E8E1'; +} +.game-icon-tribunal-jury:before { + content: '\E8E2'; +} +.game-icon-vampire-cape:before { + content: '\E8E3'; +} +.game-icon-van-damme-split:before { + content: '\E8E4'; +} +.game-icon-vitruvian-man:before { + content: '\E8E5'; +} +.game-icon-weight-lifting-down:before { + content: '\E8E6'; +} +.game-icon-weight-lifting-up:before { + content: '\E8E7'; +} +.game-icon-anatomy:before { + content: '\E8E8'; +} +.game-icon-aura:before { + content: '\E8E9'; +} +.game-icon-backup:before { + content: '\E8EA'; +} +.game-icon-beams-aura:before { + content: '\E8EB'; +} +.game-icon-body-swapping:before { + content: '\E8EC'; +} +.game-icon-deadly-strike:before { + content: '\E8ED'; +} +.game-icon-dna1:before { + content: '\E8EE'; +} +.game-icon-dna2:before { + content: '\E8EF'; +} +.game-icon-dozen:before { + content: '\E8F0'; +} +.game-icon-embrassed-energy:before { + content: '\E8F1'; +} +.game-icon-ghost-ally:before { + content: '\E8F2'; +} +.game-icon-heart-inside:before { + content: '\E8F3'; +} +.game-icon-heart-organ:before { + content: '\E8F4'; +} +.game-icon-inner-self:before { + content: '\E8F5'; +} +.game-icon-master-of-arms:before { + content: '\E8F6'; +} +.game-icon-minions:before { + content: '\E8F7'; +} +.game-icon-muscle-fat:before { + content: '\E8F8'; +} +.game-icon-octoman:before { + content: '\E8F9'; +} +.game-icon-puppet:before { + content: '\E8FA'; +} +.game-icon-rear-aura:before { + content: '\E8FB'; +} +.game-icon-relationship-bounds:before { + content: '\E8FC'; +} +.game-icon-rogue:before { + content: '\E8FD'; +} +.game-icon-shadow-follower:before { + content: '\E8FE'; +} +.game-icon-sinking-trap:before { + content: '\E8FF'; +} +.game-icon-skeleton-inside:before { + content: '\E900'; +} +.game-icon-split-body:before { + content: '\E901'; +} +.game-icon-static-guard:before { + content: '\E902'; +} +.game-icon-sword-tie:before { + content: '\E903'; +} +.game-icon-target-dummy:before { + content: '\E904'; +} +.game-icon-telepathy:before { + content: '\E905'; +} +.game-icon-transportation-rings:before { + content: '\E906'; +} +.game-icon-falling:before { + content: '\E907'; +} +.game-icon-fat:before { + content: '\E908'; +} +.game-icon-skeleton:before { + content: '\E909'; +} +.game-icon-crystal-earrings:before { + content: '\E90A'; +} +.game-icon-diamond-hilt:before { + content: '\E90B'; +} +.game-icon-diamond-ring:before { + content: '\E90C'; +} +.game-icon-double-necklace:before { + content: '\E90D'; +} +.game-icon-drop-earrings:before { + content: '\E90E'; +} +.game-icon-earrings:before { + content: '\E90F'; +} +.game-icon-emerald-necklace:before { + content: '\E910'; +} +.game-icon-feather-necklace:before { + content: '\E911'; +} +.game-icon-globe-ring:before { + content: '\E912'; +} +.game-icon-heart-earrings:before { + content: '\E913'; +} +.game-icon-heart-necklace:before { + content: '\E914'; +} +.game-icon-intricate-necklace:before { + content: '\E915'; +} +.game-icon-necklace-display:before { + content: '\E916'; +} +.game-icon-oyster-pearl:before { + content: '\E917'; +} +.game-icon-pearl-earring:before { + content: '\E918'; +} +.game-icon-pearl-necklace:before { + content: '\E919'; +} +.game-icon-pendant-key:before { + content: '\E91A'; +} +.game-icon-power-ring:before { + content: '\E91B'; +} +.game-icon-prayer-beads:before { + content: '\E91C'; +} +.game-icon-primitive-necklace:before { + content: '\E91D'; +} +.game-icon-ring-box:before { + content: '\E91E'; +} +.game-icon-ring:before { + content: '\E91F'; +} +.game-icon-rupee:before { + content: '\E920'; +} +.game-icon-tribal-pendant:before { + content: '\E921'; +} +.game-icon-necklace:before { + content: '\E922'; +} +.game-icon-crystal-growth:before { + content: '\E923'; +} +.game-icon-crystalize:before { + content: '\E924'; +} +.game-icon-cut-diamond:before { + content: '\E925'; +} +.game-icon-emerald:before { + content: '\E926'; +} +.game-icon-engagement-ring:before { + content: '\E927'; +} +.game-icon-gem-chain:before { + content: '\E928'; +} +.game-icon-gem-necklace:before { + content: '\E929'; +} +.game-icon-gem-pendant:before { + content: '\E92A'; +} +.game-icon-jeweled-chalice:before { + content: '\E92B'; +} +.game-icon-linked-rings:before { + content: '\E92C'; +} +.game-icon-medal-skull:before { + content: '\E92D'; +} +.game-icon-medal:before { + content: '\E92E'; +} +.game-icon-saphir:before { + content: '\E92F'; +} +.game-icon-skull-ring:before { + content: '\E930'; +} +.game-icon-skull-signet:before { + content: '\E931'; +} +.game-icon-spiked-collar:before { + content: '\E932'; +} +.game-icon-trophy:before { + content: '\E933'; +} +.game-icon-amethyst:before { + content: '\E934'; +} +.game-icon-big-diamond-ring:before { + content: '\E935'; +} +.game-icon-topaz:before { + content: '\E936'; +} +.game-icon-big-gear:before { + content: '\E937'; +} +.game-icon-belt-armor:before { + content: '\E938'; +} +.game-icon-bolt-cutter:before { + content: '\E939'; +} +.game-icon-bottle-cap:before { + content: '\E93A'; +} +.game-icon-empty-metal-bucket-handle:before { + content: '\E93B'; +} +.game-icon-empty-metal-bucket:before { + content: '\E93C'; +} +.game-icon-foundry-bucket:before { + content: '\E93D'; +} +.game-icon-full-metal-bucket-handle:before { + content: '\E93E'; +} +.game-icon-full-metal-bucket:before { + content: '\E93F'; +} +.game-icon-gold-stack:before { + content: '\E940'; +} +.game-icon-hexagonal-nut:before { + content: '\E941'; +} +.game-icon-ladle:before { + content: '\E942'; +} +.game-icon-melting-metal:before { + content: '\E943'; +} +.game-icon-metal-plate:before { + content: '\E944'; +} +.game-icon-ring-mould:before { + content: '\E945'; +} +.game-icon-screw:before { + content: '\E946'; +} +.game-icon-shoulder-armor:before { + content: '\E947'; +} +.game-icon-spring:before { + content: '\E948'; +} +.game-icon-straight-pipe:before { + content: '\E949'; +} +.game-icon-sword-mold:before { + content: '\E94A'; +} +.game-icon-wire-coil:before { + content: '\E94B'; +} +.game-icon-zipper:before { + content: '\E94C'; +} +.game-icon-anvil-impact:before { + content: '\E94D'; +} +.game-icon-anvil:before { + content: '\E94E'; +} +.game-icon-barbed-coil:before { + content: '\E94F'; +} +.game-icon-barbed-wire:before { + content: '\E950'; +} +.game-icon-black-bar:before { + content: '\E951'; +} +.game-icon-cash:before { + content: '\E952'; +} +.game-icon-crossed-chains:before { + content: '\E953'; +} +.game-icon-magnet-blast:before { + content: '\E954'; +} +.game-icon-magnet:before { + content: '\E955'; +} +.game-icon-metal-bar:before { + content: '\E956'; +} +.game-icon-metal-disc:before { + content: '\E957'; +} +.game-icon-metal-hand:before { + content: '\E958'; +} +.game-icon-metal-scales:before { + content: '\E959'; +} +.game-icon-nails:before { + content: '\E95A'; +} +.game-icon-needle-drill:before { + content: '\E95B'; +} +.game-icon-robot-golem:before { + content: '\E95C'; +} +.game-icon-screw-2:before { + content: '\E95D'; +} +.game-icon-spoon:before { + content: '\E95E'; +} +.game-icon-steel-claws:before { + content: '\E95F'; +} +.game-icon-steeltoe-boots:before { + content: '\E960'; +} +.game-icon-wavy-chains:before { + content: '\E961'; +} +.game-icon-weight-crush:before { + content: '\E962'; +} +.game-icon-breaking-chain:before { + content: '\E963'; +} +.game-icon-steel-claws-2:before { + content: '\E964'; +} +.game-icon-gold-bar:before { + content: '\E965'; +} +.game-icon-tabi-boot:before { + content: '\E966'; +} +.game-icon-bamboo:before { + content: '\E967'; +} +.game-icon-black-belt:before { + content: '\E968'; +} +.game-icon-handheld-fan:before { + content: '\E969'; +} +.game-icon-japanese-bridge:before { + content: '\E96A'; +} +.game-icon-katana:before { + content: '\E96B'; +} +.game-icon-kimono:before { + content: '\E96C'; +} +.game-icon-night-vision:before { + content: '\E96D'; +} +.game-icon-ninja-armor:before { + content: '\E96E'; +} +.game-icon-onigori:before { + content: '\E96F'; +} +.game-icon-rope-dart:before { + content: '\E970'; +} +.game-icon-shinto-shrine-mirror:before { + content: '\E971'; +} +.game-icon-teapot-leaves:before { + content: '\E972'; +} +.game-icon-yunluo:before { + content: '\E973'; +} +.game-icon-assassin-pocket:before { + content: '\E974'; +} +.game-icon-lotus:before { + content: '\E975'; +} +.game-icon-sword-slice:before { + content: '\E976'; +} +.game-icon-thrown-daggers:before { + content: '\E977'; +} +.game-icon-apothecary:before { + content: '\E978'; +} +.game-icon-cauldron:before { + content: '\E979'; +} +.game-icon-butter:before { + content: '\E97A'; +} +.game-icon-cloth-jar:before { + content: '\E97B'; +} +.game-icon-coffee-cup:before { + content: '\E97C'; +} +.game-icon-coffee-pot:before { + content: '\E97D'; +} +.game-icon-cooking-pot:before { + content: '\E97E'; +} +.game-icon-corkscrew:before { + content: '\E97F'; +} +.game-icon-covered-jar:before { + content: '\E980'; +} +.game-icon-fork-knife-spoon:before { + content: '\E981'; +} +.game-icon-glass-celebration:before { + content: '\E982'; +} +.game-icon-ice-cream-scoop:before { + content: '\E983'; +} +.game-icon-kitchen-scale:before { + content: '\E984'; +} +.game-icon-manual-juicer:before { + content: '\E985'; +} +.game-icon-manual-meat-grinder:before { + content: '\E986'; +} +.game-icon-meal:before { + content: '\E987'; +} +.game-icon-moka-pot:before { + content: '\E988'; +} +.game-icon-painted-pottery:before { + content: '\E989'; +} +.game-icon-porcelain-vase:before { + content: '\E98A'; +} +.game-icon-pouring-pot:before { + content: '\E98B'; +} +.game-icon-toaster:before { + content: '\E98C'; +} +.game-icon-whisk:before { + content: '\E98D'; +} +.game-icon-bandage-roll:before { + content: '\E98E'; +} +.game-icon-bowl-spiral:before { + content: '\E98F'; +} +.game-icon-cauldron-2:before { + content: '\E990'; +} +.game-icon-chalice-drops:before { + content: '\E991'; +} +.game-icon-coffee-mug:before { + content: '\E992'; +} +.game-icon-glass-shot:before { + content: '\E993'; +} +.game-icon-kitchen-knives:before { + content: '\E994'; +} +.game-icon-knife-fork:before { + content: '\E995'; +} +.game-icon-martini:before { + content: '\E996'; +} +.game-icon-meat-cleaver:before { + content: '\E997'; +} +.game-icon-pizza-cutter:before { + content: '\E998'; +} +.game-icon-shattered-glass:before { + content: '\E999'; +} +.game-icon-wine-glass:before { + content: '\E99A'; +} +.game-icon-egg-pod:before { + content: '\E99B'; +} +.game-icon-fruit-bowl:before { + content: '\E99C'; +} +.game-icon-pestle-mortar:before { + content: '\E99D'; +} +.game-icon-eternal-love:before { + content: '\E99E'; +} +.game-icon-first-aid-kit:before { + content: '\E99F'; +} +.game-icon-foot-plaster:before { + content: '\E9A0'; +} +.game-icon-hand-bandage:before { + content: '\E9A1'; +} +.game-icon-healing:before { + content: '\E9A2'; +} +.game-icon-health-capsule:before { + content: '\E9A3'; +} +.game-icon-health-potion:before { + content: '\E9A4'; +} +.game-icon-herbs-bundle:before { + content: '\E9A5'; +} +.game-icon-life-bar:before { + content: '\E9A6'; +} +.game-icon-medical-drip:before { + content: '\E9A7'; +} +.game-icon-medical-thermometer:before { + content: '\E9A8'; +} +.game-icon-medicine-pills:before { + content: '\E9A9'; +} +.game-icon-medicines:before { + content: '\E9AA'; +} +.game-icon-nested-hearts:before { + content: '\E9AB'; +} +.game-icon-remedy:before { + content: '\E9AC'; +} +.game-icon-stethoscope:before { + content: '\E9AD'; +} +.game-icon-broken-heart:before { + content: '\E9AE'; +} +.game-icon-defibrilate:before { + content: '\E9AF'; +} +.game-icon-embryo:before { + content: '\E9B0'; +} +.game-icon-heart-bottle:before { + content: '\E9B1'; +} +.game-icon-life-support:before { + content: '\E9B2'; +} +.game-icon-life-tap:before { + content: '\E9B3'; +} +.game-icon-love-injection:before { + content: '\E9B4'; +} +.game-icon-miracle-medecine:before { + content: '\E9B5'; +} +.game-icon-overdose:before { + content: '\E9B6'; +} +.game-icon-pill-drop:before { + content: '\E9B7'; +} +.game-icon-pill:before { + content: '\E9B8'; +} +.game-icon-scalpel:before { + content: '\E9B9'; +} +.game-icon-sticking-plaster:before { + content: '\E9BA'; +} +.game-icon-syringe:before { + content: '\E9BB'; +} +.game-icon-health-decrease:before { + content: '\E9BC'; +} +.game-icon-health-increase:before { + content: '\E9BD'; +} +.game-icon-health-normal:before { + content: '\E9BE'; +} +.game-icon-medical-pack-alt:before { + content: '\E9BF'; +} +.game-icon-medical-pack:before { + content: '\E9C0'; +} +.game-icon-fetus:before { + content: '\E9C1'; +} +.game-icon-heart-minus:before { + content: '\E9C2'; +} +.game-icon-heart-plus:before { + content: '\E9C3'; +} +.game-icon-ancient-screw:before { + content: '\E9C4'; +} +.game-icon-beam-satellite:before { + content: '\E9C5'; +} +.game-icon-bouncing-spring:before { + content: '\E9C6'; +} +.game-icon-computer-fan:before { + content: '\E9C7'; +} +.game-icon-death-star:before { + content: '\E9C8'; +} +.game-icon-drill:before { + content: '\E9C9'; +} +.game-icon-floor-polisher:before { + content: '\E9CA'; +} +.game-icon-gps:before { + content: '\E9CB'; +} +.game-icon-love-mystery:before { + content: '\E9CC'; +} +.game-icon-plug:before { + content: '\E9CD'; +} +.game-icon-power-generator:before { + content: '\E9CE'; +} +.game-icon-round-knob:before { + content: '\E9CF'; +} +.game-icon-satellite-communication:before { + content: '\E9D0'; +} +.game-icon-security-gate:before { + content: '\E9D1'; +} +.game-icon-settings-knobs:before { + content: '\E9D2'; +} +.game-icon-star-gate:before { + content: '\E9D3'; +} +.game-icon-tv:before { + content: '\E9D4'; +} +.game-icon-vacuum-cleaner:before { + content: '\E9D5'; +} +.game-icon-valve:before { + content: '\E9D6'; +} +.game-icon-vending-machine:before { + content: '\E9D7'; +} +.game-icon-video-conference:before { + content: '\E9D8'; +} +.game-icon-computing:before { + content: '\E9D9'; +} +.game-icon-diagram:before { + content: '\E9DA'; +} +.game-icon-microscope:before { + content: '\E9DB'; +} +.game-icon-auto-repair:before { + content: '\E9DC'; +} +.game-icon-circuitry:before { + content: '\E9DD'; +} +.game-icon-cog-lock:before { + content: '\E9DE'; +} +.game-icon-drill-2:before { + content: '\E9DF'; +} +.game-icon-lever:before { + content: '\E9E0'; +} +.game-icon-mechanical-arm:before { + content: '\E9E1'; +} +.game-icon-microchip:before { + content: '\E9E2'; +} +.game-icon-microscope-lens:before { + content: '\E9E3'; +} +.game-icon-overdrive:before { + content: '\E9E4'; +} +.game-icon-processor:before { + content: '\E9E5'; +} +.game-icon-sattelite:before { + content: '\E9E6'; +} +.game-icon-skid-mark:before { + content: '\E9E7'; +} +.game-icon-spoutnik:before { + content: '\E9E8'; +} +.game-icon-tyre:before { + content: '\E9E9'; +} +.game-icon-tesla:before { + content: '\E9EA'; +} +.game-icon-unplugged:before { + content: '\E9EB'; +} +.game-icon-revolt:before { + content: '\E9EC'; +} +.game-icon-robber-hand:before { + content: '\E9ED'; +} +.game-icon-severed-hand:before { + content: '\E9EE'; +} +.game-icon-fingers-crossed:before { + content: '\E9EF'; +} +.game-icon-paper:before { + content: '\E9F0'; +} +.game-icon-rock:before { + content: '\E9F1'; +} +.game-icon-scissors:before { + content: '\E9F2'; +} +.game-icon-armor-punch:before { + content: '\E9F3'; +} +.game-icon-baseball-glove:before { + content: '\E9F4'; +} +.game-icon-bolt-spell-cast:before { + content: '\E9F5'; +} +.game-icon-cherish:before { + content: '\E9F6'; +} +.game-icon-cooking-glove:before { + content: '\E9F7'; +} +.game-icon-fingernail:before { + content: '\E9F8'; +} +.game-icon-forearm:before { + content: '\E9F9'; +} +.game-icon-gauntlet:before { + content: '\E9FA'; +} +.game-icon-gloves:before { + content: '\E9FB'; +} +.game-icon-hand-grip:before { + content: '\E9FC'; +} +.game-icon-hand-of-god:before { + content: '\E9FD'; +} +.game-icon-hand-ok:before { + content: '\E9FE'; +} +.game-icon-marble-tap:before { + content: '\E9FF'; +} +.game-icon-pirate-hook:before { + content: '\EA00'; +} +.game-icon-spock-hand:before { + content: '\EA01'; +} +.game-icon-take-my-money:before { + content: '\EA02'; +} +.game-icon-thumb-down:before { + content: '\EA03'; +} +.game-icon-thumb-up:before { + content: '\EA04'; +} +.game-icon-wolverine-claws-2:before { + content: '\EA05'; +} +.game-icon-boxing-glove-surprise:before { + content: '\EA06'; +} +.game-icon-boxing-glove:before { + content: '\EA07'; +} +.game-icon-cut-palm:before { + content: '\EA08'; +} +.game-icon-fist:before { + content: '\EA09'; +} +.game-icon-fulguro-punch:before { + content: '\EA0A'; +} +.game-icon-gift-of-knowledge:before { + content: '\EA0B'; +} +.game-icon-glowing-hands:before { + content: '\EA0C'; +} +.game-icon-hand:before { + content: '\EA0D'; +} +.game-icon-high-five:before { + content: '\EA0E'; +} +.game-icon-magic-palm:before { + content: '\EA0F'; +} +.game-icon-magic-swirl:before { + content: '\EA10'; +} +.game-icon-mailed-fist:before { + content: '\EA11'; +} +.game-icon-monster-grasp:before { + content: '\EA12'; +} +.game-icon-moon-claws:before { + content: '\EA13'; +} +.game-icon-palm:before { + content: '\EA14'; +} +.game-icon-punch-blast:before { + content: '\EA15'; +} +.game-icon-punch:before { + content: '\EA16'; +} +.game-icon-shadow-grasp:before { + content: '\EA17'; +} +.game-icon-stigmata:before { + content: '\EA18'; +} +.game-icon-thor-fist:before { + content: '\EA19'; +} +.game-icon-hand-2:before { + content: '\EA1A'; +} +.game-icon-revolt-2:before { + content: '\EA1B'; +} +.game-icon-usable:before { + content: '\EA1C'; +} +.game-icon-click:before { + content: '\EA1D'; +} +.game-icon-fist-2:before { + content: '\EA1E'; +} +.game-icon-open-palm:before { + content: '\EA1F'; +} +.game-icon-raise-skeleton:before { + content: '\EA20'; +} +.game-icon-barrel-leak:before { + content: '\EA21'; +} +.game-icon-basket:before { + content: '\EA22'; +} +.game-icon-beach-bucket:before { + content: '\EA23'; +} +.game-icon-cardboard-box-closed:before { + content: '\EA24'; +} +.game-icon-cardboard-box:before { + content: '\EA25'; +} +.game-icon-cargo-crate:before { + content: '\EA26'; +} +.game-icon-cellar-barrels:before { + content: '\EA27'; +} +.game-icon-chest:before { + content: '\EA28'; +} +.game-icon-companion-cube:before { + content: '\EA29'; +} +.game-icon-database:before { + content: '\EA2A'; +} +.game-icon-energy-tank:before { + content: '\EA2B'; +} +.game-icon-fuel-tank:before { + content: '\EA2C'; +} +.game-icon-hand-truck:before { + content: '\EA2D'; +} +.game-icon-locked-box:before { + content: '\EA2E'; +} +.game-icon-matryoshka-dolls:before { + content: '\EA2F'; +} +.game-icon-nuclear-waste:before { + content: '\EA30'; +} +.game-icon-opened-food-can:before { + content: '\EA31'; +} +.game-icon-paper-tray:before { + content: '\EA32'; +} +.game-icon-present:before { + content: '\EA33'; +} +.game-icon-shoulder-bag:before { + content: '\EA34'; +} +.game-icon-strongbox:before { + content: '\EA35'; +} +.game-icon-toolbox:before { + content: '\EA36'; +} +.game-icon-watering-can:before { + content: '\EA37'; +} +.game-icon-cannister:before { + content: '\EA38'; +} +.game-icon-chemical-tank:before { + content: '\EA39'; +} +.game-icon-jigsaw-box:before { + content: '\EA3A'; +} +.game-icon-locked-chest:before { + content: '\EA3B'; +} +.game-icon-box-trap:before { + content: '\EA3C'; +} +.game-icon-oil-drum:before { + content: '\EA3D'; +} +.game-icon-open-chest:before { + content: '\EA3E'; +} +.game-icon-open-treasure-chest:before { + content: '\EA3F'; +} +.game-icon-beer-horn:before { + content: '\EA40'; +} +.game-icon-bolt-drop:before { + content: '\EA41'; +} +.game-icon-booze:before { + content: '\EA42'; +} +.game-icon-cactus-tap:before { + content: '\EA43'; +} +.game-icon-holy-water:before { + content: '\EA44'; +} +.game-icon-leak:before { + content: '\EA45'; +} +.game-icon-lily-pads:before { + content: '\EA46'; +} +.game-icon-liquid-soap:before { + content: '\EA47'; +} +.game-icon-plant-watering:before { + content: '\EA48'; +} +.game-icon-shower:before { + content: '\EA49'; +} +.game-icon-tap:before { + content: '\EA4A'; +} +.game-icon-water-bottle:before { + content: '\EA4B'; +} +.game-icon-water-gallon:before { + content: '\EA4C'; +} +.game-icon-water-gun:before { + content: '\EA4D'; +} +.game-icon-acid-blob:before { + content: '\EA4E'; +} +.game-icon-beer-stein:before { + content: '\EA4F'; +} +.game-icon-bleeding-eye:before { + content: '\EA50'; +} +.game-icon-boiling-bubbles:before { + content: '\EA51'; +} +.game-icon-bubbles:before { + content: '\EA52'; +} +.game-icon-burst-blob:before { + content: '\EA53'; +} +.game-icon-chemical-drop:before { + content: '\EA54'; +} +.game-icon-dew:before { + content: '\EA55'; +} +.game-icon-drink-me:before { + content: '\EA56'; +} +.game-icon-dripping-blade:before { + content: '\EA57'; +} +.game-icon-dripping-goo:before { + content: '\EA58'; +} +.game-icon-dripping-star:before { + content: '\EA59'; +} +.game-icon-dripping-stone:before { + content: '\EA5A'; +} +.game-icon-dripping-sword:before { + content: '\EA5B'; +} +.game-icon-drop:before { + content: '\EA5C'; +} +.game-icon-droplet-splash:before { + content: '\EA5D'; +} +.game-icon-droplets:before { + content: '\EA5E'; +} +.game-icon-eyedropper:before { + content: '\EA5F'; +} +.game-icon-foam:before { + content: '\EA60'; +} +.game-icon-gloop:before { + content: '\EA61'; +} +.game-icon-goo-explosion:before { + content: '\EA62'; +} +.game-icon-goo-skull:before { + content: '\EA63'; +} +.game-icon-goo-spurt:before { + content: '\EA64'; +} +.game-icon-gooey-impact:before { + content: '\EA65'; +} +.game-icon-gooey-molecule:before { + content: '\EA66'; +} +.game-icon-gooey-sword:before { + content: '\EA67'; +} +.game-icon-grease-trap:before { + content: '\EA68'; +} +.game-icon-grouped-drops:before { + content: '\EA69'; +} +.game-icon-heart-drop:before { + content: '\EA6A'; +} +.game-icon-heavy-rain:before { + content: '\EA6B'; +} +.game-icon-hypodermic-test:before { + content: '\EA6C'; +} +.game-icon-kaleidoscope-pearls:before { + content: '\EA6D'; +} +.game-icon-marrow-drain:before { + content: '\EA6E'; +} +.game-icon-oily-spiral:before { + content: '\EA6F'; +} +.game-icon-poison-bottle:before { + content: '\EA70'; +} +.game-icon-spatter:before { + content: '\EA71'; +} +.game-icon-spill:before { + content: '\EA72'; +} +.game-icon-splash:before { + content: '\EA73'; +} +.game-icon-splashy-stream:before { + content: '\EA74'; +} +.game-icon-splurt:before { + content: '\EA75'; +} +.game-icon-transparent-tubes:before { + content: '\EA76'; +} +.game-icon-water-bolt:before { + content: '\EA77'; +} +.game-icon-milk-carton:before { + content: '\EA78'; +} +.game-icon-acid:before { + content: '\EA79'; +} +.game-icon-water-drop:before { + content: '\EA7A'; +} +.game-icon-blood:before { + content: '\EA7B'; +} +.game-icon-skull-sabertooth:before { + content: '\EA7C'; +} +.game-icon-calavera:before { + content: '\EA7D'; +} +.game-icon-alien-skull:before { + content: '\EA7E'; +} +.game-icon-blade-bite:before { + content: '\EA7F'; +} +.game-icon-bone-gnawer:before { + content: '\EA80'; +} +.game-icon-broken-skull:before { + content: '\EA81'; +} +.game-icon-chewed-skull:before { + content: '\EA82'; +} +.game-icon-chopped-skull:before { + content: '\EA83'; +} +.game-icon-condylura-skull:before { + content: '\EA84'; +} +.game-icon-death-note:before { + content: '\EA85'; +} +.game-icon-deathcab:before { + content: '\EA86'; +} +.game-icon-dread-skull:before { + content: '\EA87'; +} +.game-icon-fanged-skull:before { + content: '\EA88'; +} +.game-icon-happy-skull:before { + content: '\EA89'; +} +.game-icon-harry-potter-skull:before { + content: '\EA8A'; +} +.game-icon-leaky-skull:before { + content: '\EA8B'; +} +.game-icon-morbid-humour:before { + content: '\EA8C'; +} +.game-icon-piece-skull:before { + content: '\EA8D'; +} +.game-icon-pirate-skull:before { + content: '\EA8E'; +} +.game-icon-sharped-teeth-skull:before { + content: '\EA8F'; +} +.game-icon-skeleton-key:before { + content: '\EA90'; +} +.game-icon-skull-bolt:before { + content: '\EA91'; +} +.game-icon-skull-crack:before { + content: '\EA92'; +} +.game-icon-skull-in-jar:before { + content: '\EA93'; +} +.game-icon-skull-mask:before { + content: '\EA94'; +} +.game-icon-skull-slices:before { + content: '\EA95'; +} +.game-icon-spade-skull:before { + content: '\EA96'; +} +.game-icon-star-skull:before { + content: '\EA97'; +} +.game-icon-tentacles-skull:before { + content: '\EA98'; +} +.game-icon-thunder-skull:before { + content: '\EA99'; +} +.game-icon-triple-skulls:before { + content: '\EA9A'; +} +.game-icon-death-skull:before { + content: '\EA9B'; +} +.game-icon-skull-with-syringe:before { + content: '\EA9C'; +} +.game-icon-bacon:before { + content: '\EA9D'; +} +.game-icon-kebab-spit:before { + content: '\EA9E'; +} +.game-icon-sausage:before { + content: '\EA9F'; +} +.game-icon-sausages-ribbon:before { + content: '\EAA0'; +} +.game-icon-sliced-sausage:before { + content: '\EAA1'; +} +.game-icon-steak:before { + content: '\EAA2'; +} +.game-icon-meat:before { + content: '\EAA3'; +} +.game-icon-ham-shank:before { + content: '\EAA4'; +} +.game-icon-berries-bowl:before { + content: '\EAA5'; +} +.game-icon-bindle:before { + content: '\EAA6'; +} +.game-icon-bone-knife:before { + content: '\EAA7'; +} +.game-icon-clay-brick:before { + content: '\EAA8'; +} +.game-icon-dolmen:before { + content: '\EAA9'; +} +.game-icon-fur-shirt:before { + content: '\EAAA'; +} +.game-icon-silex:before { + content: '\EAAB'; +} +.game-icon-stone-wheel:before { + content: '\EAAC'; +} +.game-icon-bone-knife-2:before { + content: '\EAAD'; +} +.game-icon-broken-bone:before { + content: '\EAAE'; +} +.game-icon-broken-tablet:before { + content: '\EAAF'; +} +.game-icon-rock-2:before { + content: '\EAB0'; +} +.game-icon-stone-axe:before { + content: '\EAB1'; +} +.game-icon-stone-tablet:before { + content: '\EAB2'; +} +.game-icon-cactus:before { + content: '\EAB3'; +} +.game-icon-cleaver:before { + content: '\EAB4'; +} +.game-icon-heart-stake:before { + content: '\EAB5'; +} +.game-icon-pitchfork:before { + content: '\EAB6'; +} +.game-icon-safety-pin:before { + content: '\EAB7'; +} +.game-icon-shattered-heart:before { + content: '\EAB8'; +} +.game-icon-spiked-shoulder-armor:before { + content: '\EAB9'; +} +.game-icon-spiky-pit:before { + content: '\EABA'; +} +.game-icon-air-zigzag:before { + content: '\EABB'; +} +.game-icon-alligator-clip:before { + content: '\EABC'; +} +.game-icon-armoured-shell:before { + content: '\EABD'; +} +.game-icon-atomic-slashes:before { + content: '\EABE'; +} +.game-icon-bleeding-heart:before { + content: '\EABF'; +} +.game-icon-burning-round-shot:before { + content: '\EAC0'; +} +.game-icon-circle-claws:before { + content: '\EAC1'; +} +.game-icon-claw-slashes:before { + content: '\EAC2'; +} +.game-icon-cracked-ball-dunk:before { + content: '\EAC3'; +} +.game-icon-cracked-disc:before { + content: '\EAC4'; +} +.game-icon-cracked-glass:before { + content: '\EAC5'; +} +.game-icon-cracked-mask:before { + content: '\EAC6'; +} +.game-icon-cracked-saber:before { + content: '\EAC7'; +} +.game-icon-crossed-air-flows:before { + content: '\EAC8'; +} +.game-icon-crossed-slashes:before { + content: '\EAC9'; +} +.game-icon-earth-spit:before { + content: '\EACA'; +} +.game-icon-eclipse-saw:before { + content: '\EACB'; +} +.game-icon-edge-crack:before { + content: '\EACC'; +} +.game-icon-fangs-circle:before { + content: '\EACD'; +} +.game-icon-groundbreaker:before { + content: '\EACE'; +} +.game-icon-large-wound:before { + content: '\EACF'; +} +.game-icon-light-thorny-triskelion:before { + content: '\EAD0'; +} +.game-icon-mantrap:before { + content: '\EAD1'; +} +.game-icon-mighty-spanner:before { + content: '\EAD2'; +} +.game-icon-needle-jaws:before { + content: '\EAD3'; +} +.game-icon-quick-slash:before { + content: '\EAD4'; +} +.game-icon-rough-wound:before { + content: '\EAD5'; +} +.game-icon-serrated-slash:before { + content: '\EAD6'; +} +.game-icon-shatter:before { + content: '\EAD7'; +} +.game-icon-shattered-sword:before { + content: '\EAD8'; +} +.game-icon-spiked-armor:before { + content: '\EAD9'; +} +.game-icon-spiked-fence:before { + content: '\EADA'; +} +.game-icon-spiked-shell:before { + content: '\EADB'; +} +.game-icon-spiked-tail:before { + content: '\EADC'; +} +.game-icon-spiked-tentacle:before { + content: '\EADD'; +} +.game-icon-spiky-eclipse:before { + content: '\EADE'; +} +.game-icon-spiky-explosion:before { + content: '\EADF'; +} +.game-icon-striking-diamonds:before { + content: '\EAE0'; +} +.game-icon-swan-breeze:before { + content: '\EAE1'; +} +.game-icon-swirl-ring:before { + content: '\EAE2'; +} +.game-icon-swirl-string:before { + content: '\EAE3'; +} +.game-icon-sword-break:before { + content: '\EAE4'; +} +.game-icon-tension-snowflake:before { + content: '\EAE5'; +} +.game-icon-tornado-discs:before { + content: '\EAE6'; +} +.game-icon-triple-claws:before { + content: '\EAE7'; +} +.game-icon-triple-needle:before { + content: '\EAE8'; +} +.game-icon-unstable-projectile:before { + content: '\EAE9'; +} +.game-icon-whiplash:before { + content: '\EAEA'; +} +.game-icon-wind-slap:before { + content: '\EAEB'; +} +.game-icon-wolf-trap:before { + content: '\EAEC'; +} +.game-icon-wrapped-heart:before { + content: '\EAED'; +} +.game-icon-spikeball:before { + content: '\EAEE'; +} +.game-icon-spikes-full:before { + content: '\EAEF'; +} +.game-icon-spikes-half:before { + content: '\EAF0'; +} +.game-icon-spikes-init:before { + content: '\EAF1'; +} +.game-icon-spikes:before { + content: '\EAF2'; +} +.game-icon-trigger-hurt:before { + content: '\EAF3'; +} +.game-icon-bat-mask:before { + content: '\EAF4'; +} +.game-icon-cadillac-helm:before { + content: '\EAF5'; +} +.game-icon-carnival-mask:before { + content: '\EAF6'; +} +.game-icon-ceremonial-mask:before { + content: '\EAF7'; +} +.game-icon-cyborg-face:before { + content: '\EAF8'; +} +.game-icon-jason-mask:before { + content: '\EAF9'; +} +.game-icon-king-ju-mask:before { + content: '\EAFA'; +} +.game-icon-luchador:before { + content: '\EAFB'; +} +.game-icon-mighty-boosh:before { + content: '\EAFC'; +} +.game-icon-pharoah:before { + content: '\EAFD'; +} +.game-icon-protection-glasses:before { + content: '\EAFE'; +} +.game-icon-soul-vessel:before { + content: '\EAFF'; +} +.game-icon-spider-mask:before { + content: '\EB00'; +} +.game-icon-vr-headset:before { + content: '\EB01'; +} +.game-icon-android-mask:before { + content: '\EB02'; +} +.game-icon-architect-mask:before { + content: '\EB03'; +} +.game-icon-curly-mask:before { + content: '\EB04'; +} +.game-icon-domino-mask:before { + content: '\EB05'; +} +.game-icon-duality-mask:before { + content: '\EB06'; +} +.game-icon-lightning-mask:before { + content: '\EB07'; +} +.game-icon-trap-mask:before { + content: '\EB08'; +} +.game-icon-cultist-2:before { + content: '\EB09'; +} +.game-icon-gas-mask-2:before { + content: '\EB0A'; +} +.game-icon-carambola:before { + content: '\EB0B'; +} +.game-icon-falling-star:before { + content: '\EB0C'; +} +.game-icon-flower-star:before { + content: '\EB0D'; +} +.game-icon-galaxy:before { + content: '\EB0E'; +} +.game-icon-knocked-out-stars:before { + content: '\EB0F'; +} +.game-icon-polar-star:before { + content: '\EB10'; +} +.game-icon-round-star:before { + content: '\EB11'; +} +.game-icon-seven-pointed-star:before { + content: '\EB12'; +} +.game-icon-solar-system:before { + content: '\EB13'; +} +.game-icon-solar-time:before { + content: '\EB14'; +} +.game-icon-sparkles:before { + content: '\EB15'; +} +.game-icon-star-altar:before { + content: '\EB16'; +} +.game-icon-star-formation:before { + content: '\EB17'; +} +.game-icon-star-key:before { + content: '\EB18'; +} +.game-icon-star-medal:before { + content: '\EB19'; +} +.game-icon-stars-stack:before { + content: '\EB1A'; +} +.game-icon-sun-cloud:before { + content: '\EB1B'; +} +.game-icon-sunflower:before { + content: '\EB1C'; +} +.game-icon-thermometer-hot:before { + content: '\EB1D'; +} +.game-icon-ursa-major:before { + content: '\EB1E'; +} +.game-icon-barbed-star:before { + content: '\EB1F'; +} +.game-icon-boomerang-sun:before { + content: '\EB20'; +} +.game-icon-circle-sparks:before { + content: '\EB21'; +} +.game-icon-cross-flare:before { + content: '\EB22'; +} +.game-icon-eclipse-flare:before { + content: '\EB23'; +} +.game-icon-flat-star:before { + content: '\EB24'; +} +.game-icon-flexible-star:before { + content: '\EB25'; +} +.game-icon-lotus-flower:before { + content: '\EB26'; +} +.game-icon-orbital-rays:before { + content: '\EB27'; +} +.game-icon-rainbow-star:before { + content: '\EB28'; +} +.game-icon-shiny-iris:before { + content: '\EB29'; +} +.game-icon-star-cycle:before { + content: '\EB2A'; +} +.game-icon-star-prominences:before { + content: '\EB2B'; +} +.game-icon-star-pupil:before { + content: '\EB2C'; +} +.game-icon-star-sattelites:before { + content: '\EB2D'; +} +.game-icon-star-swirl:before { + content: '\EB2E'; +} +.game-icon-sun-radiations:before { + content: '\EB2F'; +} +.game-icon-wrapping-star:before { + content: '\EB30'; +} +.game-icon-splash-2:before { + content: '\EB31'; +} +.game-icon-solar-power:before { + content: '\EB32'; +} +.game-icon-on-sight:before { + content: '\EB33'; +} +.game-icon-convergence-target:before { + content: '\EB34'; +} +.game-icon-crosshair:before { + content: '\EB35'; +} +.game-icon-dice-target:before { + content: '\EB36'; +} +.game-icon-eye-target:before { + content: '\EB37'; +} +.game-icon-human-target:before { + content: '\EB38'; +} +.game-icon-multiple-targets:before { + content: '\EB39'; +} +.game-icon-target-poster:before { + content: '\EB3A'; +} +.game-icon-triangle-target:before { + content: '\EB3B'; +} +.game-icon-head-shot:before { + content: '\EB3C'; +} +.game-icon-select:before { + content: '\EB3D'; +} +.game-icon-target-laser:before { + content: '\EB3E'; +} +.game-icon-targeted:before { + content: '\EB3F'; +} +.game-icon-agave:before { + content: '\EB40'; +} +.game-icon-cactus-pot:before { + content: '\EB41'; +} +.game-icon-cantua:before { + content: '\EB42'; +} +.game-icon-carrot:before { + content: '\EB43'; +} +.game-icon-coffee-beans:before { + content: '\EB44'; +} +.game-icon-corn:before { + content: '\EB45'; +} +.game-icon-cotton-flower:before { + content: '\EB46'; +} +.game-icon-dandelion-flower:before { + content: '\EB47'; +} +.game-icon-fern:before { + content: '\EB48'; +} +.game-icon-fertilizer-bag:before { + content: '\EB49'; +} +.game-icon-flax:before { + content: '\EB4A'; +} +.game-icon-garlic:before { + content: '\EB4B'; +} +.game-icon-ginkgo-leaf:before { + content: '\EB4C'; +} +.game-icon-grain-bundle:before { + content: '\EB4D'; +} +.game-icon-grain:before { + content: '\EB4E'; +} +.game-icon-green-power:before { + content: '\EB4F'; +} +.game-icon-hemp:before { + content: '\EB50'; +} +.game-icon-hops:before { + content: '\EB51'; +} +.game-icon-jasmine:before { + content: '\EB52'; +} +.game-icon-monstera-leaf:before { + content: '\EB53'; +} +.game-icon-papyrus:before { + content: '\EB54'; +} +.game-icon-plant-roots:before { + content: '\EB55'; +} +.game-icon-reed:before { + content: '\EB56'; +} +.game-icon-round-straw-bale:before { + content: '\EB57'; +} +.game-icon-seedling:before { + content: '\EB58'; +} +.game-icon-shamrock:before { + content: '\EB59'; +} +.game-icon-sugar-cane:before { + content: '\EB5A'; +} +.game-icon-tumbleweed:before { + content: '\EB5B'; +} +.game-icon-vines:before { + content: '\EB5C'; +} +.game-icon-aubergine:before { + content: '\EB5D'; +} +.game-icon-beanstalk:before { + content: '\EB5E'; +} +.game-icon-bud:before { + content: '\EB5F'; +} +.game-icon-bulb:before { + content: '\EB60'; +} +.game-icon-curling-vines:before { + content: '\EB61'; +} +.game-icon-daisy:before { + content: '\EB62'; +} +.game-icon-elderberry:before { + content: '\EB63'; +} +.game-icon-evil-bud:before { + content: '\EB64'; +} +.game-icon-flower-pot:before { + content: '\EB65'; +} +.game-icon-ground-sprout:before { + content: '\EB66'; +} +.game-icon-leaf-skeleton:before { + content: '\EB67'; +} +.game-icon-new-shoot:before { + content: '\EB68'; +} +.game-icon-oat:before { + content: '\EB69'; +} +.game-icon-pollen-dust:before { + content: '\EB6A'; +} +.game-icon-rose:before { + content: '\EB6B'; +} +.game-icon-shut-rose:before { + content: '\EB6C'; +} +.game-icon-spiral-bloom:before { + content: '\EB6D'; +} +.game-icon-spoted-flower:before { + content: '\EB6E'; +} +.game-icon-sprout-disc:before { + content: '\EB6F'; +} +.game-icon-sprout:before { + content: '\EB70'; +} +.game-icon-trefoil-lily:before { + content: '\EB71'; +} +.game-icon-twirly-flower:before { + content: '\EB72'; +} +.game-icon-vanilla-flower:before { + content: '\EB73'; +} +.game-icon-vine-flower:before { + content: '\EB74'; +} +.game-icon-vine-whip:before { + content: '\EB75'; +} +.game-icon-viola:before { + content: '\EB76'; +} +.game-icon-wheat:before { + content: '\EB77'; +} +.game-icon-poppy:before { + content: '\EB78'; +} +.game-icon-backpack:before { + content: '\EB79'; +} +.game-icon-beach-bag:before { + content: '\EB7A'; +} +.game-icon-briefcase:before { + content: '\EB7B'; +} +.game-icon-chips-bag:before { + content: '\EB7C'; +} +.game-icon-disc-golf-bag:before { + content: '\EB7D'; +} +.game-icon-duffel-bag:before { + content: '\EB7E'; +} +.game-icon-flour:before { + content: '\EB7F'; +} +.game-icon-gym-bag:before { + content: '\EB80'; +} +.game-icon-hand-bag:before { + content: '\EB81'; +} +.game-icon-light-backpack:before { + content: '\EB82'; +} +.game-icon-powder-bag:before { + content: '\EB83'; +} +.game-icon-school-bag:before { + content: '\EB84'; +} +.game-icon-shopping-bag:before { + content: '\EB85'; +} +.game-icon-suitcase:before { + content: '\EB86'; +} +.game-icon-knapsack:before { + content: '\EB87'; +} +.game-icon-shiny-purse:before { + content: '\EB88'; +} +.game-icon-swap-bag:before { + content: '\EB89'; +} +.game-icon-coins-pile:before { + content: '\EB8A'; +} +.game-icon-gold-nuggets:before { + content: '\EB8B'; +} +.game-icon-money-stack:before { + content: '\EB8C'; +} +.game-icon-piggy-bank:before { + content: '\EB8D'; +} +.game-icon-price-tag:before { + content: '\EB8E'; +} +.game-icon-swipe-card:before { + content: '\EB8F'; +} +.game-icon-ticket:before { + content: '\EB90'; +} +.game-icon-wallet:before { + content: '\EB91'; +} +.game-icon-knee-cap:before { + content: '\EB92'; +} +.game-icon-pelvis-bone:before { + content: '\EB93'; +} +.game-icon-backbone-shell:before { + content: '\EB94'; +} +.game-icon-crossed-bones:before { + content: '\EB95'; +} +.game-icon-horn-internal:before { + content: '\EB96'; +} +.game-icon-jawbone:before { + content: '\EB97'; +} +.game-icon-ribcage:before { + content: '\EB98'; +} +.game-icon-spinal-coil:before { + content: '\EB99'; +} +.game-icon-joint:before { + content: '\EB9A'; +} +.game-icon-swirled-shell:before { + content: '\EB9B'; +} +.game-icon-bolt-bomb:before { + content: '\EB9C'; +} +.game-icon-dynamite:before { + content: '\EB9D'; +} +.game-icon-falling-bomb:before { + content: '\EB9E'; +} +.game-icon-holy-hand-grenade:before { + content: '\EB9F'; +} +.game-icon-time-dynamite:before { + content: '\EBA0'; +} +.game-icon-cluster-bomb:before { + content: '\EBA1'; +} +.game-icon-fission:before { + content: '\EBA2'; +} +.game-icon-land-mine:before { + content: '\EBA3'; +} +.game-icon-letter-bomb:before { + content: '\EBA4'; +} +.game-icon-paper-bomb:before { + content: '\EBA5'; +} +.game-icon-rolling-bomb:before { + content: '\EBA6'; +} +.game-icon-sparky-bomb:before { + content: '\EBA7'; +} +.game-icon-squib:before { + content: '\EBA8'; +} +.game-icon-time-bomb:before { + content: '\EBA9'; +} +.game-icon-unlit-bomb:before { + content: '\EBAA'; +} +.game-icon-bundle-grenade:before { + content: '\EBAB'; +} +.game-icon-minefield:before { + content: '\EBAC'; +} +.game-icon-ballerina-shoes:before { + content: '\EBAD'; +} +.game-icon-banana-peel:before { + content: '\EBAE'; +} +.game-icon-chelsea-boot:before { + content: '\EBAF'; +} +.game-icon-converse-shoe:before { + content: '\EBB0'; +} +.game-icon-cowboy-boot:before { + content: '\EBB1'; +} +.game-icon-female-legs:before { + content: '\EBB2'; +} +.game-icon-flip-flops:before { + content: '\EBB3'; +} +.game-icon-hieroglyph-legs:before { + content: '\EBB4'; +} +.game-icon-high-heel:before { + content: '\EBB5'; +} +.game-icon-leg-armor:before { + content: '\EBB6'; +} +.game-icon-leg:before { + content: '\EBB7'; +} +.game-icon-roller-skate:before { + content: '\EBB8'; +} +.game-icon-rubber-boot:before { + content: '\EBB9'; +} +.game-icon-running-shoe:before { + content: '\EBBA'; +} +.game-icon-slippers:before { + content: '\EBBB'; +} +.game-icon-socks:before { + content: '\EBBC'; +} +.game-icon-sonic-shoes:before { + content: '\EBBD'; +} +.game-icon-sticky-boot:before { + content: '\EBBE'; +} +.game-icon-barefoot:before { + content: '\EBBF'; +} +.game-icon-boot-prints:before { + content: '\EBC0'; +} +.game-icon-boots:before { + content: '\EBC1'; +} +.game-icon-foot-trip:before { + content: '\EBC2'; +} +.game-icon-footprint:before { + content: '\EBC3'; +} +.game-icon-leather-boot:before { + content: '\EBC4'; +} +.game-icon-nailed-foot:before { + content: '\EBC5'; +} +.game-icon-quake-stomp:before { + content: '\EBC6'; +} +.game-icon-tread:before { + content: '\EBC7'; +} +.game-icon-tripwire:before { + content: '\EBC8'; +} +.game-icon-walking-boot:before { + content: '\EBC9'; +} +.game-icon-beet:before { + content: '\EBCA'; +} +.game-icon-super-mushroom:before { + content: '\EBCB'; +} +.game-icon-minerals:before { + content: '\EBCC'; +} +.game-icon-ore:before { + content: '\EBCD'; +} +.game-icon-crystal-shrine:before { + content: '\EBCE'; +} +.game-icon-diamond-trophy:before { + content: '\EBCF'; +} +.game-icon-mineral-pearls:before { + content: '\EBD0'; +} +.game-icon-checkered-diamond:before { + content: '\EBD1'; +} +.game-icon-crystal-bars:before { + content: '\EBD2'; +} +.game-icon-crystal-cluster:before { + content: '\EBD3'; +} +.game-icon-crystal-eye:before { + content: '\EBD4'; +} +.game-icon-crystal-shine:before { + content: '\EBD5'; +} +.game-icon-diamond-hard:before { + content: '\EBD6'; +} +.game-icon-floating-crystal:before { + content: '\EBD7'; +} +.game-icon-gems:before { + content: '\EBD8'; +} +.game-icon-mineral-heart:before { + content: '\EBD9'; +} +.game-icon-fossil:before { + content: '\EBDA'; +} +.game-icon-gold-shell:before { + content: '\EBDB'; +} +.game-icon-scallop:before { + content: '\EBDC'; +} +.game-icon-sewed-shell:before { + content: '\EBDD'; +} +.game-icon-spiral-shell:before { + content: '\EBDE'; +} +.game-icon-triple-shells:before { + content: '\EBDF'; +} +.game-icon-twin-shell:before { + content: '\EBE0'; +} +.game-icon-asteroid:before { + content: '\EBE1'; +} +.game-icon-colombian-statue:before { + content: '\EBE2'; +} +.game-icon-dig-hole:before { + content: '\EBE3'; +} +.game-icon-falling-rocks:before { + content: '\EBE4'; +} +.game-icon-stone-bridge:before { + content: '\EBE5'; +} +.game-icon-stone-pile:before { + content: '\EBE6'; +} +.game-icon-bridge:before { + content: '\EBE7'; +} +.game-icon-crags:before { + content: '\EBE8'; +} +.game-icon-meteor-impact:before { + content: '\EBE9'; +} +.game-icon-rune-stone:before { + content: '\EBEA'; +} +.game-icon-stone-block:before { + content: '\EBEB'; +} +.game-icon-stone-sphere:before { + content: '\EBEC'; +} +.game-icon-stone-throne:before { + content: '\EBED'; +} +.game-icon-bow-tie-ribbon:before { + content: '\EBEE'; +} +.game-icon-champagne-cork:before { + content: '\EBEF'; +} +.game-icon-champions:before { + content: '\EBF0'; +} +.game-icon-diploma:before { + content: '\EBF1'; +} +.game-icon-family-tree:before { + content: '\EBF2'; +} +.game-icon-finish-line:before { + content: '\EBF3'; +} +.game-icon-histogram:before { + content: '\EBF4'; +} +.game-icon-laurels-trophy:before { + content: '\EBF5'; +} +.game-icon-network-bars:before { + content: '\EBF6'; +} +.game-icon-organigram:before { + content: '\EBF7'; +} +.game-icon-podium-second:before { + content: '\EBF8'; +} +.game-icon-podium-third:before { + content: '\EBF9'; +} +.game-icon-podium-winner:before { + content: '\EBFA'; +} +.game-icon-podium:before { + content: '\EBFB'; +} +.game-icon-private-first-class:before { + content: '\EBFC'; +} +.game-icon-private:before { + content: '\EBFD'; +} +.game-icon-ribbon-medal:before { + content: '\EBFE'; +} +.game-icon-sergeant:before { + content: '\EBFF'; +} +.game-icon-sport-medal:before { + content: '\EC00'; +} +.game-icon-trophies-shelf:before { + content: '\EC01'; +} +.game-icon-trophy-cup:before { + content: '\EC02'; +} +.game-icon-level-four-advanced:before { + content: '\EC03'; +} +.game-icon-level-four:before { + content: '\EC04'; +} +.game-icon-level-three-advanced:before { + content: '\EC05'; +} +.game-icon-level-three:before { + content: '\EC06'; +} +.game-icon-level-two-advanced:before { + content: '\EC07'; +} +.game-icon-level-two:before { + content: '\EC08'; +} +.game-icon-achievement:before { + content: '\EC09'; +} +.game-icon-rank-1:before { + content: '\EC0A'; +} +.game-icon-rank-2:before { + content: '\EC0B'; +} +.game-icon-rank-3:before { + content: '\EC0C'; +} +.game-icon-3d-hammer:before { + content: '\EC0D'; +} +.game-icon-aspergillum:before { + content: '\EC0E'; +} +.game-icon-box-cutter:before { + content: '\EC0F'; +} +.game-icon-broom:before { + content: '\EC10'; +} +.game-icon-clamp:before { + content: '\EC11'; +} +.game-icon-crook-flail:before { + content: '\EC12'; +} +.game-icon-gardening-shears:before { + content: '\EC13'; +} +.game-icon-hair-strands:before { + content: '\EC14'; +} +.game-icon-hammer-break:before { + content: '\EC15'; +} +.game-icon-hole-ladder:before { + content: '\EC16'; +} +.game-icon-hook:before { + content: '\EC17'; +} +.game-icon-injustice:before { + content: '\EC18'; +} +.game-icon-ladders-platform:before { + content: '\EC19'; +} +.game-icon-large-paint-brush:before { + content: '\EC1A'; +} +.game-icon-lockpicks:before { + content: '\EC1B'; +} +.game-icon-paint-brush:before { + content: '\EC1C'; +} +.game-icon-paint-bucket:before { + content: '\EC1D'; +} +.game-icon-paint-roller:before { + content: '\EC1E'; +} +.game-icon-plow:before { + content: '\EC1F'; +} +.game-icon-plunger:before { + content: '\EC20'; +} +.game-icon-rake:before { + content: '\EC21'; +} +.game-icon-shears:before { + content: '\EC22'; +} +.game-icon-swiss-army-knife:before { + content: '\EC23'; +} +.game-icon-toy-mallet:before { + content: '\EC24'; +} +.game-icon-trowel:before { + content: '\EC25'; +} +.game-icon-weight:before { + content: '\EC26'; +} +.game-icon-claw-hammer:before { + content: '\EC27'; +} +.game-icon-dig-dug:before { + content: '\EC28'; +} +.game-icon-fishhook-fork:before { + content: '\EC29'; +} +.game-icon-flat-hammer:before { + content: '\EC2A'; +} +.game-icon-gavel:before { + content: '\EC2B'; +} +.game-icon-gear-hammer:before { + content: '\EC2C'; +} +.game-icon-hammer-drop:before { + content: '\EC2D'; +} +.game-icon-hammer-nails:before { + content: '\EC2E'; +} +.game-icon-lightning-spanner:before { + content: '\EC2F'; +} +.game-icon-scissors-2:before { + content: '\EC30'; +} +.game-icon-screwdriver:before { + content: '\EC31'; +} +.game-icon-sewing-needle:before { + content: '\EC32'; +} +.game-icon-spade:before { + content: '\EC33'; +} +.game-icon-spanner:before { + content: '\EC34'; +} +.game-icon-sword-smithing:before { + content: '\EC35'; +} +.game-icon-thermometer-scale:before { + content: '\EC36'; +} +.game-icon-tinker:before { + content: '\EC37'; +} +.game-icon-trample:before { + content: '\EC38'; +} +.game-icon-wrench:before { + content: '\EC39'; +} +.game-icon-pause-button:before { + content: '\EC3A'; +} +.game-icon-play-button:before { + content: '\EC3B'; +} +.game-icon-abacus:before { + content: '\EC3C'; +} +.game-icon-calendar:before { + content: '\EC3D'; +} +.game-icon-checklist:before { + content: '\EC3E'; +} +.game-icon-circle:before { + content: '\EC3F'; +} +.game-icon-clapperboard:before { + content: '\EC40'; +} +.game-icon-confirmed:before { + content: '\EC41'; +} +.game-icon-cube:before { + content: '\EC42'; +} +.game-icon-fast-backward-button:before { + content: '\EC43'; +} +.game-icon-fast-forward-button:before { + content: '\EC44'; +} +.game-icon-files:before { + content: '\EC45'; +} +.game-icon-film-projector:before { + content: '\EC46'; +} +.game-icon-full-folder:before { + content: '\EC47'; +} +.game-icon-funnel:before { + content: '\EC48'; +} +.game-icon-gamepad:before { + content: '\EC49'; +} +.game-icon-hamburger-menu:before { + content: '\EC4A'; +} +.game-icon-highlighter:before { + content: '\EC4B'; +} +.game-icon-joystick:before { + content: '\EC4C'; +} +.game-icon-keyboard:before { + content: '\EC4D'; +} +.game-icon-load:before { + content: '\EC4E'; +} +.game-icon-mailbox:before { + content: '\EC4F'; +} +.game-icon-mouse-2:before { + content: '\EC50'; +} +.game-icon-newspaper:before { + content: '\EC51'; +} +.game-icon-next-button:before { + content: '\EC52'; +} +.game-icon-open-folder:before { + content: '\EC53'; +} +.game-icon-palette:before { + content: '\EC54'; +} +.game-icon-pencil-brush:before { + content: '\EC55'; +} +.game-icon-pencil:before { + content: '\EC56'; +} +.game-icon-photo-camera:before { + content: '\EC57'; +} +.game-icon-pie-chart:before { + content: '\EC58'; +} +.game-icon-pin:before { + content: '\EC59'; +} +.game-icon-plain-circle:before { + content: '\EC5A'; +} +.game-icon-plain-square:before { + content: '\EC5B'; +} +.game-icon-previous-button:before { + content: '\EC5C'; +} +.game-icon-resize:before { + content: '\EC5D'; +} +.game-icon-save:before { + content: '\EC5E'; +} +.game-icon-share:before { + content: '\EC5F'; +} +.game-icon-shopping-cart:before { + content: '\EC60'; +} +.game-icon-square:before { + content: '\EC61'; +} +.game-icon-toggles:before { + content: '\EC62'; +} +.game-icon-trash-can:before { + content: '\EC63'; +} +.game-icon-unbalanced:before { + content: '\EC64'; +} +.game-icon-vibrating-smartphone:before { + content: '\EC65'; +} +.game-icon-video-camera:before { + content: '\EC66'; +} +.game-icon-bookmark:before { + content: '\EC67'; +} +.game-icon-envelope:before { + content: '\EC68'; +} +.game-icon-open-book:before { + content: '\EC69'; +} +.game-icon-retro-controller:before { + content: '\EC6A'; +} +.game-icon-smartphone:before { + content: '\EC6B'; +} +.game-icon-tablet:before { + content: '\EC6C'; +} +.game-icon-soda-can:before { + content: '\EC6D'; +} +.game-icon-baby-bottle:before { + content: '\EC6E'; +} +.game-icon-beer-bottle:before { + content: '\EC6F'; +} +.game-icon-delicate-perfume:before { + content: '\EC70'; +} +.game-icon-ketchup:before { + content: '\EC71'; +} +.game-icon-water-flask:before { + content: '\EC72'; +} +.game-icon-wine-bottle:before { + content: '\EC73'; +} +.game-icon-bottled-bolt:before { + content: '\EC74'; +} +.game-icon-brandy-bottle:before { + content: '\EC75'; +} +.game-icon-bubbling-flask:before { + content: '\EC76'; +} +.game-icon-perfume-bottle:before { + content: '\EC77'; +} +.game-icon-potion-ball:before { + content: '\EC78'; +} +.game-icon-round-bottom-flask:before { + content: '\EC79'; +} +.game-icon-spiral-bottle:before { + content: '\EC7A'; +} +.game-icon-square-bottle:before { + content: '\EC7B'; +} +.game-icon-standing-potion:before { + content: '\EC7C'; +} +.game-icon-potion-of-madness:before { + content: '\EC7D'; +} +.game-icon-almond:before { + content: '\EC7E'; +} +.game-icon-asparagus:before { + content: '\EC7F'; +} +.game-icon-avocado:before { + content: '\EC80'; +} +.game-icon-banana:before { + content: '\EC81'; +} +.game-icon-bread-slice:before { + content: '\EC82'; +} +.game-icon-bread:before { + content: '\EC83'; +} +.game-icon-candy-canes:before { + content: '\EC84'; +} +.game-icon-cherry:before { + content: '\EC85'; +} +.game-icon-chili-pepper:before { + content: '\EC86'; +} +.game-icon-cookie:before { + content: '\EC87'; +} +.game-icon-croissant:before { + content: '\EC88'; +} +.game-icon-cupcake:before { + content: '\EC89'; +} +.game-icon-dango:before { + content: '\EC8A'; +} +.game-icon-doner-kebab:before { + content: '\EC8B'; +} +.game-icon-fast-noodles:before { + content: '\EC8C'; +} +.game-icon-french-fries:before { + content: '\EC8D'; +} +.game-icon-full-pizza:before { + content: '\EC8E'; +} +.game-icon-gingerbread-man:before { + content: '\EC8F'; +} +.game-icon-hamburger:before { + content: '\EC90'; +} +.game-icon-hot-meal:before { + content: '\EC91'; +} +.game-icon-jelly-beans:before { + content: '\EC92'; +} +.game-icon-jelly:before { + content: '\EC93'; +} +.game-icon-kiwi-fruit:before { + content: '\EC94'; +} +.game-icon-mushrooms:before { + content: '\EC95'; +} +.game-icon-nachos:before { + content: '\EC96'; +} +.game-icon-noodles:before { + content: '\EC97'; +} +.game-icon-oden:before { + content: '\EC98'; +} +.game-icon-pear:before { + content: '\EC99'; +} +.game-icon-pimiento:before { + content: '\EC9A'; +} +.game-icon-pizza-slice:before { + content: '\EC9B'; +} +.game-icon-popcorn:before { + content: '\EC9C'; +} +.game-icon-potato:before { + content: '\EC9D'; +} +.game-icon-pretzel:before { + content: '\EC9E'; +} +.game-icon-raw-egg:before { + content: '\EC9F'; +} +.game-icon-sandwich:before { + content: '\ECA0'; +} +.game-icon-sesame:before { + content: '\ECA1'; +} +.game-icon-sliced-mushroom:before { + content: '\ECA2'; +} +.game-icon-spiral-lollipop:before { + content: '\ECA3'; +} +.game-icon-stairs-cake:before { + content: '\ECA4'; +} +.game-icon-stomach:before { + content: '\ECA5'; +} +.game-icon-tacos:before { + content: '\ECA6'; +} +.game-icon-tangerine:before { + content: '\ECA7'; +} +.game-icon-tomato:before { + content: '\ECA8'; +} +.game-icon-cake-slice:before { + content: '\ECA9'; +} +.game-icon-cheese-wedge:before { + content: '\ECAA'; +} +.game-icon-cool-spices:before { + content: '\ECAB'; +} +.game-icon-honeypot:before { + content: '\ECAC'; +} +.game-icon-meat-hook:before { + content: '\ECAD'; +} +.game-icon-mushroom-gills:before { + content: '\ECAE'; +} +.game-icon-mushroom:before { + content: '\ECAF'; +} +.game-icon-pie-slice:before { + content: '\ECB0'; +} +.game-icon-powder:before { + content: '\ECB1'; +} +.game-icon-salt-shaker:before { + content: '\ECB2'; +} +.game-icon-shiny-apple:before { + content: '\ECB3'; +} +.game-icon-sliced-bread:before { + content: '\ECB4'; +} +.game-icon-wrapped-sweet:before { + content: '\ECB5'; +} +.game-icon-chocolate-bar:before { + content: '\ECB6'; +} +.game-icon-peanut:before { + content: '\ECB7'; +} +.game-icon-armored-pants:before { + content: '\ECB8'; +} +.game-icon-american-football-player:before { + content: '\ECB9'; +} +.game-icon-bracer:before { + content: '\ECBA'; +} +.game-icon-cape-armor:before { + content: '\ECBB'; +} +.game-icon-chest-armor:before { + content: '\ECBC'; +} +.game-icon-elbow-pad:before { + content: '\ECBD'; +} +.game-icon-heart-armor:before { + content: '\ECBE'; +} +.game-icon-knee-pad:before { + content: '\ECBF'; +} +.game-icon-leather-armor:before { + content: '\ECC0'; +} +.game-icon-loincloth:before { + content: '\ECC1'; +} +.game-icon-metal-skirt:before { + content: '\ECC2'; +} +.game-icon-morph-ball:before { + content: '\ECC3'; +} +.game-icon-saiyan-suit:before { + content: '\ECC4'; +} +.game-icon-armor-vest:before { + content: '\ECC5'; +} +.game-icon-breastplate:before { + content: '\ECC6'; +} +.game-icon-dorsal-scales:before { + content: '\ECC7'; +} +.game-icon-lamellar:before { + content: '\ECC8'; +} +.game-icon-leather-vest:before { + content: '\ECC9'; +} +.game-icon-mail-shirt:before { + content: '\ECCA'; +} +.game-icon-plastron:before { + content: '\ECCB'; +} +.game-icon-scale-mail:before { + content: '\ECCC'; +} +.game-icon-shoulder-scales:before { + content: '\ECCD'; +} +.game-icon-space-suit:before { + content: '\ECCE'; +} +.game-icon-bracers:before { + content: '\ECCF'; +} +.game-icon-chain-mail:before { + content: '\ECD0'; +} +.game-icon-ample-dress:before { + content: '\ECD1'; +} +.game-icon-basketball-jersey:before { + content: '\ECD2'; +} +.game-icon-bow-tie:before { + content: '\ECD3'; +} +.game-icon-cape:before { + content: '\ECD4'; +} +.game-icon-clothes:before { + content: '\ECD5'; +} +.game-icon-clothespin:before { + content: '\ECD6'; +} +.game-icon-hanger:before { + content: '\ECD7'; +} +.game-icon-heavy-collar:before { + content: '\ECD8'; +} +.game-icon-hoodie:before { + content: '\ECD9'; +} +.game-icon-lab-coat:before { + content: '\ECDA'; +} +.game-icon-large-dress:before { + content: '\ECDB'; +} +.game-icon-moncler-jacket:before { + content: '\ECDC'; +} +.game-icon-pirate-coat:before { + content: '\ECDD'; +} +.game-icon-polo-shirt:before { + content: '\ECDE'; +} +.game-icon-poncho:before { + content: '\ECDF'; +} +.game-icon-rolled-cloth:before { + content: '\ECE0'; +} +.game-icon-sewing-string:before { + content: '\ECE1'; +} +.game-icon-shirt-button:before { + content: '\ECE2'; +} +.game-icon-shorts:before { + content: '\ECE3'; +} +.game-icon-skirt:before { + content: '\ECE4'; +} +.game-icon-sleeveless-jacket:before { + content: '\ECE5'; +} +.game-icon-sleeveless-top:before { + content: '\ECE6'; +} +.game-icon-t-shirt:before { + content: '\ECE7'; +} +.game-icon-tank-top:before { + content: '\ECE8'; +} +.game-icon-tie:before { + content: '\ECE9'; +} +.game-icon-travel-dress:before { + content: '\ECEA'; +} +.game-icon-underwear-shorts:before { + content: '\ECEB'; +} +.game-icon-underwear:before { + content: '\ECEC'; +} +.game-icon-washing-machine:before { + content: '\ECED'; +} +.game-icon-belt:before { + content: '\ECEE'; +} +.game-icon-cloak:before { + content: '\ECEF'; +} +.game-icon-shirt:before { + content: '\ECF0'; +} +.game-icon-trousers:before { + content: '\ECF1'; +} +.game-icon-belt-buckles:before { + content: '\ECF2'; +} +.game-icon-trousers-2:before { + content: '\ECF3'; +} +.game-icon-dress:before { + content: '\ECF4'; +} +.game-icon-bullet-impacts:before { + content: '\ECF5'; +} +.game-icon-cowboy-holster:before { + content: '\ECF6'; +} +.game-icon-gun-stock:before { + content: '\ECF7'; +} +.game-icon-machine-gun-magazine:before { + content: '\ECF8'; +} +.game-icon-pirate-cannon:before { + content: '\ECF9'; +} +.game-icon-shotgun-rounds:before { + content: '\ECFA'; +} +.game-icon-ak47:before { + content: '\ECFB'; +} +.game-icon-ak47u:before { + content: '\ECFC'; +} +.game-icon-colt-m1911:before { + content: '\ECFD'; +} +.game-icon-cz-skorpion:before { + content: '\ECFE'; +} +.game-icon-desert-eagle:before { + content: '\ECFF'; +} +.game-icon-fn-fal:before { + content: '\ED00'; +} +.game-icon-m3-grease-gun:before { + content: '\ED01'; +} +.game-icon-mac-10:before { + content: '\ED02'; +} +.game-icon-machine-gun:before { + content: '\ED03'; +} +.game-icon-mp5-2:before { + content: '\ED04'; +} +.game-icon-mp5k:before { + content: '\ED05'; +} +.game-icon-musket:before { + content: '\ED06'; +} +.game-icon-p90:before { + content: '\ED07'; +} +.game-icon-revolver-2:before { + content: '\ED08'; +} +.game-icon-spectre-m4:before { + content: '\ED09'; +} +.game-icon-thompson-m1928:before { + content: '\ED0A'; +} +.game-icon-winchester-rifle:before { + content: '\ED0B'; +} +.game-icon-3d-glasses:before { + content: '\ED0C'; +} +.game-icon-director-chair:before { + content: '\ED0D'; +} +.game-icon-inauguration:before { + content: '\ED0E'; +} +.game-icon-red-carpet:before { + content: '\ED0F'; +} +.game-icon-theater:before { + content: '\ED10'; +} +.game-icon-cyber-eye:before { + content: '\ED11'; +} +.game-icon-egg-eye:before { + content: '\ED12'; +} +.game-icon-eyelashes:before { + content: '\ED13'; +} +.game-icon-hunter-eyes:before { + content: '\ED14'; +} +.game-icon-lock-spy:before { + content: '\ED15'; +} +.game-icon-tired-eye:before { + content: '\ED16'; +} +.game-icon-bolt-eye:before { + content: '\ED17'; +} +.game-icon-brass-eye:before { + content: '\ED18'; +} +.game-icon-croissants-pupil:before { + content: '\ED19'; +} +.game-icon-eyeball:before { + content: '\ED1A'; +} +.game-icon-falling-eye:before { + content: '\ED1B'; +} +.game-icon-lightning-tear:before { + content: '\ED1C'; +} +.game-icon-octogonal-eye:before { + content: '\ED1D'; +} +.game-icon-semi-closed-eye:before { + content: '\ED1E'; +} +.game-icon-sheikah-eye:before { + content: '\ED1F'; +} +.game-icon-six-eyes:before { + content: '\ED20'; +} +.game-icon-sunken-eye:before { + content: '\ED21'; +} +.game-icon-surrounded-eye:before { + content: '\ED22'; +} +.game-icon-templar-eye:before { + content: '\ED23'; +} +.game-icon-third-eye:before { + content: '\ED24'; +} +.game-icon-evil-eyes:before { + content: '\ED25'; +} +.game-icon-sight-disabled:before { + content: '\ED26'; +} +.game-icon-glass-ball:before { + content: '\ED27'; +} +.game-icon-lightning-dome:before { + content: '\ED28'; +} +.game-icon-corked-tube:before { + content: '\ED29'; +} +.game-icon-crystal-ball:before { + content: '\ED2A'; +} +.game-icon-dragon-balls:before { + content: '\ED2B'; +} +.game-icon-empty-hourglass:before { + content: '\ED2C'; +} +.game-icon-glass-heart:before { + content: '\ED2D'; +} +.game-icon-test-tubes:before { + content: '\ED2E'; +} +.game-icon-babyfoot-players:before { + content: '\ED2F'; +} +.game-icon-balloon-dog:before { + content: '\ED30'; +} +.game-icon-beach-ball:before { + content: '\ED31'; +} +.game-icon-game-console:before { + content: '\ED32'; +} +.game-icon-kite:before { + content: '\ED33'; +} +.game-icon-marbles:before { + content: '\ED34'; +} +.game-icon-paper-plane:before { + content: '\ED35'; +} +.game-icon-paper-windmill:before { + content: '\ED36'; +} +.game-icon-pendulum-swing:before { + content: '\ED37'; +} +.game-icon-pinball-flipper:before { + content: '\ED38'; +} +.game-icon-ping-pong-bat:before { + content: '\ED39'; +} +.game-icon-puzzle:before { + content: '\ED3A'; +} +.game-icon-skipping-rope:before { + content: '\ED3B'; +} +.game-icon-soccer-ball:before { + content: '\ED3C'; +} +.game-icon-balloons:before { + content: '\ED3D'; +} +.game-icon-jigsaw-piece:before { + content: '\ED3E'; +} +.game-icon-voodoo-doll:before { + content: '\ED3F'; +} +.game-icon-console-controller:before { + content: '\ED40'; +} +.game-icon-spinning-top:before { + content: '\ED41'; +} +.game-icon-bar-stool:before { + content: '\ED42'; +} +.game-icon-bathtub:before { + content: '\ED43'; +} +.game-icon-bed:before { + content: '\ED44'; +} +.game-icon-bookshelf:before { + content: '\ED45'; +} +.game-icon-bunk-beds:before { + content: '\ED46'; +} +.game-icon-cuckoo-clock:before { + content: '\ED47'; +} +.game-icon-desk:before { + content: '\ED48'; +} +.game-icon-door-handle:before { + content: '\ED49'; +} +.game-icon-door:before { + content: '\ED4A'; +} +.game-icon-electrical-socket:before { + content: '\ED4B'; +} +.game-icon-laptop:before { + content: '\ED4C'; +} +.game-icon-lipstick:before { + content: '\ED4D'; +} +.game-icon-lockers:before { + content: '\ED4E'; +} +.game-icon-magic-broom:before { + content: '\ED4F'; +} +.game-icon-office-chair:before { + content: '\ED50'; +} +.game-icon-paper-clip:before { + content: '\ED51'; +} +.game-icon-party-popper:before { + content: '\ED52'; +} +.game-icon-person-in-bed:before { + content: '\ED53'; +} +.game-icon-pillow:before { + content: '\ED54'; +} +.game-icon-rocking-chair:before { + content: '\ED55'; +} +.game-icon-soap:before { + content: '\ED56'; +} +.game-icon-sofa:before { + content: '\ED57'; +} +.game-icon-towel:before { + content: '\ED58'; +} +.game-icon-weight-scale:before { + content: '\ED59'; +} +.game-icon-wifi-router:before { + content: '\ED5A'; +} +.game-icon-wooden-chair:before { + content: '\ED5B'; +} +.game-icon-fountain-pen:before { + content: '\ED5C'; +} +.game-icon-papers:before { + content: '\ED5D'; +} +.game-icon-quill-ink:before { + content: '\ED5E'; +} +.game-icon-tied-scroll:before { + content: '\ED5F'; +} +.game-icon-calculator:before { + content: '\ED60'; +} +.game-icon-cctv-camera:before { + content: '\ED61'; +} +.game-icon-charging:before { + content: '\ED62'; +} +.game-icon-cpu:before { + content: '\ED63'; +} +.game-icon-electrical-resistance:before { + content: '\ED64'; +} +.game-icon-server-rack:before { + content: '\ED65'; +} +.game-icon-smartphone-2:before { + content: '\ED66'; +} +.game-icon-tv-remote:before { + content: '\ED67'; +} +.game-icon-usb-key:before { + content: '\ED68'; +} +.game-icon-watch:before { + content: '\ED69'; +} +.game-icon-batteries:before { + content: '\ED6A'; +} +.game-icon-cpu-shot:before { + content: '\ED6B'; +} +.game-icon-disc:before { + content: '\ED6C'; +} +.game-icon-lightning-arc:before { + content: '\ED6D'; +} +.game-icon-ram-2:before { + content: '\ED6E'; +} +.game-icon-pc:before { + content: '\ED6F'; +} +.game-icon-fog:before { + content: '\ED70'; +} +.game-icon-windsock:before { + content: '\ED71'; +} +.game-icon-cloud-ring:before { + content: '\ED72'; +} +.game-icon-dust-cloud:before { + content: '\ED73'; +} +.game-icon-flower-twirl:before { + content: '\ED74'; +} +.game-icon-fluffy-cloud:before { + content: '\ED75'; +} +.game-icon-half-tornado:before { + content: '\ED76'; +} +.game-icon-lightning-storm:before { + content: '\ED77'; +} +.game-icon-lightning-tree:before { + content: '\ED78'; +} +.game-icon-moon:before { + content: '\ED79'; +} +.game-icon-night-sky:before { + content: '\ED7A'; +} +.game-icon-parachute:before { + content: '\ED7B'; +} +.game-icon-raining:before { + content: '\ED7C'; +} +.game-icon-static:before { + content: '\ED7D'; +} +.game-icon-stomp-tornado:before { + content: '\ED7E'; +} +.game-icon-tornado:before { + content: '\ED7F'; +} +.game-icon-twirl-center:before { + content: '\ED80'; +} +.game-icon-twister:before { + content: '\ED81'; +} +.game-icon-whirlwind:before { + content: '\ED82'; +} +.game-icon-battle-mech:before { + content: '\ED83'; +} +.game-icon-factory-arm:before { + content: '\ED84'; +} +.game-icon-mono-wheel-robot:before { + content: '\ED85'; +} +.game-icon-nano-bot:before { + content: '\ED86'; +} +.game-icon-robot-grab:before { + content: '\ED87'; +} +.game-icon-robot-leg:before { + content: '\ED88'; +} +.game-icon-spider-bot:before { + content: '\ED89'; +} +.game-icon-megabot:before { + content: '\ED8A'; +} +.game-icon-techno-heart:before { + content: '\ED8B'; +} +.game-icon-vintage-robot:before { + content: '\ED8C'; +} +.game-icon-bus-doors:before { + content: '\ED8D'; +} +.game-icon-door-ring-handle:before { + content: '\ED8E'; +} +.game-icon-door-watcher:before { + content: '\ED8F'; +} +.game-icon-heaven-gate:before { + content: '\ED90'; +} +.game-icon-hobbit-door:before { + content: '\ED91'; +} +.game-icon-india-gate:before { + content: '\ED92'; +} +.game-icon-locked-door:before { + content: '\ED93'; +} +.game-icon-open-gate:before { + content: '\ED94'; +} +.game-icon-ranch-gate:before { + content: '\ED95'; +} +.game-icon-temple-door:before { + content: '\ED96'; +} +.game-icon-turnstile:before { + content: '\ED97'; +} +.game-icon-doorway:before { + content: '\ED98'; +} +.game-icon-boss-key:before { + content: '\ED99'; +} +.game-icon-dial-padlock:before { + content: '\ED9A'; +} +.game-icon-heart-key:before { + content: '\ED9B'; +} +.game-icon-house-keys:before { + content: '\ED9C'; +} +.game-icon-key-card:before { + content: '\ED9D'; +} +.game-icon-key-lock:before { + content: '\ED9E'; +} +.game-icon-keyring:before { + content: '\ED9F'; +} +.game-icon-locked-heart:before { + content: '\EDA0'; +} +.game-icon-millenium-key:before { + content: '\EDA1'; +} +.game-icon-padlock-open:before { + content: '\EDA2'; +} +.game-icon-secret-book:before { + content: '\EDA3'; +} +.game-icon-key:before { + content: '\EDA4'; +} +.game-icon-padlock:before { + content: '\EDA5'; +} +.game-icon-three-keys:before { + content: '\EDA6'; +} +.game-icon-triple-lock:before { + content: '\EDA7'; +} +.game-icon-unlocking:before { + content: '\EDA8'; +} +.game-icon-wax-seal:before { + content: '\EDA9'; +} +.game-icon-key-2:before { + content: '\EDAA'; +} +.game-icon-combination-lock:before { + content: '\EDAB'; +} +.game-icon-defense-satellite:before { + content: '\EDAC'; +} +.game-icon-light-sabers:before { + content: '\EDAD'; +} +.game-icon-double-ringed-orb:before { + content: '\EDAE'; +} +.game-icon-energise:before { + content: '\EDAF'; +} +.game-icon-ringed-planet:before { + content: '\EDB0'; +} +.game-icon-sinusoidal-beam:before { + content: '\EDB1'; +} +.game-icon-bandaged:before { + content: '\EDB2'; +} +.game-icon-duration:before { + content: '\EDB3'; +} +.game-icon-extra-time:before { + content: '\EDB4'; +} +.game-icon-time-synchronization:before { + content: '\EDB5'; +} +.game-icon-heavy-timer:before { + content: '\EDB6'; +} +.game-icon-time-trap:before { + content: '\EDB7'; +} +.game-icon-stopwatch-2:before { + content: '\EDB8'; +} +.game-icon-dragon-orb:before { + content: '\EDB9'; +} +.game-icon-barbed-nails:before { + content: '\EDBA'; +} +.game-icon-claw-string:before { + content: '\EDBB'; +} +.game-icon-interleaved-claws:before { + content: '\EDBC'; +} +.game-icon-midnight-claw:before { + content: '\EDBD'; +} +.game-icon-plate-claw:before { + content: '\EDBE'; +} +.game-icon-saw-claw:before { + content: '\EDBF'; +} +.game-icon-shining-claw:before { + content: '\EDC0'; +} +.game-icon-triple-scratches:before { + content: '\EDC1'; +} +.game-icon-distress-signal:before { + content: '\EDC2'; +} +.game-icon-exploding-planet:before { + content: '\EDC3'; +} +.game-icon-jupiter:before { + content: '\EDC4'; +} +.game-icon-moon-orbit:before { + content: '\EDC5'; +} +.game-icon-planet-core:before { + content: '\EDC6'; +} +.game-icon-black-hole-bolas:before { + content: '\EDC7'; +} +.game-icon-hypersonic-bolt:before { + content: '\EDC8'; +} +.game-icon-nested-eclipses:before { + content: '\EDC9'; +} +.game-icon-vortex:before { + content: '\EDCA'; +} +.game-icon-koholint-egg:before { + content: '\EDCB'; +} +.game-icon-egg-defense:before { + content: '\EDCC'; +} +.game-icon-tentacles-barrier:before { + content: '\EDCD'; +} +.game-icon-curled-tentacle:before { + content: '\EDCE'; +} +.game-icon-interlaced-tentacles:before { + content: '\EDCF'; +} +.game-icon-noodle-ball:before { + content: '\EDD0'; +} +.game-icon-spiral-tentacle:before { + content: '\EDD1'; +} +.game-icon-suckered-tentacle:before { + content: '\EDD2'; +} +.game-icon-tentacle-heart:before { + content: '\EDD3'; +} +.game-icon-tentacle-strike:before { + content: '\EDD4'; +} +.game-icon-tentacurl:before { + content: '\EDD5'; +} +.game-icon-thorny-tentacle:before { + content: '\EDD6'; +} +.game-icon-thorny-vine:before { + content: '\EDD7'; +} +.game-icon-apple-core:before { + content: '\EDD8'; +} +.game-icon-banana-bunch:before { + content: '\EDD9'; +} +.game-icon-banana-peeled:before { + content: '\EDDA'; +} +.game-icon-broccoli:before { + content: '\EDDB'; +} +.game-icon-coconuts:before { + content: '\EDDC'; +} +.game-icon-cut-lemon:before { + content: '\EDDD'; +} +.game-icon-leek:before { + content: '\EDDE'; +} +.game-icon-lemon:before { + content: '\EDDF'; +} +.game-icon-orange-slice:before { + content: '\EDE0'; +} +.game-icon-orange:before { + content: '\EDE1'; +} +.game-icon-peach:before { + content: '\EDE2'; +} +.game-icon-peas:before { + content: '\EDE3'; +} +.game-icon-pineapple:before { + content: '\EDE4'; +} +.game-icon-pumpkin:before { + content: '\EDE5'; +} +.game-icon-raddish:before { + content: '\EDE6'; +} +.game-icon-raspberry:before { + content: '\EDE7'; +} +.game-icon-strawberry:before { + content: '\EDE8'; +} +.game-icon-watermelon:before { + content: '\EDE9'; +} +.game-icon-apple-seeds:before { + content: '\EDEA'; +} +.game-icon-blackcurrant:before { + content: '\EDEB'; +} +.game-icon-gift-trap:before { + content: '\EDEC'; +} +.game-icon-american-football-ball:before { + content: '\EDED'; +} +.game-icon-cricket-bat:before { + content: '\EDEE'; +} +.game-icon-footy-field:before { + content: '\EDEF'; +} +.game-icon-bowie-knife:before { + content: '\EDF0'; +} +.game-icon-ball-pyramid:before { + content: '\EDF1'; +} +.game-icon-basketball-ball:before { + content: '\EDF2'; +} +.game-icon-boulder-dash:before { + content: '\EDF3'; +} +.game-icon-bowling-strike:before { + content: '\EDF4'; +} +.game-icon-eight-ball:before { + content: '\EDF5'; +} +.game-icon-golf-tee:before { + content: '\EDF6'; +} +.game-icon-snitch-quidditch-ball:before { + content: '\EDF7'; +} +.game-icon-soccer-kick:before { + content: '\EDF8'; +} +.game-icon-tennis-ball:before { + content: '\EDF9'; +} +.game-icon-volleyball-ball:before { + content: '\EDFA'; +} +.game-icon-water-polo:before { + content: '\EDFB'; +} +.game-icon-ball-glow:before { + content: '\EDFC'; +} +.game-icon-ball-heart:before { + content: '\EDFD'; +} +.game-icon-blackball:before { + content: '\EDFE'; +} +.game-icon-bowling-propulsion:before { + content: '\EDFF'; +} +.game-icon-caged-ball:before { + content: '\EE00'; +} +.game-icon-circle-cage:before { + content: '\EE01'; +} +.game-icon-concentration-orb:before { + content: '\EE02'; +} +.game-icon-crumbling-ball:before { + content: '\EE03'; +} +.game-icon-double-diaphragm:before { + content: '\EE04'; +} +.game-icon-extraction-orb:before { + content: '\EE05'; +} +.game-icon-falling-blob:before { + content: '\EE06'; +} +.game-icon-mesh-ball:before { + content: '\EE07'; +} +.game-icon-striking-balls:before { + content: '\EE08'; +} +.game-icon-unstable-orb:before { + content: '\EE09'; +} +.game-icon-basketball-basket:before { + content: '\EE0A'; +} +.game-icon-biceps:before { + content: '\EE0B'; +} +.game-icon-bowling-alley:before { + content: '\EE0C'; +} +.game-icon-bowling-pin:before { + content: '\EE0D'; +} +.game-icon-disc-golf-basket:before { + content: '\EE0E'; +} +.game-icon-fencer:before { + content: '\EE0F'; +} +.game-icon-frisbee:before { + content: '\EE10'; +} +.game-icon-juggling-clubs:before { + content: '\EE11'; +} +.game-icon-muscular-torso:before { + content: '\EE12'; +} +.game-icon-pool-dive:before { + content: '\EE13'; +} +.game-icon-punching-bag:before { + content: '\EE14'; +} +.game-icon-rugby-conversion:before { + content: '\EE15'; +} +.game-icon-shuttlecock:before { + content: '\EE16'; +} +.game-icon-skier:before { + content: '\EE17'; +} +.game-icon-skis:before { + content: '\EE18'; +} +.game-icon-soccer-field:before { + content: '\EE19'; +} +.game-icon-tennis-court:before { + content: '\EE1A'; +} +.game-icon-tennis-racket:before { + content: '\EE1B'; +} +.game-icon-sword-altar:before { + content: '\EE1C'; +} +.game-icon-broadsword:before { + content: '\EE1D'; +} +.game-icon-half-heart:before { + content: '\EE1E'; +} +.game-icon-ancient-sword:before { + content: '\EE1F'; +} +.game-icon-axe-sword:before { + content: '\EE20'; +} +.game-icon-bat-leth:before { + content: '\EE21'; +} +.game-icon-butterfly-knife:before { + content: '\EE22'; +} +.game-icon-chakram:before { + content: '\EE23'; +} +.game-icon-coiled-nail:before { + content: '\EE24'; +} +.game-icon-glaive:before { + content: '\EE25'; +} +.game-icon-rusty-sword:before { + content: '\EE26'; +} +.game-icon-scabbard:before { + content: '\EE27'; +} +.game-icon-spiral-hilt:before { + content: '\EE28'; +} +.game-icon-stabbed-note:before { + content: '\EE29'; +} +.game-icon-swords-power:before { + content: '\EE2A'; +} +.game-icon-two-handed-sword:before { + content: '\EE2B'; +} +.game-icon-blade-drag:before { + content: '\EE2C'; +} +.game-icon-blade-fall:before { + content: '\EE2D'; +} +.game-icon-bloody-sword:before { + content: '\EE2E'; +} +.game-icon-bouncing-sword:before { + content: '\EE2F'; +} +.game-icon-broad-dagger:before { + content: '\EE30'; +} +.game-icon-cloak-dagger:before { + content: '\EE31'; +} +.game-icon-crescent-blade:before { + content: '\EE32'; +} +.game-icon-croc-sword:before { + content: '\EE33'; +} +.game-icon-curvy-knife:before { + content: '\EE34'; +} +.game-icon-daggers:before { + content: '\EE35'; +} +.game-icon-dervish-swords:before { + content: '\EE36'; +} +.game-icon-diving-dagger:before { + content: '\EE37'; +} +.game-icon-energy-sword:before { + content: '\EE38'; +} +.game-icon-flying-dagger:before { + content: '\EE39'; +} +.game-icon-fragmented-sword:before { + content: '\EE3A'; +} +.game-icon-knife-thrust:before { + content: '\EE3B'; +} +.game-icon-lightning-saber:before { + content: '\EE3C'; +} +.game-icon-plain-dagger:before { + content: '\EE3D'; +} +.game-icon-pointy-sword:before { + content: '\EE3E'; +} +.game-icon-relic-blade:before { + content: '\EE3F'; +} +.game-icon-shard-sword:before { + content: '\EE40'; +} +.game-icon-shining-sword:before { + content: '\EE41'; +} +.game-icon-spinning-blades:before { + content: '\EE42'; +} +.game-icon-spinning-sword:before { + content: '\EE43'; +} +.game-icon-spiral-thrust:before { + content: '\EE44'; +} +.game-icon-striped-sword:before { + content: '\EE45'; +} +.game-icon-sword-array:before { + content: '\EE46'; +} +.game-icon-sword-hilt:before { + content: '\EE47'; +} +.game-icon-sword-spin:before { + content: '\EE48'; +} +.game-icon-sword-wound:before { + content: '\EE49'; +} +.game-icon-thrown-knife:before { + content: '\EE4A'; +} +.game-icon-thunder-blade:before { + content: '\EE4B'; +} +.game-icon-zeus-sword:before { + content: '\EE4C'; +} +.game-icon-bowie-knife-2:before { + content: '\EE4D'; +} +.game-icon-butterfly-knife-2:before { + content: '\EE4E'; +} +.game-icon-crescent-blade-2:before { + content: '\EE4F'; +} +.game-icon-stiletto-2:before { + content: '\EE50'; +} +.game-icon-antibody:before { + content: '\EE51'; +} +.game-icon-atom-core:before { + content: '\EE52'; +} +.game-icon-h2o:before { + content: '\EE53'; +} +.game-icon-radiations:before { + content: '\EE54'; +} +.game-icon-chemical-bolt:before { + content: '\EE55'; +} +.game-icon-dripping-tube:before { + content: '\EE56'; +} +.game-icon-erlenmeyer:before { + content: '\EE57'; +} +.game-icon-foamy-disc:before { + content: '\EE58'; +} +.game-icon-materials-science:before { + content: '\EE59'; +} +.game-icon-molecule:before { + content: '\EE5A'; +} +.game-icon-soap-experiment:before { + content: '\EE5B'; +} +.game-icon-acid-tube:before { + content: '\EE5C'; +} +.game-icon-syringe-2:before { + content: '\EE5D'; +} +.game-icon-vial:before { + content: '\EE5E'; +} +.game-icon-atom:before { + content: '\EE5F'; +} +.game-icon-molecule-2:before { + content: '\EE60'; +} +.game-icon-arch-bridge:before { + content: '\EE61'; +} +.game-icon-black-bridge:before { + content: '\EE62'; +} +.game-icon-cable-stayed-bridge:before { + content: '\EE63'; +} +.game-icon-cliff-crossing:before { + content: '\EE64'; +} +.game-icon-drawbridge:before { + content: '\EE65'; +} +.game-icon-rialto-bridge:before { + content: '\EE66'; +} +.game-icon-rope-bridge:before { + content: '\EE67'; +} +.game-icon-suspension-bridge:before { + content: '\EE68'; +} +.game-icon-archive-register:before { + content: '\EE69'; +} +.game-icon-archive-research:before { + content: '\EE6A'; +} +.game-icon-book-cover:before { + content: '\EE6B'; +} +.game-icon-book-pile:before { + content: '\EE6C'; +} +.game-icon-calendar-half-year:before { + content: '\EE6D'; +} +.game-icon-love-letter:before { + content: '\EE6E'; +} +.game-icon-passport:before { + content: '\EE6F'; +} +.game-icon-pencil-ruler:before { + content: '\EE70'; +} +.game-icon-post-stamp:before { + content: '\EE71'; +} +.game-icon-scroll-quill:before { + content: '\EE72'; +} +.game-icon-spell-book:before { + content: '\EE73'; +} +.game-icon-stamper:before { + content: '\EE74'; +} +.game-icon-book-aura:before { + content: '\EE75'; +} +.game-icon-book-cover-2:before { + content: '\EE76'; +} +.game-icon-book-storm:before { + content: '\EE77'; +} +.game-icon-bookmarklet:before { + content: '\EE78'; +} +.game-icon-enlightenment:before { + content: '\EE79'; +} +.game-icon-folded-paper:before { + content: '\EE7A'; +} +.game-icon-ink-swirl:before { + content: '\EE7B'; +} +.game-icon-scroll-unfurled:before { + content: '\EE7C'; +} +.game-icon-black-book:before { + content: '\EE7D'; +} +.game-icon-white-book:before { + content: '\EE7E'; +} +.game-icon-neck-bite:before { + content: '\EE7F'; +} +.game-icon-bleeding-wound:before { + content: '\EE80'; +} +.game-icon-bloody-stash:before { + content: '\EE81'; +} +.game-icon-cross-mark:before { + content: '\EE82'; +} +.game-icon-feather-wound:before { + content: '\EE83'; +} +.game-icon-open-wound:before { + content: '\EE84'; +} +.game-icon-scar-wound:before { + content: '\EE85'; +} +.game-icon-spotted-wound:before { + content: '\EE86'; +} +.game-icon-stitched-wound:before { + content: '\EE87'; +} +.game-icon-arm:before { + content: '\EE88'; +} +.game-icon-bowels:before { + content: '\EE89'; +} +.game-icon-kidneys:before { + content: '\EE8A'; +} +.game-icon-liver:before { + content: '\EE8B'; +} +.game-icon-lungs:before { + content: '\EE8C'; +} +.game-icon-internal-organ:before { + content: '\EE8D'; +} +.game-icon-tumor:before { + content: '\EE8E'; +} +.game-icon-flat-platform:before { + content: '\EE8F'; +} +.game-icon-i-brick:before { + content: '\EE90'; +} +.game-icon-j-brick:before { + content: '\EE91'; +} +.game-icon-l-brick:before { + content: '\EE92'; +} +.game-icon-o-brick:before { + content: '\EE93'; +} +.game-icon-s-brick:before { + content: '\EE94'; +} +.game-icon-t-brick:before { + content: '\EE95'; +} +.game-icon-z-brick:before { + content: '\EE96'; +} +.game-icon-platform:before { + content: '\EE97'; +} +.game-icon-hatchet:before { + content: '\EE98'; +} +.game-icon-magic-axe:before { + content: '\EE99'; +} +.game-icon-sharp-halberd:before { + content: '\EE9A'; +} +.game-icon-axe-swing:before { + content: '\EE9B'; +} +.game-icon-crossed-axes:before { + content: '\EE9C'; +} +.game-icon-halberd:before { + content: '\EE9D'; +} +.game-icon-hatchets:before { + content: '\EE9E'; +} +.game-icon-royal-love:before { + content: '\EE9F'; +} +.game-icon-split-cross:before { + content: '\EEA0'; +} +.game-icon-templar-heart:before { + content: '\EEA1'; +} +.game-icon-tongue:before { + content: '\EEA2'; +} +.game-icon-carnivore-mouth:before { + content: '\EEA3'; +} +.game-icon-energy-breath:before { + content: '\EEA4'; +} +.game-icon-front-teeth:before { + content: '\EEA5'; +} +.game-icon-incisors:before { + content: '\EEA6'; +} +.game-icon-lightning-shout:before { + content: '\EEA7'; +} +.game-icon-lips:before { + content: '\EEA8'; +} +.game-icon-saber-tooth:before { + content: '\EEA9'; +} +.game-icon-sharp-lips:before { + content: '\EEAA'; +} +.game-icon-fangs:before { + content: '\EEAB'; +} +.game-icon-floor-hatch:before { + content: '\EEAC'; +} +.game-icon-hole:before { + content: '\EEAD'; +} +.game-icon-mine-explosion:before { + content: '\EEAE'; +} +.game-icon-car-battery:before { + content: '\EEAF'; +} +.game-icon-heart-battery:before { + content: '\EEB0'; +} +.game-icon-entangled-typhoon:before { + content: '\EEB1'; +} +.game-icon-lightning-electron:before { + content: '\EEB2'; +} +.game-icon-portal:before { + content: '\EEB3'; +} +.game-icon-rolling-energy:before { + content: '\EEB4'; +} +.game-icon-tesla-coil:before { + content: '\EEB5'; +} +.game-icon-battery-0:before { + content: '\EEB6'; +} +.game-icon-battery-100:before { + content: '\EEB7'; +} +.game-icon-battery-25:before { + content: '\EEB8'; +} +.game-icon-battery-50:before { + content: '\EEB9'; +} +.game-icon-battery-75:before { + content: '\EEBA'; +} +.game-icon-battery-minus:before { + content: '\EEBB'; +} +.game-icon-battery-plus:before { + content: '\EEBC'; +} +.game-icon-battery-pack-alt:before { + content: '\EEBD'; +} +.game-icon-battery-pack:before { + content: '\EEBE'; +} +.game-icon-bolt-saw:before { + content: '\EEBF'; +} +.game-icon-electric-whip:before { + content: '\EEC0'; +} +.game-icon-focused-lightning:before { + content: '\EEC1'; +} +.game-icon-heavy-lightning:before { + content: '\EEC2'; +} +.game-icon-lightning-branches:before { + content: '\EEC3'; +} +.game-icon-lightning-dissipation:before { + content: '\EEC4'; +} +.game-icon-lightning-frequency:before { + content: '\EEC5'; +} +.game-icon-lightning-helix:before { + content: '\EEC6'; +} +.game-icon-lightning-shadow:before { + content: '\EEC7'; +} +.game-icon-lightning-slashes:before { + content: '\EEC8'; +} +.game-icon-lightning-trio:before { + content: '\EEC9'; +} +.game-icon-power-lightning:before { + content: '\EECA'; +} +.game-icon-round-struck:before { + content: '\EECB'; +} +.game-icon-sonic-lightning:before { + content: '\EECC'; +} +.game-icon-static-waves:before { + content: '\EECD'; +} +.game-icon-thunder-struck:before { + content: '\EECE'; +} +.game-icon-thunderball:before { + content: '\EECF'; +} +.game-icon-windy-stripes:before { + content: '\EED0'; +} +.game-icon-electric:before { + content: '\EED1'; +} +.game-icon-chain-lightning:before { + content: '\EED2'; +} +.game-icon-arcing-bolt:before { + content: '\EED3'; +} +.game-icon-bright-explosion:before { + content: '\EED4'; +} +.game-icon-bubbling-beam:before { + content: '\EED5'; +} +.game-icon-burning-blobs:before { + content: '\EED6'; +} +.game-icon-clout:before { + content: '\EED7'; +} +.game-icon-comet-spark:before { + content: '\EED8'; +} +.game-icon-corner-explosion:before { + content: '\EED9'; +} +.game-icon-crowned-explosion:before { + content: '\EEDA'; +} +.game-icon-electrical-crescent:before { + content: '\EEDB'; +} +.game-icon-explosive-meeting:before { + content: '\EEDC'; +} +.game-icon-fragmented-meteor:before { + content: '\EEDD'; +} +.game-icon-heavy-fall:before { + content: '\EEDE'; +} +.game-icon-hypersonic-melon:before { + content: '\EEDF'; +} +.game-icon-implosion:before { + content: '\EEE0'; +} +.game-icon-incoming-rocket:before { + content: '\EEE1'; +} +.game-icon-ion-cannon-blast:before { + content: '\EEE2'; +} +.game-icon-ringed-beam:before { + content: '\EEE3'; +} +.game-icon-screen-impact:before { + content: '\EEE4'; +} +.game-icon-striking-splinter:before { + content: '\EEE5'; +} +.game-icon-evil-love:before { + content: '\EEE6'; +} +.game-icon-broken-heart-zone:before { + content: '\EEE7'; +} +.game-icon-charm:before { + content: '\EEE8'; +} +.game-icon-chewed-heart:before { + content: '\EEE9'; +} +.game-icon-shining-heart:before { + content: '\EEEA'; +} +.game-icon-chanterelles:before { + content: '\EEEB'; +} +.game-icon-mushrooms-cluster:before { + content: '\EEEC'; +} +.game-icon-spotted-mushroom:before { + content: '\EEED'; +} +.game-icon-dice-eight-faces-eight:before { + content: '\EEEE'; +} +.game-icon-dice-six-faces-five:before { + content: '\EEEF'; +} +.game-icon-dice-six-faces-four:before { + content: '\EEF0'; +} +.game-icon-dice-six-faces-one:before { + content: '\EEF1'; +} +.game-icon-dice-six-faces-six:before { + content: '\EEF2'; +} +.game-icon-dice-six-faces-two:before { + content: '\EEF3'; +} +.game-icon-dice-twenty-faces-one:before { + content: '\EEF4'; +} +.game-icon-dice-twenty-faces-twenty:before { + content: '\EEF5'; +} +.game-icon-perspective-dice-five:before { + content: '\EEF6'; +} +.game-icon-perspective-dice-four:before { + content: '\EEF7'; +} +.game-icon-perspective-dice-one:before { + content: '\EEF8'; +} +.game-icon-perspective-dice-six-faces-five:before { + content: '\EEF9'; +} +.game-icon-perspective-dice-six-faces-one:before { + content: '\EEFA'; +} +.game-icon-perspective-dice-six-faces-random:before { + content: '\EEFB'; +} +.game-icon-perspective-dice-six-faces-six:before { + content: '\EEFC'; +} +.game-icon-perspective-dice-six-faces-three:before { + content: '\EEFD'; +} +.game-icon-perspective-dice-six-faces-two:before { + content: '\EEFE'; +} +.game-icon-perspective-dice-six:before { + content: '\EEFF'; +} +.game-icon-perspective-dice-three:before { + content: '\EF00'; +} +.game-icon-perspective-dice-two:before { + content: '\EF01'; +} +.game-icon-d10:before { + content: '\EF02'; +} +.game-icon-d12:before { + content: '\EF03'; +} +.game-icon-d4:before { + content: '\EF04'; +} +.game-icon-inverted-dice-1:before { + content: '\EF05'; +} +.game-icon-inverted-dice-2:before { + content: '\EF06'; +} +.game-icon-inverted-dice-3:before { + content: '\EF07'; +} +.game-icon-inverted-dice-4:before { + content: '\EF08'; +} +.game-icon-inverted-dice-5:before { + content: '\EF09'; +} +.game-icon-inverted-dice-6:before { + content: '\EF0A'; +} +.game-icon-matter-states:before { + content: '\EF0B'; +} +.game-icon-sandstorm:before { + content: '\EF0C'; +} +.game-icon-abstract-001:before { + content: '\EF0D'; +} +.game-icon-abstract-002:before { + content: '\EF0E'; +} +.game-icon-abstract-003:before { + content: '\EF0F'; +} +.game-icon-abstract-004:before { + content: '\EF10'; +} +.game-icon-abstract-005:before { + content: '\EF11'; +} +.game-icon-abstract-006:before { + content: '\EF12'; +} +.game-icon-abstract-007:before { + content: '\EF13'; +} +.game-icon-abstract-008:before { + content: '\EF14'; +} +.game-icon-abstract-009:before { + content: '\EF15'; +} +.game-icon-abstract-010:before { + content: '\EF16'; +} +.game-icon-abstract-011:before { + content: '\EF17'; +} +.game-icon-abstract-012:before { + content: '\EF18'; +} +.game-icon-abstract-013:before { + content: '\EF19'; +} +.game-icon-abstract-014:before { + content: '\EF1A'; +} +.game-icon-abstract-015:before { + content: '\EF1B'; +} +.game-icon-abstract-016:before { + content: '\EF1C'; +} +.game-icon-abstract-017:before { + content: '\EF1D'; +} +.game-icon-abstract-018:before { + content: '\EF1E'; +} +.game-icon-abstract-019:before { + content: '\EF1F'; +} +.game-icon-abstract-020:before { + content: '\EF20'; +} +.game-icon-abstract-021:before { + content: '\EF21'; +} +.game-icon-abstract-022:before { + content: '\EF22'; +} +.game-icon-abstract-023:before { + content: '\EF23'; +} +.game-icon-abstract-024:before { + content: '\EF24'; +} +.game-icon-abstract-025:before { + content: '\EF25'; +} +.game-icon-abstract-026:before { + content: '\EF26'; +} +.game-icon-abstract-027:before { + content: '\EF27'; +} +.game-icon-abstract-028:before { + content: '\EF28'; +} +.game-icon-abstract-029:before { + content: '\EF29'; +} +.game-icon-abstract-030:before { + content: '\EF2A'; +} +.game-icon-abstract-031:before { + content: '\EF2B'; +} +.game-icon-abstract-032:before { + content: '\EF2C'; +} +.game-icon-abstract-033:before { + content: '\EF2D'; +} +.game-icon-abstract-034:before { + content: '\EF2E'; +} +.game-icon-abstract-035:before { + content: '\EF2F'; +} +.game-icon-abstract-036:before { + content: '\EF30'; +} +.game-icon-abstract-037:before { + content: '\EF31'; +} +.game-icon-abstract-038:before { + content: '\EF32'; +} +.game-icon-abstract-039:before { + content: '\EF33'; +} +.game-icon-abstract-040:before { + content: '\EF34'; +} +.game-icon-abstract-041:before { + content: '\EF35'; +} +.game-icon-abstract-042:before { + content: '\EF36'; +} +.game-icon-abstract-043:before { + content: '\EF37'; +} +.game-icon-abstract-044:before { + content: '\EF38'; +} +.game-icon-abstract-045:before { + content: '\EF39'; +} +.game-icon-abstract-046:before { + content: '\EF3A'; +} +.game-icon-abstract-047:before { + content: '\EF3B'; +} +.game-icon-abstract-048:before { + content: '\EF3C'; +} +.game-icon-abstract-049:before { + content: '\EF3D'; +} +.game-icon-abstract-050:before { + content: '\EF3E'; +} +.game-icon-abstract-051:before { + content: '\EF3F'; +} +.game-icon-abstract-052:before { + content: '\EF40'; +} +.game-icon-abstract-053:before { + content: '\EF41'; +} +.game-icon-abstract-054:before { + content: '\EF42'; +} +.game-icon-abstract-055:before { + content: '\EF43'; +} +.game-icon-abstract-056:before { + content: '\EF44'; +} +.game-icon-abstract-057:before { + content: '\EF45'; +} +.game-icon-abstract-058:before { + content: '\EF46'; +} +.game-icon-abstract-059:before { + content: '\EF47'; +} +.game-icon-abstract-060:before { + content: '\EF48'; +} +.game-icon-abstract-061:before { + content: '\EF49'; +} +.game-icon-abstract-062:before { + content: '\EF4A'; +} +.game-icon-abstract-063:before { + content: '\EF4B'; +} +.game-icon-abstract-064:before { + content: '\EF4C'; +} +.game-icon-abstract-065:before { + content: '\EF4D'; +} +.game-icon-abstract-066:before { + content: '\EF4E'; +} +.game-icon-abstract-067:before { + content: '\EF4F'; +} +.game-icon-abstract-068:before { + content: '\EF50'; +} +.game-icon-abstract-069:before { + content: '\EF51'; +} +.game-icon-abstract-070:before { + content: '\EF52'; +} +.game-icon-abstract-071:before { + content: '\EF53'; +} +.game-icon-abstract-072:before { + content: '\EF54'; +} +.game-icon-abstract-073:before { + content: '\EF55'; +} +.game-icon-abstract-074:before { + content: '\EF56'; +} +.game-icon-abstract-075:before { + content: '\EF57'; +} +.game-icon-abstract-076:before { + content: '\EF58'; +} +.game-icon-abstract-077:before { + content: '\EF59'; +} +.game-icon-abstract-078:before { + content: '\EF5A'; +} +.game-icon-abstract-079:before { + content: '\EF5B'; +} +.game-icon-abstract-080:before { + content: '\EF5C'; +} +.game-icon-abstract-081:before { + content: '\EF5D'; +} +.game-icon-abstract-082:before { + content: '\EF5E'; +} +.game-icon-abstract-083:before { + content: '\EF5F'; +} +.game-icon-abstract-084:before { + content: '\EF60'; +} +.game-icon-abstract-085:before { + content: '\EF61'; +} +.game-icon-abstract-086:before { + content: '\EF62'; +} +.game-icon-abstract-087:before { + content: '\EF63'; +} +.game-icon-abstract-088:before { + content: '\EF64'; +} +.game-icon-abstract-089:before { + content: '\EF65'; +} +.game-icon-abstract-090:before { + content: '\EF66'; +} +.game-icon-abstract-091:before { + content: '\EF67'; +} +.game-icon-abstract-092:before { + content: '\EF68'; +} +.game-icon-abstract-093:before { + content: '\EF69'; +} +.game-icon-abstract-094:before { + content: '\EF6A'; +} +.game-icon-abstract-095:before { + content: '\EF6B'; +} +.game-icon-abstract-096:before { + content: '\EF6C'; +} +.game-icon-abstract-097:before { + content: '\EF6D'; +} +.game-icon-abstract-098:before { + content: '\EF6E'; +} +.game-icon-abstract-099:before { + content: '\EF6F'; +} +.game-icon-abstract-100:before { + content: '\EF70'; +} +.game-icon-abstract-101:before { + content: '\EF71'; +} +.game-icon-abstract-102:before { + content: '\EF72'; +} +.game-icon-abstract-103:before { + content: '\EF73'; +} +.game-icon-abstract-104:before { + content: '\EF74'; +} +.game-icon-abstract-105:before { + content: '\EF75'; +} +.game-icon-abstract-106:before { + content: '\EF76'; +} +.game-icon-abstract-107:before { + content: '\EF77'; +} +.game-icon-abstract-108:before { + content: '\EF78'; +} +.game-icon-abstract-109:before { + content: '\EF79'; +} +.game-icon-abstract-110:before { + content: '\EF7A'; +} +.game-icon-abstract-111:before { + content: '\EF7B'; +} +.game-icon-abstract-112:before { + content: '\EF7C'; +} +.game-icon-abstract-113:before { + content: '\EF7D'; +} +.game-icon-abstract-114:before { + content: '\EF7E'; +} +.game-icon-abstract-115:before { + content: '\EF7F'; +} +.game-icon-abstract-116:before { + content: '\EF80'; +} +.game-icon-abstract-117:before { + content: '\EF81'; +} +.game-icon-abstract-118:before { + content: '\EF82'; +} +.game-icon-abstract-119:before { + content: '\EF83'; +} +.game-icon-abstract-120:before { + content: '\EF84'; +} +.game-icon-abstract-121:before { + content: '\EF85'; +} diff --git a/assets/fonts/game-icons.woff b/lib/game-icons/game-icons.woff similarity index 100% rename from assets/fonts/game-icons.woff rename to lib/game-icons/game-icons.woff diff --git a/styles/system/game-icons.less b/styles/system/game-icons.less deleted file mode 100644 index 32768339..00000000 --- a/styles/system/game-icons.less +++ /dev/null @@ -1,19881 +0,0 @@ -@font-face { - font-family: 'game-icons'; - src: url('./assets/fonts/game-icons.woff') format('woff'); -} -.game-icon { - &:before { - font-family: 'game-icons'; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - font-style: normal; - font-variant: normal; - font-weight: normal; - text-decoration: none; - text-transform: none; - } -} -.game-icon-police-badge { - &:before { - content: '\E001'; - } -} -.game-icon-pistol-gun { - &:before { - content: '\E002'; - } -} -.game-icon-arrest { - &:before { - content: '\E003'; - } -} -.game-icon-banging-gavel { - &:before { - content: '\E004'; - } -} -.game-icon-chalk-outline-murder { - &:before { - content: '\E005'; - } -} -.game-icon-convict { - &:before { - content: '\E006'; - } -} -.game-icon-crime-scene-tape { - &:before { - content: '\E007'; - } -} -.game-icon-custodian-helmet { - &:before { - content: '\E008'; - } -} -.game-icon-donut { - &:before { - content: '\E009'; - } -} -.game-icon-evasion { - &:before { - content: '\E00A'; - } -} -.game-icon-finger-print { - &:before { - content: '\E00B'; - } -} -.game-icon-flashlight { - &:before { - content: '\E00C'; - } -} -.game-icon-handcuffed { - &:before { - content: '\E00D'; - } -} -.game-icon-id-card { - &:before { - content: '\E00E'; - } -} -.game-icon-lock-picking { - &:before { - content: '\E00F'; - } -} -.game-icon-megaphone { - &:before { - content: '\E010'; - } -} -.game-icon-mp5 { - &:before { - content: '\E011'; - } -} -.game-icon-mug-shot { - &:before { - content: '\E012'; - } -} -.game-icon-police-car { - &:before { - content: '\E013'; - } -} -.game-icon-police-officer-head { - &:before { - content: '\E014'; - } -} -.game-icon-police-target { - &:before { - content: '\E015'; - } -} -.game-icon-prisoner { - &:before { - content: '\E016'; - } -} -.game-icon-robber-mask { - &:before { - content: '\E017'; - } -} -.game-icon-robber { - &:before { - content: '\E018'; - } -} -.game-icon-sherlock-holmes { - &:before { - content: '\E019'; - } -} -.game-icon-sniffing-dog { - &:before { - content: '\E01A'; - } -} -.game-icon-spy { - &:before { - content: '\E01B'; - } -} -.game-icon-stun-grenade { - &:before { - content: '\E01C'; - } -} -.game-icon-tire-tracks { - &:before { - content: '\E01D'; - } -} -.game-icon-traffic-lights-red { - &:before { - content: '\E01E'; - } -} -.game-icon-walkie-talkie { - &:before { - content: '\E01F'; - } -} -.game-icon-whistle { - &:before { - content: '\E020'; - } -} -.game-icon-window-bars { - &:before { - content: '\E021'; - } -} -.game-icon-arrow-scope { - &:before { - content: '\E022'; - } -} -.game-icon-flash-grenade { - &:before { - content: '\E023'; - } -} -.game-icon-handcuffs { - &:before { - content: '\E024'; - } -} -.game-icon-law-star { - &:before { - content: '\E025'; - } -} -.game-icon-magnifying-glass { - &:before { - content: '\E026'; - } -} -.game-icon-manacles { - &:before { - content: '\E027'; - } -} -.game-icon-riot-shield { - &:before { - content: '\E028'; - } -} -.game-icon-kevlar { - &:before { - content: '\E029'; - } -} -.game-icon-balaclava { - &:before { - content: '\E02A'; - } -} -.game-icon-baton { - &:before { - content: '\E02B'; - } -} -.game-icon-famas { - &:before { - content: '\E02C'; - } -} -.game-icon-footsteps { - &:before { - content: '\E02D'; - } -} -.game-icon-glock { - &:before { - content: '\E02E'; - } -} -.game-icon-halt { - &:before { - content: '\E02F'; - } -} -.game-icon-kevlar-vest { - &:before { - content: '\E030'; - } -} -.game-icon-siren { - &:before { - content: '\E031'; - } -} -.game-icon-steel-door { - &:before { - content: '\E032'; - } -} -.game-icon-steyr-aug { - &:before { - content: '\E033'; - } -} -.game-icon-switchblade { - &:before { - content: '\E034'; - } -} -.game-icon-walther-ppk { - &:before { - content: '\E035'; - } -} -.game-icon-swordman { - &:before { - content: '\E036'; - } -} -.game-icon-swordwoman { - &:before { - content: '\E037'; - } -} -.game-icon-american-shield { - &:before { - content: '\E038'; - } -} -.game-icon-armor-downgrade { - &:before { - content: '\E039'; - } -} -.game-icon-armor-upgrade { - &:before { - content: '\E03A'; - } -} -.game-icon-attached-shield { - &:before { - content: '\E03B'; - } -} -.game-icon-cross-shield { - &:before { - content: '\E03C'; - } -} -.game-icon-dice-shield { - &:before { - content: '\E03D'; - } -} -.game-icon-dragon-shield { - &:before { - content: '\E03E'; - } -} -.game-icon-griffin-shield { - &:before { - content: '\E03F'; - } -} -.game-icon-healing-shield { - &:before { - content: '\E040'; - } -} -.game-icon-ribbon-shield { - &:before { - content: '\E041'; - } -} -.game-icon-roman-shield { - &:before { - content: '\E042'; - } -} -.game-icon-shield-bash { - &:before { - content: '\E043'; - } -} -.game-icon-shield-impact { - &:before { - content: '\E044'; - } -} -.game-icon-shield-opposition { - &:before { - content: '\E045'; - } -} -.game-icon-templar-shield { - &:before { - content: '\E046'; - } -} -.game-icon-temporary-shield { - &:before { - content: '\E047'; - } -} -.game-icon-tribal-gear { - &:before { - content: '\E048'; - } -} -.game-icon-trident-shield { - &:before { - content: '\E049'; - } -} -.game-icon-vibrating-shield { - &:before { - content: '\E04A'; - } -} -.game-icon-viking-shield { - &:before { - content: '\E04B'; - } -} -.game-icon-arrows-shield { - &:before { - content: '\E04C'; - } -} -.game-icon-battle-gear { - &:before { - content: '\E04D'; - } -} -.game-icon-bell-shield { - &:before { - content: '\E04E'; - } -} -.game-icon-black-hand-shield { - &:before { - content: '\E04F'; - } -} -.game-icon-bolt-shield { - &:before { - content: '\E050'; - } -} -.game-icon-bordered-shield { - &:before { - content: '\E051'; - } -} -.game-icon-broken-shield { - &:before { - content: '\E052'; - } -} -.game-icon-bubble-field { - &:before { - content: '\E053'; - } -} -.game-icon-checked-shield { - &:before { - content: '\E054'; - } -} -.game-icon-cracked-shield { - &:before { - content: '\E055'; - } -} -.game-icon-crenulated-shield { - &:before { - content: '\E056'; - } -} -.game-icon-edged-shield { - &:before { - content: '\E057'; - } -} -.game-icon-energy-shield { - &:before { - content: '\E058'; - } -} -.game-icon-eye-shield { - &:before { - content: '\E059'; - } -} -.game-icon-fire-shield { - &:before { - content: '\E05A'; - } -} -.game-icon-ice-shield { - &:before { - content: '\E05B'; - } -} -.game-icon-layered-armor { - &:before { - content: '\E05C'; - } -} -.game-icon-lightning-shield { - &:before { - content: '\E05D'; - } -} -.game-icon-magic-shield { - &:before { - content: '\E05E'; - } -} -.game-icon-rosa-shield { - &:before { - content: '\E05F'; - } -} -.game-icon-shield-bounces { - &:before { - content: '\E060'; - } -} -.game-icon-shield-echoes { - &:before { - content: '\E061'; - } -} -.game-icon-shield-reflect { - &:before { - content: '\E062'; - } -} -.game-icon-shieldcomb { - &:before { - content: '\E063'; - } -} -.game-icon-skull-shield { - &:before { - content: '\E064'; - } -} -.game-icon-slashed-shield { - &:before { - content: '\E065'; - } -} -.game-icon-spartan { - &:before { - content: '\E066'; - } -} -.game-icon-spiky-field { - &:before { - content: '\E067'; - } -} -.game-icon-surrounded-shield { - &:before { - content: '\E068'; - } -} -.game-icon-swords-emblem { - &:before { - content: '\E069'; - } -} -.game-icon-winged-shield { - &:before { - content: '\E06A'; - } -} -.game-icon-zebra-shield { - &:before { - content: '\E06B'; - } -} -.game-icon-shield { - &:before { - content: '\E06C'; - } -} -.game-icon-air-force { - &:before { - content: '\E06D'; - } -} -.game-icon-shield-disabled { - &:before { - content: '\E06E'; - } -} -.game-icon-round-shield { - &:before { - content: '\E06F'; - } -} -.game-icon-chameleon-glyph { - &:before { - content: '\E070'; - } -} -.game-icon-akhet { - &:before { - content: '\E071'; - } -} -.game-icon-all-seeing-eye { - &:before { - content: '\E072'; - } -} -.game-icon-anarchy { - &:before { - content: '\E073'; - } -} -.game-icon-aquarius { - &:before { - content: '\E074'; - } -} -.game-icon-aries { - &:before { - content: '\E075'; - } -} -.game-icon-azul-flake { - &:before { - content: '\E076'; - } -} -.game-icon-banknote { - &:before { - content: '\E077'; - } -} -.game-icon-bowen-knot { - &:before { - content: '\E078'; - } -} -.game-icon-caduceus { - &:before { - content: '\E079'; - } -} -.game-icon-camargue-cross { - &:before { - content: '\E07A'; - } -} -.game-icon-cancer { - &:before { - content: '\E07B'; - } -} -.game-icon-capricorn { - &:before { - content: '\E07C'; - } -} -.game-icon-check-mark { - &:before { - content: '\E07D'; - } -} -.game-icon-cornucopia { - &:before { - content: '\E07E'; - } -} -.game-icon-corporal { - &:before { - content: '\E07F'; - } -} -.game-icon-credits-currency { - &:before { - content: '\E080'; - } -} -.game-icon-dream-catcher { - &:before { - content: '\E081'; - } -} -.game-icon-dwennimmen { - &:before { - content: '\E082'; - } -} -.game-icon-easter-egg { - &:before { - content: '\E083'; - } -} -.game-icon-ermine { - &:before { - content: '\E084'; - } -} -.game-icon-eye-of-horus { - &:before { - content: '\E085'; - } -} -.game-icon-f-clef { - &:before { - content: '\E086'; - } -} -.game-icon-fallout-shelter { - &:before { - content: '\E087'; - } -} -.game-icon-female { - &:before { - content: '\E088'; - } -} -.game-icon-film-strip { - &:before { - content: '\E089'; - } -} -.game-icon-fleur-de-lys { - &:before { - content: '\E08A'; - } -} -.game-icon-flower-emblem { - &:before { - content: '\E08B'; - } -} -.game-icon-freemasonry { - &:before { - content: '\E08C'; - } -} -.game-icon-g-clef { - &:before { - content: '\E08D'; - } -} -.game-icon-gear-stick-pattern { - &:before { - content: '\E08E'; - } -} -.game-icon-gemini { - &:before { - content: '\E08F'; - } -} -.game-icon-hell-crosses { - &:before { - content: '\E090'; - } -} -.game-icon-heptagram { - &:before { - content: '\E091'; - } -} -.game-icon-hieroglyph-y { - &:before { - content: '\E092'; - } -} -.game-icon-horseshoe { - &:before { - content: '\E093'; - } -} -.game-icon-info { - &:before { - content: '\E094'; - } -} -.game-icon-jerusalem-cross { - &:before { - content: '\E095'; - } -} -.game-icon-klingon { - &:before { - content: '\E096'; - } -} -.game-icon-leo { - &:before { - content: '\E097'; - } -} -.game-icon-liberty-wing { - &:before { - content: '\E098'; - } -} -.game-icon-libra { - &:before { - content: '\E099'; - } -} -.game-icon-logic-gate-and { - &:before { - content: '\E09A'; - } -} -.game-icon-logic-gate-nand { - &:before { - content: '\E09B'; - } -} -.game-icon-logic-gate-nor { - &:before { - content: '\E09C'; - } -} -.game-icon-logic-gate-not { - &:before { - content: '\E09D'; - } -} -.game-icon-logic-gate-nxor { - &:before { - content: '\E09E'; - } -} -.game-icon-logic-gate-or { - &:before { - content: '\E09F'; - } -} -.game-icon-logic-gate-xor { - &:before { - content: '\E0A0'; - } -} -.game-icon-male { - &:before { - content: '\E0A1'; - } -} -.game-icon-mona-lisa { - &:before { - content: '\E0A2'; - } -} -.game-icon-nested-hexagons { - &:before { - content: '\E0A3'; - } -} -.game-icon-ophiuchus { - &:before { - content: '\E0A4'; - } -} -.game-icon-peace-dove { - &:before { - content: '\E0A5'; - } -} -.game-icon-pisces { - &:before { - content: '\E0A6'; - } -} -.game-icon-rod-of-asclepius { - &:before { - content: '\E0A7'; - } -} -.game-icon-rss { - &:before { - content: '\E0A8'; - } -} -.game-icon-rub-el-hizb { - &:before { - content: '\E0A9'; - } -} -.game-icon-sagittarius { - &:before { - content: '\E0AA'; - } -} -.game-icon-scorpio { - &:before { - content: '\E0AB'; - } -} -.game-icon-slumbering-sanctuary { - &:before { - content: '\E0AC'; - } -} -.game-icon-stop-sign { - &:before { - content: '\E0AD'; - } -} -.game-icon-striped-sun { - &:before { - content: '\E0AE'; - } -} -.game-icon-taurus { - &:before { - content: '\E0AF'; - } -} -.game-icon-transform { - &:before { - content: '\E0B0'; - } -} -.game-icon-triforce { - &:before { - content: '\E0B1'; - } -} -.game-icon-trinacria { - &:before { - content: '\E0B2'; - } -} -.game-icon-triquetra { - &:before { - content: '\E0B3'; - } -} -.game-icon-venus-of-willendorf { - &:before { - content: '\E0B4'; - } -} -.game-icon-virgo { - &:before { - content: '\E0B5'; - } -} -.game-icon-virtual-marker { - &:before { - content: '\E0B6'; - } -} -.game-icon-wanted-reward { - &:before { - content: '\E0B7'; - } -} -.game-icon-warlock-eye { - &:before { - content: '\E0B8'; - } -} -.game-icon-yin-yang { - &:before { - content: '\E0B9'; - } -} -.game-icon-zigzag-hieroglyph { - &:before { - content: '\E0BA'; - } -} -.game-icon-holosphere { - &:before { - content: '\E0BB'; - } -} -.game-icon-power-button { - &:before { - content: '\E0BC'; - } -} -.game-icon-ace { - &:before { - content: '\E0BD'; - } -} -.game-icon-aerial-signal { - &:before { - content: '\E0BE'; - } -} -.game-icon-ankh { - &:before { - content: '\E0BF'; - } -} -.game-icon-artificial-hive { - &:before { - content: '\E0C0'; - } -} -.game-icon-automatic-sas { - &:before { - content: '\E0C1'; - } -} -.game-icon-barbed-sun { - &:before { - content: '\E0C2'; - } -} -.game-icon-batwing-emblem { - &:before { - content: '\E0C3'; - } -} -.game-icon-biohazard { - &:before { - content: '\E0C4'; - } -} -.game-icon-black-flag { - &:before { - content: '\E0C5'; - } -} -.game-icon-checkbox-tree { - &:before { - content: '\E0C6'; - } -} -.game-icon-clover { - &:before { - content: '\E0C7'; - } -} -.game-icon-coiling-curl { - &:before { - content: '\E0C8'; - } -} -.game-icon-concentric-crescents { - &:before { - content: '\E0C9'; - } -} -.game-icon-condor-emblem { - &:before { - content: '\E0CA'; - } -} -.game-icon-conversation { - &:before { - content: '\E0CB'; - } -} -.game-icon-cubeforce { - &:before { - content: '\E0CC'; - } -} -.game-icon-cubes { - &:before { - content: '\E0CD'; - } -} -.game-icon-cursed-star { - &:before { - content: '\E0CE'; - } -} -.game-icon-cycle { - &:before { - content: '\E0CF'; - } -} -.game-icon-divided-spiral { - &:before { - content: '\E0D0'; - } -} -.game-icon-eagle-emblem { - &:before { - content: '\E0D1'; - } -} -.game-icon-fluffy-trefoil { - &:before { - content: '\E0D2'; - } -} -.game-icon-freedom-dove { - &:before { - content: '\E0D3'; - } -} -.game-icon-gamepad-cross { - &:before { - content: '\E0D4'; - } -} -.game-icon-gothic-cross { - &:before { - content: '\E0D5'; - } -} -.game-icon-hawk-emblem { - &:before { - content: '\E0D6'; - } -} -.game-icon-hazard-sign { - &:before { - content: '\E0D7'; - } -} -.game-icon-holy-symbol { - &:before { - content: '\E0D8'; - } -} -.game-icon-hospital-cross { - &:before { - content: '\E0D9'; - } -} -.game-icon-interdiction { - &:before { - content: '\E0DA'; - } -} -.game-icon-james-bond-aperture { - &:before { - content: '\E0DB'; - } -} -.game-icon-justice-star { - &:before { - content: '\E0DC'; - } -} -.game-icon-king { - &:before { - content: '\E0DD'; - } -} -.game-icon-laser-warning { - &:before { - content: '\E0DE'; - } -} -.game-icon-maze-cornea { - &:before { - content: '\E0DF'; - } -} -.game-icon-maze-saw { - &:before { - content: '\E0E0'; - } -} -.game-icon-moebius-star { - &:before { - content: '\E0E1'; - } -} -.game-icon-moebius-trefoil { - &:before { - content: '\E0E2'; - } -} -.game-icon-moebius-triangle { - &:before { - content: '\E0E3'; - } -} -.game-icon-omega { - &:before { - content: '\E0E4'; - } -} -.game-icon-orbital { - &:before { - content: '\E0E5'; - } -} -.game-icon-over-infinity { - &:before { - content: '\E0E6'; - } -} -.game-icon-pentagram-rose { - &:before { - content: '\E0E7'; - } -} -.game-icon-perpendicular-rings { - &:before { - content: '\E0E8'; - } -} -.game-icon-radial-balance { - &:before { - content: '\E0E9'; - } -} -.game-icon-radioactive { - &:before { - content: '\E0EA'; - } -} -.game-icon-recycle { - &:before { - content: '\E0EB'; - } -} -.game-icon-ribbon { - &:before { - content: '\E0EC'; - } -} -.game-icon-rss-2 { - &:before { - content: '\E0ED'; - } -} -.game-icon-rune-sword { - &:before { - content: '\E0EE'; - } -} -.game-icon-scales { - &:before { - content: '\E0EF'; - } -} -.game-icon-shiny-omega { - &:before { - content: '\E0F0'; - } -} -.game-icon-shuriken-aperture { - &:before { - content: '\E0F1'; - } -} -.game-icon-skull-crossed-bones { - &:before { - content: '\E0F2'; - } -} -.game-icon-staryu { - &:before { - content: '\E0F3'; - } -} -.game-icon-steelwing-emblem { - &:before { - content: '\E0F4'; - } -} -.game-icon-totem-head { - &:before { - content: '\E0F5'; - } -} -.game-icon-triorb { - &:before { - content: '\E0F6'; - } -} -.game-icon-triple-beak { - &:before { - content: '\E0F7'; - } -} -.game-icon-triple-corn { - &:before { - content: '\E0F8'; - } -} -.game-icon-triple-plier { - &:before { - content: '\E0F9'; - } -} -.game-icon-triple-yin { - &:before { - content: '\E0FA'; - } -} -.game-icon-ubisoft-sun { - &:before { - content: '\E0FB'; - } -} -.game-icon-zigzag-cage { - &:before { - content: '\E0FC'; - } -} -.game-icon-cancel { - &:before { - content: '\E0FD'; - } -} -.game-icon-clover-spiked { - &:before { - content: '\E0FE'; - } -} -.game-icon-clover-2 { - &:before { - content: '\E0FF'; - } -} -.game-icon-doubled { - &:before { - content: '\E100'; - } -} -.game-icon-expander { - &:before { - content: '\E101'; - } -} -.game-icon-help { - &:before { - content: '\E102'; - } -} -.game-icon-hive { - &:before { - content: '\E103'; - } -} -.game-icon-mass-driver { - &:before { - content: '\E104'; - } -} -.game-icon-nodular { - &:before { - content: '\E105'; - } -} -.game-icon-nuclear { - &:before { - content: '\E106'; - } -} -.game-icon-overmind { - &:before { - content: '\E107'; - } -} -.game-icon-pulse { - &:before { - content: '\E108'; - } -} -.game-icon-reactor { - &:before { - content: '\E109'; - } -} -.game-icon-regeneration { - &:before { - content: '\E10A'; - } -} -.game-icon-slow-blob { - &:before { - content: '\E10B'; - } -} -.game-icon-spawn-node { - &:before { - content: '\E10C'; - } -} -.game-icon-infinity { - &:before { - content: '\E10D'; - } -} -.game-icon-allied-star { - &:before { - content: '\E10E'; - } -} -.game-icon-balkenkreuz { - &:before { - content: '\E10F'; - } -} -.game-icon-bat { - &:before { - content: '\E110'; - } -} -.game-icon-clubs { - &:before { - content: '\E111'; - } -} -.game-icon-diamonds { - &:before { - content: '\E112'; - } -} -.game-icon-divided-square { - &:before { - content: '\E113'; - } -} -.game-icon-hearts { - &:before { - content: '\E114'; - } -} -.game-icon-iron-cross { - &:before { - content: '\E115'; - } -} -.game-icon-pentacle { - &:before { - content: '\E116'; - } -} -.game-icon-spades { - &:before { - content: '\E117'; - } -} -.game-icon-card-10-clubs { - &:before { - content: '\E118'; - } -} -.game-icon-card-10-diamonds { - &:before { - content: '\E119'; - } -} -.game-icon-card-10-hearts { - &:before { - content: '\E11A'; - } -} -.game-icon-card-10-spades { - &:before { - content: '\E11B'; - } -} -.game-icon-card-2-clubs { - &:before { - content: '\E11C'; - } -} -.game-icon-card-2-diamonds { - &:before { - content: '\E11D'; - } -} -.game-icon-card-2-hearts { - &:before { - content: '\E11E'; - } -} -.game-icon-card-2-spades { - &:before { - content: '\E11F'; - } -} -.game-icon-card-3-clubs { - &:before { - content: '\E120'; - } -} -.game-icon-card-3-diamonds { - &:before { - content: '\E121'; - } -} -.game-icon-card-3-hearts { - &:before { - content: '\E122'; - } -} -.game-icon-card-3-spades { - &:before { - content: '\E123'; - } -} -.game-icon-card-4-clubs { - &:before { - content: '\E124'; - } -} -.game-icon-card-4-diamonds { - &:before { - content: '\E125'; - } -} -.game-icon-card-4-hearts { - &:before { - content: '\E126'; - } -} -.game-icon-card-4-spades { - &:before { - content: '\E127'; - } -} -.game-icon-card-5-clubs { - &:before { - content: '\E128'; - } -} -.game-icon-card-5-diamonds { - &:before { - content: '\E129'; - } -} -.game-icon-card-5-hearts { - &:before { - content: '\E12A'; - } -} -.game-icon-card-5-spades { - &:before { - content: '\E12B'; - } -} -.game-icon-card-6-clubs { - &:before { - content: '\E12C'; - } -} -.game-icon-card-6-diamonds { - &:before { - content: '\E12D'; - } -} -.game-icon-card-6-hearts { - &:before { - content: '\E12E'; - } -} -.game-icon-card-6-spades { - &:before { - content: '\E12F'; - } -} -.game-icon-card-7-clubs { - &:before { - content: '\E130'; - } -} -.game-icon-card-7-diamonds { - &:before { - content: '\E131'; - } -} -.game-icon-card-7-hearts { - &:before { - content: '\E132'; - } -} -.game-icon-card-7-spades { - &:before { - content: '\E133'; - } -} -.game-icon-card-8-clubs { - &:before { - content: '\E134'; - } -} -.game-icon-card-8-diamonds { - &:before { - content: '\E135'; - } -} -.game-icon-card-8-hearts { - &:before { - content: '\E136'; - } -} -.game-icon-card-8-spades { - &:before { - content: '\E137'; - } -} -.game-icon-card-9-clubs { - &:before { - content: '\E138'; - } -} -.game-icon-card-9-diamonds { - &:before { - content: '\E139'; - } -} -.game-icon-card-9-hearts { - &:before { - content: '\E13A'; - } -} -.game-icon-card-9-spades { - &:before { - content: '\E13B'; - } -} -.game-icon-card-ace-clubs { - &:before { - content: '\E13C'; - } -} -.game-icon-card-ace-diamonds { - &:before { - content: '\E13D'; - } -} -.game-icon-card-ace-hearts { - &:before { - content: '\E13E'; - } -} -.game-icon-card-ace-spades { - &:before { - content: '\E13F'; - } -} -.game-icon-card-jack-clubs { - &:before { - content: '\E140'; - } -} -.game-icon-card-jack-diamonds { - &:before { - content: '\E141'; - } -} -.game-icon-card-jack-hearts { - &:before { - content: '\E142'; - } -} -.game-icon-card-jack-spades { - &:before { - content: '\E143'; - } -} -.game-icon-card-king-clubs { - &:before { - content: '\E144'; - } -} -.game-icon-card-king-diamonds { - &:before { - content: '\E145'; - } -} -.game-icon-card-king-hearts { - &:before { - content: '\E146'; - } -} -.game-icon-card-king-spades { - &:before { - content: '\E147'; - } -} -.game-icon-card-queen-clubs { - &:before { - content: '\E148'; - } -} -.game-icon-card-queen-diamonds { - &:before { - content: '\E149'; - } -} -.game-icon-card-queen-hearts { - &:before { - content: '\E14A'; - } -} -.game-icon-card-queen-spades { - &:before { - content: '\E14B'; - } -} -.game-icon-card-discard { - &:before { - content: '\E14C'; - } -} -.game-icon-card-draw { - &:before { - content: '\E14D'; - } -} -.game-icon-card-pick { - &:before { - content: '\E14E'; - } -} -.game-icon-card-random { - &:before { - content: '\E14F'; - } -} -.game-icon-3d-meeple { - &:before { - content: '\E150'; - } -} -.game-icon-abbot-meeple { - &:before { - content: '\E151'; - } -} -.game-icon-ages { - &:before { - content: '\E152'; - } -} -.game-icon-backgammon { - &:before { - content: '\E153'; - } -} -.game-icon-buy-card { - &:before { - content: '\E154'; - } -} -.game-icon-card-burn { - &:before { - content: '\E155'; - } -} -.game-icon-card-exchange { - &:before { - content: '\E156'; - } -} -.game-icon-card-joker { - &:before { - content: '\E157'; - } -} -.game-icon-coins { - &:before { - content: '\E158'; - } -} -.game-icon-conway-life-glider { - &:before { - content: '\E159'; - } -} -.game-icon-dice-six-faces-three { - &:before { - content: '\E15A'; - } -} -.game-icon-domino-tiles { - &:before { - content: '\E15B'; - } -} -.game-icon-empty-chessboard { - &:before { - content: '\E15C'; - } -} -.game-icon-meeple-army { - &:before { - content: '\E15D'; - } -} -.game-icon-meeple-circle { - &:before { - content: '\E15E'; - } -} -.game-icon-meeple-group { - &:before { - content: '\E15F'; - } -} -.game-icon-meeple-king { - &:before { - content: '\E160'; - } -} -.game-icon-meeple { - &:before { - content: '\E161'; - } -} -.game-icon-opposite-hearts { - &:before { - content: '\E162'; - } -} -.game-icon-pay-money { - &:before { - content: '\E163'; - } -} -.game-icon-perspective-dice-six-faces-four { - &:before { - content: '\E164'; - } -} -.game-icon-player-base { - &:before { - content: '\E165'; - } -} -.game-icon-player-next { - &:before { - content: '\E166'; - } -} -.game-icon-player-previous { - &:before { - content: '\E167'; - } -} -.game-icon-player-time { - &:before { - content: '\E168'; - } -} -.game-icon-receive-money { - &:before { - content: '\E169'; - } -} -.game-icon-rolling-dice-cup { - &:before { - content: '\E16A'; - } -} -.game-icon-rolling-dices { - &:before { - content: '\E16B'; - } -} -.game-icon-round-table { - &:before { - content: '\E16C'; - } -} -.game-icon-rule-book { - &:before { - content: '\E16D'; - } -} -.game-icon-sell-card { - &:before { - content: '\E16E'; - } -} -.game-icon-stack { - &:before { - content: '\E16F'; - } -} -.game-icon-tabletop-players { - &:before { - content: '\E170'; - } -} -.game-icon-team-downgrade { - &:before { - content: '\E171'; - } -} -.game-icon-team-upgrade { - &:before { - content: '\E172'; - } -} -.game-icon-tic-tac-toe { - &:before { - content: '\E173'; - } -} -.game-icon-token { - &:before { - content: '\E174'; - } -} -.game-icon-two-coins { - &:before { - content: '\E175'; - } -} -.game-icon-up-card { - &:before { - content: '\E176'; - } -} -.game-icon-honeycomb { - &:before { - content: '\E177'; - } -} -.game-icon-hourglass { - &:before { - content: '\E178'; - } -} -.game-icon-pawn { - &:before { - content: '\E179'; - } -} -.game-icon-poker-hand { - &:before { - content: '\E17A'; - } -} -.game-icon-sands-of-time { - &:before { - content: '\E17B'; - } -} -.game-icon-stopwatch { - &:before { - content: '\E17C'; - } -} -.game-icon-suits { - &:before { - content: '\E17D'; - } -} -.game-icon-card-pickup { - &:before { - content: '\E17E'; - } -} -.game-icon-card-play { - &:before { - content: '\E17F'; - } -} -.game-icon-chess-bishop { - &:before { - content: '\E180'; - } -} -.game-icon-chess-king { - &:before { - content: '\E181'; - } -} -.game-icon-chess-knight { - &:before { - content: '\E182'; - } -} -.game-icon-chess-pawn { - &:before { - content: '\E183'; - } -} -.game-icon-chess-queen { - &:before { - content: '\E184'; - } -} -.game-icon-chess-rook { - &:before { - content: '\E185'; - } -} -.game-icon-hexes { - &:before { - content: '\E186'; - } -} -.game-icon-brutal-helm { - &:before { - content: '\E187'; - } -} -.game-icon-dwarf-helmet { - &:before { - content: '\E188'; - } -} -.game-icon-dwarf-king { - &:before { - content: '\E189'; - } -} -.game-icon-elf-helmet { - &:before { - content: '\E18A'; - } -} -.game-icon-american-football-helmet { - &:before { - content: '\E18B'; - } -} -.game-icon-astronaut-helmet { - &:before { - content: '\E18C'; - } -} -.game-icon-bandana { - &:before { - content: '\E18D'; - } -} -.game-icon-bandit { - &:before { - content: '\E18E'; - } -} -.game-icon-billed-cap { - &:before { - content: '\E18F'; - } -} -.game-icon-black-knight-helm { - &:before { - content: '\E190'; - } -} -.game-icon-captain-hat-profile { - &:before { - content: '\E191'; - } -} -.game-icon-chef-toque { - &:before { - content: '\E192'; - } -} -.game-icon-closed-barbute { - &:before { - content: '\E193'; - } -} -.game-icon-cork-hat { - &:before { - content: '\E194'; - } -} -.game-icon-coronation { - &:before { - content: '\E195'; - } -} -.game-icon-crenel-crown { - &:before { - content: '\E196'; - } -} -.game-icon-deshret-red-crown { - &:before { - content: '\E197'; - } -} -.game-icon-diving-helmet { - &:before { - content: '\E198'; - } -} -.game-icon-dunce-cap { - &:before { - content: '\E199'; - } -} -.game-icon-fez { - &:before { - content: '\E19A'; - } -} -.game-icon-flower-hat { - &:before { - content: '\E19B'; - } -} -.game-icon-frog-prince { - &:before { - content: '\E19C'; - } -} -.game-icon-full-motorcycle-helmet { - &:before { - content: '\E19D'; - } -} -.game-icon-galea { - &:before { - content: '\E19E'; - } -} -.game-icon-gauls-helm { - &:before { - content: '\E19F'; - } -} -.game-icon-graduate-cap { - &:before { - content: '\E1A0'; - } -} -.game-icon-hazmat-suit { - &:before { - content: '\E1A1'; - } -} -.game-icon-hedjet-white-crown { - &:before { - content: '\E1A2'; - } -} -.game-icon-imperial-crown { - &:before { - content: '\E1A3'; - } -} -.game-icon-jester-hat { - &:before { - content: '\E1A4'; - } -} -.game-icon-jewel-crown { - &:before { - content: '\E1A5'; - } -} -.game-icon-light-helm { - &:before { - content: '\E1A6'; - } -} -.game-icon-magic-hat { - &:before { - content: '\E1A7'; - } -} -.game-icon-magick-trick { - &:before { - content: '\E1A8'; - } -} -.game-icon-mining-helmet { - &:before { - content: '\E1A9'; - } -} -.game-icon-mustache { - &:before { - content: '\E1AA'; - } -} -.game-icon-nefertiti { - &:before { - content: '\E1AB'; - } -} -.game-icon-outback-hat { - &:before { - content: '\E1AC'; - } -} -.game-icon-overlord-helm { - &:before { - content: '\E1AD'; - } -} -.game-icon-party-hat { - &:before { - content: '\E1AE'; - } -} -.game-icon-phrygian-cap { - &:before { - content: '\E1AF'; - } -} -.game-icon-pilgrim-hat { - &:before { - content: '\E1B0'; - } -} -.game-icon-pirate-hat { - &:before { - content: '\E1B1'; - } -} -.game-icon-plague-doctor-profile { - &:before { - content: '\E1B2'; - } -} -.game-icon-pope-crown { - &:before { - content: '\E1B3'; - } -} -.game-icon-propeller-beanie { - &:before { - content: '\E1B4'; - } -} -.game-icon-pschent-double-crown { - &:before { - content: '\E1B5'; - } -} -.game-icon-robin-hood-hat { - &:before { - content: '\E1B6'; - } -} -.game-icon-samurai-helmet { - &:before { - content: '\E1B7'; - } -} -.game-icon-samus-helmet { - &:before { - content: '\E1B8'; - } -} -.game-icon-sombrero { - &:before { - content: '\E1B9'; - } -} -.game-icon-spartan-helmet { - &:before { - content: '\E1BA'; - } -} -.game-icon-throne-king { - &:before { - content: '\E1BB'; - } -} -.game-icon-tiara { - &:before { - content: '\E1BC'; - } -} -.game-icon-turban { - &:before { - content: '\E1BD'; - } -} -.game-icon-ushanka { - &:before { - content: '\E1BE'; - } -} -.game-icon-viking-helmet { - &:before { - content: '\E1BF'; - } -} -.game-icon-war-bonnet { - &:before { - content: '\E1C0'; - } -} -.game-icon-warlock-hood { - &:before { - content: '\E1C1'; - } -} -.game-icon-western-hat { - &:before { - content: '\E1C2'; - } -} -.game-icon-winter-hat { - &:before { - content: '\E1C3'; - } -} -.game-icon-barbute { - &:before { - content: '\E1C4'; - } -} -.game-icon-cowled { - &:before { - content: '\E1C5'; - } -} -.game-icon-cracked-helm { - &:before { - content: '\E1C6'; - } -} -.game-icon-crested-helmet { - &:before { - content: '\E1C7'; - } -} -.game-icon-crown-coin { - &:before { - content: '\E1C8'; - } -} -.game-icon-crown-of-thorns { - &:before { - content: '\E1C9'; - } -} -.game-icon-crown { - &:before { - content: '\E1CA'; - } -} -.game-icon-crowned-heart { - &:before { - content: '\E1CB'; - } -} -.game-icon-crowned-skull { - &:before { - content: '\E1CC'; - } -} -.game-icon-fedora { - &:before { - content: '\E1CD'; - } -} -.game-icon-heavy-helm { - &:before { - content: '\E1CE'; - } -} -.game-icon-helmet-head-shot { - &:before { - content: '\E1CF'; - } -} -.game-icon-hood { - &:before { - content: '\E1D0'; - } -} -.game-icon-horned-helm { - &:before { - content: '\E1D1'; - } -} -.game-icon-laurel-crown { - &:before { - content: '\E1D2'; - } -} -.game-icon-laurels { - &:before { - content: '\E1D3'; - } -} -.game-icon-pointy-hat { - &:before { - content: '\E1D4'; - } -} -.game-icon-queen-crown { - &:before { - content: '\E1D5'; - } -} -.game-icon-sharp-crown { - &:before { - content: '\E1D6'; - } -} -.game-icon-top-hat { - &:before { - content: '\E1D7'; - } -} -.game-icon-visored-helm { - &:before { - content: '\E1D8'; - } -} -.game-icon-helmet { - &:before { - content: '\E1D9'; - } -} -.game-icon-brodie-helmet { - &:before { - content: '\E1DA'; - } -} -.game-icon-pickelhaube { - &:before { - content: '\E1DB'; - } -} -.game-icon-stahlhelm { - &:before { - content: '\E1DC'; - } -} -.game-icon-wooden-helmet { - &:before { - content: '\E1DD'; - } -} -.game-icon-nun-face { - &:before { - content: '\E1DE'; - } -} -.game-icon-witch-face { - &:before { - content: '\E1DF'; - } -} -.game-icon-barbarian { - &:before { - content: '\E1E0'; - } -} -.game-icon-dwarf-face { - &:before { - content: '\E1E1'; - } -} -.game-icon-executioner-hood { - &:before { - content: '\E1E2'; - } -} -.game-icon-female-vampire { - &:before { - content: '\E1E3'; - } -} -.game-icon-fish-monster { - &:before { - content: '\E1E4'; - } -} -.game-icon-goblin-head { - &:before { - content: '\E1E5'; - } -} -.game-icon-golem-head { - &:before { - content: '\E1E6'; - } -} -.game-icon-kenku-head { - &:before { - content: '\E1E7'; - } -} -.game-icon-monk-face { - &:before { - content: '\E1E8'; - } -} -.game-icon-ogre { - &:before { - content: '\E1E9'; - } -} -.game-icon-orc-head { - &:before { - content: '\E1EA'; - } -} -.game-icon-vampire-dracula { - &:before { - content: '\E1EB'; - } -} -.game-icon-wizard-face { - &:before { - content: '\E1EC'; - } -} -.game-icon-woman-elf-face { - &:before { - content: '\E1ED'; - } -} -.game-icon-cultist { - &:before { - content: '\E1EE'; - } -} -.game-icon-diablo-skull { - &:before { - content: '\E1EF'; - } -} -.game-icon-dragon-head { - &:before { - content: '\E1F0'; - } -} -.game-icon-troll { - &:before { - content: '\E1F1'; - } -} -.game-icon-crossbow { - &:before { - content: '\E1F2'; - } -} -.game-icon-annexation { - &:before { - content: '\E1F3'; - } -} -.game-icon-broken-arrow { - &:before { - content: '\E1F4'; - } -} -.game-icon-forward-sun { - &:before { - content: '\E1F5'; - } -} -.game-icon-dodge { - &:before { - content: '\E1F6'; - } -} -.game-icon-overhead { - &:before { - content: '\E1F7'; - } -} -.game-icon-sideswipe { - &:before { - content: '\E1F8'; - } -} -.game-icon-thrust { - &:before { - content: '\E1F9'; - } -} -.game-icon-underhand { - &:before { - content: '\E1FA'; - } -} -.game-icon-achilles-heel { - &:before { - content: '\E1FB'; - } -} -.game-icon-anticlockwise-rotation { - &:before { - content: '\E1FC'; - } -} -.game-icon-archer { - &:before { - content: '\E1FD'; - } -} -.game-icon-arrow-cursor { - &:before { - content: '\E1FE'; - } -} -.game-icon-arrow-wings { - &:before { - content: '\E1FF'; - } -} -.game-icon-avoidance { - &:before { - content: '\E200'; - } -} -.game-icon-backward-time { - &:before { - content: '\E201'; - } -} -.game-icon-body-height { - &:before { - content: '\E202'; - } -} -.game-icon-bow-arrow { - &:before { - content: '\E203'; - } -} -.game-icon-box-unpacking { - &:before { - content: '\E204'; - } -} -.game-icon-brain-dump { - &:before { - content: '\E205'; - } -} -.game-icon-chart { - &:before { - content: '\E206'; - } -} -.game-icon-clockwise-rotation { - &:before { - content: '\E207'; - } -} -.game-icon-cloud-download { - &:before { - content: '\E208'; - } -} -.game-icon-cloud-upload { - &:before { - content: '\E209'; - } -} -.game-icon-contract { - &:before { - content: '\E20A'; - } -} -.game-icon-dart { - &:before { - content: '\E20B'; - } -} -.game-icon-detour { - &:before { - content: '\E20C'; - } -} -.game-icon-direction-sign { - &:before { - content: '\E20D'; - } -} -.game-icon-encirclement { - &:before { - content: '\E20E'; - } -} -.game-icon-expand { - &:before { - content: '\E20F'; - } -} -.game-icon-expense { - &:before { - content: '\E210'; - } -} -.game-icon-flag-objective { - &:before { - content: '\E211'; - } -} -.game-icon-growth { - &:before { - content: '\E212'; - } -} -.game-icon-horizontal-flip { - &:before { - content: '\E213'; - } -} -.game-icon-join { - &:before { - content: '\E214'; - } -} -.game-icon-misdirection { - &:before { - content: '\E215'; - } -} -.game-icon-move { - &:before { - content: '\E216'; - } -} -.game-icon-plain-arrow { - &:before { - content: '\E217'; - } -} -.game-icon-progression { - &:before { - content: '\E218'; - } -} -.game-icon-quiver { - &:before { - content: '\E219'; - } -} -.game-icon-save-arrow { - &:before { - content: '\E21A'; - } -} -.game-icon-slalom { - &:before { - content: '\E21B'; - } -} -.game-icon-spear-feather { - &:before { - content: '\E21C'; - } -} -.game-icon-spearfishing { - &:before { - content: '\E21D'; - } -} -.game-icon-split-arrows { - &:before { - content: '\E21E'; - } -} -.game-icon-sun-spear { - &:before { - content: '\E21F'; - } -} -.game-icon-target-prize { - &:before { - content: '\E220'; - } -} -.game-icon-thrust-bend { - &:before { - content: '\E221'; - } -} -.game-icon-tree-growth { - &:before { - content: '\E222'; - } -} -.game-icon-upgrade { - &:before { - content: '\E223'; - } -} -.game-icon-vertical-flip { - &:before { - content: '\E224'; - } -} -.game-icon-water-recycling { - &:before { - content: '\E225'; - } -} -.game-icon-aerodynamic-harpoon { - &:before { - content: '\E226'; - } -} -.game-icon-arrow-cluster { - &:before { - content: '\E227'; - } -} -.game-icon-arrow-dunk { - &:before { - content: '\E228'; - } -} -.game-icon-arrow-flights { - &:before { - content: '\E229'; - } -} -.game-icon-arrowed { - &:before { - content: '\E22A'; - } -} -.game-icon-arrowhead { - &:before { - content: '\E22B'; - } -} -.game-icon-back-forth { - &:before { - content: '\E22C'; - } -} -.game-icon-barbed-arrow { - &:before { - content: '\E22D'; - } -} -.game-icon-barbed-spear { - &:before { - content: '\E22E'; - } -} -.game-icon-bottom-right-3d-arrow { - &:before { - content: '\E22F'; - } -} -.game-icon-bowman { - &:before { - content: '\E230'; - } -} -.game-icon-branch-arrow { - &:before { - content: '\E231'; - } -} -.game-icon-broadhead-arrow { - &:before { - content: '\E232'; - } -} -.game-icon-chained-arrow-heads { - &:before { - content: '\E233'; - } -} -.game-icon-charged-arrow { - &:before { - content: '\E234'; - } -} -.game-icon-cheerful { - &:before { - content: '\E235'; - } -} -.game-icon-chemical-arrow { - &:before { - content: '\E236'; - } -} -.game-icon-crosshair-arrow { - &:before { - content: '\E237'; - } -} -.game-icon-cupidon-arrow { - &:before { - content: '\E238'; - } -} -.game-icon-divergence { - &:before { - content: '\E239'; - } -} -.game-icon-divert { - &:before { - content: '\E23A'; - } -} -.game-icon-double-shot { - &:before { - content: '\E23B'; - } -} -.game-icon-energy-arrow { - &:before { - content: '\E23C'; - } -} -.game-icon-falling-boulder { - &:before { - content: '\E23D'; - } -} -.game-icon-fast-arrow { - &:before { - content: '\E23E'; - } -} -.game-icon-flaming-arrow { - &:before { - content: '\E23F'; - } -} -.game-icon-frayed-arrow { - &:before { - content: '\E240'; - } -} -.game-icon-frozen-arrow { - &:before { - content: '\E241'; - } -} -.game-icon-headshot { - &:before { - content: '\E242'; - } -} -.game-icon-heavy-arrow { - &:before { - content: '\E243'; - } -} -.game-icon-high-shot { - &:before { - content: '\E244'; - } -} -.game-icon-ice-spear { - &:before { - content: '\E245'; - } -} -.game-icon-imbricated-arrows { - &:before { - content: '\E246'; - } -} -.game-icon-impact-point { - &:before { - content: '\E247'; - } -} -.game-icon-interleaved-arrows { - &:before { - content: '\E248'; - } -} -.game-icon-lift { - &:before { - content: '\E249'; - } -} -.game-icon-lob-arrow { - &:before { - content: '\E24A'; - } -} -.game-icon-middle-arrow { - &:before { - content: '\E24B'; - } -} -.game-icon-on-target { - &:before { - content: '\E24C'; - } -} -.game-icon-orb-direction { - &:before { - content: '\E24D'; - } -} -.game-icon-paper-arrow { - &:before { - content: '\E24E'; - } -} -.game-icon-pentarrows-tornado { - &:before { - content: '\E24F'; - } -} -.game-icon-pierced-body { - &:before { - content: '\E250'; - } -} -.game-icon-pierced-heart { - &:before { - content: '\E251'; - } -} -.game-icon-piercing-sword { - &:before { - content: '\E252'; - } -} -.game-icon-pocket-bow { - &:before { - content: '\E253'; - } -} -.game-icon-profit { - &:before { - content: '\E254'; - } -} -.game-icon-rally-the-troops { - &:before { - content: '\E255'; - } -} -.game-icon-rapidshare-arrow { - &:before { - content: '\E256'; - } -} -.game-icon-return-arrow { - &:before { - content: '\E257'; - } -} -.game-icon-self-love { - &:before { - content: '\E258'; - } -} -.game-icon-slicing-arrow { - &:before { - content: '\E259'; - } -} -.game-icon-smash-arrows { - &:before { - content: '\E25A'; - } -} -.game-icon-spear-hook { - &:before { - content: '\E25B'; - } -} -.game-icon-spears { - &:before { - content: '\E25C'; - } -} -.game-icon-spine-arrow { - &:before { - content: '\E25D'; - } -} -.game-icon-spiral-arrow { - &:before { - content: '\E25E'; - } -} -.game-icon-spotted-arrowhead { - &:before { - content: '\E25F'; - } -} -.game-icon-stone-spear { - &:before { - content: '\E260'; - } -} -.game-icon-striking-arrows { - &:before { - content: '\E261'; - } -} -.game-icon-striking-clamps { - &:before { - content: '\E262'; - } -} -.game-icon-supersonic-arrow { - &:before { - content: '\E263'; - } -} -.game-icon-target-arrows { - &:before { - content: '\E264'; - } -} -.game-icon-target-shot { - &:before { - content: '\E265'; - } -} -.game-icon-thorn-helix { - &:before { - content: '\E266'; - } -} -.game-icon-thorned-arrow { - &:before { - content: '\E267'; - } -} -.game-icon-thrown-spear { - &:before { - content: '\E268'; - } -} -.game-icon-trade { - &:before { - content: '\E269'; - } -} -.game-icon-tron-arrow { - &:before { - content: '\E26A'; - } -} -.game-icon-uncertainty { - &:before { - content: '\E26B'; - } -} -.game-icon-wavy-itinerary { - &:before { - content: '\E26C'; - } -} -.game-icon-wide-arrow-dunk { - &:before { - content: '\E26D'; - } -} -.game-icon-william-tell-skull { - &:before { - content: '\E26E'; - } -} -.game-icon-william-tell { - &:before { - content: '\E26F'; - } -} -.game-icon-winged-arrow { - &:before { - content: '\E270'; - } -} -.game-icon-zig-arrow { - &:before { - content: '\E271'; - } -} -.game-icon-bunker-assault { - &:before { - content: '\E272'; - } -} -.game-icon-trench-assault { - &:before { - content: '\E273'; - } -} -.game-icon-fall-down { - &:before { - content: '\E274'; - } -} -.game-icon-pounce { - &:before { - content: '\E275'; - } -} -.game-icon-bullseye { - &:before { - content: '\E276'; - } -} -.game-icon-flying-shuriken { - &:before { - content: '\E277'; - } -} -.game-icon-kusarigama { - &:before { - content: '\E278'; - } -} -.game-icon-north-star-shuriken { - &:before { - content: '\E279'; - } -} -.game-icon-sharp-shuriken { - &:before { - content: '\E27A'; - } -} -.game-icon-shuriken { - &:before { - content: '\E27B'; - } -} -.game-icon-star-shuriken { - &:before { - content: '\E27C'; - } -} -.game-icon-three-pointed-shuriken { - &:before { - content: '\E27D'; - } -} -.game-icon-whirlpool-shuriken { - &:before { - content: '\E27E'; - } -} -.game-icon-ninja-star { - &:before { - content: '\E27F'; - } -} -.game-icon-shepherds-crook { - &:before { - content: '\E280'; - } -} -.game-icon-armored-boomerang { - &:before { - content: '\E281'; - } -} -.game-icon-baseball-bat { - &:before { - content: '\E282'; - } -} -.game-icon-bo { - &:before { - content: '\E283'; - } -} -.game-icon-bone-mace { - &:before { - content: '\E284'; - } -} -.game-icon-boomerang-cross { - &:before { - content: '\E285'; - } -} -.game-icon-boomerang { - &:before { - content: '\E286'; - } -} -.game-icon-bow-string { - &:before { - content: '\E287'; - } -} -.game-icon-brass-knuckles { - &:before { - content: '\E288'; - } -} -.game-icon-broken-axe { - &:before { - content: '\E289'; - } -} -.game-icon-claymore-explosive { - &:before { - content: '\E28A'; - } -} -.game-icon-crescent-staff { - &:before { - content: '\E28B'; - } -} -.game-icon-crowbar { - &:before { - content: '\E28C'; - } -} -.game-icon-dagger-rose { - &:before { - content: '\E28D'; - } -} -.game-icon-detonator { - &:before { - content: '\E28E'; - } -} -.game-icon-flail { - &:before { - content: '\E28F'; - } -} -.game-icon-flamethrower-soldier { - &:before { - content: '\E290'; - } -} -.game-icon-flamethrower { - &:before { - content: '\E291'; - } -} -.game-icon-flanged-mace { - &:before { - content: '\E292'; - } -} -.game-icon-gun-rose { - &:before { - content: '\E293'; - } -} -.game-icon-heavy-bullets { - &:before { - content: '\E294'; - } -} -.game-icon-human-cannonball { - &:before { - content: '\E295'; - } -} -.game-icon-hunting-bolas { - &:before { - content: '\E296'; - } -} -.game-icon-laser-turret { - &:before { - content: '\E297'; - } -} -.game-icon-lasso { - &:before { - content: '\E298'; - } -} -.game-icon-lead-pipe { - &:before { - content: '\E299'; - } -} -.game-icon-lunar-wand { - &:before { - content: '\E29A'; - } -} -.game-icon-magic-trident { - &:before { - content: '\E29B'; - } -} -.game-icon-missile-launcher { - &:before { - content: '\E29C'; - } -} -.game-icon-monkey-wrench { - &:before { - content: '\E29D'; - } -} -.game-icon-mortar { - &:before { - content: '\E29E'; - } -} -.game-icon-nunchaku { - &:before { - content: '\E29F'; - } -} -.game-icon-panzerfaust { - &:before { - content: '\E2A0'; - } -} -.game-icon-reload-gun-barrel { - &:before { - content: '\E2A1'; - } -} -.game-icon-revolver { - &:before { - content: '\E2A2'; - } -} -.game-icon-saber-and-pistol { - &:before { - content: '\E2A3'; - } -} -.game-icon-sai { - &:before { - content: '\E2A4'; - } -} -.game-icon-sawed-off-shotgun { - &:before { - content: '\E2A5'; - } -} -.game-icon-sharp-axe { - &:before { - content: '\E2A6'; - } -} -.game-icon-silver-bullet { - &:before { - content: '\E2A7'; - } -} -.game-icon-skull-staff { - &:before { - content: '\E2A8'; - } -} -.game-icon-sling { - &:before { - content: '\E2A9'; - } -} -.game-icon-slingshot { - &:before { - content: '\E2AA'; - } -} -.game-icon-stake-hammer { - &:before { - content: '\E2AB'; - } -} -.game-icon-submarine-missile { - &:before { - content: '\E2AC'; - } -} -.game-icon-switch-weapon { - &:before { - content: '\E2AD'; - } -} -.game-icon-sword-brandish { - &:before { - content: '\E2AE'; - } -} -.game-icon-thor-hammer { - &:before { - content: '\E2AF'; - } -} -.game-icon-tomahawk { - &:before { - content: '\E2B0'; - } -} -.game-icon-torpedo { - &:before { - content: '\E2B1'; - } -} -.game-icon-umbrella-bayonet { - &:before { - content: '\E2B2'; - } -} -.game-icon-uzi { - &:before { - content: '\E2B3'; - } -} -.game-icon-walking-turret { - &:before { - content: '\E2B4'; - } -} -.game-icon-war-axe { - &:before { - content: '\E2B5'; - } -} -.game-icon-war-pick { - &:before { - content: '\E2B6'; - } -} -.game-icon-warhammer { - &:before { - content: '\E2B7'; - } -} -.game-icon-winged-scepter { - &:before { - content: '\E2B8'; - } -} -.game-icon-wood-club { - &:before { - content: '\E2B9'; - } -} -.game-icon-zat-gun { - &:before { - content: '\E2BA'; - } -} -.game-icon-all-for-one { - &:before { - content: '\E2BB'; - } -} -.game-icon-andromeda-chain { - &:before { - content: '\E2BC'; - } -} -.game-icon-archery-target { - &:before { - content: '\E2BD'; - } -} -.game-icon-autogun { - &:before { - content: '\E2BE'; - } -} -.game-icon-axe-in-stump { - &:before { - content: '\E2BF'; - } -} -.game-icon-backstab { - &:before { - content: '\E2C0'; - } -} -.game-icon-battered-axe { - &:before { - content: '\E2C1'; - } -} -.game-icon-battle-axe { - &:before { - content: '\E2C2'; - } -} -.game-icon-beam-wake { - &:before { - content: '\E2C3'; - } -} -.game-icon-blunderbuss { - &:before { - content: '\E2C4'; - } -} -.game-icon-bolas { - &:before { - content: '\E2C5'; - } -} -.game-icon-bolter-gun { - &:before { - content: '\E2C6'; - } -} -.game-icon-broken-bottle { - &:before { - content: '\E2C7'; - } -} -.game-icon-bullets { - &:before { - content: '\E2C8'; - } -} -.game-icon-cannon-ball { - &:before { - content: '\E2C9'; - } -} -.game-icon-cannon-shot { - &:before { - content: '\E2CA'; - } -} -.game-icon-cannon { - &:before { - content: '\E2CB'; - } -} -.game-icon-crossed-pistols { - &:before { - content: '\E2CC'; - } -} -.game-icon-crossed-sabres { - &:before { - content: '\E2CD'; - } -} -.game-icon-crossed-swords { - &:before { - content: '\E2CE'; - } -} -.game-icon-crystal-wand { - &:before { - content: '\E2CF'; - } -} -.game-icon-dripping-knife { - &:before { - content: '\E2D0'; - } -} -.game-icon-fairy-wand { - &:before { - content: '\E2D1'; - } -} -.game-icon-flaming-trident { - &:before { - content: '\E2D2'; - } -} -.game-icon-grapple { - &:before { - content: '\E2D3'; - } -} -.game-icon-grenade { - &:before { - content: '\E2D4'; - } -} -.game-icon-gunshot { - &:before { - content: '\E2D5'; - } -} -.game-icon-halberd-shuriken { - &:before { - content: '\E2D6'; - } -} -.game-icon-harpoon-chain { - &:before { - content: '\E2D7'; - } -} -.game-icon-harpoon-trident { - &:before { - content: '\E2D8'; - } -} -.game-icon-laser-blast { - &:before { - content: '\E2D9'; - } -} -.game-icon-lightning-bow { - &:before { - content: '\E2DA'; - } -} -.game-icon-mace-head { - &:before { - content: '\E2DB'; - } -} -.game-icon-machete { - &:before { - content: '\E2DC'; - } -} -.game-icon-minigun { - &:before { - content: '\E2DD'; - } -} -.game-icon-missile-pod { - &:before { - content: '\E2DE'; - } -} -.game-icon-missile-swarm { - &:before { - content: '\E2DF'; - } -} -.game-icon-pincers { - &:before { - content: '\E2E0'; - } -} -.game-icon-ray-gun { - &:before { - content: '\E2E1'; - } -} -.game-icon-reticule { - &:before { - content: '\E2E2'; - } -} -.game-icon-saber-slash { - &:before { - content: '\E2E3'; - } -} -.game-icon-sabers-choc { - &:before { - content: '\E2E4'; - } -} -.game-icon-sacrificial-dagger { - &:before { - content: '\E2E5'; - } -} -.game-icon-scalpel-strike { - &:before { - content: '\E2E6'; - } -} -.game-icon-scythe { - &:before { - content: '\E2E7'; - } -} -.game-icon-sentry-gun { - &:before { - content: '\E2E8'; - } -} -.game-icon-shuriken-2 { - &:before { - content: '\E2E9'; - } -} -.game-icon-slavery-whip { - &:before { - content: '\E2EA'; - } -} -.game-icon-sparkling-sabre { - &:before { - content: '\E2EB'; - } -} -.game-icon-spiked-mace { - &:before { - content: '\E2EC'; - } -} -.game-icon-spray { - &:before { - content: '\E2ED'; - } -} -.game-icon-stiletto { - &:before { - content: '\E2EE'; - } -} -.game-icon-supersonic-bullet { - &:before { - content: '\E2EF'; - } -} -.game-icon-sword-clash { - &:before { - content: '\E2F0'; - } -} -.game-icon-sword-in-stone { - &:before { - content: '\E2F1'; - } -} -.game-icon-sword-spade { - &:before { - content: '\E2F2'; - } -} -.game-icon-tesla-turret { - &:before { - content: '\E2F3'; - } -} -.game-icon-trefoil-shuriken { - &:before { - content: '\E2F4'; - } -} -.game-icon-trident { - &:before { - content: '\E2F5'; - } -} -.game-icon-wave-strike { - &:before { - content: '\E2F6'; - } -} -.game-icon-whip { - &:before { - content: '\E2F7'; - } -} -.game-icon-winged-sword { - &:before { - content: '\E2F8'; - } -} -.game-icon-wizard-staff { - &:before { - content: '\E2F9'; - } -} -.game-icon-anti-aircraft-gun { - &:before { - content: '\E2FA'; - } -} -.game-icon-field-gun { - &:before { - content: '\E2FB'; - } -} -.game-icon-ammo-box { - &:before { - content: '\E2FC'; - } -} -.game-icon-chaingun { - &:before { - content: '\E2FD'; - } -} -.game-icon-duel { - &:before { - content: '\E2FE'; - } -} -.game-icon-grenade-2 { - &:before { - content: '\E2FF'; - } -} -.game-icon-laser-gun { - &:before { - content: '\E300'; - } -} -.game-icon-rifle { - &:before { - content: '\E301'; - } -} -.game-icon-shotgun { - &:before { - content: '\E302'; - } -} -.game-icon-turret { - &:before { - content: '\E303'; - } -} -.game-icon-bayonet { - &:before { - content: '\E304'; - } -} -.game-icon-drop-weapon { - &:before { - content: '\E305'; - } -} -.game-icon-gladius { - &:before { - content: '\E306'; - } -} -.game-icon-lee-enfield { - &:before { - content: '\E307'; - } -} -.game-icon-luger { - &:before { - content: '\E308'; - } -} -.game-icon-nuclear-bomb { - &:before { - content: '\E309'; - } -} -.game-icon-spiked-ball { - &:before { - content: '\E30A'; - } -} -.game-icon-spiked-bat { - &:before { - content: '\E30B'; - } -} -.game-icon-stick-grenade { - &:before { - content: '\E30C'; - } -} -.game-icon-tec-9 { - &:before { - content: '\E30D'; - } -} -.game-icon-telescopic-baton { - &:before { - content: '\E30E'; - } -} -.game-icon-teller-mine { - &:before { - content: '\E30F'; - } -} -.game-icon-orb-wand { - &:before { - content: '\E310'; - } -} -.game-icon-flame { - &:before { - content: '\E311'; - } -} -.game-icon-bellows { - &:before { - content: '\E312'; - } -} -.game-icon-brasero { - &:before { - content: '\E313'; - } -} -.game-icon-burning-forest { - &:before { - content: '\E314'; - } -} -.game-icon-camp-cooking-pot { - &:before { - content: '\E315'; - } -} -.game-icon-candles { - &:before { - content: '\E316'; - } -} -.game-icon-dice-fire { - &:before { - content: '\E317'; - } -} -.game-icon-fire-extinguisher { - &:before { - content: '\E318'; - } -} -.game-icon-fire-flower { - &:before { - content: '\E319'; - } -} -.game-icon-fire-gem { - &:before { - content: '\E31A'; - } -} -.game-icon-fire-shrine { - &:before { - content: '\E31B'; - } -} -.game-icon-fire-spell-cast { - &:before { - content: '\E31C'; - } -} -.game-icon-fireplace { - &:before { - content: '\E31D'; - } -} -.game-icon-firewall { - &:before { - content: '\E31E'; - } -} -.game-icon-fish-smoking { - &:before { - content: '\E31F'; - } -} -.game-icon-flint-spark { - &:before { - content: '\E320'; - } -} -.game-icon-furnace { - &:before { - content: '\E321'; - } -} -.game-icon-gas-stove { - &:before { - content: '\E322'; - } -} -.game-icon-lighter { - &:before { - content: '\E323'; - } -} -.game-icon-lightning-flame { - &:before { - content: '\E324'; - } -} -.game-icon-marshmallows { - &:before { - content: '\E325'; - } -} -.game-icon-matchbox { - &:before { - content: '\E326'; - } -} -.game-icon-primitive-torch { - &:before { - content: '\E327'; - } -} -.game-icon-pyre { - &:before { - content: '\E328'; - } -} -.game-icon-torch { - &:before { - content: '\E329'; - } -} -.game-icon-alien-fire { - &:before { - content: '\E32A'; - } -} -.game-icon-arson { - &:before { - content: '\E32B'; - } -} -.game-icon-burning-book { - &:before { - content: '\E32C'; - } -} -.game-icon-burning-dot { - &:before { - content: '\E32D'; - } -} -.game-icon-burning-embers { - &:before { - content: '\E32E'; - } -} -.game-icon-burning-eye { - &:before { - content: '\E32F'; - } -} -.game-icon-burning-meteor { - &:before { - content: '\E330'; - } -} -.game-icon-burning-passion { - &:before { - content: '\E331'; - } -} -.game-icon-burning-tree { - &:before { - content: '\E332'; - } -} -.game-icon-caldera { - &:before { - content: '\E333'; - } -} -.game-icon-campfire { - &:before { - content: '\E334'; - } -} -.game-icon-candle-flame { - &:before { - content: '\E335'; - } -} -.game-icon-candle-holder { - &:before { - content: '\E336'; - } -} -.game-icon-candle-light { - &:before { - content: '\E337'; - } -} -.game-icon-candlebright { - &:before { - content: '\E338'; - } -} -.game-icon-celebration-fire { - &:before { - content: '\E339'; - } -} -.game-icon-dragon-breath { - &:before { - content: '\E33A'; - } -} -.game-icon-ember-shot { - &:before { - content: '\E33B'; - } -} -.game-icon-eruption { - &:before { - content: '\E33C'; - } -} -.game-icon-fire-ace { - &:before { - content: '\E33D'; - } -} -.game-icon-fire-axe { - &:before { - content: '\E33E'; - } -} -.game-icon-fire-bomb { - &:before { - content: '\E33F'; - } -} -.game-icon-fire-bottle { - &:before { - content: '\E340'; - } -} -.game-icon-fire-bowl { - &:before { - content: '\E341'; - } -} -.game-icon-fire-breath { - &:before { - content: '\E342'; - } -} -.game-icon-fire-dash { - &:before { - content: '\E343'; - } -} -.game-icon-fire-punch { - &:before { - content: '\E344'; - } -} -.game-icon-fire-ray { - &:before { - content: '\E345'; - } -} -.game-icon-fire-ring { - &:before { - content: '\E346'; - } -} -.game-icon-fire-silhouette { - &:before { - content: '\E347'; - } -} -.game-icon-fire-tail { - &:before { - content: '\E348'; - } -} -.game-icon-fire-wave { - &:before { - content: '\E349'; - } -} -.game-icon-fire-zone { - &:before { - content: '\E34A'; - } -} -.game-icon-fireball { - &:before { - content: '\E34B'; - } -} -.game-icon-firework-rocket { - &:before { - content: '\E34C'; - } -} -.game-icon-flame-claws { - &:before { - content: '\E34D'; - } -} -.game-icon-flame-spin { - &:before { - content: '\E34E'; - } -} -.game-icon-flame-tunnel { - &:before { - content: '\E34F'; - } -} -.game-icon-flamed-leaf { - &:before { - content: '\E350'; - } -} -.game-icon-flaming-claw { - &:before { - content: '\E351'; - } -} -.game-icon-flaming-sheet { - &:before { - content: '\E352'; - } -} -.game-icon-fluffy-flame { - &:before { - content: '\E353'; - } -} -.game-icon-frostfire { - &:before { - content: '\E354'; - } -} -.game-icon-heartburn { - &:before { - content: '\E355'; - } -} -.game-icon-heat-haze { - &:before { - content: '\E356'; - } -} -.game-icon-hot-spices { - &:before { - content: '\E357'; - } -} -.game-icon-ifrit { - &:before { - content: '\E358'; - } -} -.game-icon-kindle { - &:before { - content: '\E359'; - } -} -.game-icon-lantern-flame { - &:before { - content: '\E35A'; - } -} -.game-icon-lit-candelabra { - &:before { - content: '\E35B'; - } -} -.game-icon-match-head { - &:before { - content: '\E35C'; - } -} -.game-icon-match-tip { - &:before { - content: '\E35D'; - } -} -.game-icon-molotov { - &:before { - content: '\E35E'; - } -} -.game-icon-plasma-bolt { - &:before { - content: '\E35F'; - } -} -.game-icon-pyromaniac { - &:before { - content: '\E360'; - } -} -.game-icon-salamander { - &:before { - content: '\E361'; - } -} -.game-icon-small-fire { - &:before { - content: '\E362'; - } -} -.game-icon-spark-spirit { - &:before { - content: '\E363'; - } -} -.game-icon-three-burning-balls { - &:before { - content: '\E364'; - } -} -.game-icon-thrown-charcoal { - &:before { - content: '\E365'; - } -} -.game-icon-unfriendly-fire { - &:before { - content: '\E366'; - } -} -.game-icon-volcano { - &:before { - content: '\E367'; - } -} -.game-icon-wildfires { - &:before { - content: '\E368'; - } -} -.game-icon-blast { - &:before { - content: '\E369'; - } -} -.game-icon-blaster { - &:before { - content: '\E36A'; - } -} -.game-icon-burn { - &:before { - content: '\E36B'; - } -} -.game-icon-fire { - &:before { - content: '\E36C'; - } -} -.game-icon-fireflake { - &:before { - content: '\E36D'; - } -} -.game-icon-flamer { - &:before { - content: '\E36E'; - } -} -.game-icon-hot-surface { - &:before { - content: '\E36F'; - } -} -.game-icon-lava { - &:before { - content: '\E370'; - } -} -.game-icon-lucifer-cannon { - &:before { - content: '\E371'; - } -} -.game-icon-burning-skull { - &:before { - content: '\E372'; - } -} -.game-icon-mite-alt { - &:before { - content: '\E373'; - } -} -.game-icon-spider-alt { - &:before { - content: '\E374'; - } -} -.game-icon-spider-face { - &:before { - content: '\E375'; - } -} -.game-icon-earth-worm { - &:before { - content: '\E376'; - } -} -.game-icon-flying-trout { - &:before { - content: '\E377'; - } -} -.game-icon-polar-bear { - &:before { - content: '\E378'; - } -} -.game-icon-plants-and-animals { - &:before { - content: '\E379'; - } -} -.game-icon-animal-hide { - &:before { - content: '\E37A'; - } -} -.game-icon-bat-2 { - &:before { - content: '\E37B'; - } -} -.game-icon-bear-head { - &:before { - content: '\E37C'; - } -} -.game-icon-camel-head { - &:before { - content: '\E37D'; - } -} -.game-icon-cassowary-head { - &:before { - content: '\E37E'; - } -} -.game-icon-charging-bull { - &:before { - content: '\E37F'; - } -} -.game-icon-chicken { - &:before { - content: '\E380'; - } -} -.game-icon-clownfish { - &:before { - content: '\E381'; - } -} -.game-icon-cow { - &:before { - content: '\E382'; - } -} -.game-icon-cricket { - &:before { - content: '\E383'; - } -} -.game-icon-deer-track { - &:before { - content: '\E384'; - } -} -.game-icon-dog-bowl { - &:before { - content: '\E385'; - } -} -.game-icon-dog-house { - &:before { - content: '\E386'; - } -} -.game-icon-dolphin { - &:before { - content: '\E387'; - } -} -.game-icon-duck { - &:before { - content: '\E388'; - } -} -.game-icon-eagle-head { - &:before { - content: '\E389'; - } -} -.game-icon-elephant-head { - &:before { - content: '\E38A'; - } -} -.game-icon-elephant { - &:before { - content: '\E38B'; - } -} -.game-icon-falcon-moon { - &:before { - content: '\E38C'; - } -} -.game-icon-feline { - &:before { - content: '\E38D'; - } -} -.game-icon-finch { - &:before { - content: '\E38E'; - } -} -.game-icon-flamingo { - &:before { - content: '\E38F'; - } -} -.game-icon-fox-tail { - &:before { - content: '\E390'; - } -} -.game-icon-giant-squid { - &:before { - content: '\E391'; - } -} -.game-icon-gorilla { - &:before { - content: '\E392'; - } -} -.game-icon-griffin-symbol { - &:before { - content: '\E393'; - } -} -.game-icon-honey-jar { - &:before { - content: '\E394'; - } -} -.game-icon-horse-head { - &:before { - content: '\E395'; - } -} -.game-icon-ivory-tusks { - &:before { - content: '\E396'; - } -} -.game-icon-kangaroo { - &:before { - content: '\E397'; - } -} -.game-icon-koala { - &:before { - content: '\E398'; - } -} -.game-icon-labrador-head { - &:before { - content: '\E399'; - } -} -.game-icon-lynx-head { - &:before { - content: '\E39A'; - } -} -.game-icon-manta-ray { - &:before { - content: '\E39B'; - } -} -.game-icon-moon-bats { - &:before { - content: '\E39C'; - } -} -.game-icon-panda { - &:before { - content: '\E39D'; - } -} -.game-icon-penguin { - &:before { - content: '\E39E'; - } -} -.game-icon-pinata { - &:before { - content: '\E39F'; - } -} -.game-icon-praying-mantis { - &:before { - content: '\E3A0'; - } -} -.game-icon-rabbit { - &:before { - content: '\E3A1'; - } -} -.game-icon-rat { - &:before { - content: '\E3A2'; - } -} -.game-icon-rhinoceros-horn { - &:before { - content: '\E3A3'; - } -} -.game-icon-rooster { - &:before { - content: '\E3A4'; - } -} -.game-icon-saddle { - &:before { - content: '\E3A5'; - } -} -.game-icon-sea-star { - &:before { - content: '\E3A6'; - } -} -.game-icon-seahorse { - &:before { - content: '\E3A7'; - } -} -.game-icon-shark-bite { - &:before { - content: '\E3A8'; - } -} -.game-icon-shark-fin { - &:before { - content: '\E3A9'; - } -} -.game-icon-sheep { - &:before { - content: '\E3AA'; - } -} -.game-icon-snail-eyes { - &:before { - content: '\E3AB'; - } -} -.game-icon-sperm-whale { - &:before { - content: '\E3AC'; - } -} -.game-icon-stable { - &:before { - content: '\E3AD'; - } -} -.game-icon-tiger-head { - &:before { - content: '\E3AE'; - } -} -.game-icon-tiger { - &:before { - content: '\E3AF'; - } -} -.game-icon-tortoise { - &:before { - content: '\E3B0'; - } -} -.game-icon-toucan { - &:before { - content: '\E3B1'; - } -} -.game-icon-trojan-horse { - &:before { - content: '\E3B2'; - } -} -.game-icon-udder { - &:before { - content: '\E3B3'; - } -} -.game-icon-whale-tail { - &:before { - content: '\E3B4'; - } -} -.game-icon-wool { - &:before { - content: '\E3B5'; - } -} -.game-icon-worms { - &:before { - content: '\E3B6'; - } -} -.game-icon-yarn { - &:before { - content: '\E3B7'; - } -} -.game-icon-ammonite-fossil { - &:before { - content: '\E3B8'; - } -} -.game-icon-ammonite { - &:before { - content: '\E3B9'; - } -} -.game-icon-angler-fish { - &:before { - content: '\E3BA'; - } -} -.game-icon-angular-spider { - &:before { - content: '\E3BB'; - } -} -.game-icon-animal-skull { - &:before { - content: '\E3BC'; - } -} -.game-icon-armadillo-tail { - &:before { - content: '\E3BD'; - } -} -.game-icon-bat-wing { - &:before { - content: '\E3BE'; - } -} -.game-icon-bee { - &:before { - content: '\E3BF'; - } -} -.game-icon-bird-twitter { - &:before { - content: '\E3C0'; - } -} -.game-icon-boar-tusks { - &:before { - content: '\E3C1'; - } -} -.game-icon-bull-horns { - &:before { - content: '\E3C2'; - } -} -.game-icon-bull { - &:before { - content: '\E3C3'; - } -} -.game-icon-butterfly-warning { - &:before { - content: '\E3C4'; - } -} -.game-icon-butterfly { - &:before { - content: '\E3C5'; - } -} -.game-icon-cat { - &:before { - content: '\E3C6'; - } -} -.game-icon-centipede { - &:before { - content: '\E3C7'; - } -} -.game-icon-chicken-leg { - &:before { - content: '\E3C8'; - } -} -.game-icon-cobweb { - &:before { - content: '\E3C9'; - } -} -.game-icon-crab-claw { - &:before { - content: '\E3CA'; - } -} -.game-icon-crab { - &:before { - content: '\E3CB'; - } -} -.game-icon-croc-jaws { - &:before { - content: '\E3CC'; - } -} -.game-icon-crossed-claws { - &:before { - content: '\E3CD'; - } -} -.game-icon-crow-dive { - &:before { - content: '\E3CE'; - } -} -.game-icon-desert-skull { - &:before { - content: '\E3CF'; - } -} -.game-icon-dinosaur-rex { - &:before { - content: '\E3D0'; - } -} -.game-icon-dragonfly { - &:before { - content: '\E3D1'; - } -} -.game-icon-earwig { - &:before { - content: '\E3D2'; - } -} -.game-icon-evil-bat { - &:before { - content: '\E3D3'; - } -} -.game-icon-fish-corpse { - &:before { - content: '\E3D4'; - } -} -.game-icon-fishbone { - &:before { - content: '\E3D5'; - } -} -.game-icon-flat-paw-print { - &:before { - content: '\E3D6'; - } -} -.game-icon-food-chain { - &:before { - content: '\E3D7'; - } -} -.game-icon-fox-head { - &:before { - content: '\E3D8'; - } -} -.game-icon-frog { - &:before { - content: '\E3D9'; - } -} -.game-icon-gecko { - &:before { - content: '\E3DA'; - } -} -.game-icon-gold-scarab { - &:before { - content: '\E3DB'; - } -} -.game-icon-grasping-claws { - &:before { - content: '\E3DC'; - } -} -.game-icon-hanging-spider { - &:before { - content: '\E3DD'; - } -} -.game-icon-hollow-cat { - &:before { - content: '\E3DE'; - } -} -.game-icon-hoof { - &:before { - content: '\E3DF'; - } -} -.game-icon-horse-head-2 { - &:before { - content: '\E3E0'; - } -} -.game-icon-hound { - &:before { - content: '\E3E1'; - } -} -.game-icon-insect-jaws { - &:before { - content: '\E3E2'; - } -} -.game-icon-jellyfish { - &:before { - content: '\E3E3'; - } -} -.game-icon-lamprey-mouth { - &:before { - content: '\E3E4'; - } -} -.game-icon-leeching-worm { - &:before { - content: '\E3E5'; - } -} -.game-icon-lion { - &:before { - content: '\E3E6'; - } -} -.game-icon-maggot { - &:before { - content: '\E3E7'; - } -} -.game-icon-masked-spider { - &:before { - content: '\E3E8'; - } -} -.game-icon-minotaur { - &:before { - content: '\E3E9'; - } -} -.game-icon-mite { - &:before { - content: '\E3EA'; - } -} -.game-icon-monkey { - &:before { - content: '\E3EB'; - } -} -.game-icon-mouse { - &:before { - content: '\E3EC'; - } -} -.game-icon-octopus { - &:before { - content: '\E3ED'; - } -} -.game-icon-ouroboros { - &:before { - content: '\E3EE'; - } -} -.game-icon-owl { - &:before { - content: '\E3EF'; - } -} -.game-icon-parmecia { - &:before { - content: '\E3F0'; - } -} -.game-icon-parrot-head { - &:before { - content: '\E3F1'; - } -} -.game-icon-paw-front { - &:before { - content: '\E3F2'; - } -} -.game-icon-paw-heart { - &:before { - content: '\E3F3'; - } -} -.game-icon-paw-print { - &:before { - content: '\E3F4'; - } -} -.game-icon-paw { - &:before { - content: '\E3F5'; - } -} -.game-icon-raven { - &:before { - content: '\E3F6'; - } -} -.game-icon-roast-chicken { - &:before { - content: '\E3F7'; - } -} -.game-icon-sad-crab { - &:before { - content: '\E3F8'; - } -} -.game-icon-scarab-beetle { - &:before { - content: '\E3F9'; - } -} -.game-icon-scorpion-tail { - &:before { - content: '\E3FA'; - } -} -.game-icon-scorpion { - &:before { - content: '\E3FB'; - } -} -.game-icon-sea-serpent { - &:before { - content: '\E3FC'; - } -} -.game-icon-seated-mouse { - &:before { - content: '\E3FD'; - } -} -.game-icon-shark-jaws { - &:before { - content: '\E3FE'; - } -} -.game-icon-snail { - &:before { - content: '\E3FF'; - } -} -.game-icon-snake-bite { - &:before { - content: '\E400'; - } -} -.game-icon-snake-totem { - &:before { - content: '\E401'; - } -} -.game-icon-snake { - &:before { - content: '\E402'; - } -} -.game-icon-sonic-screech { - &:before { - content: '\E403'; - } -} -.game-icon-spider-web { - &:before { - content: '\E404'; - } -} -.game-icon-spiked-snail { - &:before { - content: '\E405'; - } -} -.game-icon-squid-head { - &:before { - content: '\E406'; - } -} -.game-icon-squid { - &:before { - content: '\E407'; - } -} -.game-icon-stag-head { - &:before { - content: '\E408'; - } -} -.game-icon-stomp { - &:before { - content: '\E409'; - } -} -.game-icon-swan { - &:before { - content: '\E40A'; - } -} -.game-icon-tick { - &:before { - content: '\E40B'; - } -} -.game-icon-top-paw { - &:before { - content: '\E40C'; - } -} -.game-icon-trilobite { - &:before { - content: '\E40D'; - } -} -.game-icon-turd { - &:before { - content: '\E40E'; - } -} -.game-icon-turtle-shell { - &:before { - content: '\E40F'; - } -} -.game-icon-turtle { - &:before { - content: '\E410'; - } -} -.game-icon-virus { - &:before { - content: '\E411'; - } -} -.game-icon-vulture { - &:before { - content: '\E412'; - } -} -.game-icon-wasp-sting { - &:before { - content: '\E413'; - } -} -.game-icon-web-spit { - &:before { - content: '\E414'; - } -} -.game-icon-werewolf { - &:before { - content: '\E415'; - } -} -.game-icon-wolf-head { - &:before { - content: '\E416'; - } -} -.game-icon-wolf-howl { - &:before { - content: '\E417'; - } -} -.game-icon-wolverine-claws { - &:before { - content: '\E418'; - } -} -.game-icon-worm-mouth { - &:before { - content: '\E419'; - } -} -.game-icon-big-egg { - &:before { - content: '\E41A'; - } -} -.game-icon-claw { - &:before { - content: '\E41B'; - } -} -.game-icon-poison { - &:before { - content: '\E41C'; - } -} -.game-icon-bear-face { - &:before { - content: '\E41D'; - } -} -.game-icon-donkey { - &:before { - content: '\E41E'; - } -} -.game-icon-goat { - &:before { - content: '\E41F'; - } -} -.game-icon-long-legged-spider { - &:before { - content: '\E420'; - } -} -.game-icon-mounted-knight { - &:before { - content: '\E421'; - } -} -.game-icon-pegasus { - &:before { - content: '\E422'; - } -} -.game-icon-pig { - &:before { - content: '\E423'; - } -} -.game-icon-amber-mosquito { - &:before { - content: '\E424'; - } -} -.game-icon-ant { - &:before { - content: '\E425'; - } -} -.game-icon-ants { - &:before { - content: '\E426'; - } -} -.game-icon-beehive { - &:before { - content: '\E427'; - } -} -.game-icon-bug-net { - &:before { - content: '\E428'; - } -} -.game-icon-butterfly-flower { - &:before { - content: '\E429'; - } -} -.game-icon-caterpillar { - &:before { - content: '\E42A'; - } -} -.game-icon-cigale { - &:before { - content: '\E42B'; - } -} -.game-icon-claws { - &:before { - content: '\E42C'; - } -} -.game-icon-fly { - &:before { - content: '\E42D'; - } -} -.game-icon-flying-beetle { - &:before { - content: '\E42E'; - } -} -.game-icon-ladybug { - &:before { - content: '\E42F'; - } -} -.game-icon-shrimp { - &:before { - content: '\E430'; - } -} -.game-icon-spider-eye { - &:before { - content: '\E431'; - } -} -.game-icon-tree-beehive { - &:before { - content: '\E432'; - } -} -.game-icon-apple-maggot { - &:before { - content: '\E433'; - } -} -.game-icon-beetle-shell { - &:before { - content: '\E434'; - } -} -.game-icon-dripping-honey { - &:before { - content: '\E435'; - } -} -.game-icon-long-antennae-bug { - &:before { - content: '\E436'; - } -} -.game-icon-opening-shell { - &:before { - content: '\E437'; - } -} -.game-icon-spotted-bug { - &:before { - content: '\E438'; - } -} -.game-icon-acrobatic { - &:before { - content: '\E439'; - } -} -.game-icon-catch { - &:before { - content: '\E43A'; - } -} -.game-icon-running-ninja { - &:before { - content: '\E43B'; - } -} -.game-icon-button-finger { - &:before { - content: '\E43C'; - } -} -.game-icon-chat-bubble { - &:before { - content: '\E43D'; - } -} -.game-icon-choice { - &:before { - content: '\E43E'; - } -} -.game-icon-convince { - &:before { - content: '\E43F'; - } -} -.game-icon-crafting { - &:before { - content: '\E440'; - } -} -.game-icon-discussion { - &:before { - content: '\E441'; - } -} -.game-icon-drinking { - &:before { - content: '\E442'; - } -} -.game-icon-eating { - &:before { - content: '\E443'; - } -} -.game-icon-flying-fox { - &:before { - content: '\E444'; - } -} -.game-icon-hiking { - &:before { - content: '\E445'; - } -} -.game-icon-hive-mind { - &:before { - content: '\E446'; - } -} -.game-icon-jump-across { - &:before { - content: '\E447'; - } -} -.game-icon-kneeling { - &:before { - content: '\E448'; - } -} -.game-icon-leapfrog { - &:before { - content: '\E449'; - } -} -.game-icon-look-at { - &:before { - content: '\E44A'; - } -} -.game-icon-miner { - &:before { - content: '\E44B'; - } -} -.game-icon-night-sleep { - &:before { - content: '\E44C'; - } -} -.game-icon-public-speaker { - &:before { - content: '\E44D'; - } -} -.game-icon-pull { - &:before { - content: '\E44E'; - } -} -.game-icon-push { - &:before { - content: '\E44F'; - } -} -.game-icon-shaking-hands { - &:before { - content: '\E450'; - } -} -.game-icon-shrug { - &:before { - content: '\E451'; - } -} -.game-icon-skills { - &:before { - content: '\E452'; - } -} -.game-icon-stairs-goal { - &:before { - content: '\E453'; - } -} -.game-icon-teacher { - &:before { - content: '\E454'; - } -} -.game-icon-team-idea { - &:before { - content: '\E455'; - } -} -.game-icon-think { - &:before { - content: '\E456'; - } -} -.game-icon-throwing-ball { - &:before { - content: '\E457'; - } -} -.game-icon-uprising { - &:before { - content: '\E458'; - } -} -.game-icon-vote { - &:before { - content: '\E459'; - } -} -.game-icon-walk { - &:before { - content: '\E45A'; - } -} -.game-icon-boot-kick { - &:before { - content: '\E45B'; - } -} -.game-icon-boot-stomp { - &:before { - content: '\E45C'; - } -} -.game-icon-disintegrate { - &:before { - content: '\E45D'; - } -} -.game-icon-dodging { - &:before { - content: '\E45E'; - } -} -.game-icon-drowning { - &:before { - content: '\E45F'; - } -} -.game-icon-fruiting { - &:before { - content: '\E460'; - } -} -.game-icon-grab { - &:before { - content: '\E461'; - } -} -.game-icon-journey { - &:before { - content: '\E462'; - } -} -.game-icon-juggler { - &:before { - content: '\E463'; - } -} -.game-icon-meditation { - &:before { - content: '\E464'; - } -} -.game-icon-mining { - &:before { - content: '\E465'; - } -} -.game-icon-muscle-up { - &:before { - content: '\E466'; - } -} -.game-icon-pointing { - &:before { - content: '\E467'; - } -} -.game-icon-pouring-chalice { - &:before { - content: '\E468'; - } -} -.game-icon-prayer { - &:before { - content: '\E469'; - } -} -.game-icon-run { - &:before { - content: '\E46A'; - } -} -.game-icon-screaming { - &:before { - content: '\E46B'; - } -} -.game-icon-shouting { - &:before { - content: '\E46C'; - } -} -.game-icon-sing { - &:before { - content: '\E46D'; - } -} -.game-icon-slap { - &:before { - content: '\E46E'; - } -} -.game-icon-snatch { - &:before { - content: '\E46F'; - } -} -.game-icon-sprint { - &:before { - content: '\E470'; - } -} -.game-icon-stick-splitting { - &:before { - content: '\E471'; - } -} -.game-icon-stone-crafting { - &:before { - content: '\E472'; - } -} -.game-icon-swallow { - &:before { - content: '\E473'; - } -} -.game-icon-targeting { - &:before { - content: '\E474'; - } -} -.game-icon-tearing { - &:before { - content: '\E475'; - } -} -.game-icon-teleport { - &:before { - content: '\E476'; - } -} -.game-icon-transfuse { - &:before { - content: '\E477'; - } -} -.game-icon-vomiting { - &:before { - content: '\E478'; - } -} -.game-icon-crush { - &:before { - content: '\E479'; - } -} -.game-icon-amputation { - &:before { - content: '\E47A'; - } -} -.game-icon-read { - &:before { - content: '\E47B'; - } -} -.game-icon-talk { - &:before { - content: '\E47C'; - } -} -.game-icon-africa { - &:before { - content: '\E47D'; - } -} -.game-icon-algeria { - &:before { - content: '\E47E'; - } -} -.game-icon-angola { - &:before { - content: '\E47F'; - } -} -.game-icon-antarctica { - &:before { - content: '\E480'; - } -} -.game-icon-atlas { - &:before { - content: '\E481'; - } -} -.game-icon-australia { - &:before { - content: '\E482'; - } -} -.game-icon-belgium { - &:before { - content: '\E483'; - } -} -.game-icon-binoculars { - &:before { - content: '\E484'; - } -} -.game-icon-black-sea { - &:before { - content: '\E485'; - } -} -.game-icon-bolivia { - &:before { - content: '\E486'; - } -} -.game-icon-brazil { - &:before { - content: '\E487'; - } -} -.game-icon-bulgaria { - &:before { - content: '\E488'; - } -} -.game-icon-cambodia { - &:before { - content: '\E489'; - } -} -.game-icon-colombia { - &:before { - content: '\E48A'; - } -} -.game-icon-corsica { - &:before { - content: '\E48B'; - } -} -.game-icon-crossroad { - &:before { - content: '\E48C'; - } -} -.game-icon-direction-signs { - &:before { - content: '\E48D'; - } -} -.game-icon-earth-africa-europe { - &:before { - content: '\E48E'; - } -} -.game-icon-earth-america { - &:before { - content: '\E48F'; - } -} -.game-icon-earth-asia-oceania { - &:before { - content: '\E490'; - } -} -.game-icon-ecology { - &:before { - content: '\E491'; - } -} -.game-icon-egypt { - &:before { - content: '\E492'; - } -} -.game-icon-france { - &:before { - content: '\E493'; - } -} -.game-icon-guatemala { - &:before { - content: '\E494'; - } -} -.game-icon-hungary { - &:before { - content: '\E495'; - } -} -.game-icon-iceland { - &:before { - content: '\E496'; - } -} -.game-icon-iraq { - &:before { - content: '\E497'; - } -} -.game-icon-italia { - &:before { - content: '\E498'; - } -} -.game-icon-japan { - &:before { - content: '\E499'; - } -} -.game-icon-kenya { - &:before { - content: '\E49A'; - } -} -.game-icon-latvia { - &:before { - content: '\E49B'; - } -} -.game-icon-libya { - &:before { - content: '\E49C'; - } -} -.game-icon-mesh-network { - &:before { - content: '\E49D'; - } -} -.game-icon-mexico { - &:before { - content: '\E49E'; - } -} -.game-icon-moldova { - &:before { - content: '\E49F'; - } -} -.game-icon-mongolia { - &:before { - content: '\E4A0'; - } -} -.game-icon-nigeria { - &:before { - content: '\E4A1'; - } -} -.game-icon-paraguay { - &:before { - content: '\E4A2'; - } -} -.game-icon-path-distance { - &:before { - content: '\E4A3'; - } -} -.game-icon-peru { - &:before { - content: '\E4A4'; - } -} -.game-icon-portugal { - &:before { - content: '\E4A5'; - } -} -.game-icon-position-marker { - &:before { - content: '\E4A6'; - } -} -.game-icon-radar-cross-section { - &:before { - content: '\E4A7'; - } -} -.game-icon-road { - &:before { - content: '\E4A8'; - } -} -.game-icon-sextant { - &:before { - content: '\E4A9'; - } -} -.game-icon-south-africa { - &:before { - content: '\E4AA'; - } -} -.game-icon-south-america { - &:before { - content: '\E4AB'; - } -} -.game-icon-south-korea { - &:before { - content: '\E4AC'; - } -} -.game-icon-spain { - &:before { - content: '\E4AD'; - } -} -.game-icon-sri-lanka { - &:before { - content: '\E4AE'; - } -} -.game-icon-switzerland { - &:before { - content: '\E4AF'; - } -} -.game-icon-tanzania { - &:before { - content: '\E4B0'; - } -} -.game-icon-texas { - &:before { - content: '\E4B1'; - } -} -.game-icon-trail { - &:before { - content: '\E4B2'; - } -} -.game-icon-tunisia { - &:before { - content: '\E4B3'; - } -} -.game-icon-uruguay { - &:before { - content: '\E4B4'; - } -} -.game-icon-venezuela { - &:before { - content: '\E4B5'; - } -} -.game-icon-wireframe-globe { - &:before { - content: '\E4B6'; - } -} -.game-icon-compass { - &:before { - content: '\E4B7'; - } -} -.game-icon-globe { - &:before { - content: '\E4B8'; - } -} -.game-icon-spyglass { - &:before { - content: '\E4B9'; - } -} -.game-icon-treasure-map { - &:before { - content: '\E4BA'; - } -} -.game-icon-wooden-sign { - &:before { - content: '\E4BB'; - } -} -.game-icon-world { - &:before { - content: '\E4BC'; - } -} -.game-icon-digital-trace { - &:before { - content: '\E4BD'; - } -} -.game-icon-orbit { - &:before { - content: '\E4BE'; - } -} -.game-icon-battleship { - &:before { - content: '\E4BF'; - } -} -.game-icon-great-war-tank { - &:before { - content: '\E4C0'; - } -} -.game-icon-occupy { - &:before { - content: '\E4C1'; - } -} -.game-icon-barracks-tent { - &:before { - content: '\E4C2'; - } -} -.game-icon-barracks { - &:before { - content: '\E4C3'; - } -} -.game-icon-caltrops { - &:before { - content: '\E4C4'; - } -} -.game-icon-hammer-sickle { - &:before { - content: '\E4C5'; - } -} -.game-icon-military-fort { - &:before { - content: '\E4C6'; - } -} -.game-icon-union-jack { - &:before { - content: '\E4C7'; - } -} -.game-icon-usa-flag { - &:before { - content: '\E4C8'; - } -} -.game-icon-battle-tank { - &:before { - content: '\E4C9'; - } -} -.game-icon-bombing-run { - &:before { - content: '\E4CA'; - } -} -.game-icon-gas-mask { - &:before { - content: '\E4CB'; - } -} -.game-icon-mushroom-cloud { - &:before { - content: '\E4CC'; - } -} -.game-icon-sunrise { - &:before { - content: '\E4CD'; - } -} -.game-icon-tank { - &:before { - content: '\E4CE'; - } -} -.game-icon-artillery-shell { - &:before { - content: '\E4CF'; - } -} -.game-icon-biplane { - &:before { - content: '\E4D0'; - } -} -.game-icon-bunker { - &:before { - content: '\E4D1'; - } -} -.game-icon-damaged-house { - &:before { - content: '\E4D2'; - } -} -.game-icon-lost-limb { - &:before { - content: '\E4D3'; - } -} -.game-icon-military-ambulance { - &:before { - content: '\E4D4'; - } -} -.game-icon-c96 { - &:before { - content: '\E4D5'; - } -} -.game-icon-carpet-bombing { - &:before { - content: '\E4D6'; - } -} -.game-icon-flatbed-covered { - &:before { - content: '\E4D7'; - } -} -.game-icon-flatbed { - &:before { - content: '\E4D8'; - } -} -.game-icon-mp-40 { - &:before { - content: '\E4D9'; - } -} -.game-icon-tank-tread { - &:before { - content: '\E4DA'; - } -} -.game-icon-thompson-m1 { - &:before { - content: '\E4DB'; - } -} -.game-icon-trench-body-armor { - &:before { - content: '\E4DC'; - } -} -.game-icon-trench-knife { - &:before { - content: '\E4DD'; - } -} -.game-icon-trench-spade { - &:before { - content: '\E4DE'; - } -} -.game-icon-bad-gnome { - &:before { - content: '\E4DF'; - } -} -.game-icon-boar-ensign { - &:before { - content: '\E4E0'; - } -} -.game-icon-carnyx { - &:before { - content: '\E4E1'; - } -} -.game-icon-fomorian { - &:before { - content: '\E4E2'; - } -} -.game-icon-holy-oak { - &:before { - content: '\E4E3'; - } -} -.game-icon-oppidum { - &:before { - content: '\E4E4'; - } -} -.game-icon-torc { - &:before { - content: '\E4E5'; - } -} -.game-icon-tree-face { - &:before { - content: '\E4E6'; - } -} -.game-icon-bagpipes { - &:before { - content: '\E4E7'; - } -} -.game-icon-harp { - &:before { - content: '\E4E8'; - } -} -.game-icon-magic-potion { - &:before { - content: '\E4E9'; - } -} -.game-icon-sickle { - &:before { - content: '\E4EA'; - } -} -.game-icon-heavy-thorny-triskelion { - &:before { - content: '\E4EB'; - } -} -.game-icon-robe { - &:before { - content: '\E4EC'; - } -} -.game-icon-medusa-head { - &:before { - content: '\E4ED'; - } -} -.game-icon-transparent-slime { - &:before { - content: '\E4EE'; - } -} -.game-icon-dragon-head-2 { - &:before { - content: '\E4EF'; - } -} -.game-icon-alien-bug { - &:before { - content: '\E4F0'; - } -} -.game-icon-alien-egg { - &:before { - content: '\E4F1'; - } -} -.game-icon-anubis { - &:before { - content: '\E4F2'; - } -} -.game-icon-bottled-shadow { - &:before { - content: '\E4F3'; - } -} -.game-icon-brain-tentacle { - &:before { - content: '\E4F4'; - } -} -.game-icon-brute { - &:before { - content: '\E4F5'; - } -} -.game-icon-bullet-bill { - &:before { - content: '\E4F6'; - } -} -.game-icon-bully-minion { - &:before { - content: '\E4F7'; - } -} -.game-icon-carnivorous-plant { - &:before { - content: '\E4F8'; - } -} -.game-icon-ceiling-barnacle { - &:before { - content: '\E4F9'; - } -} -.game-icon-centaur { - &:before { - content: '\E4FA'; - } -} -.game-icon-daemon-pull { - &:before { - content: '\E4FB'; - } -} -.game-icon-devil-mask { - &:before { - content: '\E4FC'; - } -} -.game-icon-djinn { - &:before { - content: '\E4FD'; - } -} -.game-icon-drakkar-dragon { - &:before { - content: '\E4FE'; - } -} -.game-icon-egyptian-sphinx { - &:before { - content: '\E4FF'; - } -} -.game-icon-fairy { - &:before { - content: '\E500'; - } -} -.game-icon-floating-ghost { - &:before { - content: '\E501'; - } -} -.game-icon-floating-tentacles { - &:before { - content: '\E502'; - } -} -.game-icon-gargoyle { - &:before { - content: '\E503'; - } -} -.game-icon-giant { - &:before { - content: '\E504'; - } -} -.game-icon-grasping-slug { - &:before { - content: '\E505'; - } -} -.game-icon-greek-sphinx { - &:before { - content: '\E506'; - } -} -.game-icon-half-body-crawling { - &:before { - content: '\E507'; - } -} -.game-icon-horned-reptile { - &:before { - content: '\E508'; - } -} -.game-icon-horus { - &:before { - content: '\E509'; - } -} -.game-icon-ice-golem { - &:before { - content: '\E50A'; - } -} -.game-icon-jawless-cyclop { - &:before { - content: '\E50B'; - } -} -.game-icon-kraken-tentacle { - &:before { - content: '\E50C'; - } -} -.game-icon-mermaid { - &:before { - content: '\E50D'; - } -} -.game-icon-metroid { - &:before { - content: '\E50E'; - } -} -.game-icon-mimic-chest { - &:before { - content: '\E50F'; - } -} -.game-icon-mummy-head { - &:before { - content: '\E510'; - } -} -.game-icon-oni { - &:before { - content: '\E511'; - } -} -.game-icon-pick-of-destiny { - &:before { - content: '\E512'; - } -} -.game-icon-purple-tentacle { - &:before { - content: '\E513'; - } -} -.game-icon-resting-vampire { - &:before { - content: '\E514'; - } -} -.game-icon-rock-golem { - &:before { - content: '\E515'; - } -} -.game-icon-sasquatch { - &:before { - content: '\E516'; - } -} -.game-icon-shambling-mound { - &:before { - content: '\E517'; - } -} -.game-icon-shambling-zombie { - &:before { - content: '\E518'; - } -} -.game-icon-slime { - &:before { - content: '\E519'; - } -} -.game-icon-spiked-dragon-head { - &:before { - content: '\E51A'; - } -} -.game-icon-swallower { - &:before { - content: '\E51B'; - } -} -.game-icon-swamp-bat { - &:before { - content: '\E51C'; - } -} -.game-icon-thwomp { - &:before { - content: '\E51D'; - } -} -.game-icon-troglodyte { - &:before { - content: '\E51E'; - } -} -.game-icon-unicorn { - &:before { - content: '\E51F'; - } -} -.game-icon-beast-eye { - &:before { - content: '\E520'; - } -} -.game-icon-behold { - &:before { - content: '\E521'; - } -} -.game-icon-bestial-fangs { - &:before { - content: '\E522'; - } -} -.game-icon-cracked-alien-skull { - &:before { - content: '\E523'; - } -} -.game-icon-cyclops { - &:before { - content: '\E524'; - } -} -.game-icon-daemon-skull { - &:before { - content: '\E525'; - } -} -.game-icon-dinosaur-bones { - &:before { - content: '\E526'; - } -} -.game-icon-dinosaur-egg { - &:before { - content: '\E527'; - } -} -.game-icon-double-dragon { - &:before { - content: '\E528'; - } -} -.game-icon-dragon-spiral { - &:before { - content: '\E529'; - } -} -.game-icon-ent-mouth { - &:before { - content: '\E52A'; - } -} -.game-icon-evil-book { - &:before { - content: '\E52B'; - } -} -.game-icon-evil-comet { - &:before { - content: '\E52C'; - } -} -.game-icon-evil-fork { - &:before { - content: '\E52D'; - } -} -.game-icon-evil-minion { - &:before { - content: '\E52E'; - } -} -.game-icon-evil-moon { - &:before { - content: '\E52F'; - } -} -.game-icon-evil-tree { - &:before { - content: '\E530'; - } -} -.game-icon-eyestalk { - &:before { - content: '\E531'; - } -} -.game-icon-fairy-2 { - &:before { - content: '\E532'; - } -} -.game-icon-fleshy-mass { - &:before { - content: '\E533'; - } -} -.game-icon-frankenstein-creature { - &:before { - content: '\E534'; - } -} -.game-icon-ghost { - &:before { - content: '\E535'; - } -} -.game-icon-gluttonous-smile { - &:before { - content: '\E536'; - } -} -.game-icon-gooey-daemon { - &:before { - content: '\E537'; - } -} -.game-icon-grim-reaper { - &:before { - content: '\E538'; - } -} -.game-icon-harpy { - &:before { - content: '\E539'; - } -} -.game-icon-haunting { - &:before { - content: '\E53A'; - } -} -.game-icon-horned-skull { - &:before { - content: '\E53B'; - } -} -.game-icon-hydra-shot { - &:before { - content: '\E53C'; - } -} -.game-icon-hydra { - &:before { - content: '\E53D'; - } -} -.game-icon-imp-laugh { - &:before { - content: '\E53E'; - } -} -.game-icon-imp { - &:before { - content: '\E53F'; - } -} -.game-icon-infested-mass { - &:before { - content: '\E540'; - } -} -.game-icon-lizardman { - &:before { - content: '\E541'; - } -} -.game-icon-pretty-fangs { - &:before { - content: '\E542'; - } -} -.game-icon-sea-dragon { - &:before { - content: '\E543'; - } -} -.game-icon-sharp-smile { - &:before { - content: '\E544'; - } -} -.game-icon-spectre { - &:before { - content: '\E545'; - } -} -.game-icon-toad-teeth { - &:before { - content: '\E546'; - } -} -.game-icon-triton-head { - &:before { - content: '\E547'; - } -} -.game-icon-vile-fluid { - &:before { - content: '\E548'; - } -} -.game-icon-witch-flight { - &:before { - content: '\E549'; - } -} -.game-icon-wyvern { - &:before { - content: '\E54A'; - } -} -.game-icon-sea-creature { - &:before { - content: '\E54B'; - } -} -.game-icon-carrier { - &:before { - content: '\E54C'; - } -} -.game-icon-cruiser { - &:before { - content: '\E54D'; - } -} -.game-icon-dreadnought { - &:before { - content: '\E54E'; - } -} -.game-icon-iron-hulled-warship { - &:before { - content: '\E54F'; - } -} -.game-icon-boat-engine { - &:before { - content: '\E550'; - } -} -.game-icon-boat-fishing { - &:before { - content: '\E551'; - } -} -.game-icon-boat-horizon { - &:before { - content: '\E552'; - } -} -.game-icon-boat-propeller { - &:before { - content: '\E553'; - } -} -.game-icon-canoe { - &:before { - content: '\E554'; - } -} -.game-icon-caravel { - &:before { - content: '\E555'; - } -} -.game-icon-cargo-ship { - &:before { - content: '\E556'; - } -} -.game-icon-crow-nest { - &:before { - content: '\E557'; - } -} -.game-icon-drakkar { - &:before { - content: '\E558'; - } -} -.game-icon-figurehead { - &:before { - content: '\E559'; - } -} -.game-icon-fishing-boat { - &:before { - content: '\E55A'; - } -} -.game-icon-galley { - &:before { - content: '\E55B'; - } -} -.game-icon-harbor-dock { - &:before { - content: '\E55C'; - } -} -.game-icon-iceberg { - &:before { - content: '\E55D'; - } -} -.game-icon-life-buoy { - &:before { - content: '\E55E'; - } -} -.game-icon-mini-submarine { - &:before { - content: '\E55F'; - } -} -.game-icon-mooring-bollard { - &:before { - content: '\E560'; - } -} -.game-icon-paddle-steamer { - &:before { - content: '\E561'; - } -} -.game-icon-paddles { - &:before { - content: '\E562'; - } -} -.game-icon-paper-boat { - &:before { - content: '\E563'; - } -} -.game-icon-periscope { - &:before { - content: '\E564'; - } -} -.game-icon-raft { - &:before { - content: '\E565'; - } -} -.game-icon-sail { - &:before { - content: '\E566'; - } -} -.game-icon-sailboat { - &:before { - content: '\E567'; - } -} -.game-icon-ship-bow { - &:before { - content: '\E568'; - } -} -.game-icon-ship-wheel { - &:before { - content: '\E569'; - } -} -.game-icon-ship-wreck { - &:before { - content: '\E56A'; - } -} -.game-icon-sinagot { - &:before { - content: '\E56B'; - } -} -.game-icon-sinking-ship { - &:before { - content: '\E56C'; - } -} -.game-icon-speed-boat { - &:before { - content: '\E56D'; - } -} -.game-icon-submarine { - &:before { - content: '\E56E'; - } -} -.game-icon-trireme { - &:before { - content: '\E56F'; - } -} -.game-icon-wood-canoe { - &:before { - content: '\E570'; - } -} -.game-icon-anchor { - &:before { - content: '\E571'; - } -} -.game-icon-galleon { - &:before { - content: '\E572'; - } -} -.game-icon-shooner-sailboat { - &:before { - content: '\E573'; - } -} -.game-icon-small-fishing-sailboat { - &:before { - content: '\E574'; - } -} -.game-icon-nautilus-shell { - &:before { - content: '\E575'; - } -} -.game-icon-algae { - &:before { - content: '\E576'; - } -} -.game-icon-buoy { - &:before { - content: '\E577'; - } -} -.game-icon-coral { - &:before { - content: '\E578'; - } -} -.game-icon-fishing-pole { - &:before { - content: '\E579'; - } -} -.game-icon-fishing-spoon { - &:before { - content: '\E57A'; - } -} -.game-icon-fishing { - &:before { - content: '\E57B'; - } -} -.game-icon-flood { - &:before { - content: '\E57C'; - } -} -.game-icon-helicoprion { - &:before { - content: '\E57D'; - } -} -.game-icon-high-tide { - &:before { - content: '\E57E'; - } -} -.game-icon-island { - &:before { - content: '\E57F'; - } -} -.game-icon-knot { - &:before { - content: '\E580'; - } -} -.game-icon-life-jacket { - &:before { - content: '\E581'; - } -} -.game-icon-lighthouse { - &:before { - content: '\E582'; - } -} -.game-icon-low-tide { - &:before { - content: '\E583'; - } -} -.game-icon-mussel { - &:before { - content: '\E584'; - } -} -.game-icon-offshore-platform { - &:before { - content: '\E585'; - } -} -.game-icon-oyster { - &:before { - content: '\E586'; - } -} -.game-icon-plesiosaurus { - &:before { - content: '\E587'; - } -} -.game-icon-pulley-hook { - &:before { - content: '\E588'; - } -} -.game-icon-rope-coil { - &:before { - content: '\E589'; - } -} -.game-icon-sand-castle { - &:before { - content: '\E58A'; - } -} -.game-icon-scuba-mask { - &:before { - content: '\E58B'; - } -} -.game-icon-scuba-tanks { - &:before { - content: '\E58C'; - } -} -.game-icon-sea-cliff { - &:before { - content: '\E58D'; - } -} -.game-icon-sea-turtle { - &:before { - content: '\E58E'; - } -} -.game-icon-seagull { - &:before { - content: '\E58F'; - } -} -.game-icon-surf-board { - &:before { - content: '\E590'; - } -} -.game-icon-surfer-van { - &:before { - content: '\E591'; - } -} -.game-icon-swimfins { - &:before { - content: '\E592'; - } -} -.game-icon-tall-bridge { - &:before { - content: '\E593'; - } -} -.game-icon-wave-surfer { - &:before { - content: '\E594'; - } -} -.game-icon-wooden-pier { - &:before { - content: '\E595'; - } -} -.game-icon-at-sea { - &:before { - content: '\E596'; - } -} -.game-icon-big-wave { - &:before { - content: '\E597'; - } -} -.game-icon-cargo-crane { - &:before { - content: '\E598'; - } -} -.game-icon-fishing-hook { - &:before { - content: '\E599'; - } -} -.game-icon-fishing-net { - &:before { - content: '\E59A'; - } -} -.game-icon-water-splash { - &:before { - content: '\E59B'; - } -} -.game-icon-wave-crest { - &:before { - content: '\E59C'; - } -} -.game-icon-waves { - &:before { - content: '\E59D'; - } -} -.game-icon-snorkel { - &:before { - content: '\E59E'; - } -} -.game-icon-ram { - &:before { - content: '\E59F'; - } -} -.game-icon-armadillo { - &:before { - content: '\E5A0'; - } -} -.game-icon-basset-hound-head { - &:before { - content: '\E5A1'; - } -} -.game-icon-bastet { - &:before { - content: '\E5A2'; - } -} -.game-icon-beaver { - &:before { - content: '\E5A3'; - } -} -.game-icon-bison { - &:before { - content: '\E5A4'; - } -} -.game-icon-buffalo-head { - &:before { - content: '\E5A5'; - } -} -.game-icon-camel { - &:before { - content: '\E5A6'; - } -} -.game-icon-cavalry { - &:before { - content: '\E5A7'; - } -} -.game-icon-juggling-seal { - &:before { - content: '\E5A8'; - } -} -.game-icon-jumping-dog { - &:before { - content: '\E5A9'; - } -} -.game-icon-mammoth { - &:before { - content: '\E5AA'; - } -} -.game-icon-mandrill-head { - &:before { - content: '\E5AB'; - } -} -.game-icon-rabbit-head { - &:before { - content: '\E5AC'; - } -} -.game-icon-raccoon-head { - &:before { - content: '\E5AD'; - } -} -.game-icon-ram-profile { - &:before { - content: '\E5AE'; - } -} -.game-icon-saber-toothed-cat-head { - &:before { - content: '\E5AF'; - } -} -.game-icon-sitting-dog { - &:before { - content: '\E5B0'; - } -} -.game-icon-squirrel { - &:before { - content: '\E5B1'; - } -} -.game-icon-walrus-head { - &:before { - content: '\E5B2'; - } -} -.game-icon-direwolf { - &:before { - content: '\E5B3'; - } -} -.game-icon-snout { - &:before { - content: '\E5B4'; - } -} -.game-icon-acoustic-megaphone { - &:before { - content: '\E5B5'; - } -} -.game-icon-alarm-clock { - &:before { - content: '\E5B6'; - } -} -.game-icon-audio-cassette { - &:before { - content: '\E5B7'; - } -} -.game-icon-boombox { - &:before { - content: '\E5B8'; - } -} -.game-icon-compact-disc { - &:before { - content: '\E5B9'; - } -} -.game-icon-djembe { - &:before { - content: '\E5BA'; - } -} -.game-icon-drum { - &:before { - content: '\E5BB'; - } -} -.game-icon-elf-ear { - &:before { - content: '\E5BC'; - } -} -.game-icon-film-spool { - &:before { - content: '\E5BD'; - } -} -.game-icon-flute { - &:before { - content: '\E5BE'; - } -} -.game-icon-gong { - &:before { - content: '\E5BF'; - } -} -.game-icon-guitar-bass-head { - &:before { - content: '\E5C0'; - } -} -.game-icon-guitar-head { - &:before { - content: '\E5C1'; - } -} -.game-icon-headphones { - &:before { - content: '\E5C2'; - } -} -.game-icon-heart-beats { - &:before { - content: '\E5C3'; - } -} -.game-icon-human-ear { - &:before { - content: '\E5C4'; - } -} -.game-icon-jack-plug { - &:before { - content: '\E5C5'; - } -} -.game-icon-maracas { - &:before { - content: '\E5C6'; - } -} -.game-icon-metronome { - &:before { - content: '\E5C7'; - } -} -.game-icon-microphone { - &:before { - content: '\E5C8'; - } -} -.game-icon-musical-keyboard { - &:before { - content: '\E5C9'; - } -} -.game-icon-musical-notes { - &:before { - content: '\E5CA'; - } -} -.game-icon-musical-score { - &:before { - content: '\E5CB'; - } -} -.game-icon-mute { - &:before { - content: '\E5CC'; - } -} -.game-icon-ocarina { - &:before { - content: '\E5CD'; - } -} -.game-icon-old-microphone { - &:before { - content: '\E5CE'; - } -} -.game-icon-pan-flute { - &:before { - content: '\E5CF'; - } -} -.game-icon-phone { - &:before { - content: '\E5D0'; - } -} -.game-icon-piano-keys { - &:before { - content: '\E5D1'; - } -} -.game-icon-pocket-radio { - &:before { - content: '\E5D2'; - } -} -.game-icon-radio-tower { - &:before { - content: '\E5D3'; - } -} -.game-icon-ringing-alarm { - &:before { - content: '\E5D4'; - } -} -.game-icon-saxophone { - &:before { - content: '\E5D5'; - } -} -.game-icon-silenced { - &:before { - content: '\E5D6'; - } -} -.game-icon-sound-off { - &:before { - content: '\E5D7'; - } -} -.game-icon-sound-on { - &:before { - content: '\E5D8'; - } -} -.game-icon-speaker-off { - &:before { - content: '\E5D9'; - } -} -.game-icon-speaker { - &:before { - content: '\E5DA'; - } -} -.game-icon-tambourine { - &:before { - content: '\E5DB'; - } -} -.game-icon-trumpet-flag { - &:before { - content: '\E5DC'; - } -} -.game-icon-trumpet { - &:before { - content: '\E5DD'; - } -} -.game-icon-vuvuzelas { - &:before { - content: '\E5DE'; - } -} -.game-icon-xylophone { - &:before { - content: '\E5DF'; - } -} -.game-icon-amplitude { - &:before { - content: '\E5E0'; - } -} -.game-icon-anthem { - &:before { - content: '\E5E1'; - } -} -.game-icon-bugle-call { - &:before { - content: '\E5E2'; - } -} -.game-icon-carillon { - &:before { - content: '\E5E3'; - } -} -.game-icon-double-quaver { - &:before { - content: '\E5E4'; - } -} -.game-icon-echo-ripples { - &:before { - content: '\E5E5'; - } -} -.game-icon-guitar { - &:before { - content: '\E5E6'; - } -} -.game-icon-hunting-horn { - &:before { - content: '\E5E7'; - } -} -.game-icon-love-howl { - &:before { - content: '\E5E8'; - } -} -.game-icon-love-song { - &:before { - content: '\E5E9'; - } -} -.game-icon-lyre { - &:before { - content: '\E5EA'; - } -} -.game-icon-movement-sensor { - &:before { - content: '\E5EB'; - } -} -.game-icon-music-spell { - &:before { - content: '\E5EC'; - } -} -.game-icon-resonance { - &:before { - content: '\E5ED'; - } -} -.game-icon-ringing-bell { - &:before { - content: '\E5EE'; - } -} -.game-icon-silence { - &:before { - content: '\E5EF'; - } -} -.game-icon-sonic-boom { - &:before { - content: '\E5F0'; - } -} -.game-icon-sonic-shout { - &:before { - content: '\E5F1'; - } -} -.game-icon-tune-pitch { - &:before { - content: '\E5F2'; - } -} -.game-icon-ultrasound { - &:before { - content: '\E5F3'; - } -} -.game-icon-vibrating-ball { - &:before { - content: '\E5F4'; - } -} -.game-icon-zigzag-tune { - &:before { - content: '\E5F5'; - } -} -.game-icon-hearing-disabled { - &:before { - content: '\E5F6'; - } -} -.game-icon-sound-waves { - &:before { - content: '\E5F7'; - } -} -.game-icon-violin { - &:before { - content: '\E5F8'; - } -} -.game-icon-chariot { - &:before { - content: '\E5F9'; - } -} -.game-icon-catapult { - &:before { - content: '\E5FA'; - } -} -.game-icon-amphora { - &:before { - content: '\E5FB'; - } -} -.game-icon-ancient-columns { - &:before { - content: '\E5FC'; - } -} -.game-icon-ancient-ruins { - &:before { - content: '\E5FD'; - } -} -.game-icon-aqueduct { - &:before { - content: '\E5FE'; - } -} -.game-icon-broken-pottery { - &:before { - content: '\E5FF'; - } -} -.game-icon-caesar { - &:before { - content: '\E600'; - } -} -.game-icon-classical-knowledge { - &:before { - content: '\E601'; - } -} -.game-icon-coliseum { - &:before { - content: '\E602'; - } -} -.game-icon-column-vase { - &:before { - content: '\E603'; - } -} -.game-icon-discobolus { - &:before { - content: '\E604'; - } -} -.game-icon-greaves { - &:before { - content: '\E605'; - } -} -.game-icon-greek-temple { - &:before { - content: '\E606'; - } -} -.game-icon-icarus { - &:before { - content: '\E607'; - } -} -.game-icon-ionic-column { - &:before { - content: '\E608'; - } -} -.game-icon-jug { - &:before { - content: '\E609'; - } -} -.game-icon-medieval-pavilion { - &:before { - content: '\E60A'; - } -} -.game-icon-menhir { - &:before { - content: '\E60B'; - } -} -.game-icon-olive { - &:before { - content: '\E60C'; - } -} -.game-icon-palisade { - &:before { - content: '\E60D'; - } -} -.game-icon-roman-toga { - &:before { - content: '\E60E'; - } -} -.game-icon-sandal { - &:before { - content: '\E60F'; - } -} -.game-icon-stone-bust { - &:before { - content: '\E610'; - } -} -.game-icon-stone-path { - &:before { - content: '\E611'; - } -} -.game-icon-water-fountain { - &:before { - content: '\E612'; - } -} -.game-icon-wax-tablet { - &:before { - content: '\E613'; - } -} -.game-icon-capitol { - &:before { - content: '\E614'; - } -} -.game-icon-grapes { - &:before { - content: '\E615'; - } -} -.game-icon-maze { - &:before { - content: '\E616'; - } -} -.game-icon-wingfoot { - &:before { - content: '\E617'; - } -} -.game-icon-ballista { - &:before { - content: '\E618'; - } -} -.game-icon-pauldrons { - &:before { - content: '\E619'; - } -} -.game-icon-pteruges { - &:before { - content: '\E61A'; - } -} -.game-icon-siege-ram { - &:before { - content: '\E61B'; - } -} -.game-icon-air-balloon { - &:before { - content: '\E61C'; - } -} -.game-icon-airplane-arrival { - &:before { - content: '\E61D'; - } -} -.game-icon-airplane-departure { - &:before { - content: '\E61E'; - } -} -.game-icon-ambulance { - &:before { - content: '\E61F'; - } -} -.game-icon-apollo-capsule { - &:before { - content: '\E620'; - } -} -.game-icon-bulldozer { - &:before { - content: '\E621'; - } -} -.game-icon-bus { - &:before { - content: '\E622'; - } -} -.game-icon-car-door { - &:before { - content: '\E623'; - } -} -.game-icon-car-key { - &:before { - content: '\E624'; - } -} -.game-icon-car-seat { - &:before { - content: '\E625'; - } -} -.game-icon-car-wheel { - &:before { - content: '\E626'; - } -} -.game-icon-caravan { - &:before { - content: '\E627'; - } -} -.game-icon-city-car { - &:before { - content: '\E628'; - } -} -.game-icon-coal-wagon { - &:before { - content: '\E629'; - } -} -.game-icon-commercial-airplane { - &:before { - content: '\E62A'; - } -} -.game-icon-cycling { - &:before { - content: '\E62B'; - } -} -.game-icon-delivery-drone { - &:before { - content: '\E62C'; - } -} -.game-icon-dutch-bike { - &:before { - content: '\E62D'; - } -} -.game-icon-farm-tractor { - &:before { - content: '\E62E'; - } -} -.game-icon-flat-tire { - &:before { - content: '\E62F'; - } -} -.game-icon-food-truck { - &:before { - content: '\E630'; - } -} -.game-icon-forklift { - &:before { - content: '\E631'; - } -} -.game-icon-gas-pump { - &:before { - content: '\E632'; - } -} -.game-icon-gear-stick { - &:before { - content: '\E633'; - } -} -.game-icon-hang-glider { - &:before { - content: '\E634'; - } -} -.game-icon-helicopter-tail { - &:before { - content: '\E635'; - } -} -.game-icon-helicopter { - &:before { - content: '\E636'; - } -} -.game-icon-home-garage { - &:before { - content: '\E637'; - } -} -.game-icon-interceptor-ship { - &:before { - content: '\E638'; - } -} -.game-icon-jeep { - &:before { - content: '\E639'; - } -} -.game-icon-jet-fighter { - &:before { - content: '\E63A'; - } -} -.game-icon-kick-scooter { - &:before { - content: '\E63B'; - } -} -.game-icon-level-crossing { - &:before { - content: '\E63C'; - } -} -.game-icon-lunar-module { - &:before { - content: '\E63D'; - } -} -.game-icon-mars-curiosity { - &:before { - content: '\E63E'; - } -} -.game-icon-mars-pathfinder { - &:before { - content: '\E63F'; - } -} -.game-icon-mechanic-garage { - &:before { - content: '\E640'; - } -} -.game-icon-mine-truck { - &:before { - content: '\E641'; - } -} -.game-icon-mine-wagon { - &:before { - content: '\E642'; - } -} -.game-icon-old-wagon { - &:before { - content: '\E643'; - } -} -.game-icon-plane-wing { - &:before { - content: '\E644'; - } -} -.game-icon-rail-road { - &:before { - content: '\E645'; - } -} -.game-icon-railway { - &:before { - content: '\E646'; - } -} -.game-icon-rocket-thruster { - &:before { - content: '\E647'; - } -} -.game-icon-ropeway { - &:before { - content: '\E648'; - } -} -.game-icon-scooter { - &:before { - content: '\E649'; - } -} -.game-icon-scout-ship { - &:before { - content: '\E64A'; - } -} -.game-icon-siege-tower { - &:before { - content: '\E64B'; - } -} -.game-icon-skateboard { - &:before { - content: '\E64C'; - } -} -.game-icon-space-shuttle { - &:before { - content: '\E64D'; - } -} -.game-icon-spaceship { - &:before { - content: '\E64E'; - } -} -.game-icon-speedometer { - &:before { - content: '\E64F'; - } -} -.game-icon-starfighter { - &:before { - content: '\E650'; - } -} -.game-icon-stealth-bomber { - &:before { - content: '\E651'; - } -} -.game-icon-steam-locomotive { - &:before { - content: '\E652'; - } -} -.game-icon-steering-wheel { - &:before { - content: '\E653'; - } -} -.game-icon-subway { - &:before { - content: '\E654'; - } -} -.game-icon-tire-iron-cross { - &:before { - content: '\E655'; - } -} -.game-icon-tire-iron { - &:before { - content: '\E656'; - } -} -.game-icon-tracked-robot { - &:before { - content: '\E657'; - } -} -.game-icon-traffic-lights-green { - &:before { - content: '\E658'; - } -} -.game-icon-traffic-lights-orange { - &:before { - content: '\E659'; - } -} -.game-icon-traffic-lights-ready-to-go { - &:before { - content: '\E65A'; - } -} -.game-icon-trebuchet { - &:before { - content: '\E65B'; - } -} -.game-icon-truck { - &:before { - content: '\E65C'; - } -} -.game-icon-turbine { - &:before { - content: '\E65D'; - } -} -.game-icon-ufo { - &:before { - content: '\E65E'; - } -} -.game-icon-unicycle { - &:before { - content: '\E65F'; - } -} -.game-icon-velocipede { - &:before { - content: '\E660'; - } -} -.game-icon-walking-scout { - &:before { - content: '\E661'; - } -} -.game-icon-bomber { - &:before { - content: '\E662'; - } -} -.game-icon-heavy-fighter { - &:before { - content: '\E663'; - } -} -.game-icon-light-fighter { - &:before { - content: '\E664'; - } -} -.game-icon-afterburn { - &:before { - content: '\E665'; - } -} -.game-icon-cartwheel { - &:before { - content: '\E666'; - } -} -.game-icon-forward-field { - &:before { - content: '\E667'; - } -} -.game-icon-jetpack { - &:before { - content: '\E668'; - } -} -.game-icon-missile-mech { - &:before { - content: '\E669'; - } -} -.game-icon-rocket-flight { - &:before { - content: '\E66A'; - } -} -.game-icon-rocket { - &:before { - content: '\E66B'; - } -} -.game-icon-strafe { - &:before { - content: '\E66C'; - } -} -.game-icon-jet-pack { - &:before { - content: '\E66D'; - } -} -.game-icon-airplane { - &:before { - content: '\E66E'; - } -} -.game-icon-apc { - &:before { - content: '\E66F'; - } -} -.game-icon-f1-car { - &:before { - content: '\E670'; - } -} -.game-icon-glider { - &:before { - content: '\E671'; - } -} -.game-icon-hang-glider-2 { - &:before { - content: '\E672'; - } -} -.game-icon-jeep-2 { - &:before { - content: '\E673'; - } -} -.game-icon-race-car { - &:before { - content: '\E674'; - } -} -.game-icon-zeppelin { - &:before { - content: '\E675'; - } -} -.game-icon-dread { - &:before { - content: '\E676'; - } -} -.game-icon-distraction { - &:before { - content: '\E677'; - } -} -.game-icon-angry-eyes { - &:before { - content: '\E678'; - } -} -.game-icon-confrontation { - &:before { - content: '\E679'; - } -} -.game-icon-dead-head { - &:before { - content: '\E67A'; - } -} -.game-icon-enrage { - &:before { - content: '\E67B'; - } -} -.game-icon-idea { - &:before { - content: '\E67C'; - } -} -.game-icon-liar { - &:before { - content: '\E67D'; - } -} -.game-icon-wisdom { - &:before { - content: '\E67E'; - } -} -.game-icon-artificial-intelligence { - &:before { - content: '\E67F'; - } -} -.game-icon-awareness { - &:before { - content: '\E680'; - } -} -.game-icon-back-pain { - &:before { - content: '\E681'; - } -} -.game-icon-brain-freeze { - &:before { - content: '\E682'; - } -} -.game-icon-chained-heart { - &:before { - content: '\E683'; - } -} -.game-icon-coma { - &:before { - content: '\E684'; - } -} -.game-icon-delighted { - &:before { - content: '\E685'; - } -} -.game-icon-despair { - &:before { - content: '\E686'; - } -} -.game-icon-distraction-2 { - &:before { - content: '\E687'; - } -} -.game-icon-drama-masks { - &:before { - content: '\E688'; - } -} -.game-icon-extra-lucid { - &:before { - content: '\E689'; - } -} -.game-icon-gluttony { - &:before { - content: '\E68A'; - } -} -.game-icon-hidden { - &:before { - content: '\E68B'; - } -} -.game-icon-imprisoned { - &:before { - content: '\E68C'; - } -} -.game-icon-mirror-mirror { - &:before { - content: '\E68D'; - } -} -.game-icon-mouth-watering { - &:before { - content: '\E68E'; - } -} -.game-icon-nothing-to-say { - &:before { - content: '\E68F'; - } -} -.game-icon-oppression { - &:before { - content: '\E690'; - } -} -.game-icon-paranoia { - &:before { - content: '\E691'; - } -} -.game-icon-sensuousness { - &:before { - content: '\E692'; - } -} -.game-icon-sleepy { - &:before { - content: '\E693'; - } -} -.game-icon-sly { - &:before { - content: '\E694'; - } -} -.game-icon-smitten { - &:before { - content: '\E695'; - } -} -.game-icon-stoned-skull { - &:before { - content: '\E696'; - } -} -.game-icon-strong { - &:before { - content: '\E697'; - } -} -.game-icon-surprised-skull { - &:before { - content: '\E698'; - } -} -.game-icon-surprised { - &:before { - content: '\E699'; - } -} -.game-icon-suspicious { - &:before { - content: '\E69A'; - } -} -.game-icon-temptation { - &:before { - content: '\E69B'; - } -} -.game-icon-terror { - &:before { - content: '\E69C'; - } -} -.game-icon-worried-eyes { - &:before { - content: '\E69D'; - } -} -.game-icon-cement-shoes { - &:before { - content: '\E69E'; - } -} -.game-icon-knockout { - &:before { - content: '\E69F'; - } -} -.game-icon-smoke-bomb { - &:before { - content: '\E6A0'; - } -} -.game-icon-barbecue { - &:before { - content: '\E6A1'; - } -} -.game-icon-chimney { - &:before { - content: '\E6A2'; - } -} -.game-icon-cigar { - &:before { - content: '\E6A3'; - } -} -.game-icon-cigarette { - &:before { - content: '\E6A4'; - } -} -.game-icon-nuclear-plant { - &:before { - content: '\E6A5'; - } -} -.game-icon-smoking-pipe { - &:before { - content: '\E6A6'; - } -} -.game-icon-smoking-volcano { - &:before { - content: '\E6A7'; - } -} -.game-icon-steam-blast { - &:before { - content: '\E6A8'; - } -} -.game-icon-steam { - &:before { - content: '\E6A9'; - } -} -.game-icon-aerosol { - &:before { - content: '\E6AA'; - } -} -.game-icon-bottle-vapors { - &:before { - content: '\E6AB'; - } -} -.game-icon-bubbling-bowl { - &:before { - content: '\E6AC'; - } -} -.game-icon-cloudy-fork { - &:before { - content: '\E6AD'; - } -} -.game-icon-fizzing-flask { - &:before { - content: '\E6AE'; - } -} -.game-icon-fluffy-swirl { - &:before { - content: '\E6AF'; - } -} -.game-icon-fragrance { - &:before { - content: '\E6B0'; - } -} -.game-icon-incense { - &:before { - content: '\E6B1'; - } -} -.game-icon-poison-gas { - &:before { - content: '\E6B2'; - } -} -.game-icon-smoking-finger { - &:before { - content: '\E6B3'; - } -} -.game-icon-smoking-orb { - &:before { - content: '\E6B4'; - } -} -.game-icon-poison-cloud { - &:before { - content: '\E6B5'; - } -} -.game-icon-bird-cage { - &:before { - content: '\E6B6'; - } -} -.game-icon-bird-house { - &:before { - content: '\E6B7'; - } -} -.game-icon-chicken-oven { - &:before { - content: '\E6B8'; - } -} -.game-icon-cuauhtli { - &:before { - content: '\E6B9'; - } -} -.game-icon-duck-palm { - &:before { - content: '\E6BA'; - } -} -.game-icon-eating-pelican { - &:before { - content: '\E6BB'; - } -} -.game-icon-egyptian-bird { - &:before { - content: '\E6BC'; - } -} -.game-icon-fried-eggs { - &:before { - content: '\E6BD'; - } -} -.game-icon-goose { - &:before { - content: '\E6BE'; - } -} -.game-icon-hummingbird { - &:before { - content: '\E6BF'; - } -} -.game-icon-ibis { - &:before { - content: '\E6C0'; - } -} -.game-icon-incubator { - &:before { - content: '\E6C1'; - } -} -.game-icon-kiwi-bird { - &:before { - content: '\E6C2'; - } -} -.game-icon-nest-birds { - &:before { - content: '\E6C3'; - } -} -.game-icon-nest-eggs { - &:before { - content: '\E6C4'; - } -} -.game-icon-new-born { - &:before { - content: '\E6C5'; - } -} -.game-icon-ostrich { - &:before { - content: '\E6C6'; - } -} -.game-icon-plastic-duck { - &:before { - content: '\E6C7'; - } -} -.game-icon-shoebill-stork { - &:before { - content: '\E6C8'; - } -} -.game-icon-stork-delivery { - &:before { - content: '\E6C9'; - } -} -.game-icon-swallow-2 { - &:before { - content: '\E6CA'; - } -} -.game-icon-bird-claw { - &:before { - content: '\E6CB'; - } -} -.game-icon-bird-limb { - &:before { - content: '\E6CC'; - } -} -.game-icon-bird-mask { - &:before { - content: '\E6CD'; - } -} -.game-icon-dove { - &:before { - content: '\E6CE'; - } -} -.game-icon-egg-clutch { - &:before { - content: '\E6CF'; - } -} -.game-icon-falling-ovoid { - &:before { - content: '\E6D0'; - } -} -.game-icon-feather { - &:before { - content: '\E6D1'; - } -} -.game-icon-feathered-wing { - &:before { - content: '\E6D2'; - } -} -.game-icon-scarecrow { - &:before { - content: '\E6D3'; - } -} -.game-icon-sparrow { - &:before { - content: '\E6D4'; - } -} -.game-icon-two-feathers { - &:before { - content: '\E6D5'; - } -} -.game-icon-winged-leg { - &:before { - content: '\E6D6'; - } -} -.game-icon-fish-cooked { - &:before { - content: '\E6D7'; - } -} -.game-icon-fried-fish { - &:before { - content: '\E6D8'; - } -} -.game-icon-aquarium { - &:before { - content: '\E6D9'; - } -} -.game-icon-canned-fish { - &:before { - content: '\E6DA'; - } -} -.game-icon-circling-fish { - &:before { - content: '\E6DB'; - } -} -.game-icon-double-fish { - &:before { - content: '\E6DC'; - } -} -.game-icon-eel { - &:before { - content: '\E6DD'; - } -} -.game-icon-fish-bucket { - &:before { - content: '\E6DE'; - } -} -.game-icon-fish-eggs { - &:before { - content: '\E6DF'; - } -} -.game-icon-fish-escape { - &:before { - content: '\E6E0'; - } -} -.game-icon-fish-scales { - &:before { - content: '\E6E1'; - } -} -.game-icon-fishing-jig { - &:before { - content: '\E6E2'; - } -} -.game-icon-fishing-lure { - &:before { - content: '\E6E3'; - } -} -.game-icon-flatfish { - &:before { - content: '\E6E4'; - } -} -.game-icon-lucky-fisherman { - &:before { - content: '\E6E5'; - } -} -.game-icon-piranha { - &:before { - content: '\E6E6'; - } -} -.game-icon-school-of-fish { - &:before { - content: '\E6E7'; - } -} -.game-icon-sushis { - &:before { - content: '\E6E8'; - } -} -.game-icon-tadpole { - &:before { - content: '\E6E9'; - } -} -.game-icon-tropical-fish { - &:before { - content: '\E6EA'; - } -} -.game-icon-salmon { - &:before { - content: '\E6EB'; - } -} -.game-icon-fairy-wings { - &:before { - content: '\E6EC'; - } -} -.game-icon-flying-target { - &:before { - content: '\E6ED'; - } -} -.game-icon-hand-wing { - &:before { - content: '\E6EE'; - } -} -.game-icon-heart-wings { - &:before { - content: '\E6EF'; - } -} -.game-icon-pterodactylus { - &:before { - content: '\E6F0'; - } -} -.game-icon-spiky-wing { - &:before { - content: '\E6F1'; - } -} -.game-icon-angel-outfit { - &:before { - content: '\E6F2'; - } -} -.game-icon-angel-wings { - &:before { - content: '\E6F3'; - } -} -.game-icon-bat-blade { - &:before { - content: '\E6F4'; - } -} -.game-icon-curly-wing { - &:before { - content: '\E6F5'; - } -} -.game-icon-fluffy-wing { - &:before { - content: '\E6F6'; - } -} -.game-icon-holy-grail { - &:before { - content: '\E6F7'; - } -} -.game-icon-quill { - &:before { - content: '\E6F8'; - } -} -.game-icon-wing-cloak { - &:before { - content: '\E6F9'; - } -} -.game-icon-winged-emblem { - &:before { - content: '\E6FA'; - } -} -.game-icon-evil-wings { - &:before { - content: '\E6FB'; - } -} -.game-icon-tumulus { - &:before { - content: '\E6FC'; - } -} -.game-icon-death-juice { - &:before { - content: '\E6FD'; - } -} -.game-icon-egyptian-urns { - &:before { - content: '\E6FE'; - } -} -.game-icon-grave-flowers { - &:before { - content: '\E6FF'; - } -} -.game-icon-graveyard { - &:before { - content: '\E700'; - } -} -.game-icon-half-dead { - &:before { - content: '\E701'; - } -} -.game-icon-morgue-feet { - &:before { - content: '\E702'; - } -} -.game-icon-sarcophagus { - &:before { - content: '\E703'; - } -} -.game-icon-skeletal-hand { - &:before { - content: '\E704'; - } -} -.game-icon-slipknot { - &:before { - content: '\E705'; - } -} -.game-icon-carrion { - &:before { - content: '\E706'; - } -} -.game-icon-coffin { - &:before { - content: '\E707'; - } -} -.game-icon-dead-eye { - &:before { - content: '\E708'; - } -} -.game-icon-dead-wood { - &:before { - content: '\E709'; - } -} -.game-icon-death-zone { - &:before { - content: '\E70A'; - } -} -.game-icon-decapitation { - &:before { - content: '\E70B'; - } -} -.game-icon-gibbet { - &:before { - content: '\E70C'; - } -} -.game-icon-guillotine { - &:before { - content: '\E70D'; - } -} -.game-icon-internal-injury { - &:before { - content: '\E70E'; - } -} -.game-icon-life-in-the-balance { - &:before { - content: '\E70F'; - } -} -.game-icon-pirate-grave { - &:before { - content: '\E710'; - } -} -.game-icon-reaper-scythe { - &:before { - content: '\E711'; - } -} -.game-icon-tombstone { - &:before { - content: '\E712'; - } -} -.game-icon-suicide { - &:before { - content: '\E713'; - } -} -.game-icon-telefrag { - &:before { - content: '\E714'; - } -} -.game-icon-tombstone-2 { - &:before { - content: '\E715'; - } -} -.game-icon-hasty-grave { - &:before { - content: '\E716'; - } -} -.game-icon-raise-zombie { - &:before { - content: '\E717'; - } -} -.game-icon-bad-breath { - &:before { - content: '\E718'; - } -} -.game-icon-chainsaw { - &:before { - content: '\E719'; - } -} -.game-icon-jerrycan { - &:before { - content: '\E71A'; - } -} -.game-icon-brain { - &:before { - content: '\E71B'; - } -} -.game-icon-dark-squad { - &:before { - content: '\E71C'; - } -} -.game-icon-evil-hand { - &:before { - content: '\E71D'; - } -} -.game-icon-ragged-wound { - &:before { - content: '\E71E'; - } -} -.game-icon-asian-lantern { - &:before { - content: '\E71F'; - } -} -.game-icon-bed-lamp { - &:before { - content: '\E720'; - } -} -.game-icon-ceiling-light { - &:before { - content: '\E721'; - } -} -.game-icon-double-street-lights { - &:before { - content: '\E722'; - } -} -.game-icon-dungeon-gate { - &:before { - content: '\E723'; - } -} -.game-icon-dungeon-light { - &:before { - content: '\E724'; - } -} -.game-icon-flexible-lamp { - &:before { - content: '\E725'; - } -} -.game-icon-fog-light { - &:before { - content: '\E726'; - } -} -.game-icon-inspiration { - &:before { - content: '\E727'; - } -} -.game-icon-led { - &:before { - content: '\E728'; - } -} -.game-icon-light-projector { - &:before { - content: '\E729'; - } -} -.game-icon-old-lantern { - &:before { - content: '\E72A'; - } -} -.game-icon-prism { - &:before { - content: '\E72B'; - } -} -.game-icon-smart { - &:before { - content: '\E72C'; - } -} -.game-icon-street-light { - &:before { - content: '\E72D'; - } -} -.game-icon-wall-light { - &:before { - content: '\E72E'; - } -} -.game-icon-candle-skull { - &:before { - content: '\E72F'; - } -} -.game-icon-desk-lamp { - &:before { - content: '\E730'; - } -} -.game-icon-double-face-mask { - &:before { - content: '\E731'; - } -} -.game-icon-duality { - &:before { - content: '\E732'; - } -} -.game-icon-eclipse { - &:before { - content: '\E733'; - } -} -.game-icon-expanded-rays { - &:before { - content: '\E734'; - } -} -.game-icon-explosion-rays { - &:before { - content: '\E735'; - } -} -.game-icon-explosive-materials { - &:before { - content: '\E736'; - } -} -.game-icon-gooey-eyed-sun { - &:before { - content: '\E737'; - } -} -.game-icon-interstellar-path { - &:before { - content: '\E738'; - } -} -.game-icon-lantern { - &:before { - content: '\E739'; - } -} -.game-icon-laser-precision { - &:before { - content: '\E73A'; - } -} -.game-icon-laser-sparks { - &:before { - content: '\E73B'; - } -} -.game-icon-laserburn { - &:before { - content: '\E73C'; - } -} -.game-icon-light-bulb { - &:before { - content: '\E73D'; - } -} -.game-icon-magic-lamp { - &:before { - content: '\E73E'; - } -} -.game-icon-paper-lantern { - &:before { - content: '\E73F'; - } -} -.game-icon-radar-sweep { - &:before { - content: '\E740'; - } -} -.game-icon-shiny-entrance { - &:before { - content: '\E741'; - } -} -.game-icon-sun { - &:before { - content: '\E742'; - } -} -.game-icon-sunbeams { - &:before { - content: '\E743'; - } -} -.game-icon-sundial { - &:before { - content: '\E744'; - } -} -.game-icon-two-shadows { - &:before { - content: '\E745'; - } -} -.game-icon-unlit-candelabra { - &:before { - content: '\E746'; - } -} -.game-icon-laser-burst { - &:before { - content: '\E747'; - } -} -.game-icon-camping-tent { - &:before { - content: '\E748'; - } -} -.game-icon-cave-entrance { - &:before { - content: '\E749'; - } -} -.game-icon-circle-forest { - &:before { - content: '\E74A'; - } -} -.game-icon-desert { - &:before { - content: '\E74B'; - } -} -.game-icon-forest-camp { - &:before { - content: '\E74C'; - } -} -.game-icon-forest { - &:before { - content: '\E74D'; - } -} -.game-icon-fuji { - &:before { - content: '\E74E'; - } -} -.game-icon-grass { - &:before { - content: '\E74F'; - } -} -.game-icon-high-grass { - &:before { - content: '\E750'; - } -} -.game-icon-hills { - &:before { - content: '\E751'; - } -} -.game-icon-jungle { - &:before { - content: '\E752'; - } -} -.game-icon-monument-valley { - &:before { - content: '\E753'; - } -} -.game-icon-mountain-cave { - &:before { - content: '\E754'; - } -} -.game-icon-mountain-road { - &:before { - content: '\E755'; - } -} -.game-icon-oasis { - &:before { - content: '\E756'; - } -} -.game-icon-park-bench { - &:before { - content: '\E757'; - } -} -.game-icon-path-tile { - &:before { - content: '\E758'; - } -} -.game-icon-river { - &:before { - content: '\E759'; - } -} -.game-icon-stone-stack { - &:before { - content: '\E75A'; - } -} -.game-icon-summits { - &:before { - content: '\E75B'; - } -} -.game-icon-sunrise-2 { - &:before { - content: '\E75C'; - } -} -.game-icon-sunset { - &:before { - content: '\E75D'; - } -} -.game-icon-swamp { - &:before { - content: '\E75E'; - } -} -.game-icon-uluru { - &:before { - content: '\E75F'; - } -} -.game-icon-underground-cave { - &:before { - content: '\E760'; - } -} -.game-icon-waterfall { - &:before { - content: '\E761'; - } -} -.game-icon-earth-crack { - &:before { - content: '\E762'; - } -} -.game-icon-field { - &:before { - content: '\E763'; - } -} -.game-icon-flowers { - &:before { - content: '\E764'; - } -} -.game-icon-mountains { - &:before { - content: '\E765'; - } -} -.game-icon-mountaintop { - &:before { - content: '\E766'; - } -} -.game-icon-peaks { - &:before { - content: '\E767'; - } -} -.game-icon-pine-tree { - &:before { - content: '\E768'; - } -} -.game-icon-quicksand { - &:before { - content: '\E769'; - } -} -.game-icon-stalagtite { - &:before { - content: '\E76A'; - } -} -.game-icon-three-leaves { - &:before { - content: '\E76B'; - } -} -.game-icon-valley { - &:before { - content: '\E76C'; - } -} -.game-icon-wind-hole { - &:before { - content: '\E76D'; - } -} -.game-icon-axe-in-log { - &:before { - content: '\E76E'; - } -} -.game-icon-bamboo-fountain { - &:before { - content: '\E76F'; - } -} -.game-icon-barrel { - &:before { - content: '\E770'; - } -} -.game-icon-berry-bush { - &:before { - content: '\E771'; - } -} -.game-icon-bonsai-tree { - &:before { - content: '\E772'; - } -} -.game-icon-chestnut-leaf { - &:before { - content: '\E773'; - } -} -.game-icon-chisel { - &:before { - content: '\E774'; - } -} -.game-icon-crosscut-saw { - &:before { - content: '\E775'; - } -} -.game-icon-crucifix { - &:before { - content: '\E776'; - } -} -.game-icon-deku-tree { - &:before { - content: '\E777'; - } -} -.game-icon-dough-roller { - &:before { - content: '\E778'; - } -} -.game-icon-empty-wood-bucket-handle { - &:before { - content: '\E779'; - } -} -.game-icon-empty-wood-bucket { - &:before { - content: '\E77A'; - } -} -.game-icon-forest-entrance { - &:before { - content: '\E77B'; - } -} -.game-icon-fruit-tree { - &:before { - content: '\E77C'; - } -} -.game-icon-full-wood-bucket-handle { - &:before { - content: '\E77D'; - } -} -.game-icon-full-wood-bucket { - &:before { - content: '\E77E'; - } -} -.game-icon-greenhouse { - &:before { - content: '\E77F'; - } -} -.game-icon-half-log { - &:before { - content: '\E780'; - } -} -.game-icon-hand-saw { - &:before { - content: '\E781'; - } -} -.game-icon-hanging-sign { - &:before { - content: '\E782'; - } -} -.game-icon-log { - &:before { - content: '\E783'; - } -} -.game-icon-oak-leaf { - &:before { - content: '\E784'; - } -} -.game-icon-packed-planks { - &:before { - content: '\E785'; - } -} -.game-icon-palm-tree { - &:before { - content: '\E786'; - } -} -.game-icon-planks { - &:before { - content: '\E787'; - } -} -.game-icon-solid-leaf { - &:before { - content: '\E788'; - } -} -.game-icon-spiked-trunk { - &:before { - content: '\E789'; - } -} -.game-icon-stakes-fence { - &:before { - content: '\E78A'; - } -} -.game-icon-stick-frame { - &:before { - content: '\E78B'; - } -} -.game-icon-stump-regrowth { - &:before { - content: '\E78C'; - } -} -.game-icon-table { - &:before { - content: '\E78D'; - } -} -.game-icon-totem { - &:before { - content: '\E78E'; - } -} -.game-icon-tree-door { - &:before { - content: '\E78F'; - } -} -.game-icon-tree-roots { - &:before { - content: '\E790'; - } -} -.game-icon-tree-swing { - &:before { - content: '\E791'; - } -} -.game-icon-trunk-mushroom { - &:before { - content: '\E792'; - } -} -.game-icon-watchtower { - &:before { - content: '\E793'; - } -} -.game-icon-water-diviner-stick { - &:before { - content: '\E794'; - } -} -.game-icon-wood-beam { - &:before { - content: '\E795'; - } -} -.game-icon-wood-cabin { - &:before { - content: '\E796'; - } -} -.game-icon-wood-frame { - &:before { - content: '\E797'; - } -} -.game-icon-wood-pile { - &:before { - content: '\E798'; - } -} -.game-icon-wood-stick { - &:before { - content: '\E799'; - } -} -.game-icon-wooden-clogs { - &:before { - content: '\E79A'; - } -} -.game-icon-wooden-crate { - &:before { - content: '\E79B'; - } -} -.game-icon-wooden-pegleg { - &:before { - content: '\E79C'; - } -} -.game-icon-acorn { - &:before { - content: '\E79D'; - } -} -.game-icon-beech { - &:before { - content: '\E79E'; - } -} -.game-icon-circular-sawblade { - &:before { - content: '\E79F'; - } -} -.game-icon-curled-leaf { - &:before { - content: '\E7A0'; - } -} -.game-icon-falling-leaf { - &:before { - content: '\E7A1'; - } -} -.game-icon-leaf-swirl { - &:before { - content: '\E7A2'; - } -} -.game-icon-linden-leaf { - &:before { - content: '\E7A3'; - } -} -.game-icon-maple-leaf { - &:before { - content: '\E7A4'; - } -} -.game-icon-oak { - &:before { - content: '\E7A5'; - } -} -.game-icon-root-tip { - &:before { - content: '\E7A6'; - } -} -.game-icon-totem-mask { - &:before { - content: '\E7A7'; - } -} -.game-icon-tree-branch { - &:before { - content: '\E7A8'; - } -} -.game-icon-tribal-mask { - &:before { - content: '\E7A9'; - } -} -.game-icon-vine-leaf { - &:before { - content: '\E7AA'; - } -} -.game-icon-wood-axe { - &:before { - content: '\E7AB'; - } -} -.game-icon-wooden-door { - &:before { - content: '\E7AC'; - } -} -.game-icon-wooden-fence { - &:before { - content: '\E7AD'; - } -} -.game-icon-zigzag-leaf { - &:before { - content: '\E7AE'; - } -} -.game-icon-circular-saw { - &:before { - content: '\E7AF'; - } -} -.game-icon-logging { - &:before { - content: '\E7B0'; - } -} -.game-icon-candlestick-phone { - &:before { - content: '\E7B1'; - } -} -.game-icon-coal-pile { - &:before { - content: '\E7B2'; - } -} -.game-icon-corset { - &:before { - content: '\E7B3'; - } -} -.game-icon-lorgnette { - &:before { - content: '\E7B4'; - } -} -.game-icon-pipes { - &:before { - content: '\E7B5'; - } -} -.game-icon-steampunk-goggles { - &:before { - content: '\E7B6'; - } -} -.game-icon-tower-bridge { - &:before { - content: '\E7B7'; - } -} -.game-icon-clockwork { - &:before { - content: '\E7B8'; - } -} -.game-icon-cog { - &:before { - content: '\E7B9'; - } -} -.game-icon-cogsplosion { - &:before { - content: '\E7BA'; - } -} -.game-icon-gears { - &:before { - content: '\E7BB'; - } -} -.game-icon-pokecog { - &:before { - content: '\E7BC'; - } -} -.game-icon-spectacles { - &:before { - content: '\E7BD'; - } -} -.game-icon-teapot { - &:before { - content: '\E7BE'; - } -} -.game-icon-umbrella { - &:before { - content: '\E7BF'; - } -} -.game-icon-pocket-watch { - &:before { - content: '\E7C0'; - } -} -.game-icon-old-king { - &:before { - content: '\E7C1'; - } -} -.game-icon-ninja-head { - &:before { - content: '\E7C2'; - } -} -.game-icon-air-man { - &:before { - content: '\E7C3'; - } -} -.game-icon-baby-face { - &:before { - content: '\E7C4'; - } -} -.game-icon-blindfold { - &:before { - content: '\E7C5'; - } -} -.game-icon-brain-leak { - &:before { - content: '\E7C6'; - } -} -.game-icon-cleopatra { - &:before { - content: '\E7C7'; - } -} -.game-icon-clown { - &:before { - content: '\E7C8'; - } -} -.game-icon-egyptian-profile { - &:before { - content: '\E7C9'; - } -} -.game-icon-eyepatch { - &:before { - content: '\E7CA'; - } -} -.game-icon-headband-knot { - &:before { - content: '\E7CB'; - } -} -.game-icon-invisible-face { - &:before { - content: '\E7CC'; - } -} -.game-icon-mecha-head { - &:before { - content: '\E7CD'; - } -} -.game-icon-mecha-mask { - &:before { - content: '\E7CE'; - } -} -.game-icon-metal-golem-head { - &:before { - content: '\E7CF'; - } -} -.game-icon-nose-front { - &:before { - content: '\E7D0'; - } -} -.game-icon-nose-side { - &:before { - content: '\E7D1'; - } -} -.game-icon-nurse-female { - &:before { - content: '\E7D2'; - } -} -.game-icon-nurse-male { - &:before { - content: '\E7D3'; - } -} -.game-icon-pirate-captain { - &:before { - content: '\E7D4'; - } -} -.game-icon-plane-pilot { - &:before { - content: '\E7D5'; - } -} -.game-icon-portrait { - &:before { - content: '\E7D6'; - } -} -.game-icon-quick-man { - &:before { - content: '\E7D7'; - } -} -.game-icon-robot-antennas { - &:before { - content: '\E7D8'; - } -} -.game-icon-robot-helmet { - &:before { - content: '\E7D9'; - } -} -.game-icon-star-struck { - &:before { - content: '\E7DA'; - } -} -.game-icon-sunglasses { - &:before { - content: '\E7DB'; - } -} -.game-icon-viking-head { - &:before { - content: '\E7DC'; - } -} -.game-icon-alien-stare { - &:before { - content: '\E7DD'; - } -} -.game-icon-beard { - &:before { - content: '\E7DE'; - } -} -.game-icon-brain-stem { - &:before { - content: '\E7DF'; - } -} -.game-icon-brainstorm { - &:before { - content: '\E7E0'; - } -} -.game-icon-comb { - &:before { - content: '\E7E1'; - } -} -.game-icon-diamonds-smile { - &:before { - content: '\E7E2'; - } -} -.game-icon-doctor-face { - &:before { - content: '\E7E3'; - } -} -.game-icon-frontal-lobe { - &:before { - content: '\E7E4'; - } -} -.game-icon-gaze { - &:before { - content: '\E7E5'; - } -} -.game-icon-iron-mask { - &:before { - content: '\E7E6'; - } -} -.game-icon-mad-scientist { - &:before { - content: '\E7E7'; - } -} -.game-icon-nailed-head { - &:before { - content: '\E7E8'; - } -} -.game-icon-ninja-mask { - &:before { - content: '\E7E9'; - } -} -.game-icon-one-eyed { - &:before { - content: '\E7EA'; - } -} -.game-icon-pig-face { - &:before { - content: '\E7EB'; - } -} -.game-icon-psychic-waves { - &:before { - content: '\E7EC'; - } -} -.game-icon-pummeled { - &:before { - content: '\E7ED'; - } -} -.game-icon-pumpkin-lantern { - &:before { - content: '\E7EE'; - } -} -.game-icon-pumpkin-mask { - &:before { - content: '\E7EF'; - } -} -.game-icon-razor-blade { - &:before { - content: '\E7F0'; - } -} -.game-icon-spectacle-lenses { - &:before { - content: '\E7F1'; - } -} -.game-icon-spiked-halo { - &:before { - content: '\E7F2'; - } -} -.game-icon-tear-tracks { - &:before { - content: '\E7F3'; - } -} -.game-icon-tooth { - &:before { - content: '\E7F4'; - } -} -.game-icon-overkill { - &:before { - content: '\E7F5'; - } -} -.game-icon-headshot-2 { - &:before { - content: '\E7F6'; - } -} -.game-icon-cobra { - &:before { - content: '\E7F7'; - } -} -.game-icon-dimetrodon { - &:before { - content: '\E7F8'; - } -} -.game-icon-diplodocus { - &:before { - content: '\E7F9'; - } -} -.game-icon-frog-foot { - &:before { - content: '\E7FA'; - } -} -.game-icon-ninja-velociraptor { - &:before { - content: '\E7FB'; - } -} -.game-icon-parasaurolophus { - &:before { - content: '\E7FC'; - } -} -.game-icon-rattlesnake { - &:before { - content: '\E7FD'; - } -} -.game-icon-reptile-tail { - &:before { - content: '\E7FE'; - } -} -.game-icon-sand-snake { - &:before { - content: '\E7FF'; - } -} -.game-icon-sauropod-head { - &:before { - content: '\E800'; - } -} -.game-icon-snake-egg { - &:before { - content: '\E801'; - } -} -.game-icon-snake-jar { - &:before { - content: '\E802'; - } -} -.game-icon-snake-spiral { - &:before { - content: '\E803'; - } -} -.game-icon-snake-tongue { - &:before { - content: '\E804'; - } -} -.game-icon-stegosaurus-scales { - &:before { - content: '\E805'; - } -} -.game-icon-t-rex-skull { - &:before { - content: '\E806'; - } -} -.game-icon-triceratops-head { - &:before { - content: '\E807'; - } -} -.game-icon-velociraptor-tracks { - &:before { - content: '\E808'; - } -} -.game-icon-velociraptor { - &:before { - content: '\E809'; - } -} -.game-icon-lizard-tongue { - &:before { - content: '\E80A'; - } -} -.game-icon-cobra-2 { - &:before { - content: '\E80B'; - } -} -.game-icon-defensive-wall { - &:before { - content: '\E80C'; - } -} -.game-icon-3d-stairs { - &:before { - content: '\E80D'; - } -} -.game-icon-airtight-hatch { - &:before { - content: '\E80E'; - } -} -.game-icon-arabic-door { - &:before { - content: '\E80F'; - } -} -.game-icon-arc-triomphe { - &:before { - content: '\E810'; - } -} -.game-icon-ascending-block { - &:before { - content: '\E811'; - } -} -.game-icon-bank { - &:before { - content: '\E812'; - } -} -.game-icon-barn { - &:before { - content: '\E813'; - } -} -.game-icon-barricade { - &:before { - content: '\E814'; - } -} -.game-icon-barrier { - &:before { - content: '\E815'; - } -} -.game-icon-base-dome { - &:before { - content: '\E816'; - } -} -.game-icon-block-house { - &:before { - content: '\E817'; - } -} -.game-icon-boxing-ring { - &:before { - content: '\E818'; - } -} -.game-icon-brick-pile { - &:before { - content: '\E819'; - } -} -.game-icon-brick-wall { - &:before { - content: '\E81A'; - } -} -.game-icon-broken-wall { - &:before { - content: '\E81B'; - } -} -.game-icon-byzantin-temple { - &:before { - content: '\E81C'; - } -} -.game-icon-cage { - &:before { - content: '\E81D'; - } -} -.game-icon-carousel { - &:before { - content: '\E81E'; - } -} -.game-icon-castle-ruins { - &:before { - content: '\E81F'; - } -} -.game-icon-castle { - &:before { - content: '\E820'; - } -} -.game-icon-church { - &:before { - content: '\E821'; - } -} -.game-icon-closed-doors { - &:before { - content: '\E822'; - } -} -.game-icon-concrete-bag { - &:before { - content: '\E823'; - } -} -.game-icon-congress { - &:before { - content: '\E824'; - } -} -.game-icon-control-tower { - &:before { - content: '\E825'; - } -} -.game-icon-crane { - &:before { - content: '\E826'; - } -} -.game-icon-crypt-entrance { - &:before { - content: '\E827'; - } -} -.game-icon-dam { - &:before { - content: '\E828'; - } -} -.game-icon-djed-pillar { - &:before { - content: '\E829'; - } -} -.game-icon-egyptian-pyramids { - &:before { - content: '\E82A'; - } -} -.game-icon-egyptian-temple { - &:before { - content: '\E82B'; - } -} -.game-icon-elevator { - &:before { - content: '\E82C'; - } -} -.game-icon-entry-door { - &:before { - content: '\E82D'; - } -} -.game-icon-escalator { - &:before { - content: '\E82E'; - } -} -.game-icon-evil-tower { - &:before { - content: '\E82F'; - } -} -.game-icon-exit-door { - &:before { - content: '\E830'; - } -} -.game-icon-factory { - &:before { - content: '\E831'; - } -} -.game-icon-family-house { - &:before { - content: '\E832'; - } -} -.game-icon-floating-platforms { - &:before { - content: '\E833'; - } -} -.game-icon-gate { - &:before { - content: '\E834'; - } -} -.game-icon-goblin-camp { - &:before { - content: '\E835'; - } -} -.game-icon-gold-mine { - &:before { - content: '\E836'; - } -} -.game-icon-granary { - &:before { - content: '\E837'; - } -} -.game-icon-great-pyramid { - &:before { - content: '\E838'; - } -} -.game-icon-habitat-dome { - &:before { - content: '\E839'; - } -} -.game-icon-hill-fort { - &:before { - content: '\E83A'; - } -} -.game-icon-hobbit-dwelling { - &:before { - content: '\E83B'; - } -} -.game-icon-hospital { - &:before { - content: '\E83C'; - } -} -.game-icon-house { - &:before { - content: '\E83D'; - } -} -.game-icon-hut { - &:before { - content: '\E83E'; - } -} -.game-icon-huts-village { - &:before { - content: '\E83F'; - } -} -.game-icon-i-beam { - &:before { - content: '\E840'; - } -} -.game-icon-igloo { - &:before { - content: '\E841'; - } -} -.game-icon-indian-palace { - &:before { - content: '\E842'; - } -} -.game-icon-kid-slide { - &:before { - content: '\E843'; - } -} -.game-icon-ladder { - &:before { - content: '\E844'; - } -} -.game-icon-louvre-pyramid { - &:before { - content: '\E845'; - } -} -.game-icon-mayan-pyramid { - &:before { - content: '\E846'; - } -} -.game-icon-medieval-barracks { - &:before { - content: '\E847'; - } -} -.game-icon-medieval-gate { - &:before { - content: '\E848'; - } -} -.game-icon-moai { - &:before { - content: '\E849'; - } -} -.game-icon-modern-city { - &:before { - content: '\E84A'; - } -} -.game-icon-mushroom-house { - &:before { - content: '\E84B'; - } -} -.game-icon-obelisk { - &:before { - content: '\E84C'; - } -} -.game-icon-observatory { - &:before { - content: '\E84D'; - } -} -.game-icon-oil-pump { - &:before { - content: '\E84E'; - } -} -.game-icon-oil-rig { - &:before { - content: '\E84F'; - } -} -.game-icon-pagoda { - &:before { - content: '\E850'; - } -} -.game-icon-pisa-tower { - &:before { - content: '\E851'; - } -} -.game-icon-post-office { - &:before { - content: '\E852'; - } -} -.game-icon-pylon { - &:before { - content: '\E853'; - } -} -.game-icon-refinery { - &:before { - content: '\E854'; - } -} -.game-icon-rempart { - &:before { - content: '\E855'; - } -} -.game-icon-round-silo { - &:before { - content: '\E856'; - } -} -.game-icon-saint-basil-cathedral { - &:before { - content: '\E857'; - } -} -.game-icon-saloon-doors { - &:before { - content: '\E858'; - } -} -.game-icon-saloon { - &:before { - content: '\E859'; - } -} -.game-icon-samara-mosque { - &:before { - content: '\E85A'; - } -} -.game-icon-secret-door { - &:before { - content: '\E85B'; - } -} -.game-icon-shinto-shrine { - &:before { - content: '\E85C'; - } -} -.game-icon-shop { - &:before { - content: '\E85D'; - } -} -.game-icon-space-needle { - &:before { - content: '\E85E'; - } -} -.game-icon-spooky-house { - &:before { - content: '\E85F'; - } -} -.game-icon-stairs { - &:before { - content: '\E860'; - } -} -.game-icon-stockpiles { - &:before { - content: '\E861'; - } -} -.game-icon-stone-wall { - &:before { - content: '\E862'; - } -} -.game-icon-sverd-i-fjell { - &:before { - content: '\E863'; - } -} -.game-icon-sydney-opera-house { - &:before { - content: '\E864'; - } -} -.game-icon-tee-pipe { - &:before { - content: '\E865'; - } -} -.game-icon-temple-gate { - &:before { - content: '\E866'; - } -} -.game-icon-theater-curtains { - &:before { - content: '\E867'; - } -} -.game-icon-tipi { - &:before { - content: '\E868'; - } -} -.game-icon-tower-flag { - &:before { - content: '\E869'; - } -} -.game-icon-traffic-cone { - &:before { - content: '\E86A'; - } -} -.game-icon-triple-gate { - &:before { - content: '\E86B'; - } -} -.game-icon-tv-tower { - &:before { - content: '\E86C'; - } -} -.game-icon-viking-church { - &:before { - content: '\E86D'; - } -} -.game-icon-viking-longhouse { - &:before { - content: '\E86E'; - } -} -.game-icon-village { - &:before { - content: '\E86F'; - } -} -.game-icon-warp-pipe { - &:before { - content: '\E870'; - } -} -.game-icon-water-tank { - &:before { - content: '\E871'; - } -} -.game-icon-water-tower { - &:before { - content: '\E872'; - } -} -.game-icon-well { - &:before { - content: '\E873'; - } -} -.game-icon-wheelbarrow { - &:before { - content: '\E874'; - } -} -.game-icon-wind-turbine { - &:before { - content: '\E875'; - } -} -.game-icon-windmill { - &:before { - content: '\E876'; - } -} -.game-icon-window { - &:before { - content: '\E877'; - } -} -.game-icon-windpump { - &:before { - content: '\E878'; - } -} -.game-icon-castle-2 { - &:before { - content: '\E879'; - } -} -.game-icon-demolish { - &:before { - content: '\E87A'; - } -} -.game-icon-fountain { - &:before { - content: '\E87B'; - } -} -.game-icon-guarded-tower { - &:before { - content: '\E87C'; - } -} -.game-icon-heart-tower { - &:before { - content: '\E87D'; - } -} -.game-icon-locked-fortress { - &:before { - content: '\E87E'; - } -} -.game-icon-magic-gate { - &:before { - content: '\E87F'; - } -} -.game-icon-magic-portal { - &:before { - content: '\E880'; - } -} -.game-icon-mucous-pillar { - &:before { - content: '\E881'; - } -} -.game-icon-portculis { - &:before { - content: '\E882'; - } -} -.game-icon-radar-dish { - &:before { - content: '\E883'; - } -} -.game-icon-stone-tower { - &:before { - content: '\E884'; - } -} -.game-icon-tower-fall { - &:before { - content: '\E885'; - } -} -.game-icon-white-tower { - &:before { - content: '\E886'; - } -} -.game-icon-wrecking-ball { - &:before { - content: '\E887'; - } -} -.game-icon-elven-castle { - &:before { - content: '\E888'; - } -} -.game-icon-arena { - &:before { - content: '\E889'; - } -} -.game-icon-brazil-flag { - &:before { - content: '\E88A'; - } -} -.game-icon-checkered-flag { - &:before { - content: '\E88B'; - } -} -.game-icon-conqueror { - &:before { - content: '\E88C'; - } -} -.game-icon-corner-flag { - &:before { - content: '\E88D'; - } -} -.game-icon-european-flag { - &:before { - content: '\E88E'; - } -} -.game-icon-golf-flag { - &:before { - content: '\E88F'; - } -} -.game-icon-hill-conquest { - &:before { - content: '\E890'; - } -} -.game-icon-knight-banner { - &:before { - content: '\E891'; - } -} -.game-icon-level-end-flag { - &:before { - content: '\E892'; - } -} -.game-icon-party-flags { - &:before { - content: '\E893'; - } -} -.game-icon-pirate-flag { - &:before { - content: '\E894'; - } -} -.game-icon-planet-conquest { - &:before { - content: '\E895'; - } -} -.game-icon-south-africa-flag { - &:before { - content: '\E896'; - } -} -.game-icon-star-flag { - &:before { - content: '\E897'; - } -} -.game-icon-truce { - &:before { - content: '\E898'; - } -} -.game-icon-tusks-flag { - &:before { - content: '\E899'; - } -} -.game-icon-vertical-banner { - &:before { - content: '\E89A'; - } -} -.game-icon-broken-ribbon { - &:before { - content: '\E89B'; - } -} -.game-icon-flying-flag { - &:before { - content: '\E89C'; - } -} -.game-icon-spinning-ribbons { - &:before { - content: '\E89D'; - } -} -.game-icon-tattered-banner { - &:before { - content: '\E89E'; - } -} -.game-icon-curling-stone { - &:before { - content: '\E89F'; - } -} -.game-icon-frozen-body { - &:before { - content: '\E8A0'; - } -} -.game-icon-frozen-ring { - &:before { - content: '\E8A1'; - } -} -.game-icon-fur-boot { - &:before { - content: '\E8A2'; - } -} -.game-icon-hockey { - &:before { - content: '\E8A3'; - } -} -.game-icon-ice-cream-cone { - &:before { - content: '\E8A4'; - } -} -.game-icon-ice-cubes { - &:before { - content: '\E8A5'; - } -} -.game-icon-ice-iris { - &:before { - content: '\E8A6'; - } -} -.game-icon-ice-pop { - &:before { - content: '\E8A7'; - } -} -.game-icon-ice-skate { - &:before { - content: '\E8A8'; - } -} -.game-icon-ice-spell-cast { - &:before { - content: '\E8A9'; - } -} -.game-icon-melting-ice-cube { - &:before { - content: '\E8AA'; - } -} -.game-icon-ski-boot { - &:before { - content: '\E8AB'; - } -} -.game-icon-stalactites { - &:before { - content: '\E8AC'; - } -} -.game-icon-thermometer-cold { - &:before { - content: '\E8AD'; - } -} -.game-icon-winter-gloves { - &:before { - content: '\E8AE'; - } -} -.game-icon-beveled-star { - &:before { - content: '\E8AF'; - } -} -.game-icon-cold-heart { - &:before { - content: '\E8B0'; - } -} -.game-icon-eskimo { - &:before { - content: '\E8B1'; - } -} -.game-icon-frozen-block { - &:before { - content: '\E8B2'; - } -} -.game-icon-frozen-orb { - &:before { - content: '\E8B3'; - } -} -.game-icon-ice-bolt { - &:before { - content: '\E8B4'; - } -} -.game-icon-ice-bomb { - &:before { - content: '\E8B5'; - } -} -.game-icon-ice-cube { - &:before { - content: '\E8B6'; - } -} -.game-icon-icebergs { - &:before { - content: '\E8B7'; - } -} -.game-icon-icicles-aura { - &:before { - content: '\E8B8'; - } -} -.game-icon-icicles-fence { - &:before { - content: '\E8B9'; - } -} -.game-icon-snow-bottle { - &:before { - content: '\E8BA'; - } -} -.game-icon-snowflake-1 { - &:before { - content: '\E8BB'; - } -} -.game-icon-snowflake-2 { - &:before { - content: '\E8BC'; - } -} -.game-icon-snowing { - &:before { - content: '\E8BD'; - } -} -.game-icon-snowman { - &:before { - content: '\E8BE'; - } -} -.game-icon-flake { - &:before { - content: '\E8BF'; - } -} -.game-icon-hooded-assassin { - &:before { - content: '\E8C0'; - } -} -.game-icon-hooded-figure { - &:before { - content: '\E8C1'; - } -} -.game-icon-ninja-heroic-stance { - &:before { - content: '\E8C2'; - } -} -.game-icon-arm-bandage { - &:before { - content: '\E8C3'; - } -} -.game-icon-arm-sling { - &:before { - content: '\E8C4'; - } -} -.game-icon-blacksmith { - &:before { - content: '\E8C5'; - } -} -.game-icon-body-balance { - &:before { - content: '\E8C6'; - } -} -.game-icon-caveman { - &:before { - content: '\E8C7'; - } -} -.game-icon-character { - &:before { - content: '\E8C8'; - } -} -.game-icon-contortionist { - &:before { - content: '\E8C9'; - } -} -.game-icon-cook { - &:before { - content: '\E8CA'; - } -} -.game-icon-cryo-chamber { - &:before { - content: '\E8CB'; - } -} -.game-icon-egyptian-walk { - &:before { - content: '\E8CC'; - } -} -.game-icon-face-to-face { - &:before { - content: '\E8CD'; - } -} -.game-icon-farmer { - &:before { - content: '\E8CE'; - } -} -.game-icon-guards { - &:before { - content: '\E8CF'; - } -} -.game-icon-high-kick { - &:before { - content: '\E8D0'; - } -} -.game-icon-high-punch { - &:before { - content: '\E8D1'; - } -} -.game-icon-human-pyramid { - &:before { - content: '\E8D2'; - } -} -.game-icon-invisible { - &:before { - content: '\E8D3'; - } -} -.game-icon-jumping-rope { - &:before { - content: '\E8D4'; - } -} -.game-icon-knee-bandage { - &:before { - content: '\E8D5'; - } -} -.game-icon-lovers { - &:before { - content: '\E8D6'; - } -} -.game-icon-medallist { - &:before { - content: '\E8D7'; - } -} -.game-icon-mighty-force { - &:before { - content: '\E8D8'; - } -} -.game-icon-person { - &:before { - content: '\E8D9'; - } -} -.game-icon-pikeman { - &:before { - content: '\E8DA'; - } -} -.game-icon-ringmaster { - &:before { - content: '\E8DB'; - } -} -.game-icon-sleeping-bag { - &:before { - content: '\E8DC'; - } -} -.game-icon-spiked-wall { - &:before { - content: '\E8DD'; - } -} -.game-icon-strong-man { - &:before { - content: '\E8DE'; - } -} -.game-icon-sun-priest { - &:before { - content: '\E8DF'; - } -} -.game-icon-three-friends { - &:before { - content: '\E8E0'; - } -} -.game-icon-tightrope { - &:before { - content: '\E8E1'; - } -} -.game-icon-tribunal-jury { - &:before { - content: '\E8E2'; - } -} -.game-icon-vampire-cape { - &:before { - content: '\E8E3'; - } -} -.game-icon-van-damme-split { - &:before { - content: '\E8E4'; - } -} -.game-icon-vitruvian-man { - &:before { - content: '\E8E5'; - } -} -.game-icon-weight-lifting-down { - &:before { - content: '\E8E6'; - } -} -.game-icon-weight-lifting-up { - &:before { - content: '\E8E7'; - } -} -.game-icon-anatomy { - &:before { - content: '\E8E8'; - } -} -.game-icon-aura { - &:before { - content: '\E8E9'; - } -} -.game-icon-backup { - &:before { - content: '\E8EA'; - } -} -.game-icon-beams-aura { - &:before { - content: '\E8EB'; - } -} -.game-icon-body-swapping { - &:before { - content: '\E8EC'; - } -} -.game-icon-deadly-strike { - &:before { - content: '\E8ED'; - } -} -.game-icon-dna1 { - &:before { - content: '\E8EE'; - } -} -.game-icon-dna2 { - &:before { - content: '\E8EF'; - } -} -.game-icon-dozen { - &:before { - content: '\E8F0'; - } -} -.game-icon-embrassed-energy { - &:before { - content: '\E8F1'; - } -} -.game-icon-ghost-ally { - &:before { - content: '\E8F2'; - } -} -.game-icon-heart-inside { - &:before { - content: '\E8F3'; - } -} -.game-icon-heart-organ { - &:before { - content: '\E8F4'; - } -} -.game-icon-inner-self { - &:before { - content: '\E8F5'; - } -} -.game-icon-master-of-arms { - &:before { - content: '\E8F6'; - } -} -.game-icon-minions { - &:before { - content: '\E8F7'; - } -} -.game-icon-muscle-fat { - &:before { - content: '\E8F8'; - } -} -.game-icon-octoman { - &:before { - content: '\E8F9'; - } -} -.game-icon-puppet { - &:before { - content: '\E8FA'; - } -} -.game-icon-rear-aura { - &:before { - content: '\E8FB'; - } -} -.game-icon-relationship-bounds { - &:before { - content: '\E8FC'; - } -} -.game-icon-rogue { - &:before { - content: '\E8FD'; - } -} -.game-icon-shadow-follower { - &:before { - content: '\E8FE'; - } -} -.game-icon-sinking-trap { - &:before { - content: '\E8FF'; - } -} -.game-icon-skeleton-inside { - &:before { - content: '\E900'; - } -} -.game-icon-split-body { - &:before { - content: '\E901'; - } -} -.game-icon-static-guard { - &:before { - content: '\E902'; - } -} -.game-icon-sword-tie { - &:before { - content: '\E903'; - } -} -.game-icon-target-dummy { - &:before { - content: '\E904'; - } -} -.game-icon-telepathy { - &:before { - content: '\E905'; - } -} -.game-icon-transportation-rings { - &:before { - content: '\E906'; - } -} -.game-icon-falling { - &:before { - content: '\E907'; - } -} -.game-icon-fat { - &:before { - content: '\E908'; - } -} -.game-icon-skeleton { - &:before { - content: '\E909'; - } -} -.game-icon-crystal-earrings { - &:before { - content: '\E90A'; - } -} -.game-icon-diamond-hilt { - &:before { - content: '\E90B'; - } -} -.game-icon-diamond-ring { - &:before { - content: '\E90C'; - } -} -.game-icon-double-necklace { - &:before { - content: '\E90D'; - } -} -.game-icon-drop-earrings { - &:before { - content: '\E90E'; - } -} -.game-icon-earrings { - &:before { - content: '\E90F'; - } -} -.game-icon-emerald-necklace { - &:before { - content: '\E910'; - } -} -.game-icon-feather-necklace { - &:before { - content: '\E911'; - } -} -.game-icon-globe-ring { - &:before { - content: '\E912'; - } -} -.game-icon-heart-earrings { - &:before { - content: '\E913'; - } -} -.game-icon-heart-necklace { - &:before { - content: '\E914'; - } -} -.game-icon-intricate-necklace { - &:before { - content: '\E915'; - } -} -.game-icon-necklace-display { - &:before { - content: '\E916'; - } -} -.game-icon-oyster-pearl { - &:before { - content: '\E917'; - } -} -.game-icon-pearl-earring { - &:before { - content: '\E918'; - } -} -.game-icon-pearl-necklace { - &:before { - content: '\E919'; - } -} -.game-icon-pendant-key { - &:before { - content: '\E91A'; - } -} -.game-icon-power-ring { - &:before { - content: '\E91B'; - } -} -.game-icon-prayer-beads { - &:before { - content: '\E91C'; - } -} -.game-icon-primitive-necklace { - &:before { - content: '\E91D'; - } -} -.game-icon-ring-box { - &:before { - content: '\E91E'; - } -} -.game-icon-ring { - &:before { - content: '\E91F'; - } -} -.game-icon-rupee { - &:before { - content: '\E920'; - } -} -.game-icon-tribal-pendant { - &:before { - content: '\E921'; - } -} -.game-icon-necklace { - &:before { - content: '\E922'; - } -} -.game-icon-crystal-growth { - &:before { - content: '\E923'; - } -} -.game-icon-crystalize { - &:before { - content: '\E924'; - } -} -.game-icon-cut-diamond { - &:before { - content: '\E925'; - } -} -.game-icon-emerald { - &:before { - content: '\E926'; - } -} -.game-icon-engagement-ring { - &:before { - content: '\E927'; - } -} -.game-icon-gem-chain { - &:before { - content: '\E928'; - } -} -.game-icon-gem-necklace { - &:before { - content: '\E929'; - } -} -.game-icon-gem-pendant { - &:before { - content: '\E92A'; - } -} -.game-icon-jeweled-chalice { - &:before { - content: '\E92B'; - } -} -.game-icon-linked-rings { - &:before { - content: '\E92C'; - } -} -.game-icon-medal-skull { - &:before { - content: '\E92D'; - } -} -.game-icon-medal { - &:before { - content: '\E92E'; - } -} -.game-icon-saphir { - &:before { - content: '\E92F'; - } -} -.game-icon-skull-ring { - &:before { - content: '\E930'; - } -} -.game-icon-skull-signet { - &:before { - content: '\E931'; - } -} -.game-icon-spiked-collar { - &:before { - content: '\E932'; - } -} -.game-icon-trophy { - &:before { - content: '\E933'; - } -} -.game-icon-amethyst { - &:before { - content: '\E934'; - } -} -.game-icon-big-diamond-ring { - &:before { - content: '\E935'; - } -} -.game-icon-topaz { - &:before { - content: '\E936'; - } -} -.game-icon-big-gear { - &:before { - content: '\E937'; - } -} -.game-icon-belt-armor { - &:before { - content: '\E938'; - } -} -.game-icon-bolt-cutter { - &:before { - content: '\E939'; - } -} -.game-icon-bottle-cap { - &:before { - content: '\E93A'; - } -} -.game-icon-empty-metal-bucket-handle { - &:before { - content: '\E93B'; - } -} -.game-icon-empty-metal-bucket { - &:before { - content: '\E93C'; - } -} -.game-icon-foundry-bucket { - &:before { - content: '\E93D'; - } -} -.game-icon-full-metal-bucket-handle { - &:before { - content: '\E93E'; - } -} -.game-icon-full-metal-bucket { - &:before { - content: '\E93F'; - } -} -.game-icon-gold-stack { - &:before { - content: '\E940'; - } -} -.game-icon-hexagonal-nut { - &:before { - content: '\E941'; - } -} -.game-icon-ladle { - &:before { - content: '\E942'; - } -} -.game-icon-melting-metal { - &:before { - content: '\E943'; - } -} -.game-icon-metal-plate { - &:before { - content: '\E944'; - } -} -.game-icon-ring-mould { - &:before { - content: '\E945'; - } -} -.game-icon-screw { - &:before { - content: '\E946'; - } -} -.game-icon-shoulder-armor { - &:before { - content: '\E947'; - } -} -.game-icon-spring { - &:before { - content: '\E948'; - } -} -.game-icon-straight-pipe { - &:before { - content: '\E949'; - } -} -.game-icon-sword-mold { - &:before { - content: '\E94A'; - } -} -.game-icon-wire-coil { - &:before { - content: '\E94B'; - } -} -.game-icon-zipper { - &:before { - content: '\E94C'; - } -} -.game-icon-anvil-impact { - &:before { - content: '\E94D'; - } -} -.game-icon-anvil { - &:before { - content: '\E94E'; - } -} -.game-icon-barbed-coil { - &:before { - content: '\E94F'; - } -} -.game-icon-barbed-wire { - &:before { - content: '\E950'; - } -} -.game-icon-black-bar { - &:before { - content: '\E951'; - } -} -.game-icon-cash { - &:before { - content: '\E952'; - } -} -.game-icon-crossed-chains { - &:before { - content: '\E953'; - } -} -.game-icon-magnet-blast { - &:before { - content: '\E954'; - } -} -.game-icon-magnet { - &:before { - content: '\E955'; - } -} -.game-icon-metal-bar { - &:before { - content: '\E956'; - } -} -.game-icon-metal-disc { - &:before { - content: '\E957'; - } -} -.game-icon-metal-hand { - &:before { - content: '\E958'; - } -} -.game-icon-metal-scales { - &:before { - content: '\E959'; - } -} -.game-icon-nails { - &:before { - content: '\E95A'; - } -} -.game-icon-needle-drill { - &:before { - content: '\E95B'; - } -} -.game-icon-robot-golem { - &:before { - content: '\E95C'; - } -} -.game-icon-screw-2 { - &:before { - content: '\E95D'; - } -} -.game-icon-spoon { - &:before { - content: '\E95E'; - } -} -.game-icon-steel-claws { - &:before { - content: '\E95F'; - } -} -.game-icon-steeltoe-boots { - &:before { - content: '\E960'; - } -} -.game-icon-wavy-chains { - &:before { - content: '\E961'; - } -} -.game-icon-weight-crush { - &:before { - content: '\E962'; - } -} -.game-icon-breaking-chain { - &:before { - content: '\E963'; - } -} -.game-icon-steel-claws-2 { - &:before { - content: '\E964'; - } -} -.game-icon-gold-bar { - &:before { - content: '\E965'; - } -} -.game-icon-tabi-boot { - &:before { - content: '\E966'; - } -} -.game-icon-bamboo { - &:before { - content: '\E967'; - } -} -.game-icon-black-belt { - &:before { - content: '\E968'; - } -} -.game-icon-handheld-fan { - &:before { - content: '\E969'; - } -} -.game-icon-japanese-bridge { - &:before { - content: '\E96A'; - } -} -.game-icon-katana { - &:before { - content: '\E96B'; - } -} -.game-icon-kimono { - &:before { - content: '\E96C'; - } -} -.game-icon-night-vision { - &:before { - content: '\E96D'; - } -} -.game-icon-ninja-armor { - &:before { - content: '\E96E'; - } -} -.game-icon-onigori { - &:before { - content: '\E96F'; - } -} -.game-icon-rope-dart { - &:before { - content: '\E970'; - } -} -.game-icon-shinto-shrine-mirror { - &:before { - content: '\E971'; - } -} -.game-icon-teapot-leaves { - &:before { - content: '\E972'; - } -} -.game-icon-yunluo { - &:before { - content: '\E973'; - } -} -.game-icon-assassin-pocket { - &:before { - content: '\E974'; - } -} -.game-icon-lotus { - &:before { - content: '\E975'; - } -} -.game-icon-sword-slice { - &:before { - content: '\E976'; - } -} -.game-icon-thrown-daggers { - &:before { - content: '\E977'; - } -} -.game-icon-apothecary { - &:before { - content: '\E978'; - } -} -.game-icon-cauldron { - &:before { - content: '\E979'; - } -} -.game-icon-butter { - &:before { - content: '\E97A'; - } -} -.game-icon-cloth-jar { - &:before { - content: '\E97B'; - } -} -.game-icon-coffee-cup { - &:before { - content: '\E97C'; - } -} -.game-icon-coffee-pot { - &:before { - content: '\E97D'; - } -} -.game-icon-cooking-pot { - &:before { - content: '\E97E'; - } -} -.game-icon-corkscrew { - &:before { - content: '\E97F'; - } -} -.game-icon-covered-jar { - &:before { - content: '\E980'; - } -} -.game-icon-fork-knife-spoon { - &:before { - content: '\E981'; - } -} -.game-icon-glass-celebration { - &:before { - content: '\E982'; - } -} -.game-icon-ice-cream-scoop { - &:before { - content: '\E983'; - } -} -.game-icon-kitchen-scale { - &:before { - content: '\E984'; - } -} -.game-icon-manual-juicer { - &:before { - content: '\E985'; - } -} -.game-icon-manual-meat-grinder { - &:before { - content: '\E986'; - } -} -.game-icon-meal { - &:before { - content: '\E987'; - } -} -.game-icon-moka-pot { - &:before { - content: '\E988'; - } -} -.game-icon-painted-pottery { - &:before { - content: '\E989'; - } -} -.game-icon-porcelain-vase { - &:before { - content: '\E98A'; - } -} -.game-icon-pouring-pot { - &:before { - content: '\E98B'; - } -} -.game-icon-toaster { - &:before { - content: '\E98C'; - } -} -.game-icon-whisk { - &:before { - content: '\E98D'; - } -} -.game-icon-bandage-roll { - &:before { - content: '\E98E'; - } -} -.game-icon-bowl-spiral { - &:before { - content: '\E98F'; - } -} -.game-icon-cauldron-2 { - &:before { - content: '\E990'; - } -} -.game-icon-chalice-drops { - &:before { - content: '\E991'; - } -} -.game-icon-coffee-mug { - &:before { - content: '\E992'; - } -} -.game-icon-glass-shot { - &:before { - content: '\E993'; - } -} -.game-icon-kitchen-knives { - &:before { - content: '\E994'; - } -} -.game-icon-knife-fork { - &:before { - content: '\E995'; - } -} -.game-icon-martini { - &:before { - content: '\E996'; - } -} -.game-icon-meat-cleaver { - &:before { - content: '\E997'; - } -} -.game-icon-pizza-cutter { - &:before { - content: '\E998'; - } -} -.game-icon-shattered-glass { - &:before { - content: '\E999'; - } -} -.game-icon-wine-glass { - &:before { - content: '\E99A'; - } -} -.game-icon-egg-pod { - &:before { - content: '\E99B'; - } -} -.game-icon-fruit-bowl { - &:before { - content: '\E99C'; - } -} -.game-icon-pestle-mortar { - &:before { - content: '\E99D'; - } -} -.game-icon-eternal-love { - &:before { - content: '\E99E'; - } -} -.game-icon-first-aid-kit { - &:before { - content: '\E99F'; - } -} -.game-icon-foot-plaster { - &:before { - content: '\E9A0'; - } -} -.game-icon-hand-bandage { - &:before { - content: '\E9A1'; - } -} -.game-icon-healing { - &:before { - content: '\E9A2'; - } -} -.game-icon-health-capsule { - &:before { - content: '\E9A3'; - } -} -.game-icon-health-potion { - &:before { - content: '\E9A4'; - } -} -.game-icon-herbs-bundle { - &:before { - content: '\E9A5'; - } -} -.game-icon-life-bar { - &:before { - content: '\E9A6'; - } -} -.game-icon-medical-drip { - &:before { - content: '\E9A7'; - } -} -.game-icon-medical-thermometer { - &:before { - content: '\E9A8'; - } -} -.game-icon-medicine-pills { - &:before { - content: '\E9A9'; - } -} -.game-icon-medicines { - &:before { - content: '\E9AA'; - } -} -.game-icon-nested-hearts { - &:before { - content: '\E9AB'; - } -} -.game-icon-remedy { - &:before { - content: '\E9AC'; - } -} -.game-icon-stethoscope { - &:before { - content: '\E9AD'; - } -} -.game-icon-broken-heart { - &:before { - content: '\E9AE'; - } -} -.game-icon-defibrilate { - &:before { - content: '\E9AF'; - } -} -.game-icon-embryo { - &:before { - content: '\E9B0'; - } -} -.game-icon-heart-bottle { - &:before { - content: '\E9B1'; - } -} -.game-icon-life-support { - &:before { - content: '\E9B2'; - } -} -.game-icon-life-tap { - &:before { - content: '\E9B3'; - } -} -.game-icon-love-injection { - &:before { - content: '\E9B4'; - } -} -.game-icon-miracle-medecine { - &:before { - content: '\E9B5'; - } -} -.game-icon-overdose { - &:before { - content: '\E9B6'; - } -} -.game-icon-pill-drop { - &:before { - content: '\E9B7'; - } -} -.game-icon-pill { - &:before { - content: '\E9B8'; - } -} -.game-icon-scalpel { - &:before { - content: '\E9B9'; - } -} -.game-icon-sticking-plaster { - &:before { - content: '\E9BA'; - } -} -.game-icon-syringe { - &:before { - content: '\E9BB'; - } -} -.game-icon-health-decrease { - &:before { - content: '\E9BC'; - } -} -.game-icon-health-increase { - &:before { - content: '\E9BD'; - } -} -.game-icon-health-normal { - &:before { - content: '\E9BE'; - } -} -.game-icon-medical-pack-alt { - &:before { - content: '\E9BF'; - } -} -.game-icon-medical-pack { - &:before { - content: '\E9C0'; - } -} -.game-icon-fetus { - &:before { - content: '\E9C1'; - } -} -.game-icon-heart-minus { - &:before { - content: '\E9C2'; - } -} -.game-icon-heart-plus { - &:before { - content: '\E9C3'; - } -} -.game-icon-ancient-screw { - &:before { - content: '\E9C4'; - } -} -.game-icon-beam-satellite { - &:before { - content: '\E9C5'; - } -} -.game-icon-bouncing-spring { - &:before { - content: '\E9C6'; - } -} -.game-icon-computer-fan { - &:before { - content: '\E9C7'; - } -} -.game-icon-death-star { - &:before { - content: '\E9C8'; - } -} -.game-icon-drill { - &:before { - content: '\E9C9'; - } -} -.game-icon-floor-polisher { - &:before { - content: '\E9CA'; - } -} -.game-icon-gps { - &:before { - content: '\E9CB'; - } -} -.game-icon-love-mystery { - &:before { - content: '\E9CC'; - } -} -.game-icon-plug { - &:before { - content: '\E9CD'; - } -} -.game-icon-power-generator { - &:before { - content: '\E9CE'; - } -} -.game-icon-round-knob { - &:before { - content: '\E9CF'; - } -} -.game-icon-satellite-communication { - &:before { - content: '\E9D0'; - } -} -.game-icon-security-gate { - &:before { - content: '\E9D1'; - } -} -.game-icon-settings-knobs { - &:before { - content: '\E9D2'; - } -} -.game-icon-star-gate { - &:before { - content: '\E9D3'; - } -} -.game-icon-tv { - &:before { - content: '\E9D4'; - } -} -.game-icon-vacuum-cleaner { - &:before { - content: '\E9D5'; - } -} -.game-icon-valve { - &:before { - content: '\E9D6'; - } -} -.game-icon-vending-machine { - &:before { - content: '\E9D7'; - } -} -.game-icon-video-conference { - &:before { - content: '\E9D8'; - } -} -.game-icon-computing { - &:before { - content: '\E9D9'; - } -} -.game-icon-diagram { - &:before { - content: '\E9DA'; - } -} -.game-icon-microscope { - &:before { - content: '\E9DB'; - } -} -.game-icon-auto-repair { - &:before { - content: '\E9DC'; - } -} -.game-icon-circuitry { - &:before { - content: '\E9DD'; - } -} -.game-icon-cog-lock { - &:before { - content: '\E9DE'; - } -} -.game-icon-drill-2 { - &:before { - content: '\E9DF'; - } -} -.game-icon-lever { - &:before { - content: '\E9E0'; - } -} -.game-icon-mechanical-arm { - &:before { - content: '\E9E1'; - } -} -.game-icon-microchip { - &:before { - content: '\E9E2'; - } -} -.game-icon-microscope-lens { - &:before { - content: '\E9E3'; - } -} -.game-icon-overdrive { - &:before { - content: '\E9E4'; - } -} -.game-icon-processor { - &:before { - content: '\E9E5'; - } -} -.game-icon-sattelite { - &:before { - content: '\E9E6'; - } -} -.game-icon-skid-mark { - &:before { - content: '\E9E7'; - } -} -.game-icon-spoutnik { - &:before { - content: '\E9E8'; - } -} -.game-icon-tyre { - &:before { - content: '\E9E9'; - } -} -.game-icon-tesla { - &:before { - content: '\E9EA'; - } -} -.game-icon-unplugged { - &:before { - content: '\E9EB'; - } -} -.game-icon-revolt { - &:before { - content: '\E9EC'; - } -} -.game-icon-robber-hand { - &:before { - content: '\E9ED'; - } -} -.game-icon-severed-hand { - &:before { - content: '\E9EE'; - } -} -.game-icon-fingers-crossed { - &:before { - content: '\E9EF'; - } -} -.game-icon-paper { - &:before { - content: '\E9F0'; - } -} -.game-icon-rock { - &:before { - content: '\E9F1'; - } -} -.game-icon-scissors { - &:before { - content: '\E9F2'; - } -} -.game-icon-armor-punch { - &:before { - content: '\E9F3'; - } -} -.game-icon-baseball-glove { - &:before { - content: '\E9F4'; - } -} -.game-icon-bolt-spell-cast { - &:before { - content: '\E9F5'; - } -} -.game-icon-cherish { - &:before { - content: '\E9F6'; - } -} -.game-icon-cooking-glove { - &:before { - content: '\E9F7'; - } -} -.game-icon-fingernail { - &:before { - content: '\E9F8'; - } -} -.game-icon-forearm { - &:before { - content: '\E9F9'; - } -} -.game-icon-gauntlet { - &:before { - content: '\E9FA'; - } -} -.game-icon-gloves { - &:before { - content: '\E9FB'; - } -} -.game-icon-hand-grip { - &:before { - content: '\E9FC'; - } -} -.game-icon-hand-of-god { - &:before { - content: '\E9FD'; - } -} -.game-icon-hand-ok { - &:before { - content: '\E9FE'; - } -} -.game-icon-marble-tap { - &:before { - content: '\E9FF'; - } -} -.game-icon-pirate-hook { - &:before { - content: '\EA00'; - } -} -.game-icon-spock-hand { - &:before { - content: '\EA01'; - } -} -.game-icon-take-my-money { - &:before { - content: '\EA02'; - } -} -.game-icon-thumb-down { - &:before { - content: '\EA03'; - } -} -.game-icon-thumb-up { - &:before { - content: '\EA04'; - } -} -.game-icon-wolverine-claws-2 { - &:before { - content: '\EA05'; - } -} -.game-icon-boxing-glove-surprise { - &:before { - content: '\EA06'; - } -} -.game-icon-boxing-glove { - &:before { - content: '\EA07'; - } -} -.game-icon-cut-palm { - &:before { - content: '\EA08'; - } -} -.game-icon-fist { - &:before { - content: '\EA09'; - } -} -.game-icon-fulguro-punch { - &:before { - content: '\EA0A'; - } -} -.game-icon-gift-of-knowledge { - &:before { - content: '\EA0B'; - } -} -.game-icon-glowing-hands { - &:before { - content: '\EA0C'; - } -} -.game-icon-hand { - &:before { - content: '\EA0D'; - } -} -.game-icon-high-five { - &:before { - content: '\EA0E'; - } -} -.game-icon-magic-palm { - &:before { - content: '\EA0F'; - } -} -.game-icon-magic-swirl { - &:before { - content: '\EA10'; - } -} -.game-icon-mailed-fist { - &:before { - content: '\EA11'; - } -} -.game-icon-monster-grasp { - &:before { - content: '\EA12'; - } -} -.game-icon-moon-claws { - &:before { - content: '\EA13'; - } -} -.game-icon-palm { - &:before { - content: '\EA14'; - } -} -.game-icon-punch-blast { - &:before { - content: '\EA15'; - } -} -.game-icon-punch { - &:before { - content: '\EA16'; - } -} -.game-icon-shadow-grasp { - &:before { - content: '\EA17'; - } -} -.game-icon-stigmata { - &:before { - content: '\EA18'; - } -} -.game-icon-thor-fist { - &:before { - content: '\EA19'; - } -} -.game-icon-hand-2 { - &:before { - content: '\EA1A'; - } -} -.game-icon-revolt-2 { - &:before { - content: '\EA1B'; - } -} -.game-icon-usable { - &:before { - content: '\EA1C'; - } -} -.game-icon-click { - &:before { - content: '\EA1D'; - } -} -.game-icon-fist-2 { - &:before { - content: '\EA1E'; - } -} -.game-icon-open-palm { - &:before { - content: '\EA1F'; - } -} -.game-icon-raise-skeleton { - &:before { - content: '\EA20'; - } -} -.game-icon-barrel-leak { - &:before { - content: '\EA21'; - } -} -.game-icon-basket { - &:before { - content: '\EA22'; - } -} -.game-icon-beach-bucket { - &:before { - content: '\EA23'; - } -} -.game-icon-cardboard-box-closed { - &:before { - content: '\EA24'; - } -} -.game-icon-cardboard-box { - &:before { - content: '\EA25'; - } -} -.game-icon-cargo-crate { - &:before { - content: '\EA26'; - } -} -.game-icon-cellar-barrels { - &:before { - content: '\EA27'; - } -} -.game-icon-chest { - &:before { - content: '\EA28'; - } -} -.game-icon-companion-cube { - &:before { - content: '\EA29'; - } -} -.game-icon-database { - &:before { - content: '\EA2A'; - } -} -.game-icon-energy-tank { - &:before { - content: '\EA2B'; - } -} -.game-icon-fuel-tank { - &:before { - content: '\EA2C'; - } -} -.game-icon-hand-truck { - &:before { - content: '\EA2D'; - } -} -.game-icon-locked-box { - &:before { - content: '\EA2E'; - } -} -.game-icon-matryoshka-dolls { - &:before { - content: '\EA2F'; - } -} -.game-icon-nuclear-waste { - &:before { - content: '\EA30'; - } -} -.game-icon-opened-food-can { - &:before { - content: '\EA31'; - } -} -.game-icon-paper-tray { - &:before { - content: '\EA32'; - } -} -.game-icon-present { - &:before { - content: '\EA33'; - } -} -.game-icon-shoulder-bag { - &:before { - content: '\EA34'; - } -} -.game-icon-strongbox { - &:before { - content: '\EA35'; - } -} -.game-icon-toolbox { - &:before { - content: '\EA36'; - } -} -.game-icon-watering-can { - &:before { - content: '\EA37'; - } -} -.game-icon-cannister { - &:before { - content: '\EA38'; - } -} -.game-icon-chemical-tank { - &:before { - content: '\EA39'; - } -} -.game-icon-jigsaw-box { - &:before { - content: '\EA3A'; - } -} -.game-icon-locked-chest { - &:before { - content: '\EA3B'; - } -} -.game-icon-box-trap { - &:before { - content: '\EA3C'; - } -} -.game-icon-oil-drum { - &:before { - content: '\EA3D'; - } -} -.game-icon-open-chest { - &:before { - content: '\EA3E'; - } -} -.game-icon-open-treasure-chest { - &:before { - content: '\EA3F'; - } -} -.game-icon-beer-horn { - &:before { - content: '\EA40'; - } -} -.game-icon-bolt-drop { - &:before { - content: '\EA41'; - } -} -.game-icon-booze { - &:before { - content: '\EA42'; - } -} -.game-icon-cactus-tap { - &:before { - content: '\EA43'; - } -} -.game-icon-holy-water { - &:before { - content: '\EA44'; - } -} -.game-icon-leak { - &:before { - content: '\EA45'; - } -} -.game-icon-lily-pads { - &:before { - content: '\EA46'; - } -} -.game-icon-liquid-soap { - &:before { - content: '\EA47'; - } -} -.game-icon-plant-watering { - &:before { - content: '\EA48'; - } -} -.game-icon-shower { - &:before { - content: '\EA49'; - } -} -.game-icon-tap { - &:before { - content: '\EA4A'; - } -} -.game-icon-water-bottle { - &:before { - content: '\EA4B'; - } -} -.game-icon-water-gallon { - &:before { - content: '\EA4C'; - } -} -.game-icon-water-gun { - &:before { - content: '\EA4D'; - } -} -.game-icon-acid-blob { - &:before { - content: '\EA4E'; - } -} -.game-icon-beer-stein { - &:before { - content: '\EA4F'; - } -} -.game-icon-bleeding-eye { - &:before { - content: '\EA50'; - } -} -.game-icon-boiling-bubbles { - &:before { - content: '\EA51'; - } -} -.game-icon-bubbles { - &:before { - content: '\EA52'; - } -} -.game-icon-burst-blob { - &:before { - content: '\EA53'; - } -} -.game-icon-chemical-drop { - &:before { - content: '\EA54'; - } -} -.game-icon-dew { - &:before { - content: '\EA55'; - } -} -.game-icon-drink-me { - &:before { - content: '\EA56'; - } -} -.game-icon-dripping-blade { - &:before { - content: '\EA57'; - } -} -.game-icon-dripping-goo { - &:before { - content: '\EA58'; - } -} -.game-icon-dripping-star { - &:before { - content: '\EA59'; - } -} -.game-icon-dripping-stone { - &:before { - content: '\EA5A'; - } -} -.game-icon-dripping-sword { - &:before { - content: '\EA5B'; - } -} -.game-icon-drop { - &:before { - content: '\EA5C'; - } -} -.game-icon-droplet-splash { - &:before { - content: '\EA5D'; - } -} -.game-icon-droplets { - &:before { - content: '\EA5E'; - } -} -.game-icon-eyedropper { - &:before { - content: '\EA5F'; - } -} -.game-icon-foam { - &:before { - content: '\EA60'; - } -} -.game-icon-gloop { - &:before { - content: '\EA61'; - } -} -.game-icon-goo-explosion { - &:before { - content: '\EA62'; - } -} -.game-icon-goo-skull { - &:before { - content: '\EA63'; - } -} -.game-icon-goo-spurt { - &:before { - content: '\EA64'; - } -} -.game-icon-gooey-impact { - &:before { - content: '\EA65'; - } -} -.game-icon-gooey-molecule { - &:before { - content: '\EA66'; - } -} -.game-icon-gooey-sword { - &:before { - content: '\EA67'; - } -} -.game-icon-grease-trap { - &:before { - content: '\EA68'; - } -} -.game-icon-grouped-drops { - &:before { - content: '\EA69'; - } -} -.game-icon-heart-drop { - &:before { - content: '\EA6A'; - } -} -.game-icon-heavy-rain { - &:before { - content: '\EA6B'; - } -} -.game-icon-hypodermic-test { - &:before { - content: '\EA6C'; - } -} -.game-icon-kaleidoscope-pearls { - &:before { - content: '\EA6D'; - } -} -.game-icon-marrow-drain { - &:before { - content: '\EA6E'; - } -} -.game-icon-oily-spiral { - &:before { - content: '\EA6F'; - } -} -.game-icon-poison-bottle { - &:before { - content: '\EA70'; - } -} -.game-icon-spatter { - &:before { - content: '\EA71'; - } -} -.game-icon-spill { - &:before { - content: '\EA72'; - } -} -.game-icon-splash { - &:before { - content: '\EA73'; - } -} -.game-icon-splashy-stream { - &:before { - content: '\EA74'; - } -} -.game-icon-splurt { - &:before { - content: '\EA75'; - } -} -.game-icon-transparent-tubes { - &:before { - content: '\EA76'; - } -} -.game-icon-water-bolt { - &:before { - content: '\EA77'; - } -} -.game-icon-milk-carton { - &:before { - content: '\EA78'; - } -} -.game-icon-acid { - &:before { - content: '\EA79'; - } -} -.game-icon-water-drop { - &:before { - content: '\EA7A'; - } -} -.game-icon-blood { - &:before { - content: '\EA7B'; - } -} -.game-icon-skull-sabertooth { - &:before { - content: '\EA7C'; - } -} -.game-icon-calavera { - &:before { - content: '\EA7D'; - } -} -.game-icon-alien-skull { - &:before { - content: '\EA7E'; - } -} -.game-icon-blade-bite { - &:before { - content: '\EA7F'; - } -} -.game-icon-bone-gnawer { - &:before { - content: '\EA80'; - } -} -.game-icon-broken-skull { - &:before { - content: '\EA81'; - } -} -.game-icon-chewed-skull { - &:before { - content: '\EA82'; - } -} -.game-icon-chopped-skull { - &:before { - content: '\EA83'; - } -} -.game-icon-condylura-skull { - &:before { - content: '\EA84'; - } -} -.game-icon-death-note { - &:before { - content: '\EA85'; - } -} -.game-icon-deathcab { - &:before { - content: '\EA86'; - } -} -.game-icon-dread-skull { - &:before { - content: '\EA87'; - } -} -.game-icon-fanged-skull { - &:before { - content: '\EA88'; - } -} -.game-icon-happy-skull { - &:before { - content: '\EA89'; - } -} -.game-icon-harry-potter-skull { - &:before { - content: '\EA8A'; - } -} -.game-icon-leaky-skull { - &:before { - content: '\EA8B'; - } -} -.game-icon-morbid-humour { - &:before { - content: '\EA8C'; - } -} -.game-icon-piece-skull { - &:before { - content: '\EA8D'; - } -} -.game-icon-pirate-skull { - &:before { - content: '\EA8E'; - } -} -.game-icon-sharped-teeth-skull { - &:before { - content: '\EA8F'; - } -} -.game-icon-skeleton-key { - &:before { - content: '\EA90'; - } -} -.game-icon-skull-bolt { - &:before { - content: '\EA91'; - } -} -.game-icon-skull-crack { - &:before { - content: '\EA92'; - } -} -.game-icon-skull-in-jar { - &:before { - content: '\EA93'; - } -} -.game-icon-skull-mask { - &:before { - content: '\EA94'; - } -} -.game-icon-skull-slices { - &:before { - content: '\EA95'; - } -} -.game-icon-spade-skull { - &:before { - content: '\EA96'; - } -} -.game-icon-star-skull { - &:before { - content: '\EA97'; - } -} -.game-icon-tentacles-skull { - &:before { - content: '\EA98'; - } -} -.game-icon-thunder-skull { - &:before { - content: '\EA99'; - } -} -.game-icon-triple-skulls { - &:before { - content: '\EA9A'; - } -} -.game-icon-death-skull { - &:before { - content: '\EA9B'; - } -} -.game-icon-skull-with-syringe { - &:before { - content: '\EA9C'; - } -} -.game-icon-bacon { - &:before { - content: '\EA9D'; - } -} -.game-icon-kebab-spit { - &:before { - content: '\EA9E'; - } -} -.game-icon-sausage { - &:before { - content: '\EA9F'; - } -} -.game-icon-sausages-ribbon { - &:before { - content: '\EAA0'; - } -} -.game-icon-sliced-sausage { - &:before { - content: '\EAA1'; - } -} -.game-icon-steak { - &:before { - content: '\EAA2'; - } -} -.game-icon-meat { - &:before { - content: '\EAA3'; - } -} -.game-icon-ham-shank { - &:before { - content: '\EAA4'; - } -} -.game-icon-berries-bowl { - &:before { - content: '\EAA5'; - } -} -.game-icon-bindle { - &:before { - content: '\EAA6'; - } -} -.game-icon-bone-knife { - &:before { - content: '\EAA7'; - } -} -.game-icon-clay-brick { - &:before { - content: '\EAA8'; - } -} -.game-icon-dolmen { - &:before { - content: '\EAA9'; - } -} -.game-icon-fur-shirt { - &:before { - content: '\EAAA'; - } -} -.game-icon-silex { - &:before { - content: '\EAAB'; - } -} -.game-icon-stone-wheel { - &:before { - content: '\EAAC'; - } -} -.game-icon-bone-knife-2 { - &:before { - content: '\EAAD'; - } -} -.game-icon-broken-bone { - &:before { - content: '\EAAE'; - } -} -.game-icon-broken-tablet { - &:before { - content: '\EAAF'; - } -} -.game-icon-rock-2 { - &:before { - content: '\EAB0'; - } -} -.game-icon-stone-axe { - &:before { - content: '\EAB1'; - } -} -.game-icon-stone-tablet { - &:before { - content: '\EAB2'; - } -} -.game-icon-cactus { - &:before { - content: '\EAB3'; - } -} -.game-icon-cleaver { - &:before { - content: '\EAB4'; - } -} -.game-icon-heart-stake { - &:before { - content: '\EAB5'; - } -} -.game-icon-pitchfork { - &:before { - content: '\EAB6'; - } -} -.game-icon-safety-pin { - &:before { - content: '\EAB7'; - } -} -.game-icon-shattered-heart { - &:before { - content: '\EAB8'; - } -} -.game-icon-spiked-shoulder-armor { - &:before { - content: '\EAB9'; - } -} -.game-icon-spiky-pit { - &:before { - content: '\EABA'; - } -} -.game-icon-air-zigzag { - &:before { - content: '\EABB'; - } -} -.game-icon-alligator-clip { - &:before { - content: '\EABC'; - } -} -.game-icon-armoured-shell { - &:before { - content: '\EABD'; - } -} -.game-icon-atomic-slashes { - &:before { - content: '\EABE'; - } -} -.game-icon-bleeding-heart { - &:before { - content: '\EABF'; - } -} -.game-icon-burning-round-shot { - &:before { - content: '\EAC0'; - } -} -.game-icon-circle-claws { - &:before { - content: '\EAC1'; - } -} -.game-icon-claw-slashes { - &:before { - content: '\EAC2'; - } -} -.game-icon-cracked-ball-dunk { - &:before { - content: '\EAC3'; - } -} -.game-icon-cracked-disc { - &:before { - content: '\EAC4'; - } -} -.game-icon-cracked-glass { - &:before { - content: '\EAC5'; - } -} -.game-icon-cracked-mask { - &:before { - content: '\EAC6'; - } -} -.game-icon-cracked-saber { - &:before { - content: '\EAC7'; - } -} -.game-icon-crossed-air-flows { - &:before { - content: '\EAC8'; - } -} -.game-icon-crossed-slashes { - &:before { - content: '\EAC9'; - } -} -.game-icon-earth-spit { - &:before { - content: '\EACA'; - } -} -.game-icon-eclipse-saw { - &:before { - content: '\EACB'; - } -} -.game-icon-edge-crack { - &:before { - content: '\EACC'; - } -} -.game-icon-fangs-circle { - &:before { - content: '\EACD'; - } -} -.game-icon-groundbreaker { - &:before { - content: '\EACE'; - } -} -.game-icon-large-wound { - &:before { - content: '\EACF'; - } -} -.game-icon-light-thorny-triskelion { - &:before { - content: '\EAD0'; - } -} -.game-icon-mantrap { - &:before { - content: '\EAD1'; - } -} -.game-icon-mighty-spanner { - &:before { - content: '\EAD2'; - } -} -.game-icon-needle-jaws { - &:before { - content: '\EAD3'; - } -} -.game-icon-quick-slash { - &:before { - content: '\EAD4'; - } -} -.game-icon-rough-wound { - &:before { - content: '\EAD5'; - } -} -.game-icon-serrated-slash { - &:before { - content: '\EAD6'; - } -} -.game-icon-shatter { - &:before { - content: '\EAD7'; - } -} -.game-icon-shattered-sword { - &:before { - content: '\EAD8'; - } -} -.game-icon-spiked-armor { - &:before { - content: '\EAD9'; - } -} -.game-icon-spiked-fence { - &:before { - content: '\EADA'; - } -} -.game-icon-spiked-shell { - &:before { - content: '\EADB'; - } -} -.game-icon-spiked-tail { - &:before { - content: '\EADC'; - } -} -.game-icon-spiked-tentacle { - &:before { - content: '\EADD'; - } -} -.game-icon-spiky-eclipse { - &:before { - content: '\EADE'; - } -} -.game-icon-spiky-explosion { - &:before { - content: '\EADF'; - } -} -.game-icon-striking-diamonds { - &:before { - content: '\EAE0'; - } -} -.game-icon-swan-breeze { - &:before { - content: '\EAE1'; - } -} -.game-icon-swirl-ring { - &:before { - content: '\EAE2'; - } -} -.game-icon-swirl-string { - &:before { - content: '\EAE3'; - } -} -.game-icon-sword-break { - &:before { - content: '\EAE4'; - } -} -.game-icon-tension-snowflake { - &:before { - content: '\EAE5'; - } -} -.game-icon-tornado-discs { - &:before { - content: '\EAE6'; - } -} -.game-icon-triple-claws { - &:before { - content: '\EAE7'; - } -} -.game-icon-triple-needle { - &:before { - content: '\EAE8'; - } -} -.game-icon-unstable-projectile { - &:before { - content: '\EAE9'; - } -} -.game-icon-whiplash { - &:before { - content: '\EAEA'; - } -} -.game-icon-wind-slap { - &:before { - content: '\EAEB'; - } -} -.game-icon-wolf-trap { - &:before { - content: '\EAEC'; - } -} -.game-icon-wrapped-heart { - &:before { - content: '\EAED'; - } -} -.game-icon-spikeball { - &:before { - content: '\EAEE'; - } -} -.game-icon-spikes-full { - &:before { - content: '\EAEF'; - } -} -.game-icon-spikes-half { - &:before { - content: '\EAF0'; - } -} -.game-icon-spikes-init { - &:before { - content: '\EAF1'; - } -} -.game-icon-spikes { - &:before { - content: '\EAF2'; - } -} -.game-icon-trigger-hurt { - &:before { - content: '\EAF3'; - } -} -.game-icon-bat-mask { - &:before { - content: '\EAF4'; - } -} -.game-icon-cadillac-helm { - &:before { - content: '\EAF5'; - } -} -.game-icon-carnival-mask { - &:before { - content: '\EAF6'; - } -} -.game-icon-ceremonial-mask { - &:before { - content: '\EAF7'; - } -} -.game-icon-cyborg-face { - &:before { - content: '\EAF8'; - } -} -.game-icon-jason-mask { - &:before { - content: '\EAF9'; - } -} -.game-icon-king-ju-mask { - &:before { - content: '\EAFA'; - } -} -.game-icon-luchador { - &:before { - content: '\EAFB'; - } -} -.game-icon-mighty-boosh { - &:before { - content: '\EAFC'; - } -} -.game-icon-pharoah { - &:before { - content: '\EAFD'; - } -} -.game-icon-protection-glasses { - &:before { - content: '\EAFE'; - } -} -.game-icon-soul-vessel { - &:before { - content: '\EAFF'; - } -} -.game-icon-spider-mask { - &:before { - content: '\EB00'; - } -} -.game-icon-vr-headset { - &:before { - content: '\EB01'; - } -} -.game-icon-android-mask { - &:before { - content: '\EB02'; - } -} -.game-icon-architect-mask { - &:before { - content: '\EB03'; - } -} -.game-icon-curly-mask { - &:before { - content: '\EB04'; - } -} -.game-icon-domino-mask { - &:before { - content: '\EB05'; - } -} -.game-icon-duality-mask { - &:before { - content: '\EB06'; - } -} -.game-icon-lightning-mask { - &:before { - content: '\EB07'; - } -} -.game-icon-trap-mask { - &:before { - content: '\EB08'; - } -} -.game-icon-cultist-2 { - &:before { - content: '\EB09'; - } -} -.game-icon-gas-mask-2 { - &:before { - content: '\EB0A'; - } -} -.game-icon-carambola { - &:before { - content: '\EB0B'; - } -} -.game-icon-falling-star { - &:before { - content: '\EB0C'; - } -} -.game-icon-flower-star { - &:before { - content: '\EB0D'; - } -} -.game-icon-galaxy { - &:before { - content: '\EB0E'; - } -} -.game-icon-knocked-out-stars { - &:before { - content: '\EB0F'; - } -} -.game-icon-polar-star { - &:before { - content: '\EB10'; - } -} -.game-icon-round-star { - &:before { - content: '\EB11'; - } -} -.game-icon-seven-pointed-star { - &:before { - content: '\EB12'; - } -} -.game-icon-solar-system { - &:before { - content: '\EB13'; - } -} -.game-icon-solar-time { - &:before { - content: '\EB14'; - } -} -.game-icon-sparkles { - &:before { - content: '\EB15'; - } -} -.game-icon-star-altar { - &:before { - content: '\EB16'; - } -} -.game-icon-star-formation { - &:before { - content: '\EB17'; - } -} -.game-icon-star-key { - &:before { - content: '\EB18'; - } -} -.game-icon-star-medal { - &:before { - content: '\EB19'; - } -} -.game-icon-stars-stack { - &:before { - content: '\EB1A'; - } -} -.game-icon-sun-cloud { - &:before { - content: '\EB1B'; - } -} -.game-icon-sunflower { - &:before { - content: '\EB1C'; - } -} -.game-icon-thermometer-hot { - &:before { - content: '\EB1D'; - } -} -.game-icon-ursa-major { - &:before { - content: '\EB1E'; - } -} -.game-icon-barbed-star { - &:before { - content: '\EB1F'; - } -} -.game-icon-boomerang-sun { - &:before { - content: '\EB20'; - } -} -.game-icon-circle-sparks { - &:before { - content: '\EB21'; - } -} -.game-icon-cross-flare { - &:before { - content: '\EB22'; - } -} -.game-icon-eclipse-flare { - &:before { - content: '\EB23'; - } -} -.game-icon-flat-star { - &:before { - content: '\EB24'; - } -} -.game-icon-flexible-star { - &:before { - content: '\EB25'; - } -} -.game-icon-lotus-flower { - &:before { - content: '\EB26'; - } -} -.game-icon-orbital-rays { - &:before { - content: '\EB27'; - } -} -.game-icon-rainbow-star { - &:before { - content: '\EB28'; - } -} -.game-icon-shiny-iris { - &:before { - content: '\EB29'; - } -} -.game-icon-star-cycle { - &:before { - content: '\EB2A'; - } -} -.game-icon-star-prominences { - &:before { - content: '\EB2B'; - } -} -.game-icon-star-pupil { - &:before { - content: '\EB2C'; - } -} -.game-icon-star-sattelites { - &:before { - content: '\EB2D'; - } -} -.game-icon-star-swirl { - &:before { - content: '\EB2E'; - } -} -.game-icon-sun-radiations { - &:before { - content: '\EB2F'; - } -} -.game-icon-wrapping-star { - &:before { - content: '\EB30'; - } -} -.game-icon-splash-2 { - &:before { - content: '\EB31'; - } -} -.game-icon-solar-power { - &:before { - content: '\EB32'; - } -} -.game-icon-on-sight { - &:before { - content: '\EB33'; - } -} -.game-icon-convergence-target { - &:before { - content: '\EB34'; - } -} -.game-icon-crosshair { - &:before { - content: '\EB35'; - } -} -.game-icon-dice-target { - &:before { - content: '\EB36'; - } -} -.game-icon-eye-target { - &:before { - content: '\EB37'; - } -} -.game-icon-human-target { - &:before { - content: '\EB38'; - } -} -.game-icon-multiple-targets { - &:before { - content: '\EB39'; - } -} -.game-icon-target-poster { - &:before { - content: '\EB3A'; - } -} -.game-icon-triangle-target { - &:before { - content: '\EB3B'; - } -} -.game-icon-head-shot { - &:before { - content: '\EB3C'; - } -} -.game-icon-select { - &:before { - content: '\EB3D'; - } -} -.game-icon-target-laser { - &:before { - content: '\EB3E'; - } -} -.game-icon-targeted { - &:before { - content: '\EB3F'; - } -} -.game-icon-agave { - &:before { - content: '\EB40'; - } -} -.game-icon-cactus-pot { - &:before { - content: '\EB41'; - } -} -.game-icon-cantua { - &:before { - content: '\EB42'; - } -} -.game-icon-carrot { - &:before { - content: '\EB43'; - } -} -.game-icon-coffee-beans { - &:before { - content: '\EB44'; - } -} -.game-icon-corn { - &:before { - content: '\EB45'; - } -} -.game-icon-cotton-flower { - &:before { - content: '\EB46'; - } -} -.game-icon-dandelion-flower { - &:before { - content: '\EB47'; - } -} -.game-icon-fern { - &:before { - content: '\EB48'; - } -} -.game-icon-fertilizer-bag { - &:before { - content: '\EB49'; - } -} -.game-icon-flax { - &:before { - content: '\EB4A'; - } -} -.game-icon-garlic { - &:before { - content: '\EB4B'; - } -} -.game-icon-ginkgo-leaf { - &:before { - content: '\EB4C'; - } -} -.game-icon-grain-bundle { - &:before { - content: '\EB4D'; - } -} -.game-icon-grain { - &:before { - content: '\EB4E'; - } -} -.game-icon-green-power { - &:before { - content: '\EB4F'; - } -} -.game-icon-hemp { - &:before { - content: '\EB50'; - } -} -.game-icon-hops { - &:before { - content: '\EB51'; - } -} -.game-icon-jasmine { - &:before { - content: '\EB52'; - } -} -.game-icon-monstera-leaf { - &:before { - content: '\EB53'; - } -} -.game-icon-papyrus { - &:before { - content: '\EB54'; - } -} -.game-icon-plant-roots { - &:before { - content: '\EB55'; - } -} -.game-icon-reed { - &:before { - content: '\EB56'; - } -} -.game-icon-round-straw-bale { - &:before { - content: '\EB57'; - } -} -.game-icon-seedling { - &:before { - content: '\EB58'; - } -} -.game-icon-shamrock { - &:before { - content: '\EB59'; - } -} -.game-icon-sugar-cane { - &:before { - content: '\EB5A'; - } -} -.game-icon-tumbleweed { - &:before { - content: '\EB5B'; - } -} -.game-icon-vines { - &:before { - content: '\EB5C'; - } -} -.game-icon-aubergine { - &:before { - content: '\EB5D'; - } -} -.game-icon-beanstalk { - &:before { - content: '\EB5E'; - } -} -.game-icon-bud { - &:before { - content: '\EB5F'; - } -} -.game-icon-bulb { - &:before { - content: '\EB60'; - } -} -.game-icon-curling-vines { - &:before { - content: '\EB61'; - } -} -.game-icon-daisy { - &:before { - content: '\EB62'; - } -} -.game-icon-elderberry { - &:before { - content: '\EB63'; - } -} -.game-icon-evil-bud { - &:before { - content: '\EB64'; - } -} -.game-icon-flower-pot { - &:before { - content: '\EB65'; - } -} -.game-icon-ground-sprout { - &:before { - content: '\EB66'; - } -} -.game-icon-leaf-skeleton { - &:before { - content: '\EB67'; - } -} -.game-icon-new-shoot { - &:before { - content: '\EB68'; - } -} -.game-icon-oat { - &:before { - content: '\EB69'; - } -} -.game-icon-pollen-dust { - &:before { - content: '\EB6A'; - } -} -.game-icon-rose { - &:before { - content: '\EB6B'; - } -} -.game-icon-shut-rose { - &:before { - content: '\EB6C'; - } -} -.game-icon-spiral-bloom { - &:before { - content: '\EB6D'; - } -} -.game-icon-spoted-flower { - &:before { - content: '\EB6E'; - } -} -.game-icon-sprout-disc { - &:before { - content: '\EB6F'; - } -} -.game-icon-sprout { - &:before { - content: '\EB70'; - } -} -.game-icon-trefoil-lily { - &:before { - content: '\EB71'; - } -} -.game-icon-twirly-flower { - &:before { - content: '\EB72'; - } -} -.game-icon-vanilla-flower { - &:before { - content: '\EB73'; - } -} -.game-icon-vine-flower { - &:before { - content: '\EB74'; - } -} -.game-icon-vine-whip { - &:before { - content: '\EB75'; - } -} -.game-icon-viola { - &:before { - content: '\EB76'; - } -} -.game-icon-wheat { - &:before { - content: '\EB77'; - } -} -.game-icon-poppy { - &:before { - content: '\EB78'; - } -} -.game-icon-backpack { - &:before { - content: '\EB79'; - } -} -.game-icon-beach-bag { - &:before { - content: '\EB7A'; - } -} -.game-icon-briefcase { - &:before { - content: '\EB7B'; - } -} -.game-icon-chips-bag { - &:before { - content: '\EB7C'; - } -} -.game-icon-disc-golf-bag { - &:before { - content: '\EB7D'; - } -} -.game-icon-duffel-bag { - &:before { - content: '\EB7E'; - } -} -.game-icon-flour { - &:before { - content: '\EB7F'; - } -} -.game-icon-gym-bag { - &:before { - content: '\EB80'; - } -} -.game-icon-hand-bag { - &:before { - content: '\EB81'; - } -} -.game-icon-light-backpack { - &:before { - content: '\EB82'; - } -} -.game-icon-powder-bag { - &:before { - content: '\EB83'; - } -} -.game-icon-school-bag { - &:before { - content: '\EB84'; - } -} -.game-icon-shopping-bag { - &:before { - content: '\EB85'; - } -} -.game-icon-suitcase { - &:before { - content: '\EB86'; - } -} -.game-icon-knapsack { - &:before { - content: '\EB87'; - } -} -.game-icon-shiny-purse { - &:before { - content: '\EB88'; - } -} -.game-icon-swap-bag { - &:before { - content: '\EB89'; - } -} -.game-icon-coins-pile { - &:before { - content: '\EB8A'; - } -} -.game-icon-gold-nuggets { - &:before { - content: '\EB8B'; - } -} -.game-icon-money-stack { - &:before { - content: '\EB8C'; - } -} -.game-icon-piggy-bank { - &:before { - content: '\EB8D'; - } -} -.game-icon-price-tag { - &:before { - content: '\EB8E'; - } -} -.game-icon-swipe-card { - &:before { - content: '\EB8F'; - } -} -.game-icon-ticket { - &:before { - content: '\EB90'; - } -} -.game-icon-wallet { - &:before { - content: '\EB91'; - } -} -.game-icon-knee-cap { - &:before { - content: '\EB92'; - } -} -.game-icon-pelvis-bone { - &:before { - content: '\EB93'; - } -} -.game-icon-backbone-shell { - &:before { - content: '\EB94'; - } -} -.game-icon-crossed-bones { - &:before { - content: '\EB95'; - } -} -.game-icon-horn-internal { - &:before { - content: '\EB96'; - } -} -.game-icon-jawbone { - &:before { - content: '\EB97'; - } -} -.game-icon-ribcage { - &:before { - content: '\EB98'; - } -} -.game-icon-spinal-coil { - &:before { - content: '\EB99'; - } -} -.game-icon-joint { - &:before { - content: '\EB9A'; - } -} -.game-icon-swirled-shell { - &:before { - content: '\EB9B'; - } -} -.game-icon-bolt-bomb { - &:before { - content: '\EB9C'; - } -} -.game-icon-dynamite { - &:before { - content: '\EB9D'; - } -} -.game-icon-falling-bomb { - &:before { - content: '\EB9E'; - } -} -.game-icon-holy-hand-grenade { - &:before { - content: '\EB9F'; - } -} -.game-icon-time-dynamite { - &:before { - content: '\EBA0'; - } -} -.game-icon-cluster-bomb { - &:before { - content: '\EBA1'; - } -} -.game-icon-fission { - &:before { - content: '\EBA2'; - } -} -.game-icon-land-mine { - &:before { - content: '\EBA3'; - } -} -.game-icon-letter-bomb { - &:before { - content: '\EBA4'; - } -} -.game-icon-paper-bomb { - &:before { - content: '\EBA5'; - } -} -.game-icon-rolling-bomb { - &:before { - content: '\EBA6'; - } -} -.game-icon-sparky-bomb { - &:before { - content: '\EBA7'; - } -} -.game-icon-squib { - &:before { - content: '\EBA8'; - } -} -.game-icon-time-bomb { - &:before { - content: '\EBA9'; - } -} -.game-icon-unlit-bomb { - &:before { - content: '\EBAA'; - } -} -.game-icon-bundle-grenade { - &:before { - content: '\EBAB'; - } -} -.game-icon-minefield { - &:before { - content: '\EBAC'; - } -} -.game-icon-ballerina-shoes { - &:before { - content: '\EBAD'; - } -} -.game-icon-banana-peel { - &:before { - content: '\EBAE'; - } -} -.game-icon-chelsea-boot { - &:before { - content: '\EBAF'; - } -} -.game-icon-converse-shoe { - &:before { - content: '\EBB0'; - } -} -.game-icon-cowboy-boot { - &:before { - content: '\EBB1'; - } -} -.game-icon-female-legs { - &:before { - content: '\EBB2'; - } -} -.game-icon-flip-flops { - &:before { - content: '\EBB3'; - } -} -.game-icon-hieroglyph-legs { - &:before { - content: '\EBB4'; - } -} -.game-icon-high-heel { - &:before { - content: '\EBB5'; - } -} -.game-icon-leg-armor { - &:before { - content: '\EBB6'; - } -} -.game-icon-leg { - &:before { - content: '\EBB7'; - } -} -.game-icon-roller-skate { - &:before { - content: '\EBB8'; - } -} -.game-icon-rubber-boot { - &:before { - content: '\EBB9'; - } -} -.game-icon-running-shoe { - &:before { - content: '\EBBA'; - } -} -.game-icon-slippers { - &:before { - content: '\EBBB'; - } -} -.game-icon-socks { - &:before { - content: '\EBBC'; - } -} -.game-icon-sonic-shoes { - &:before { - content: '\EBBD'; - } -} -.game-icon-sticky-boot { - &:before { - content: '\EBBE'; - } -} -.game-icon-barefoot { - &:before { - content: '\EBBF'; - } -} -.game-icon-boot-prints { - &:before { - content: '\EBC0'; - } -} -.game-icon-boots { - &:before { - content: '\EBC1'; - } -} -.game-icon-foot-trip { - &:before { - content: '\EBC2'; - } -} -.game-icon-footprint { - &:before { - content: '\EBC3'; - } -} -.game-icon-leather-boot { - &:before { - content: '\EBC4'; - } -} -.game-icon-nailed-foot { - &:before { - content: '\EBC5'; - } -} -.game-icon-quake-stomp { - &:before { - content: '\EBC6'; - } -} -.game-icon-tread { - &:before { - content: '\EBC7'; - } -} -.game-icon-tripwire { - &:before { - content: '\EBC8'; - } -} -.game-icon-walking-boot { - &:before { - content: '\EBC9'; - } -} -.game-icon-beet { - &:before { - content: '\EBCA'; - } -} -.game-icon-super-mushroom { - &:before { - content: '\EBCB'; - } -} -.game-icon-minerals { - &:before { - content: '\EBCC'; - } -} -.game-icon-ore { - &:before { - content: '\EBCD'; - } -} -.game-icon-crystal-shrine { - &:before { - content: '\EBCE'; - } -} -.game-icon-diamond-trophy { - &:before { - content: '\EBCF'; - } -} -.game-icon-mineral-pearls { - &:before { - content: '\EBD0'; - } -} -.game-icon-checkered-diamond { - &:before { - content: '\EBD1'; - } -} -.game-icon-crystal-bars { - &:before { - content: '\EBD2'; - } -} -.game-icon-crystal-cluster { - &:before { - content: '\EBD3'; - } -} -.game-icon-crystal-eye { - &:before { - content: '\EBD4'; - } -} -.game-icon-crystal-shine { - &:before { - content: '\EBD5'; - } -} -.game-icon-diamond-hard { - &:before { - content: '\EBD6'; - } -} -.game-icon-floating-crystal { - &:before { - content: '\EBD7'; - } -} -.game-icon-gems { - &:before { - content: '\EBD8'; - } -} -.game-icon-mineral-heart { - &:before { - content: '\EBD9'; - } -} -.game-icon-fossil { - &:before { - content: '\EBDA'; - } -} -.game-icon-gold-shell { - &:before { - content: '\EBDB'; - } -} -.game-icon-scallop { - &:before { - content: '\EBDC'; - } -} -.game-icon-sewed-shell { - &:before { - content: '\EBDD'; - } -} -.game-icon-spiral-shell { - &:before { - content: '\EBDE'; - } -} -.game-icon-triple-shells { - &:before { - content: '\EBDF'; - } -} -.game-icon-twin-shell { - &:before { - content: '\EBE0'; - } -} -.game-icon-asteroid { - &:before { - content: '\EBE1'; - } -} -.game-icon-colombian-statue { - &:before { - content: '\EBE2'; - } -} -.game-icon-dig-hole { - &:before { - content: '\EBE3'; - } -} -.game-icon-falling-rocks { - &:before { - content: '\EBE4'; - } -} -.game-icon-stone-bridge { - &:before { - content: '\EBE5'; - } -} -.game-icon-stone-pile { - &:before { - content: '\EBE6'; - } -} -.game-icon-bridge { - &:before { - content: '\EBE7'; - } -} -.game-icon-crags { - &:before { - content: '\EBE8'; - } -} -.game-icon-meteor-impact { - &:before { - content: '\EBE9'; - } -} -.game-icon-rune-stone { - &:before { - content: '\EBEA'; - } -} -.game-icon-stone-block { - &:before { - content: '\EBEB'; - } -} -.game-icon-stone-sphere { - &:before { - content: '\EBEC'; - } -} -.game-icon-stone-throne { - &:before { - content: '\EBED'; - } -} -.game-icon-bow-tie-ribbon { - &:before { - content: '\EBEE'; - } -} -.game-icon-champagne-cork { - &:before { - content: '\EBEF'; - } -} -.game-icon-champions { - &:before { - content: '\EBF0'; - } -} -.game-icon-diploma { - &:before { - content: '\EBF1'; - } -} -.game-icon-family-tree { - &:before { - content: '\EBF2'; - } -} -.game-icon-finish-line { - &:before { - content: '\EBF3'; - } -} -.game-icon-histogram { - &:before { - content: '\EBF4'; - } -} -.game-icon-laurels-trophy { - &:before { - content: '\EBF5'; - } -} -.game-icon-network-bars { - &:before { - content: '\EBF6'; - } -} -.game-icon-organigram { - &:before { - content: '\EBF7'; - } -} -.game-icon-podium-second { - &:before { - content: '\EBF8'; - } -} -.game-icon-podium-third { - &:before { - content: '\EBF9'; - } -} -.game-icon-podium-winner { - &:before { - content: '\EBFA'; - } -} -.game-icon-podium { - &:before { - content: '\EBFB'; - } -} -.game-icon-private-first-class { - &:before { - content: '\EBFC'; - } -} -.game-icon-private { - &:before { - content: '\EBFD'; - } -} -.game-icon-ribbon-medal { - &:before { - content: '\EBFE'; - } -} -.game-icon-sergeant { - &:before { - content: '\EBFF'; - } -} -.game-icon-sport-medal { - &:before { - content: '\EC00'; - } -} -.game-icon-trophies-shelf { - &:before { - content: '\EC01'; - } -} -.game-icon-trophy-cup { - &:before { - content: '\EC02'; - } -} -.game-icon-level-four-advanced { - &:before { - content: '\EC03'; - } -} -.game-icon-level-four { - &:before { - content: '\EC04'; - } -} -.game-icon-level-three-advanced { - &:before { - content: '\EC05'; - } -} -.game-icon-level-three { - &:before { - content: '\EC06'; - } -} -.game-icon-level-two-advanced { - &:before { - content: '\EC07'; - } -} -.game-icon-level-two { - &:before { - content: '\EC08'; - } -} -.game-icon-achievement { - &:before { - content: '\EC09'; - } -} -.game-icon-rank-1 { - &:before { - content: '\EC0A'; - } -} -.game-icon-rank-2 { - &:before { - content: '\EC0B'; - } -} -.game-icon-rank-3 { - &:before { - content: '\EC0C'; - } -} -.game-icon-3d-hammer { - &:before { - content: '\EC0D'; - } -} -.game-icon-aspergillum { - &:before { - content: '\EC0E'; - } -} -.game-icon-box-cutter { - &:before { - content: '\EC0F'; - } -} -.game-icon-broom { - &:before { - content: '\EC10'; - } -} -.game-icon-clamp { - &:before { - content: '\EC11'; - } -} -.game-icon-crook-flail { - &:before { - content: '\EC12'; - } -} -.game-icon-gardening-shears { - &:before { - content: '\EC13'; - } -} -.game-icon-hair-strands { - &:before { - content: '\EC14'; - } -} -.game-icon-hammer-break { - &:before { - content: '\EC15'; - } -} -.game-icon-hole-ladder { - &:before { - content: '\EC16'; - } -} -.game-icon-hook { - &:before { - content: '\EC17'; - } -} -.game-icon-injustice { - &:before { - content: '\EC18'; - } -} -.game-icon-ladders-platform { - &:before { - content: '\EC19'; - } -} -.game-icon-large-paint-brush { - &:before { - content: '\EC1A'; - } -} -.game-icon-lockpicks { - &:before { - content: '\EC1B'; - } -} -.game-icon-paint-brush { - &:before { - content: '\EC1C'; - } -} -.game-icon-paint-bucket { - &:before { - content: '\EC1D'; - } -} -.game-icon-paint-roller { - &:before { - content: '\EC1E'; - } -} -.game-icon-plow { - &:before { - content: '\EC1F'; - } -} -.game-icon-plunger { - &:before { - content: '\EC20'; - } -} -.game-icon-rake { - &:before { - content: '\EC21'; - } -} -.game-icon-shears { - &:before { - content: '\EC22'; - } -} -.game-icon-swiss-army-knife { - &:before { - content: '\EC23'; - } -} -.game-icon-toy-mallet { - &:before { - content: '\EC24'; - } -} -.game-icon-trowel { - &:before { - content: '\EC25'; - } -} -.game-icon-weight { - &:before { - content: '\EC26'; - } -} -.game-icon-claw-hammer { - &:before { - content: '\EC27'; - } -} -.game-icon-dig-dug { - &:before { - content: '\EC28'; - } -} -.game-icon-fishhook-fork { - &:before { - content: '\EC29'; - } -} -.game-icon-flat-hammer { - &:before { - content: '\EC2A'; - } -} -.game-icon-gavel { - &:before { - content: '\EC2B'; - } -} -.game-icon-gear-hammer { - &:before { - content: '\EC2C'; - } -} -.game-icon-hammer-drop { - &:before { - content: '\EC2D'; - } -} -.game-icon-hammer-nails { - &:before { - content: '\EC2E'; - } -} -.game-icon-lightning-spanner { - &:before { - content: '\EC2F'; - } -} -.game-icon-scissors-2 { - &:before { - content: '\EC30'; - } -} -.game-icon-screwdriver { - &:before { - content: '\EC31'; - } -} -.game-icon-sewing-needle { - &:before { - content: '\EC32'; - } -} -.game-icon-spade { - &:before { - content: '\EC33'; - } -} -.game-icon-spanner { - &:before { - content: '\EC34'; - } -} -.game-icon-sword-smithing { - &:before { - content: '\EC35'; - } -} -.game-icon-thermometer-scale { - &:before { - content: '\EC36'; - } -} -.game-icon-tinker { - &:before { - content: '\EC37'; - } -} -.game-icon-trample { - &:before { - content: '\EC38'; - } -} -.game-icon-wrench { - &:before { - content: '\EC39'; - } -} -.game-icon-pause-button { - &:before { - content: '\EC3A'; - } -} -.game-icon-play-button { - &:before { - content: '\EC3B'; - } -} -.game-icon-abacus { - &:before { - content: '\EC3C'; - } -} -.game-icon-calendar { - &:before { - content: '\EC3D'; - } -} -.game-icon-checklist { - &:before { - content: '\EC3E'; - } -} -.game-icon-circle { - &:before { - content: '\EC3F'; - } -} -.game-icon-clapperboard { - &:before { - content: '\EC40'; - } -} -.game-icon-confirmed { - &:before { - content: '\EC41'; - } -} -.game-icon-cube { - &:before { - content: '\EC42'; - } -} -.game-icon-fast-backward-button { - &:before { - content: '\EC43'; - } -} -.game-icon-fast-forward-button { - &:before { - content: '\EC44'; - } -} -.game-icon-files { - &:before { - content: '\EC45'; - } -} -.game-icon-film-projector { - &:before { - content: '\EC46'; - } -} -.game-icon-full-folder { - &:before { - content: '\EC47'; - } -} -.game-icon-funnel { - &:before { - content: '\EC48'; - } -} -.game-icon-gamepad { - &:before { - content: '\EC49'; - } -} -.game-icon-hamburger-menu { - &:before { - content: '\EC4A'; - } -} -.game-icon-highlighter { - &:before { - content: '\EC4B'; - } -} -.game-icon-joystick { - &:before { - content: '\EC4C'; - } -} -.game-icon-keyboard { - &:before { - content: '\EC4D'; - } -} -.game-icon-load { - &:before { - content: '\EC4E'; - } -} -.game-icon-mailbox { - &:before { - content: '\EC4F'; - } -} -.game-icon-mouse-2 { - &:before { - content: '\EC50'; - } -} -.game-icon-newspaper { - &:before { - content: '\EC51'; - } -} -.game-icon-next-button { - &:before { - content: '\EC52'; - } -} -.game-icon-open-folder { - &:before { - content: '\EC53'; - } -} -.game-icon-palette { - &:before { - content: '\EC54'; - } -} -.game-icon-pencil-brush { - &:before { - content: '\EC55'; - } -} -.game-icon-pencil { - &:before { - content: '\EC56'; - } -} -.game-icon-photo-camera { - &:before { - content: '\EC57'; - } -} -.game-icon-pie-chart { - &:before { - content: '\EC58'; - } -} -.game-icon-pin { - &:before { - content: '\EC59'; - } -} -.game-icon-plain-circle { - &:before { - content: '\EC5A'; - } -} -.game-icon-plain-square { - &:before { - content: '\EC5B'; - } -} -.game-icon-previous-button { - &:before { - content: '\EC5C'; - } -} -.game-icon-resize { - &:before { - content: '\EC5D'; - } -} -.game-icon-save { - &:before { - content: '\EC5E'; - } -} -.game-icon-share { - &:before { - content: '\EC5F'; - } -} -.game-icon-shopping-cart { - &:before { - content: '\EC60'; - } -} -.game-icon-square { - &:before { - content: '\EC61'; - } -} -.game-icon-toggles { - &:before { - content: '\EC62'; - } -} -.game-icon-trash-can { - &:before { - content: '\EC63'; - } -} -.game-icon-unbalanced { - &:before { - content: '\EC64'; - } -} -.game-icon-vibrating-smartphone { - &:before { - content: '\EC65'; - } -} -.game-icon-video-camera { - &:before { - content: '\EC66'; - } -} -.game-icon-bookmark { - &:before { - content: '\EC67'; - } -} -.game-icon-envelope { - &:before { - content: '\EC68'; - } -} -.game-icon-open-book { - &:before { - content: '\EC69'; - } -} -.game-icon-retro-controller { - &:before { - content: '\EC6A'; - } -} -.game-icon-smartphone { - &:before { - content: '\EC6B'; - } -} -.game-icon-tablet { - &:before { - content: '\EC6C'; - } -} -.game-icon-soda-can { - &:before { - content: '\EC6D'; - } -} -.game-icon-baby-bottle { - &:before { - content: '\EC6E'; - } -} -.game-icon-beer-bottle { - &:before { - content: '\EC6F'; - } -} -.game-icon-delicate-perfume { - &:before { - content: '\EC70'; - } -} -.game-icon-ketchup { - &:before { - content: '\EC71'; - } -} -.game-icon-water-flask { - &:before { - content: '\EC72'; - } -} -.game-icon-wine-bottle { - &:before { - content: '\EC73'; - } -} -.game-icon-bottled-bolt { - &:before { - content: '\EC74'; - } -} -.game-icon-brandy-bottle { - &:before { - content: '\EC75'; - } -} -.game-icon-bubbling-flask { - &:before { - content: '\EC76'; - } -} -.game-icon-perfume-bottle { - &:before { - content: '\EC77'; - } -} -.game-icon-potion-ball { - &:before { - content: '\EC78'; - } -} -.game-icon-round-bottom-flask { - &:before { - content: '\EC79'; - } -} -.game-icon-spiral-bottle { - &:before { - content: '\EC7A'; - } -} -.game-icon-square-bottle { - &:before { - content: '\EC7B'; - } -} -.game-icon-standing-potion { - &:before { - content: '\EC7C'; - } -} -.game-icon-potion-of-madness { - &:before { - content: '\EC7D'; - } -} -.game-icon-almond { - &:before { - content: '\EC7E'; - } -} -.game-icon-asparagus { - &:before { - content: '\EC7F'; - } -} -.game-icon-avocado { - &:before { - content: '\EC80'; - } -} -.game-icon-banana { - &:before { - content: '\EC81'; - } -} -.game-icon-bread-slice { - &:before { - content: '\EC82'; - } -} -.game-icon-bread { - &:before { - content: '\EC83'; - } -} -.game-icon-candy-canes { - &:before { - content: '\EC84'; - } -} -.game-icon-cherry { - &:before { - content: '\EC85'; - } -} -.game-icon-chili-pepper { - &:before { - content: '\EC86'; - } -} -.game-icon-cookie { - &:before { - content: '\EC87'; - } -} -.game-icon-croissant { - &:before { - content: '\EC88'; - } -} -.game-icon-cupcake { - &:before { - content: '\EC89'; - } -} -.game-icon-dango { - &:before { - content: '\EC8A'; - } -} -.game-icon-doner-kebab { - &:before { - content: '\EC8B'; - } -} -.game-icon-fast-noodles { - &:before { - content: '\EC8C'; - } -} -.game-icon-french-fries { - &:before { - content: '\EC8D'; - } -} -.game-icon-full-pizza { - &:before { - content: '\EC8E'; - } -} -.game-icon-gingerbread-man { - &:before { - content: '\EC8F'; - } -} -.game-icon-hamburger { - &:before { - content: '\EC90'; - } -} -.game-icon-hot-meal { - &:before { - content: '\EC91'; - } -} -.game-icon-jelly-beans { - &:before { - content: '\EC92'; - } -} -.game-icon-jelly { - &:before { - content: '\EC93'; - } -} -.game-icon-kiwi-fruit { - &:before { - content: '\EC94'; - } -} -.game-icon-mushrooms { - &:before { - content: '\EC95'; - } -} -.game-icon-nachos { - &:before { - content: '\EC96'; - } -} -.game-icon-noodles { - &:before { - content: '\EC97'; - } -} -.game-icon-oden { - &:before { - content: '\EC98'; - } -} -.game-icon-pear { - &:before { - content: '\EC99'; - } -} -.game-icon-pimiento { - &:before { - content: '\EC9A'; - } -} -.game-icon-pizza-slice { - &:before { - content: '\EC9B'; - } -} -.game-icon-popcorn { - &:before { - content: '\EC9C'; - } -} -.game-icon-potato { - &:before { - content: '\EC9D'; - } -} -.game-icon-pretzel { - &:before { - content: '\EC9E'; - } -} -.game-icon-raw-egg { - &:before { - content: '\EC9F'; - } -} -.game-icon-sandwich { - &:before { - content: '\ECA0'; - } -} -.game-icon-sesame { - &:before { - content: '\ECA1'; - } -} -.game-icon-sliced-mushroom { - &:before { - content: '\ECA2'; - } -} -.game-icon-spiral-lollipop { - &:before { - content: '\ECA3'; - } -} -.game-icon-stairs-cake { - &:before { - content: '\ECA4'; - } -} -.game-icon-stomach { - &:before { - content: '\ECA5'; - } -} -.game-icon-tacos { - &:before { - content: '\ECA6'; - } -} -.game-icon-tangerine { - &:before { - content: '\ECA7'; - } -} -.game-icon-tomato { - &:before { - content: '\ECA8'; - } -} -.game-icon-cake-slice { - &:before { - content: '\ECA9'; - } -} -.game-icon-cheese-wedge { - &:before { - content: '\ECAA'; - } -} -.game-icon-cool-spices { - &:before { - content: '\ECAB'; - } -} -.game-icon-honeypot { - &:before { - content: '\ECAC'; - } -} -.game-icon-meat-hook { - &:before { - content: '\ECAD'; - } -} -.game-icon-mushroom-gills { - &:before { - content: '\ECAE'; - } -} -.game-icon-mushroom { - &:before { - content: '\ECAF'; - } -} -.game-icon-pie-slice { - &:before { - content: '\ECB0'; - } -} -.game-icon-powder { - &:before { - content: '\ECB1'; - } -} -.game-icon-salt-shaker { - &:before { - content: '\ECB2'; - } -} -.game-icon-shiny-apple { - &:before { - content: '\ECB3'; - } -} -.game-icon-sliced-bread { - &:before { - content: '\ECB4'; - } -} -.game-icon-wrapped-sweet { - &:before { - content: '\ECB5'; - } -} -.game-icon-chocolate-bar { - &:before { - content: '\ECB6'; - } -} -.game-icon-peanut { - &:before { - content: '\ECB7'; - } -} -.game-icon-armored-pants { - &:before { - content: '\ECB8'; - } -} -.game-icon-american-football-player { - &:before { - content: '\ECB9'; - } -} -.game-icon-bracer { - &:before { - content: '\ECBA'; - } -} -.game-icon-cape-armor { - &:before { - content: '\ECBB'; - } -} -.game-icon-chest-armor { - &:before { - content: '\ECBC'; - } -} -.game-icon-elbow-pad { - &:before { - content: '\ECBD'; - } -} -.game-icon-heart-armor { - &:before { - content: '\ECBE'; - } -} -.game-icon-knee-pad { - &:before { - content: '\ECBF'; - } -} -.game-icon-leather-armor { - &:before { - content: '\ECC0'; - } -} -.game-icon-loincloth { - &:before { - content: '\ECC1'; - } -} -.game-icon-metal-skirt { - &:before { - content: '\ECC2'; - } -} -.game-icon-morph-ball { - &:before { - content: '\ECC3'; - } -} -.game-icon-saiyan-suit { - &:before { - content: '\ECC4'; - } -} -.game-icon-armor-vest { - &:before { - content: '\ECC5'; - } -} -.game-icon-breastplate { - &:before { - content: '\ECC6'; - } -} -.game-icon-dorsal-scales { - &:before { - content: '\ECC7'; - } -} -.game-icon-lamellar { - &:before { - content: '\ECC8'; - } -} -.game-icon-leather-vest { - &:before { - content: '\ECC9'; - } -} -.game-icon-mail-shirt { - &:before { - content: '\ECCA'; - } -} -.game-icon-plastron { - &:before { - content: '\ECCB'; - } -} -.game-icon-scale-mail { - &:before { - content: '\ECCC'; - } -} -.game-icon-shoulder-scales { - &:before { - content: '\ECCD'; - } -} -.game-icon-space-suit { - &:before { - content: '\ECCE'; - } -} -.game-icon-bracers { - &:before { - content: '\ECCF'; - } -} -.game-icon-chain-mail { - &:before { - content: '\ECD0'; - } -} -.game-icon-ample-dress { - &:before { - content: '\ECD1'; - } -} -.game-icon-basketball-jersey { - &:before { - content: '\ECD2'; - } -} -.game-icon-bow-tie { - &:before { - content: '\ECD3'; - } -} -.game-icon-cape { - &:before { - content: '\ECD4'; - } -} -.game-icon-clothes { - &:before { - content: '\ECD5'; - } -} -.game-icon-clothespin { - &:before { - content: '\ECD6'; - } -} -.game-icon-hanger { - &:before { - content: '\ECD7'; - } -} -.game-icon-heavy-collar { - &:before { - content: '\ECD8'; - } -} -.game-icon-hoodie { - &:before { - content: '\ECD9'; - } -} -.game-icon-lab-coat { - &:before { - content: '\ECDA'; - } -} -.game-icon-large-dress { - &:before { - content: '\ECDB'; - } -} -.game-icon-moncler-jacket { - &:before { - content: '\ECDC'; - } -} -.game-icon-pirate-coat { - &:before { - content: '\ECDD'; - } -} -.game-icon-polo-shirt { - &:before { - content: '\ECDE'; - } -} -.game-icon-poncho { - &:before { - content: '\ECDF'; - } -} -.game-icon-rolled-cloth { - &:before { - content: '\ECE0'; - } -} -.game-icon-sewing-string { - &:before { - content: '\ECE1'; - } -} -.game-icon-shirt-button { - &:before { - content: '\ECE2'; - } -} -.game-icon-shorts { - &:before { - content: '\ECE3'; - } -} -.game-icon-skirt { - &:before { - content: '\ECE4'; - } -} -.game-icon-sleeveless-jacket { - &:before { - content: '\ECE5'; - } -} -.game-icon-sleeveless-top { - &:before { - content: '\ECE6'; - } -} -.game-icon-t-shirt { - &:before { - content: '\ECE7'; - } -} -.game-icon-tank-top { - &:before { - content: '\ECE8'; - } -} -.game-icon-tie { - &:before { - content: '\ECE9'; - } -} -.game-icon-travel-dress { - &:before { - content: '\ECEA'; - } -} -.game-icon-underwear-shorts { - &:before { - content: '\ECEB'; - } -} -.game-icon-underwear { - &:before { - content: '\ECEC'; - } -} -.game-icon-washing-machine { - &:before { - content: '\ECED'; - } -} -.game-icon-belt { - &:before { - content: '\ECEE'; - } -} -.game-icon-cloak { - &:before { - content: '\ECEF'; - } -} -.game-icon-shirt { - &:before { - content: '\ECF0'; - } -} -.game-icon-trousers { - &:before { - content: '\ECF1'; - } -} -.game-icon-belt-buckles { - &:before { - content: '\ECF2'; - } -} -.game-icon-trousers-2 { - &:before { - content: '\ECF3'; - } -} -.game-icon-dress { - &:before { - content: '\ECF4'; - } -} -.game-icon-bullet-impacts { - &:before { - content: '\ECF5'; - } -} -.game-icon-cowboy-holster { - &:before { - content: '\ECF6'; - } -} -.game-icon-gun-stock { - &:before { - content: '\ECF7'; - } -} -.game-icon-machine-gun-magazine { - &:before { - content: '\ECF8'; - } -} -.game-icon-pirate-cannon { - &:before { - content: '\ECF9'; - } -} -.game-icon-shotgun-rounds { - &:before { - content: '\ECFA'; - } -} -.game-icon-ak47 { - &:before { - content: '\ECFB'; - } -} -.game-icon-ak47u { - &:before { - content: '\ECFC'; - } -} -.game-icon-colt-m1911 { - &:before { - content: '\ECFD'; - } -} -.game-icon-cz-skorpion { - &:before { - content: '\ECFE'; - } -} -.game-icon-desert-eagle { - &:before { - content: '\ECFF'; - } -} -.game-icon-fn-fal { - &:before { - content: '\ED00'; - } -} -.game-icon-m3-grease-gun { - &:before { - content: '\ED01'; - } -} -.game-icon-mac-10 { - &:before { - content: '\ED02'; - } -} -.game-icon-machine-gun { - &:before { - content: '\ED03'; - } -} -.game-icon-mp5-2 { - &:before { - content: '\ED04'; - } -} -.game-icon-mp5k { - &:before { - content: '\ED05'; - } -} -.game-icon-musket { - &:before { - content: '\ED06'; - } -} -.game-icon-p90 { - &:before { - content: '\ED07'; - } -} -.game-icon-revolver-2 { - &:before { - content: '\ED08'; - } -} -.game-icon-spectre-m4 { - &:before { - content: '\ED09'; - } -} -.game-icon-thompson-m1928 { - &:before { - content: '\ED0A'; - } -} -.game-icon-winchester-rifle { - &:before { - content: '\ED0B'; - } -} -.game-icon-3d-glasses { - &:before { - content: '\ED0C'; - } -} -.game-icon-director-chair { - &:before { - content: '\ED0D'; - } -} -.game-icon-inauguration { - &:before { - content: '\ED0E'; - } -} -.game-icon-red-carpet { - &:before { - content: '\ED0F'; - } -} -.game-icon-theater { - &:before { - content: '\ED10'; - } -} -.game-icon-cyber-eye { - &:before { - content: '\ED11'; - } -} -.game-icon-egg-eye { - &:before { - content: '\ED12'; - } -} -.game-icon-eyelashes { - &:before { - content: '\ED13'; - } -} -.game-icon-hunter-eyes { - &:before { - content: '\ED14'; - } -} -.game-icon-lock-spy { - &:before { - content: '\ED15'; - } -} -.game-icon-tired-eye { - &:before { - content: '\ED16'; - } -} -.game-icon-bolt-eye { - &:before { - content: '\ED17'; - } -} -.game-icon-brass-eye { - &:before { - content: '\ED18'; - } -} -.game-icon-croissants-pupil { - &:before { - content: '\ED19'; - } -} -.game-icon-eyeball { - &:before { - content: '\ED1A'; - } -} -.game-icon-falling-eye { - &:before { - content: '\ED1B'; - } -} -.game-icon-lightning-tear { - &:before { - content: '\ED1C'; - } -} -.game-icon-octogonal-eye { - &:before { - content: '\ED1D'; - } -} -.game-icon-semi-closed-eye { - &:before { - content: '\ED1E'; - } -} -.game-icon-sheikah-eye { - &:before { - content: '\ED1F'; - } -} -.game-icon-six-eyes { - &:before { - content: '\ED20'; - } -} -.game-icon-sunken-eye { - &:before { - content: '\ED21'; - } -} -.game-icon-surrounded-eye { - &:before { - content: '\ED22'; - } -} -.game-icon-templar-eye { - &:before { - content: '\ED23'; - } -} -.game-icon-third-eye { - &:before { - content: '\ED24'; - } -} -.game-icon-evil-eyes { - &:before { - content: '\ED25'; - } -} -.game-icon-sight-disabled { - &:before { - content: '\ED26'; - } -} -.game-icon-glass-ball { - &:before { - content: '\ED27'; - } -} -.game-icon-lightning-dome { - &:before { - content: '\ED28'; - } -} -.game-icon-corked-tube { - &:before { - content: '\ED29'; - } -} -.game-icon-crystal-ball { - &:before { - content: '\ED2A'; - } -} -.game-icon-dragon-balls { - &:before { - content: '\ED2B'; - } -} -.game-icon-empty-hourglass { - &:before { - content: '\ED2C'; - } -} -.game-icon-glass-heart { - &:before { - content: '\ED2D'; - } -} -.game-icon-test-tubes { - &:before { - content: '\ED2E'; - } -} -.game-icon-babyfoot-players { - &:before { - content: '\ED2F'; - } -} -.game-icon-balloon-dog { - &:before { - content: '\ED30'; - } -} -.game-icon-beach-ball { - &:before { - content: '\ED31'; - } -} -.game-icon-game-console { - &:before { - content: '\ED32'; - } -} -.game-icon-kite { - &:before { - content: '\ED33'; - } -} -.game-icon-marbles { - &:before { - content: '\ED34'; - } -} -.game-icon-paper-plane { - &:before { - content: '\ED35'; - } -} -.game-icon-paper-windmill { - &:before { - content: '\ED36'; - } -} -.game-icon-pendulum-swing { - &:before { - content: '\ED37'; - } -} -.game-icon-pinball-flipper { - &:before { - content: '\ED38'; - } -} -.game-icon-ping-pong-bat { - &:before { - content: '\ED39'; - } -} -.game-icon-puzzle { - &:before { - content: '\ED3A'; - } -} -.game-icon-skipping-rope { - &:before { - content: '\ED3B'; - } -} -.game-icon-soccer-ball { - &:before { - content: '\ED3C'; - } -} -.game-icon-balloons { - &:before { - content: '\ED3D'; - } -} -.game-icon-jigsaw-piece { - &:before { - content: '\ED3E'; - } -} -.game-icon-voodoo-doll { - &:before { - content: '\ED3F'; - } -} -.game-icon-console-controller { - &:before { - content: '\ED40'; - } -} -.game-icon-spinning-top { - &:before { - content: '\ED41'; - } -} -.game-icon-bar-stool { - &:before { - content: '\ED42'; - } -} -.game-icon-bathtub { - &:before { - content: '\ED43'; - } -} -.game-icon-bed { - &:before { - content: '\ED44'; - } -} -.game-icon-bookshelf { - &:before { - content: '\ED45'; - } -} -.game-icon-bunk-beds { - &:before { - content: '\ED46'; - } -} -.game-icon-cuckoo-clock { - &:before { - content: '\ED47'; - } -} -.game-icon-desk { - &:before { - content: '\ED48'; - } -} -.game-icon-door-handle { - &:before { - content: '\ED49'; - } -} -.game-icon-door { - &:before { - content: '\ED4A'; - } -} -.game-icon-electrical-socket { - &:before { - content: '\ED4B'; - } -} -.game-icon-laptop { - &:before { - content: '\ED4C'; - } -} -.game-icon-lipstick { - &:before { - content: '\ED4D'; - } -} -.game-icon-lockers { - &:before { - content: '\ED4E'; - } -} -.game-icon-magic-broom { - &:before { - content: '\ED4F'; - } -} -.game-icon-office-chair { - &:before { - content: '\ED50'; - } -} -.game-icon-paper-clip { - &:before { - content: '\ED51'; - } -} -.game-icon-party-popper { - &:before { - content: '\ED52'; - } -} -.game-icon-person-in-bed { - &:before { - content: '\ED53'; - } -} -.game-icon-pillow { - &:before { - content: '\ED54'; - } -} -.game-icon-rocking-chair { - &:before { - content: '\ED55'; - } -} -.game-icon-soap { - &:before { - content: '\ED56'; - } -} -.game-icon-sofa { - &:before { - content: '\ED57'; - } -} -.game-icon-towel { - &:before { - content: '\ED58'; - } -} -.game-icon-weight-scale { - &:before { - content: '\ED59'; - } -} -.game-icon-wifi-router { - &:before { - content: '\ED5A'; - } -} -.game-icon-wooden-chair { - &:before { - content: '\ED5B'; - } -} -.game-icon-fountain-pen { - &:before { - content: '\ED5C'; - } -} -.game-icon-papers { - &:before { - content: '\ED5D'; - } -} -.game-icon-quill-ink { - &:before { - content: '\ED5E'; - } -} -.game-icon-tied-scroll { - &:before { - content: '\ED5F'; - } -} -.game-icon-calculator { - &:before { - content: '\ED60'; - } -} -.game-icon-cctv-camera { - &:before { - content: '\ED61'; - } -} -.game-icon-charging { - &:before { - content: '\ED62'; - } -} -.game-icon-cpu { - &:before { - content: '\ED63'; - } -} -.game-icon-electrical-resistance { - &:before { - content: '\ED64'; - } -} -.game-icon-server-rack { - &:before { - content: '\ED65'; - } -} -.game-icon-smartphone-2 { - &:before { - content: '\ED66'; - } -} -.game-icon-tv-remote { - &:before { - content: '\ED67'; - } -} -.game-icon-usb-key { - &:before { - content: '\ED68'; - } -} -.game-icon-watch { - &:before { - content: '\ED69'; - } -} -.game-icon-batteries { - &:before { - content: '\ED6A'; - } -} -.game-icon-cpu-shot { - &:before { - content: '\ED6B'; - } -} -.game-icon-disc { - &:before { - content: '\ED6C'; - } -} -.game-icon-lightning-arc { - &:before { - content: '\ED6D'; - } -} -.game-icon-ram-2 { - &:before { - content: '\ED6E'; - } -} -.game-icon-pc { - &:before { - content: '\ED6F'; - } -} -.game-icon-fog { - &:before { - content: '\ED70'; - } -} -.game-icon-windsock { - &:before { - content: '\ED71'; - } -} -.game-icon-cloud-ring { - &:before { - content: '\ED72'; - } -} -.game-icon-dust-cloud { - &:before { - content: '\ED73'; - } -} -.game-icon-flower-twirl { - &:before { - content: '\ED74'; - } -} -.game-icon-fluffy-cloud { - &:before { - content: '\ED75'; - } -} -.game-icon-half-tornado { - &:before { - content: '\ED76'; - } -} -.game-icon-lightning-storm { - &:before { - content: '\ED77'; - } -} -.game-icon-lightning-tree { - &:before { - content: '\ED78'; - } -} -.game-icon-moon { - &:before { - content: '\ED79'; - } -} -.game-icon-night-sky { - &:before { - content: '\ED7A'; - } -} -.game-icon-parachute { - &:before { - content: '\ED7B'; - } -} -.game-icon-raining { - &:before { - content: '\ED7C'; - } -} -.game-icon-static { - &:before { - content: '\ED7D'; - } -} -.game-icon-stomp-tornado { - &:before { - content: '\ED7E'; - } -} -.game-icon-tornado { - &:before { - content: '\ED7F'; - } -} -.game-icon-twirl-center { - &:before { - content: '\ED80'; - } -} -.game-icon-twister { - &:before { - content: '\ED81'; - } -} -.game-icon-whirlwind { - &:before { - content: '\ED82'; - } -} -.game-icon-battle-mech { - &:before { - content: '\ED83'; - } -} -.game-icon-factory-arm { - &:before { - content: '\ED84'; - } -} -.game-icon-mono-wheel-robot { - &:before { - content: '\ED85'; - } -} -.game-icon-nano-bot { - &:before { - content: '\ED86'; - } -} -.game-icon-robot-grab { - &:before { - content: '\ED87'; - } -} -.game-icon-robot-leg { - &:before { - content: '\ED88'; - } -} -.game-icon-spider-bot { - &:before { - content: '\ED89'; - } -} -.game-icon-megabot { - &:before { - content: '\ED8A'; - } -} -.game-icon-techno-heart { - &:before { - content: '\ED8B'; - } -} -.game-icon-vintage-robot { - &:before { - content: '\ED8C'; - } -} -.game-icon-bus-doors { - &:before { - content: '\ED8D'; - } -} -.game-icon-door-ring-handle { - &:before { - content: '\ED8E'; - } -} -.game-icon-door-watcher { - &:before { - content: '\ED8F'; - } -} -.game-icon-heaven-gate { - &:before { - content: '\ED90'; - } -} -.game-icon-hobbit-door { - &:before { - content: '\ED91'; - } -} -.game-icon-india-gate { - &:before { - content: '\ED92'; - } -} -.game-icon-locked-door { - &:before { - content: '\ED93'; - } -} -.game-icon-open-gate { - &:before { - content: '\ED94'; - } -} -.game-icon-ranch-gate { - &:before { - content: '\ED95'; - } -} -.game-icon-temple-door { - &:before { - content: '\ED96'; - } -} -.game-icon-turnstile { - &:before { - content: '\ED97'; - } -} -.game-icon-doorway { - &:before { - content: '\ED98'; - } -} -.game-icon-boss-key { - &:before { - content: '\ED99'; - } -} -.game-icon-dial-padlock { - &:before { - content: '\ED9A'; - } -} -.game-icon-heart-key { - &:before { - content: '\ED9B'; - } -} -.game-icon-house-keys { - &:before { - content: '\ED9C'; - } -} -.game-icon-key-card { - &:before { - content: '\ED9D'; - } -} -.game-icon-key-lock { - &:before { - content: '\ED9E'; - } -} -.game-icon-keyring { - &:before { - content: '\ED9F'; - } -} -.game-icon-locked-heart { - &:before { - content: '\EDA0'; - } -} -.game-icon-millenium-key { - &:before { - content: '\EDA1'; - } -} -.game-icon-padlock-open { - &:before { - content: '\EDA2'; - } -} -.game-icon-secret-book { - &:before { - content: '\EDA3'; - } -} -.game-icon-key { - &:before { - content: '\EDA4'; - } -} -.game-icon-padlock { - &:before { - content: '\EDA5'; - } -} -.game-icon-three-keys { - &:before { - content: '\EDA6'; - } -} -.game-icon-triple-lock { - &:before { - content: '\EDA7'; - } -} -.game-icon-unlocking { - &:before { - content: '\EDA8'; - } -} -.game-icon-wax-seal { - &:before { - content: '\EDA9'; - } -} -.game-icon-key-2 { - &:before { - content: '\EDAA'; - } -} -.game-icon-combination-lock { - &:before { - content: '\EDAB'; - } -} -.game-icon-defense-satellite { - &:before { - content: '\EDAC'; - } -} -.game-icon-light-sabers { - &:before { - content: '\EDAD'; - } -} -.game-icon-double-ringed-orb { - &:before { - content: '\EDAE'; - } -} -.game-icon-energise { - &:before { - content: '\EDAF'; - } -} -.game-icon-ringed-planet { - &:before { - content: '\EDB0'; - } -} -.game-icon-sinusoidal-beam { - &:before { - content: '\EDB1'; - } -} -.game-icon-bandaged { - &:before { - content: '\EDB2'; - } -} -.game-icon-duration { - &:before { - content: '\EDB3'; - } -} -.game-icon-extra-time { - &:before { - content: '\EDB4'; - } -} -.game-icon-time-synchronization { - &:before { - content: '\EDB5'; - } -} -.game-icon-heavy-timer { - &:before { - content: '\EDB6'; - } -} -.game-icon-time-trap { - &:before { - content: '\EDB7'; - } -} -.game-icon-stopwatch-2 { - &:before { - content: '\EDB8'; - } -} -.game-icon-dragon-orb { - &:before { - content: '\EDB9'; - } -} -.game-icon-barbed-nails { - &:before { - content: '\EDBA'; - } -} -.game-icon-claw-string { - &:before { - content: '\EDBB'; - } -} -.game-icon-interleaved-claws { - &:before { - content: '\EDBC'; - } -} -.game-icon-midnight-claw { - &:before { - content: '\EDBD'; - } -} -.game-icon-plate-claw { - &:before { - content: '\EDBE'; - } -} -.game-icon-saw-claw { - &:before { - content: '\EDBF'; - } -} -.game-icon-shining-claw { - &:before { - content: '\EDC0'; - } -} -.game-icon-triple-scratches { - &:before { - content: '\EDC1'; - } -} -.game-icon-distress-signal { - &:before { - content: '\EDC2'; - } -} -.game-icon-exploding-planet { - &:before { - content: '\EDC3'; - } -} -.game-icon-jupiter { - &:before { - content: '\EDC4'; - } -} -.game-icon-moon-orbit { - &:before { - content: '\EDC5'; - } -} -.game-icon-planet-core { - &:before { - content: '\EDC6'; - } -} -.game-icon-black-hole-bolas { - &:before { - content: '\EDC7'; - } -} -.game-icon-hypersonic-bolt { - &:before { - content: '\EDC8'; - } -} -.game-icon-nested-eclipses { - &:before { - content: '\EDC9'; - } -} -.game-icon-vortex { - &:before { - content: '\EDCA'; - } -} -.game-icon-koholint-egg { - &:before { - content: '\EDCB'; - } -} -.game-icon-egg-defense { - &:before { - content: '\EDCC'; - } -} -.game-icon-tentacles-barrier { - &:before { - content: '\EDCD'; - } -} -.game-icon-curled-tentacle { - &:before { - content: '\EDCE'; - } -} -.game-icon-interlaced-tentacles { - &:before { - content: '\EDCF'; - } -} -.game-icon-noodle-ball { - &:before { - content: '\EDD0'; - } -} -.game-icon-spiral-tentacle { - &:before { - content: '\EDD1'; - } -} -.game-icon-suckered-tentacle { - &:before { - content: '\EDD2'; - } -} -.game-icon-tentacle-heart { - &:before { - content: '\EDD3'; - } -} -.game-icon-tentacle-strike { - &:before { - content: '\EDD4'; - } -} -.game-icon-tentacurl { - &:before { - content: '\EDD5'; - } -} -.game-icon-thorny-tentacle { - &:before { - content: '\EDD6'; - } -} -.game-icon-thorny-vine { - &:before { - content: '\EDD7'; - } -} -.game-icon-apple-core { - &:before { - content: '\EDD8'; - } -} -.game-icon-banana-bunch { - &:before { - content: '\EDD9'; - } -} -.game-icon-banana-peeled { - &:before { - content: '\EDDA'; - } -} -.game-icon-broccoli { - &:before { - content: '\EDDB'; - } -} -.game-icon-coconuts { - &:before { - content: '\EDDC'; - } -} -.game-icon-cut-lemon { - &:before { - content: '\EDDD'; - } -} -.game-icon-leek { - &:before { - content: '\EDDE'; - } -} -.game-icon-lemon { - &:before { - content: '\EDDF'; - } -} -.game-icon-orange-slice { - &:before { - content: '\EDE0'; - } -} -.game-icon-orange { - &:before { - content: '\EDE1'; - } -} -.game-icon-peach { - &:before { - content: '\EDE2'; - } -} -.game-icon-peas { - &:before { - content: '\EDE3'; - } -} -.game-icon-pineapple { - &:before { - content: '\EDE4'; - } -} -.game-icon-pumpkin { - &:before { - content: '\EDE5'; - } -} -.game-icon-raddish { - &:before { - content: '\EDE6'; - } -} -.game-icon-raspberry { - &:before { - content: '\EDE7'; - } -} -.game-icon-strawberry { - &:before { - content: '\EDE8'; - } -} -.game-icon-watermelon { - &:before { - content: '\EDE9'; - } -} -.game-icon-apple-seeds { - &:before { - content: '\EDEA'; - } -} -.game-icon-blackcurrant { - &:before { - content: '\EDEB'; - } -} -.game-icon-gift-trap { - &:before { - content: '\EDEC'; - } -} -.game-icon-american-football-ball { - &:before { - content: '\EDED'; - } -} -.game-icon-cricket-bat { - &:before { - content: '\EDEE'; - } -} -.game-icon-footy-field { - &:before { - content: '\EDEF'; - } -} -.game-icon-bowie-knife { - &:before { - content: '\EDF0'; - } -} -.game-icon-ball-pyramid { - &:before { - content: '\EDF1'; - } -} -.game-icon-basketball-ball { - &:before { - content: '\EDF2'; - } -} -.game-icon-boulder-dash { - &:before { - content: '\EDF3'; - } -} -.game-icon-bowling-strike { - &:before { - content: '\EDF4'; - } -} -.game-icon-eight-ball { - &:before { - content: '\EDF5'; - } -} -.game-icon-golf-tee { - &:before { - content: '\EDF6'; - } -} -.game-icon-snitch-quidditch-ball { - &:before { - content: '\EDF7'; - } -} -.game-icon-soccer-kick { - &:before { - content: '\EDF8'; - } -} -.game-icon-tennis-ball { - &:before { - content: '\EDF9'; - } -} -.game-icon-volleyball-ball { - &:before { - content: '\EDFA'; - } -} -.game-icon-water-polo { - &:before { - content: '\EDFB'; - } -} -.game-icon-ball-glow { - &:before { - content: '\EDFC'; - } -} -.game-icon-ball-heart { - &:before { - content: '\EDFD'; - } -} -.game-icon-blackball { - &:before { - content: '\EDFE'; - } -} -.game-icon-bowling-propulsion { - &:before { - content: '\EDFF'; - } -} -.game-icon-caged-ball { - &:before { - content: '\EE00'; - } -} -.game-icon-circle-cage { - &:before { - content: '\EE01'; - } -} -.game-icon-concentration-orb { - &:before { - content: '\EE02'; - } -} -.game-icon-crumbling-ball { - &:before { - content: '\EE03'; - } -} -.game-icon-double-diaphragm { - &:before { - content: '\EE04'; - } -} -.game-icon-extraction-orb { - &:before { - content: '\EE05'; - } -} -.game-icon-falling-blob { - &:before { - content: '\EE06'; - } -} -.game-icon-mesh-ball { - &:before { - content: '\EE07'; - } -} -.game-icon-striking-balls { - &:before { - content: '\EE08'; - } -} -.game-icon-unstable-orb { - &:before { - content: '\EE09'; - } -} -.game-icon-basketball-basket { - &:before { - content: '\EE0A'; - } -} -.game-icon-biceps { - &:before { - content: '\EE0B'; - } -} -.game-icon-bowling-alley { - &:before { - content: '\EE0C'; - } -} -.game-icon-bowling-pin { - &:before { - content: '\EE0D'; - } -} -.game-icon-disc-golf-basket { - &:before { - content: '\EE0E'; - } -} -.game-icon-fencer { - &:before { - content: '\EE0F'; - } -} -.game-icon-frisbee { - &:before { - content: '\EE10'; - } -} -.game-icon-juggling-clubs { - &:before { - content: '\EE11'; - } -} -.game-icon-muscular-torso { - &:before { - content: '\EE12'; - } -} -.game-icon-pool-dive { - &:before { - content: '\EE13'; - } -} -.game-icon-punching-bag { - &:before { - content: '\EE14'; - } -} -.game-icon-rugby-conversion { - &:before { - content: '\EE15'; - } -} -.game-icon-shuttlecock { - &:before { - content: '\EE16'; - } -} -.game-icon-skier { - &:before { - content: '\EE17'; - } -} -.game-icon-skis { - &:before { - content: '\EE18'; - } -} -.game-icon-soccer-field { - &:before { - content: '\EE19'; - } -} -.game-icon-tennis-court { - &:before { - content: '\EE1A'; - } -} -.game-icon-tennis-racket { - &:before { - content: '\EE1B'; - } -} -.game-icon-sword-altar { - &:before { - content: '\EE1C'; - } -} -.game-icon-broadsword { - &:before { - content: '\EE1D'; - } -} -.game-icon-half-heart { - &:before { - content: '\EE1E'; - } -} -.game-icon-ancient-sword { - &:before { - content: '\EE1F'; - } -} -.game-icon-axe-sword { - &:before { - content: '\EE20'; - } -} -.game-icon-bat-leth { - &:before { - content: '\EE21'; - } -} -.game-icon-butterfly-knife { - &:before { - content: '\EE22'; - } -} -.game-icon-chakram { - &:before { - content: '\EE23'; - } -} -.game-icon-coiled-nail { - &:before { - content: '\EE24'; - } -} -.game-icon-glaive { - &:before { - content: '\EE25'; - } -} -.game-icon-rusty-sword { - &:before { - content: '\EE26'; - } -} -.game-icon-scabbard { - &:before { - content: '\EE27'; - } -} -.game-icon-spiral-hilt { - &:before { - content: '\EE28'; - } -} -.game-icon-stabbed-note { - &:before { - content: '\EE29'; - } -} -.game-icon-swords-power { - &:before { - content: '\EE2A'; - } -} -.game-icon-two-handed-sword { - &:before { - content: '\EE2B'; - } -} -.game-icon-blade-drag { - &:before { - content: '\EE2C'; - } -} -.game-icon-blade-fall { - &:before { - content: '\EE2D'; - } -} -.game-icon-bloody-sword { - &:before { - content: '\EE2E'; - } -} -.game-icon-bouncing-sword { - &:before { - content: '\EE2F'; - } -} -.game-icon-broad-dagger { - &:before { - content: '\EE30'; - } -} -.game-icon-cloak-dagger { - &:before { - content: '\EE31'; - } -} -.game-icon-crescent-blade { - &:before { - content: '\EE32'; - } -} -.game-icon-croc-sword { - &:before { - content: '\EE33'; - } -} -.game-icon-curvy-knife { - &:before { - content: '\EE34'; - } -} -.game-icon-daggers { - &:before { - content: '\EE35'; - } -} -.game-icon-dervish-swords { - &:before { - content: '\EE36'; - } -} -.game-icon-diving-dagger { - &:before { - content: '\EE37'; - } -} -.game-icon-energy-sword { - &:before { - content: '\EE38'; - } -} -.game-icon-flying-dagger { - &:before { - content: '\EE39'; - } -} -.game-icon-fragmented-sword { - &:before { - content: '\EE3A'; - } -} -.game-icon-knife-thrust { - &:before { - content: '\EE3B'; - } -} -.game-icon-lightning-saber { - &:before { - content: '\EE3C'; - } -} -.game-icon-plain-dagger { - &:before { - content: '\EE3D'; - } -} -.game-icon-pointy-sword { - &:before { - content: '\EE3E'; - } -} -.game-icon-relic-blade { - &:before { - content: '\EE3F'; - } -} -.game-icon-shard-sword { - &:before { - content: '\EE40'; - } -} -.game-icon-shining-sword { - &:before { - content: '\EE41'; - } -} -.game-icon-spinning-blades { - &:before { - content: '\EE42'; - } -} -.game-icon-spinning-sword { - &:before { - content: '\EE43'; - } -} -.game-icon-spiral-thrust { - &:before { - content: '\EE44'; - } -} -.game-icon-striped-sword { - &:before { - content: '\EE45'; - } -} -.game-icon-sword-array { - &:before { - content: '\EE46'; - } -} -.game-icon-sword-hilt { - &:before { - content: '\EE47'; - } -} -.game-icon-sword-spin { - &:before { - content: '\EE48'; - } -} -.game-icon-sword-wound { - &:before { - content: '\EE49'; - } -} -.game-icon-thrown-knife { - &:before { - content: '\EE4A'; - } -} -.game-icon-thunder-blade { - &:before { - content: '\EE4B'; - } -} -.game-icon-zeus-sword { - &:before { - content: '\EE4C'; - } -} -.game-icon-bowie-knife-2 { - &:before { - content: '\EE4D'; - } -} -.game-icon-butterfly-knife-2 { - &:before { - content: '\EE4E'; - } -} -.game-icon-crescent-blade-2 { - &:before { - content: '\EE4F'; - } -} -.game-icon-stiletto-2 { - &:before { - content: '\EE50'; - } -} -.game-icon-antibody { - &:before { - content: '\EE51'; - } -} -.game-icon-atom-core { - &:before { - content: '\EE52'; - } -} -.game-icon-h2o { - &:before { - content: '\EE53'; - } -} -.game-icon-radiations { - &:before { - content: '\EE54'; - } -} -.game-icon-chemical-bolt { - &:before { - content: '\EE55'; - } -} -.game-icon-dripping-tube { - &:before { - content: '\EE56'; - } -} -.game-icon-erlenmeyer { - &:before { - content: '\EE57'; - } -} -.game-icon-foamy-disc { - &:before { - content: '\EE58'; - } -} -.game-icon-materials-science { - &:before { - content: '\EE59'; - } -} -.game-icon-molecule { - &:before { - content: '\EE5A'; - } -} -.game-icon-soap-experiment { - &:before { - content: '\EE5B'; - } -} -.game-icon-acid-tube { - &:before { - content: '\EE5C'; - } -} -.game-icon-syringe-2 { - &:before { - content: '\EE5D'; - } -} -.game-icon-vial { - &:before { - content: '\EE5E'; - } -} -.game-icon-atom { - &:before { - content: '\EE5F'; - } -} -.game-icon-molecule-2 { - &:before { - content: '\EE60'; - } -} -.game-icon-arch-bridge { - &:before { - content: '\EE61'; - } -} -.game-icon-black-bridge { - &:before { - content: '\EE62'; - } -} -.game-icon-cable-stayed-bridge { - &:before { - content: '\EE63'; - } -} -.game-icon-cliff-crossing { - &:before { - content: '\EE64'; - } -} -.game-icon-drawbridge { - &:before { - content: '\EE65'; - } -} -.game-icon-rialto-bridge { - &:before { - content: '\EE66'; - } -} -.game-icon-rope-bridge { - &:before { - content: '\EE67'; - } -} -.game-icon-suspension-bridge { - &:before { - content: '\EE68'; - } -} -.game-icon-archive-register { - &:before { - content: '\EE69'; - } -} -.game-icon-archive-research { - &:before { - content: '\EE6A'; - } -} -.game-icon-book-cover { - &:before { - content: '\EE6B'; - } -} -.game-icon-book-pile { - &:before { - content: '\EE6C'; - } -} -.game-icon-calendar-half-year { - &:before { - content: '\EE6D'; - } -} -.game-icon-love-letter { - &:before { - content: '\EE6E'; - } -} -.game-icon-passport { - &:before { - content: '\EE6F'; - } -} -.game-icon-pencil-ruler { - &:before { - content: '\EE70'; - } -} -.game-icon-post-stamp { - &:before { - content: '\EE71'; - } -} -.game-icon-scroll-quill { - &:before { - content: '\EE72'; - } -} -.game-icon-spell-book { - &:before { - content: '\EE73'; - } -} -.game-icon-stamper { - &:before { - content: '\EE74'; - } -} -.game-icon-book-aura { - &:before { - content: '\EE75'; - } -} -.game-icon-book-cover-2 { - &:before { - content: '\EE76'; - } -} -.game-icon-book-storm { - &:before { - content: '\EE77'; - } -} -.game-icon-bookmarklet { - &:before { - content: '\EE78'; - } -} -.game-icon-enlightenment { - &:before { - content: '\EE79'; - } -} -.game-icon-folded-paper { - &:before { - content: '\EE7A'; - } -} -.game-icon-ink-swirl { - &:before { - content: '\EE7B'; - } -} -.game-icon-scroll-unfurled { - &:before { - content: '\EE7C'; - } -} -.game-icon-black-book { - &:before { - content: '\EE7D'; - } -} -.game-icon-white-book { - &:before { - content: '\EE7E'; - } -} -.game-icon-neck-bite { - &:before { - content: '\EE7F'; - } -} -.game-icon-bleeding-wound { - &:before { - content: '\EE80'; - } -} -.game-icon-bloody-stash { - &:before { - content: '\EE81'; - } -} -.game-icon-cross-mark { - &:before { - content: '\EE82'; - } -} -.game-icon-feather-wound { - &:before { - content: '\EE83'; - } -} -.game-icon-open-wound { - &:before { - content: '\EE84'; - } -} -.game-icon-scar-wound { - &:before { - content: '\EE85'; - } -} -.game-icon-spotted-wound { - &:before { - content: '\EE86'; - } -} -.game-icon-stitched-wound { - &:before { - content: '\EE87'; - } -} -.game-icon-arm { - &:before { - content: '\EE88'; - } -} -.game-icon-bowels { - &:before { - content: '\EE89'; - } -} -.game-icon-kidneys { - &:before { - content: '\EE8A'; - } -} -.game-icon-liver { - &:before { - content: '\EE8B'; - } -} -.game-icon-lungs { - &:before { - content: '\EE8C'; - } -} -.game-icon-internal-organ { - &:before { - content: '\EE8D'; - } -} -.game-icon-tumor { - &:before { - content: '\EE8E'; - } -} -.game-icon-flat-platform { - &:before { - content: '\EE8F'; - } -} -.game-icon-i-brick { - &:before { - content: '\EE90'; - } -} -.game-icon-j-brick { - &:before { - content: '\EE91'; - } -} -.game-icon-l-brick { - &:before { - content: '\EE92'; - } -} -.game-icon-o-brick { - &:before { - content: '\EE93'; - } -} -.game-icon-s-brick { - &:before { - content: '\EE94'; - } -} -.game-icon-t-brick { - &:before { - content: '\EE95'; - } -} -.game-icon-z-brick { - &:before { - content: '\EE96'; - } -} -.game-icon-platform { - &:before { - content: '\EE97'; - } -} -.game-icon-hatchet { - &:before { - content: '\EE98'; - } -} -.game-icon-magic-axe { - &:before { - content: '\EE99'; - } -} -.game-icon-sharp-halberd { - &:before { - content: '\EE9A'; - } -} -.game-icon-axe-swing { - &:before { - content: '\EE9B'; - } -} -.game-icon-crossed-axes { - &:before { - content: '\EE9C'; - } -} -.game-icon-halberd { - &:before { - content: '\EE9D'; - } -} -.game-icon-hatchets { - &:before { - content: '\EE9E'; - } -} -.game-icon-royal-love { - &:before { - content: '\EE9F'; - } -} -.game-icon-split-cross { - &:before { - content: '\EEA0'; - } -} -.game-icon-templar-heart { - &:before { - content: '\EEA1'; - } -} -.game-icon-tongue { - &:before { - content: '\EEA2'; - } -} -.game-icon-carnivore-mouth { - &:before { - content: '\EEA3'; - } -} -.game-icon-energy-breath { - &:before { - content: '\EEA4'; - } -} -.game-icon-front-teeth { - &:before { - content: '\EEA5'; - } -} -.game-icon-incisors { - &:before { - content: '\EEA6'; - } -} -.game-icon-lightning-shout { - &:before { - content: '\EEA7'; - } -} -.game-icon-lips { - &:before { - content: '\EEA8'; - } -} -.game-icon-saber-tooth { - &:before { - content: '\EEA9'; - } -} -.game-icon-sharp-lips { - &:before { - content: '\EEAA'; - } -} -.game-icon-fangs { - &:before { - content: '\EEAB'; - } -} -.game-icon-floor-hatch { - &:before { - content: '\EEAC'; - } -} -.game-icon-hole { - &:before { - content: '\EEAD'; - } -} -.game-icon-mine-explosion { - &:before { - content: '\EEAE'; - } -} -.game-icon-car-battery { - &:before { - content: '\EEAF'; - } -} -.game-icon-heart-battery { - &:before { - content: '\EEB0'; - } -} -.game-icon-entangled-typhoon { - &:before { - content: '\EEB1'; - } -} -.game-icon-lightning-electron { - &:before { - content: '\EEB2'; - } -} -.game-icon-portal { - &:before { - content: '\EEB3'; - } -} -.game-icon-rolling-energy { - &:before { - content: '\EEB4'; - } -} -.game-icon-tesla-coil { - &:before { - content: '\EEB5'; - } -} -.game-icon-battery-0 { - &:before { - content: '\EEB6'; - } -} -.game-icon-battery-100 { - &:before { - content: '\EEB7'; - } -} -.game-icon-battery-25 { - &:before { - content: '\EEB8'; - } -} -.game-icon-battery-50 { - &:before { - content: '\EEB9'; - } -} -.game-icon-battery-75 { - &:before { - content: '\EEBA'; - } -} -.game-icon-battery-minus { - &:before { - content: '\EEBB'; - } -} -.game-icon-battery-plus { - &:before { - content: '\EEBC'; - } -} -.game-icon-battery-pack-alt { - &:before { - content: '\EEBD'; - } -} -.game-icon-battery-pack { - &:before { - content: '\EEBE'; - } -} -.game-icon-bolt-saw { - &:before { - content: '\EEBF'; - } -} -.game-icon-electric-whip { - &:before { - content: '\EEC0'; - } -} -.game-icon-focused-lightning { - &:before { - content: '\EEC1'; - } -} -.game-icon-heavy-lightning { - &:before { - content: '\EEC2'; - } -} -.game-icon-lightning-branches { - &:before { - content: '\EEC3'; - } -} -.game-icon-lightning-dissipation { - &:before { - content: '\EEC4'; - } -} -.game-icon-lightning-frequency { - &:before { - content: '\EEC5'; - } -} -.game-icon-lightning-helix { - &:before { - content: '\EEC6'; - } -} -.game-icon-lightning-shadow { - &:before { - content: '\EEC7'; - } -} -.game-icon-lightning-slashes { - &:before { - content: '\EEC8'; - } -} -.game-icon-lightning-trio { - &:before { - content: '\EEC9'; - } -} -.game-icon-power-lightning { - &:before { - content: '\EECA'; - } -} -.game-icon-round-struck { - &:before { - content: '\EECB'; - } -} -.game-icon-sonic-lightning { - &:before { - content: '\EECC'; - } -} -.game-icon-static-waves { - &:before { - content: '\EECD'; - } -} -.game-icon-thunder-struck { - &:before { - content: '\EECE'; - } -} -.game-icon-thunderball { - &:before { - content: '\EECF'; - } -} -.game-icon-windy-stripes { - &:before { - content: '\EED0'; - } -} -.game-icon-electric { - &:before { - content: '\EED1'; - } -} -.game-icon-chain-lightning { - &:before { - content: '\EED2'; - } -} -.game-icon-arcing-bolt { - &:before { - content: '\EED3'; - } -} -.game-icon-bright-explosion { - &:before { - content: '\EED4'; - } -} -.game-icon-bubbling-beam { - &:before { - content: '\EED5'; - } -} -.game-icon-burning-blobs { - &:before { - content: '\EED6'; - } -} -.game-icon-clout { - &:before { - content: '\EED7'; - } -} -.game-icon-comet-spark { - &:before { - content: '\EED8'; - } -} -.game-icon-corner-explosion { - &:before { - content: '\EED9'; - } -} -.game-icon-crowned-explosion { - &:before { - content: '\EEDA'; - } -} -.game-icon-electrical-crescent { - &:before { - content: '\EEDB'; - } -} -.game-icon-explosive-meeting { - &:before { - content: '\EEDC'; - } -} -.game-icon-fragmented-meteor { - &:before { - content: '\EEDD'; - } -} -.game-icon-heavy-fall { - &:before { - content: '\EEDE'; - } -} -.game-icon-hypersonic-melon { - &:before { - content: '\EEDF'; - } -} -.game-icon-implosion { - &:before { - content: '\EEE0'; - } -} -.game-icon-incoming-rocket { - &:before { - content: '\EEE1'; - } -} -.game-icon-ion-cannon-blast { - &:before { - content: '\EEE2'; - } -} -.game-icon-ringed-beam { - &:before { - content: '\EEE3'; - } -} -.game-icon-screen-impact { - &:before { - content: '\EEE4'; - } -} -.game-icon-striking-splinter { - &:before { - content: '\EEE5'; - } -} -.game-icon-evil-love { - &:before { - content: '\EEE6'; - } -} -.game-icon-broken-heart-zone { - &:before { - content: '\EEE7'; - } -} -.game-icon-charm { - &:before { - content: '\EEE8'; - } -} -.game-icon-chewed-heart { - &:before { - content: '\EEE9'; - } -} -.game-icon-shining-heart { - &:before { - content: '\EEEA'; - } -} -.game-icon-chanterelles { - &:before { - content: '\EEEB'; - } -} -.game-icon-mushrooms-cluster { - &:before { - content: '\EEEC'; - } -} -.game-icon-spotted-mushroom { - &:before { - content: '\EEED'; - } -} -.game-icon-dice-eight-faces-eight { - &:before { - content: '\EEEE'; - } -} -.game-icon-dice-six-faces-five { - &:before { - content: '\EEEF'; - } -} -.game-icon-dice-six-faces-four { - &:before { - content: '\EEF0'; - } -} -.game-icon-dice-six-faces-one { - &:before { - content: '\EEF1'; - } -} -.game-icon-dice-six-faces-six { - &:before { - content: '\EEF2'; - } -} -.game-icon-dice-six-faces-two { - &:before { - content: '\EEF3'; - } -} -.game-icon-dice-twenty-faces-one { - &:before { - content: '\EEF4'; - } -} -.game-icon-dice-twenty-faces-twenty { - &:before { - content: '\EEF5'; - } -} -.game-icon-perspective-dice-five { - &:before { - content: '\EEF6'; - } -} -.game-icon-perspective-dice-four { - &:before { - content: '\EEF7'; - } -} -.game-icon-perspective-dice-one { - &:before { - content: '\EEF8'; - } -} -.game-icon-perspective-dice-six-faces-five { - &:before { - content: '\EEF9'; - } -} -.game-icon-perspective-dice-six-faces-one { - &:before { - content: '\EEFA'; - } -} -.game-icon-perspective-dice-six-faces-random { - &:before { - content: '\EEFB'; - } -} -.game-icon-perspective-dice-six-faces-six { - &:before { - content: '\EEFC'; - } -} -.game-icon-perspective-dice-six-faces-three { - &:before { - content: '\EEFD'; - } -} -.game-icon-perspective-dice-six-faces-two { - &:before { - content: '\EEFE'; - } -} -.game-icon-perspective-dice-six { - &:before { - content: '\EEFF'; - } -} -.game-icon-perspective-dice-three { - &:before { - content: '\EF00'; - } -} -.game-icon-perspective-dice-two { - &:before { - content: '\EF01'; - } -} -.game-icon-d10 { - &:before { - content: '\EF02'; - } -} -.game-icon-d12 { - &:before { - content: '\EF03'; - } -} -.game-icon-d4 { - &:before { - content: '\EF04'; - } -} -.game-icon-inverted-dice-1 { - &:before { - content: '\EF05'; - } -} -.game-icon-inverted-dice-2 { - &:before { - content: '\EF06'; - } -} -.game-icon-inverted-dice-3 { - &:before { - content: '\EF07'; - } -} -.game-icon-inverted-dice-4 { - &:before { - content: '\EF08'; - } -} -.game-icon-inverted-dice-5 { - &:before { - content: '\EF09'; - } -} -.game-icon-inverted-dice-6 { - &:before { - content: '\EF0A'; - } -} -.game-icon-matter-states { - &:before { - content: '\EF0B'; - } -} -.game-icon-sandstorm { - &:before { - content: '\EF0C'; - } -} -.game-icon-abstract-001 { - &:before { - content: '\EF0D'; - } -} -.game-icon-abstract-002 { - &:before { - content: '\EF0E'; - } -} -.game-icon-abstract-003 { - &:before { - content: '\EF0F'; - } -} -.game-icon-abstract-004 { - &:before { - content: '\EF10'; - } -} -.game-icon-abstract-005 { - &:before { - content: '\EF11'; - } -} -.game-icon-abstract-006 { - &:before { - content: '\EF12'; - } -} -.game-icon-abstract-007 { - &:before { - content: '\EF13'; - } -} -.game-icon-abstract-008 { - &:before { - content: '\EF14'; - } -} -.game-icon-abstract-009 { - &:before { - content: '\EF15'; - } -} -.game-icon-abstract-010 { - &:before { - content: '\EF16'; - } -} -.game-icon-abstract-011 { - &:before { - content: '\EF17'; - } -} -.game-icon-abstract-012 { - &:before { - content: '\EF18'; - } -} -.game-icon-abstract-013 { - &:before { - content: '\EF19'; - } -} -.game-icon-abstract-014 { - &:before { - content: '\EF1A'; - } -} -.game-icon-abstract-015 { - &:before { - content: '\EF1B'; - } -} -.game-icon-abstract-016 { - &:before { - content: '\EF1C'; - } -} -.game-icon-abstract-017 { - &:before { - content: '\EF1D'; - } -} -.game-icon-abstract-018 { - &:before { - content: '\EF1E'; - } -} -.game-icon-abstract-019 { - &:before { - content: '\EF1F'; - } -} -.game-icon-abstract-020 { - &:before { - content: '\EF20'; - } -} -.game-icon-abstract-021 { - &:before { - content: '\EF21'; - } -} -.game-icon-abstract-022 { - &:before { - content: '\EF22'; - } -} -.game-icon-abstract-023 { - &:before { - content: '\EF23'; - } -} -.game-icon-abstract-024 { - &:before { - content: '\EF24'; - } -} -.game-icon-abstract-025 { - &:before { - content: '\EF25'; - } -} -.game-icon-abstract-026 { - &:before { - content: '\EF26'; - } -} -.game-icon-abstract-027 { - &:before { - content: '\EF27'; - } -} -.game-icon-abstract-028 { - &:before { - content: '\EF28'; - } -} -.game-icon-abstract-029 { - &:before { - content: '\EF29'; - } -} -.game-icon-abstract-030 { - &:before { - content: '\EF2A'; - } -} -.game-icon-abstract-031 { - &:before { - content: '\EF2B'; - } -} -.game-icon-abstract-032 { - &:before { - content: '\EF2C'; - } -} -.game-icon-abstract-033 { - &:before { - content: '\EF2D'; - } -} -.game-icon-abstract-034 { - &:before { - content: '\EF2E'; - } -} -.game-icon-abstract-035 { - &:before { - content: '\EF2F'; - } -} -.game-icon-abstract-036 { - &:before { - content: '\EF30'; - } -} -.game-icon-abstract-037 { - &:before { - content: '\EF31'; - } -} -.game-icon-abstract-038 { - &:before { - content: '\EF32'; - } -} -.game-icon-abstract-039 { - &:before { - content: '\EF33'; - } -} -.game-icon-abstract-040 { - &:before { - content: '\EF34'; - } -} -.game-icon-abstract-041 { - &:before { - content: '\EF35'; - } -} -.game-icon-abstract-042 { - &:before { - content: '\EF36'; - } -} -.game-icon-abstract-043 { - &:before { - content: '\EF37'; - } -} -.game-icon-abstract-044 { - &:before { - content: '\EF38'; - } -} -.game-icon-abstract-045 { - &:before { - content: '\EF39'; - } -} -.game-icon-abstract-046 { - &:before { - content: '\EF3A'; - } -} -.game-icon-abstract-047 { - &:before { - content: '\EF3B'; - } -} -.game-icon-abstract-048 { - &:before { - content: '\EF3C'; - } -} -.game-icon-abstract-049 { - &:before { - content: '\EF3D'; - } -} -.game-icon-abstract-050 { - &:before { - content: '\EF3E'; - } -} -.game-icon-abstract-051 { - &:before { - content: '\EF3F'; - } -} -.game-icon-abstract-052 { - &:before { - content: '\EF40'; - } -} -.game-icon-abstract-053 { - &:before { - content: '\EF41'; - } -} -.game-icon-abstract-054 { - &:before { - content: '\EF42'; - } -} -.game-icon-abstract-055 { - &:before { - content: '\EF43'; - } -} -.game-icon-abstract-056 { - &:before { - content: '\EF44'; - } -} -.game-icon-abstract-057 { - &:before { - content: '\EF45'; - } -} -.game-icon-abstract-058 { - &:before { - content: '\EF46'; - } -} -.game-icon-abstract-059 { - &:before { - content: '\EF47'; - } -} -.game-icon-abstract-060 { - &:before { - content: '\EF48'; - } -} -.game-icon-abstract-061 { - &:before { - content: '\EF49'; - } -} -.game-icon-abstract-062 { - &:before { - content: '\EF4A'; - } -} -.game-icon-abstract-063 { - &:before { - content: '\EF4B'; - } -} -.game-icon-abstract-064 { - &:before { - content: '\EF4C'; - } -} -.game-icon-abstract-065 { - &:before { - content: '\EF4D'; - } -} -.game-icon-abstract-066 { - &:before { - content: '\EF4E'; - } -} -.game-icon-abstract-067 { - &:before { - content: '\EF4F'; - } -} -.game-icon-abstract-068 { - &:before { - content: '\EF50'; - } -} -.game-icon-abstract-069 { - &:before { - content: '\EF51'; - } -} -.game-icon-abstract-070 { - &:before { - content: '\EF52'; - } -} -.game-icon-abstract-071 { - &:before { - content: '\EF53'; - } -} -.game-icon-abstract-072 { - &:before { - content: '\EF54'; - } -} -.game-icon-abstract-073 { - &:before { - content: '\EF55'; - } -} -.game-icon-abstract-074 { - &:before { - content: '\EF56'; - } -} -.game-icon-abstract-075 { - &:before { - content: '\EF57'; - } -} -.game-icon-abstract-076 { - &:before { - content: '\EF58'; - } -} -.game-icon-abstract-077 { - &:before { - content: '\EF59'; - } -} -.game-icon-abstract-078 { - &:before { - content: '\EF5A'; - } -} -.game-icon-abstract-079 { - &:before { - content: '\EF5B'; - } -} -.game-icon-abstract-080 { - &:before { - content: '\EF5C'; - } -} -.game-icon-abstract-081 { - &:before { - content: '\EF5D'; - } -} -.game-icon-abstract-082 { - &:before { - content: '\EF5E'; - } -} -.game-icon-abstract-083 { - &:before { - content: '\EF5F'; - } -} -.game-icon-abstract-084 { - &:before { - content: '\EF60'; - } -} -.game-icon-abstract-085 { - &:before { - content: '\EF61'; - } -} -.game-icon-abstract-086 { - &:before { - content: '\EF62'; - } -} -.game-icon-abstract-087 { - &:before { - content: '\EF63'; - } -} -.game-icon-abstract-088 { - &:before { - content: '\EF64'; - } -} -.game-icon-abstract-089 { - &:before { - content: '\EF65'; - } -} -.game-icon-abstract-090 { - &:before { - content: '\EF66'; - } -} -.game-icon-abstract-091 { - &:before { - content: '\EF67'; - } -} -.game-icon-abstract-092 { - &:before { - content: '\EF68'; - } -} -.game-icon-abstract-093 { - &:before { - content: '\EF69'; - } -} -.game-icon-abstract-094 { - &:before { - content: '\EF6A'; - } -} -.game-icon-abstract-095 { - &:before { - content: '\EF6B'; - } -} -.game-icon-abstract-096 { - &:before { - content: '\EF6C'; - } -} -.game-icon-abstract-097 { - &:before { - content: '\EF6D'; - } -} -.game-icon-abstract-098 { - &:before { - content: '\EF6E'; - } -} -.game-icon-abstract-099 { - &:before { - content: '\EF6F'; - } -} -.game-icon-abstract-100 { - &:before { - content: '\EF70'; - } -} -.game-icon-abstract-101 { - &:before { - content: '\EF71'; - } -} -.game-icon-abstract-102 { - &:before { - content: '\EF72'; - } -} -.game-icon-abstract-103 { - &:before { - content: '\EF73'; - } -} -.game-icon-abstract-104 { - &:before { - content: '\EF74'; - } -} -.game-icon-abstract-105 { - &:before { - content: '\EF75'; - } -} -.game-icon-abstract-106 { - &:before { - content: '\EF76'; - } -} -.game-icon-abstract-107 { - &:before { - content: '\EF77'; - } -} -.game-icon-abstract-108 { - &:before { - content: '\EF78'; - } -} -.game-icon-abstract-109 { - &:before { - content: '\EF79'; - } -} -.game-icon-abstract-110 { - &:before { - content: '\EF7A'; - } -} -.game-icon-abstract-111 { - &:before { - content: '\EF7B'; - } -} -.game-icon-abstract-112 { - &:before { - content: '\EF7C'; - } -} -.game-icon-abstract-113 { - &:before { - content: '\EF7D'; - } -} -.game-icon-abstract-114 { - &:before { - content: '\EF7E'; - } -} -.game-icon-abstract-115 { - &:before { - content: '\EF7F'; - } -} -.game-icon-abstract-116 { - &:before { - content: '\EF80'; - } -} -.game-icon-abstract-117 { - &:before { - content: '\EF81'; - } -} -.game-icon-abstract-118 { - &:before { - content: '\EF82'; - } -} -.game-icon-abstract-119 { - &:before { - content: '\EF83'; - } -} -.game-icon-abstract-120 { - &:before { - content: '\EF84'; - } -} -.game-icon-abstract-121 { - &:before { - content: '\EF85'; - } -} diff --git a/styles/system/index.less b/styles/system/index.less index 7f245ca0..450e0fe6 100644 --- a/styles/system/index.less +++ b/styles/system/index.less @@ -1,31 +1,29 @@ -@import '../chat/all.less'; -@import '../chat/chat-card.less'; -@import '../chat/constants.less'; -@import '../chat/damage.less'; -@import '../chat/interactive-card.less'; -@import '../chat/roll-card.less'; -@import '../chat/rolls.less'; -@import '../chat/san-chat-card.less'; -@import 'coc7.less'; -@import 'constants.less'; -@import 'game-icons.less'; -@import 'inline.less'; -@import '../interface/app.less'; -@import '../interface/combat-tracker.less'; -@import '../interface/compendium.less'; -@import '../interface/controls.less'; -@import 'main.less'; -@import '../sheets/actor.less'; -@import '../sheets/book.less'; -@import '../sheets/character.less'; -@import '../sheets/chase.less'; -@import '../sheets/combat.less'; -@import '../sheets/development.less'; -@import '../sheets/items.less'; -@import '../sheets/occupation.less'; -@import '../sheets/sheet.less'; -@import '../sheets/sheets.less'; -@import '../sheets/vehicle.less'; -@import 'variables.less'; -@import 'default-override.less'; -@import '../sheets/summary.less'; +@import "../chat/all.less"; +@import "../chat/chat-card.less"; +@import "../chat/damage.less"; +@import "../chat/interactive-card.less"; +@import "../chat/roll-card.less"; +@import "../chat/rolls.less"; +@import "../chat/san-chat-card.less"; +@import "coc7.less"; +@import "constants.less"; +@import "inline.less"; +@import "../interface/app.less"; +@import "../interface/combat-tracker.less"; +@import "../interface/compendium.less"; +@import "../interface/controls.less"; +@import "main.less"; +@import "../sheets/actor.less"; +@import "../sheets/book.less"; +@import "../sheets/character.less"; +@import "../sheets/chase.less"; +@import "../sheets/combat.less"; +@import "../sheets/development.less"; +@import "../sheets/items.less"; +@import "../sheets/occupation.less"; +@import "../sheets/sheet.less"; +@import "../sheets/sheets.less"; +@import "../sheets/vehicle.less"; +@import "variables.less"; +@import "default-override.less"; +@import "../sheets/summary.less"; diff --git a/system.json b/system.json index 6c781796..096094a2 100644 --- a/system.json +++ b/system.json @@ -12,7 +12,7 @@ "bundle.js" ], "templateVersion": 1, - "styles": ["coc7g.css"], + "styles": ["lib/game-icons/game-icons.css", "coc7g.css"], "packs": [ { "label": "Skills", From a5f5bab8818fbd0b4af8196795082dd7bb0f7e55 Mon Sep 17 00:00:00 2001 From: castanho Date: Tue, 14 Sep 2021 16:21:24 -0300 Subject: [PATCH 057/726] Remove unused styles file --- styles/chat/constants.less | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 styles/chat/constants.less diff --git a/styles/chat/constants.less b/styles/chat/constants.less deleted file mode 100644 index e69de29b..00000000 From 808a4184938884459c01bfa58061e130bf5d8279 Mon Sep 17 00:00:00 2001 From: castanho Date: Tue, 14 Sep 2021 16:21:58 -0300 Subject: [PATCH 058/726] Format all Less files with Prettier --- module/actors/sheets/character.js | 2 +- styles/chat/all.less | 16 +------- styles/chat/chat-card.less | 7 ---- styles/chat/damage.less | 9 ----- styles/chat/interactive-card.less | 6 --- styles/chat/roll-card.less | 18 --------- styles/chat/rolls.less | 28 ------------- styles/chat/san-chat-card.less | 10 ----- styles/interface/app.less | 14 +------ styles/interface/combat-tracker.less | 13 ------ styles/interface/compendium.less | 3 +- styles/interface/controls.less | 2 - styles/sheets/actor.less | 28 +------------ styles/sheets/book.less | 28 ++++++------- styles/sheets/character.less | 14 +++---- styles/sheets/chase.less | 14 +++---- styles/sheets/combat.less | 29 +------------- styles/sheets/development.less | 14 ------- styles/sheets/items.less | 28 ++++++------- styles/sheets/occupation.less | 23 ++--------- styles/sheets/sheet.less | 38 ++---------------- styles/sheets/sheets.less | 6 +-- styles/sheets/summary.less | 27 ++++--------- styles/sheets/vehicle.less | 4 -- styles/system/coc7.less | 33 +++------------- styles/system/constants.less | 22 +++++------ styles/system/inline.less | 2 - styles/system/main.less | 34 ++++++++-------- styles/system/variables.less | 50 ------------------------ templates/actors/character-sheet-v2.html | 4 +- templates/actors/storage-sheet.html | 4 +- 31 files changed, 107 insertions(+), 423 deletions(-) diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index d9037090..f475f9ed 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -320,7 +320,7 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { } if (game.settings.get('CoC7', 'artworkInteractiveColor')) { sheet.element.css( - '--main-sheet-interactie-color', + '--main-sheet-interactive-color', game.settings.get('CoC7', 'artworkInteractiveColor') ) } diff --git a/styles/chat/all.less b/styles/chat/all.less index 5e8bd370..eb9ec4eb 100644 --- a/styles/chat/all.less +++ b/styles/chat/all.less @@ -2,61 +2,50 @@ .card-header { display: grid; grid-template-columns: 36px auto 36px; - grid-template-areas: 'left-portrait card-title right-portrait'; - + grid-template-areas: "left-portrait card-title right-portrait"; .left-portrait { height: 36px; grid-area: left-portrait; } - .card-title { height: 36px; grid-area: card-title; } - .right-portrait { height: 36px; grid-area: right-portrait; } } - .card-title { line-height: 36px; font-size: 20px; text-align: center; font-weight: bolder; } - .portrait { object-fit: contain; border: 0; } - .status-list { padding: 3px 0; border-bottom: 2px groove #fff; } - .player-actions { &:empty { display: none; } - margin: 0 !important; padding: 3px 0; border-bottom: 2px groove #fff; } - .gm-actions { &:empty { display: none; } - margin: 0 !important; padding: 3px 0; background-color: gainsboro; } - .info { &.important { color: darkred; @@ -65,7 +54,6 @@ font-weight: bold; } } - .status { display: inline; height: auto; @@ -79,12 +67,10 @@ border: 1px solid #999; border-radius: 3px; background: rgba(0, 0, 0, 0.05); - &.important { background-color: rgba(0, 0, 0, 0.05); color: darkred; } - &.pending { box-shadow: 0 0 4px darkred; } diff --git a/styles/chat/chat-card.less b/styles/chat/chat-card.less index f678bd53..bf6dafd7 100644 --- a/styles/chat/chat-card.less +++ b/styles/chat/chat-card.less @@ -2,11 +2,9 @@ .upgrade-success { color: darkolivegreen; } - .upgrade-failed { color: darkred; } - h4.san-result { flex: 0 0 100%; line-height: 24px; @@ -17,16 +15,13 @@ box-shadow: 0 0 2px #fff inset; font-size: 20px; font-weight: bold; - &.loss { color: darkred; } - &.resist { color: green; } } - h4.con-result { flex: 0 0 100%; line-height: 24px; @@ -37,11 +32,9 @@ box-shadow: 0 0 2px #fff inset; font-size: 20px; font-weight: bold; - &.loss { color: darkred; } - &.resist { color: green; } diff --git a/styles/chat/damage.less b/styles/chat/damage.less index 9544aed2..5e927a74 100644 --- a/styles/chat/damage.less +++ b/styles/chat/damage.less @@ -3,7 +3,6 @@ display: flex; justify-content: flex-end; } - .options { display: flex; flex-direction: row; @@ -14,18 +13,15 @@ justify-content: flex-end; align-items: center; } - .ic-switch { height: 16px; line-height: 16px; flex: 0; } - label { height: 16px; line-height: 16px; } - form { flex: 0 0 40px; input { @@ -34,7 +30,6 @@ line-height: 16px; } } - .owner-info { flex: 0 0 content; line-height: 22px; @@ -49,18 +44,15 @@ top: 0; bottom: 0; padding: 0 2px; - display: flex; visibility: visible !important; justify-content: space-between; align-items: center; z-index: 1; } - .die-result-overlay-br span { display: flex; } - .die-result-overlay-br button { width: 20px; height: 20px; @@ -71,7 +63,6 @@ padding: 0; visibility: visible !important; } - .die-result-overlay-br button.icon { background-size: 14px; background-repeat: no-repeat; diff --git a/styles/chat/interactive-card.less b/styles/chat/interactive-card.less index e1415dea..f900f9ba 100644 --- a/styles/chat/interactive-card.less +++ b/styles/chat/interactive-card.less @@ -11,11 +11,9 @@ background: transparent; font-style: italic; color: grey; - &:hover { background-color: lightgray; } - &.switched-on { border: 1px solid red; border-radius: 3px; @@ -25,7 +23,6 @@ font-style: normal; } } - a.ic-radio-switch, a.ic-switch { display: inline-block; @@ -37,11 +34,9 @@ background: transparent; font-weight: normal; color: grey; - &:hover { background-color: lightgray; } - &.switched-on { color: black; border: none; @@ -49,7 +44,6 @@ font-weight: bold; } } - .card-result { position: relative; margin: 0; diff --git a/styles/chat/roll-card.less b/styles/chat/roll-card.less index a738709f..25badaeb 100644 --- a/styles/chat/roll-card.less +++ b/styles/chat/roll-card.less @@ -2,7 +2,6 @@ .dice-roll { padding: 0; } - .card-result { position: relative; margin: 0; @@ -15,7 +14,6 @@ word-break: break-all; margin-top: 5px; } - &.opposed { &.combat { .attacker { @@ -25,7 +23,6 @@ } } } - .opposed-card-flag { flex: none; color: white; @@ -33,7 +30,6 @@ color: red; } } - h4.card-result { flex: 0; display: block; @@ -49,23 +45,19 @@ border-radius: 3px; box-shadow: 0 0 2px #fff inset; word-break: break-all; - &.success { color: darkgreen; } - &.failure { color: darkred; } } - ol { padding: 0; list-style: none; background: none; box-shadow: none; border: none; - li.actor-roll { list-style: none; display: flex; @@ -75,29 +67,24 @@ width: 100%; align-items: center; margin-bottom: 4px; - .roll-details { width: 100%; display: flex; flex-direction: column; - .header { height: 16px; width: 100%; display: flex; flex-direction: row; - .name { flex: 1; } - a { height: 16px; line-height: 16px; } } } - span.pending { width: 100%; background: rgba(0, 0, 0, 0.05); @@ -110,20 +97,17 @@ display: inline-block; text-align: center; } - &.won { border: 2px groove goldenrod; &.tie { border-color: red; } } - a { line-height: 36px; height: 36px; flex: none; } - img { width: 36px; height: 36px; @@ -133,7 +117,6 @@ border: none; margin-right: 2px; } - .actor-card-buttons { flex: 1; display: flex; @@ -142,7 +125,6 @@ margin: 0; align-self: center; } - .roll-result { width: 100%; } diff --git a/styles/chat/rolls.less b/styles/chat/rolls.less index 91004aab..6b59039a 100644 --- a/styles/chat/rolls.less +++ b/styles/chat/rolls.less @@ -2,35 +2,28 @@ background-color: #ffcc99; color: #cc6600; } - .hard-success-color { background-color: #ffff99; color: #cc9900; } - .extreme-success-color { background-color: #ccff99; color: #009933; } - .critical-color { background-color: whitesmoke; color: goldenrod; } - .fumble-color { background-color: black; color: crimson; } - .success-color { color: green; } - .failure-color { color: red; } - .coc7-check-tooltip { width: 280px; position: fixed; @@ -41,7 +34,6 @@ box-shadow: 0 0 10px #000; text-shadow: none; color: #191813; - .roll-icons.success { color: goldenrod; } @@ -50,20 +42,16 @@ font-size: 20px; font-weight: bold; } - .roll-icons.failure { color: crimson; } - .roll-icons.fumble { color: crimson; font-size: 20px; font-weight: bold; } - .dice-rolls { display: flex; - .check-result { font-size: 16px; padding: 0 5px; @@ -73,31 +61,21 @@ justify-content: flex-end; } } - - // .part-total.fumble{ - // background-color: darkred; - // } - .part-total.regular-success { .regular-success-color(); } - .part-total.hard-success { .hard-success-color(); } - .part-total.extreme-success { .extreme-success-color(); } - .part-total.critical { .critical-color(); } - .part-total.fumble { .fumble-color(); } - .part-total.success { .success-color(); } @@ -105,28 +83,22 @@ .failure-color(); } } - .coc7-check-result { &.regular-success { .regular-success-color(); } - &.hard-success { .hard-success-color(); } - &.extreme-success { .extreme-success-color(); } - &.critical { .critical-color(); } - &.fumble { .fumble-color(); } - &.success { .success-color(); } diff --git a/styles/chat/san-chat-card.less b/styles/chat/san-chat-card.less index 1a5dfa1d..b4318e2c 100644 --- a/styles/chat/san-chat-card.less +++ b/styles/chat/san-chat-card.less @@ -3,27 +3,17 @@ padding: 0 0 3px 0; border-bottom: 2px groove #fff; } - .dice-formula { margin: 0 !important; } - .dice-roll { padding-top: 3px; } - - // .san-check, .int-check{ - // .check-result{ - // display: none; - // } - // } - .san-loss-roll { .dice-formula { display: none; } } - .status-list { display: none; } diff --git a/styles/interface/app.less b/styles/interface/app.less index af4756ae..c47977d6 100644 --- a/styles/interface/app.less +++ b/styles/interface/app.less @@ -1,21 +1,18 @@ .coc7.dialog { .selectable:hover { - text-shadow: 0 0 8px var(--main-sheet-interactie-color); + text-shadow: 0 0 8px var(--main-sheet-interactive-color); } - .selected { - text-shadow: 0 0 4px var(--main-sheet-interactie-color); + text-shadow: 0 0 4px var(--main-sheet-interactive-color); h4 { font-weight: bold; } } - button { &.inactive:hover { box-shadow: 0 0 5px grey; } } - &.char-select { .item-list { .item { @@ -23,38 +20,31 @@ } } } - &.char-select, &.skill-select { a.roll-characteristic { flex: 0; padding-left: 5px; } - a.increase-characteristic { flex: 0; padding-left: 9px; } - a.decrease-characteristic, a.reset-characteristic { flex: 0; padding-right: 9px; } - .item-controls { flex: 0; padding-right: 20px; } - .points, .counter { justify-content: center; - &.warning { color: red; } - span { height: 22px; line-height: 22px; diff --git a/styles/interface/combat-tracker.less b/styles/interface/combat-tracker.less index 5f2145be..a3c58e77 100644 --- a/styles/interface/combat-tracker.less +++ b/styles/interface/combat-tracker.less @@ -1,35 +1,22 @@ #combat-tracker { .token-initiative { - // overflow: hidden; - // white-space:nowrap; - // text-overflow:ellipsis; - &.fumble { background-color: black; color: crimson; } - &.failure { color: red; } - &.regular-success { - // background-color: #ffcc99; color: #cc6600; } - &.hard-success { - // background-color: #ffff99; color: #cc9900; } - &.extreme-success { - // background-color: #ccff99; color: #009933; } - &.critical { - // background-color: whitesmoke; color: goldenrod; } } diff --git a/styles/interface/compendium.less b/styles/interface/compendium.less index 362e3175..dfd0c598 100644 --- a/styles/interface/compendium.less +++ b/styles/interface/compendium.less @@ -1,4 +1,5 @@ -#sidebar a.compendium-translation, #sidebar a.actor-import { +#sidebar a.compendium-translation, +#sidebar a.actor-import { border-top: 2px groove #444; padding-top: 4px; font-size: 20px; diff --git a/styles/interface/controls.less b/styles/interface/controls.less index cc3089c7..2f8cab84 100644 --- a/styles/interface/controls.less +++ b/styles/interface/controls.less @@ -1,14 +1,12 @@ #controls { .scene-control.custom-control { background: rgba(30, 80, 80, 0.5) !important; - &.active, &:hover { border: 1px solid green !important; border-bottom: 1px solid #008060 !important; box-shadow: 0 0 10px #008060 !important; } - .control-tool { &.xp_toggle { &.active { diff --git a/styles/sheets/actor.less b/styles/sheets/actor.less index 14195e17..f63ca10f 100644 --- a/styles/sheets/actor.less +++ b/styles/sheets/actor.less @@ -4,12 +4,10 @@ color: darkred; font-weight: bolder; } - &.header { flex: initial; border-bottom: 1px groove; line-height: 1.25rem; - .header-section { border-right: 1px groove; display: flex; @@ -19,69 +17,57 @@ border-right: none; } } - input { width: 1.875rem; padding: 0; margin: 0; } } - .button { flex: 0 0 auto; margin: 1px; color: black; } - .flagged4dev { color: goldenrod; } - .item { flex: 0 0 0.625rem; - .skill-name { flex: 1; font-size: 0.75rem; height: 1rem; padding: 0; text-align: left; - &.flagged4dev { &.rollable:hover { cursor: pointer; } } } - .item-controls { flex: 0 0 1.875rem; line-height: 1rem; font-size: 0.625rem; padding: 0 2px; - .item-control { &:hover { cursor: default; } - &.clickable:hover { cursor: pointer; } } } } - .adjustment-value { &.not-available { background: white; } - border-right: groove 1px; flex: 0; height: 1rem; line-height: 1rem; - input { font-size: 0.6875rem; flex: 0 0 0.9375rem; @@ -92,16 +78,14 @@ } } } - .sheet-section { h3 { margin: 0 -5px 0 0; padding-left: 5px; - font-family: 'Signika', sans-serif; + font-family: "Signika", sans-serif; font-weight: bold; font-size: 13px; } - .editor { width: 100%; height: 12.5rem; @@ -110,17 +94,14 @@ line-height: normal; font-size: 0.75rem; } - .resizededitor { .editor { height: 100%; } } - .editor-content { overflow-x: hidden; } - .section-header { margin: 2px 0 0 0; padding: 0; @@ -131,19 +112,16 @@ height: 100%; } } - input:read-only:hover, input:read-only:focus { border: 1px solid transparent; box-shadow: none; cursor: default; } - .read-only:hover, .read-only:focus { border: 1px solid black; } - .info-fields { .form-group { label { @@ -157,13 +135,11 @@ } } } - .unlock-control { flex: 0 0 30px; margin-top: 2px; } - - .unlock-control-disabbled { + .unlock-control-disabled { flex: 0 0 30px; margin-top: 2px; color: darkred; diff --git a/styles/sheets/book.less b/styles/sheets/book.less index 8091ebc5..45f0ca9d 100644 --- a/styles/sheets/book.less +++ b/styles/sheets/book.less @@ -3,7 +3,7 @@ background: var(--other-sheet-bg); background-repeat: repeat; } - font-family: customSheetFont, 'Palatino Linotype', serif; + font-family: customSheetFont, "Palatino Linotype", serif; .window-resizable-handle { background: var(--main-sheet-front-color); } @@ -18,10 +18,10 @@ gap: 0.3rem; grid-auto-flow: row; grid-template-areas: - 'portrait information aside' - 'progress progress progress' - 'navigation navigation navigation' - 'body body body'; + "portrait information aside" + "progress progress progress" + "navigation navigation navigation" + "body body body"; padding: 0.15rem; .flexrow { padding: 0.15rem 0; @@ -35,7 +35,7 @@ select { border: 0.375rem transparent; flex: 0; - font-family: customSheetFont, 'Palatino Linotype', serif; + font-family: customSheetFont, "Palatino Linotype", serif; &:focus { box-shadow: none; } @@ -226,16 +226,16 @@ gap: 0px 0px; grid-auto-flow: row; grid-template-areas: - 'traits gains' - 'other other'; + "traits gains" + "other other"; display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 0.2fr 1.8fr; gap: 0 0.1rem; grid-auto-flow: row; grid-template-areas: - 'traits gains' - 'other other'; + "traits gains" + "other other"; .traits { grid-area: traits; .type { @@ -266,9 +266,9 @@ } } } - #mythos:checked ~ label[for='data.type.mythos'], - #occult:checked ~ label[for='data.type.occult'], - #other:checked ~ label[for='data.type.other'] { + #mythos:checked ~ label[for="data.type.mythos"], + #occult:checked ~ label[for="data.type.occult"], + #other:checked ~ label[for="data.type.other"] { background-color: var(--main-sheet-front-color); color: lightgray; opacity: 100%; @@ -312,7 +312,7 @@ grid-template-rows: 1fr; gap: 0.625rem; grid-auto-flow: row; - grid-template-areas: 'portrait name edit status'; + grid-template-areas: "portrait name edit status"; .portrait { border: none; grid-area: portrait; diff --git a/styles/sheets/character.less b/styles/sheets/character.less index 6e8fac83..2b48ea4a 100644 --- a/styles/sheets/character.less +++ b/styles/sheets/character.less @@ -155,8 +155,8 @@ grid-template-columns: 1rem 2.75rem; grid-template-rows: 1rem 2rem; grid-template-areas: - 'rollIcon characName' - 'characScore characScore'; + "rollIcon characName" + "characScore characScore"; align-items: baseline; .roll-icon { @@ -183,8 +183,8 @@ grid-template-columns: 2.375rem 0.875rem; grid-template-rows: 0.875rem 0.875rem; grid-template-areas: - 'mainScore halfScore' - 'mainScore fithScore'; + "mainScore halfScore" + "mainScore fithScore"; .main-score { grid-area: mainScore; @@ -295,7 +295,7 @@ margin-top: 2px; } - .unlock-control-disabbled { + .unlock-control-disabled { flex: 0 0 1.5rem; margin-top: 2px; color: darkred; @@ -345,7 +345,7 @@ text-align: center; a:hover { - text-shadow: 0 0 10px var(--main-sheet-interactie-color); + text-shadow: 0 0 10px var(--main-sheet-interactive-color); } } @@ -466,7 +466,7 @@ height: auto; display: grid; grid-template-columns: auto 2.875rem 5px 2.875rem auto; - grid-template-areas: '. currentValue separator maxValue .'; + grid-template-areas: ". currentValue separator maxValue ."; align-items: center; .current-value { diff --git a/styles/sheets/chase.less b/styles/sheets/chase.less index 20aa492f..32ea61cf 100644 --- a/styles/sheets/chase.less +++ b/styles/sheets/chase.less @@ -23,7 +23,7 @@ display: grid; grid-template-columns: 2rem 2rem 0.5rem 5fr 2.5rem 2.5rem 4fr 2rem 3rem 1.25rem 2rem 1rem; grid-template-rows: 2rem; - grid-template-areas: 'p-side p-icon p-expand p-name p-init p-movement p-speed-check p-score p-roll p-adjust p-modified-mov p-control'; + grid-template-areas: "p-side p-icon p-expand p-name p-init p-movement p-speed-check p-score p-roll p-adjust p-modified-mov p-control"; align-items: center; &.drag-over { @@ -129,7 +129,7 @@ display: grid; grid-template-columns: 4rem 2rem auto 1rem; grid-template-rows: 1.5rem; - grid-template-areas: 'd-spacer d-icon d-name d-control'; + grid-template-areas: "d-spacer d-icon d-name d-control"; align-items: center; .d-spacer { @@ -168,13 +168,13 @@ border-top: 2px groove; &.drag-over { - // box-shadow: 0 0 0.5rem var(--main-sheet-interactie-color); + // box-shadow: 0 0 0.5rem var(--main-sheet-interactive-color); background: rgba(0, 0, 0, 0.1); .add-sign { border: none; - box-shadow: 0 0 0.5rem var(--main-sheet-interactie-color); - // color: var(--main-sheet-interactie-color); + box-shadow: 0 0 0.5rem var(--main-sheet-interactive-color); + // color: var(--main-sheet-interactive-color); background: rgba(0, 0, 0, 0.1); } } @@ -191,8 +191,8 @@ &:hover { border: none; - box-shadow: 0 0 0.5rem var(--main-sheet-interactie-color); - // color: var(--main-sheet-interactie-color); + box-shadow: 0 0 0.5rem var(--main-sheet-interactive-color); + // color: var(--main-sheet-interactive-color); background: rgba(0, 0, 0, 0.1); } } diff --git a/styles/sheets/combat.less b/styles/sheets/combat.less index ba86d2cb..1ad25a53 100644 --- a/styles/sheets/combat.less +++ b/styles/sheets/combat.less @@ -3,7 +3,6 @@ padding: 0 4px; height: 100%; overflow-y: auto; - .section-header { display: flex; flex-direction: row; @@ -18,39 +17,32 @@ line-height: 1.375rem; padding: 0 8px; margin: 4px; - &.skill { background-color: grey; } - span { flex: 1; display: inline-block; padding: 0; color: white; } - .add-item { flex: 0 0 1.25rem; color: white; - &:hover { color: var(--main-sheet-back-color); } } } - .item-list { .itemV2 { margin-right: 3px !important; width: 10rem !important; } - display: flex !important; flex-direction: row !important; flex-wrap: wrap !important; } - .weapon-list { .weapon-row { width: 100%; @@ -60,9 +52,8 @@ grid-template-columns: 1rem 1.375rem 1fr 10.5rem 2.75rem 2.75rem; grid-template-rows: 1.375rem 1fr; grid-template-areas: - 'expand image name range weaponControl itemControl' - 'details details details details details details'; - + "expand image name range weaponControl itemControl" + "details details details details details details"; .expand-arrow { grid-area: expand; width: 0; @@ -75,13 +66,11 @@ transform: translate(6px, 4px); transition: transform 0.2s ease-out; } - &.expanded .expand-arrow { transform: rotate(90deg) translate(0.375rem, -0.25rem); border-bottom-right-radius: 0; border-bottom-left-radius: 0; } - .item-summary { background-color: rgba(255, 255, 255, 0.3); font-size: 0.75rem; @@ -89,23 +78,19 @@ margin: 4px 0; border-radius: 4px; } - .weapon-image { grid-area: image; background-size: 1.375rem; } - .weapon-name { grid-area: name; height: 1.375rem; line-height: 1.375rem; padding: 0 4px; } - .alternativ-skill { flex: 0 0 24px; } - .weapon-range { grid-area: range; height: 1.375rem; @@ -113,18 +98,15 @@ display: grid; grid-template-columns: 3.5rem 3.5rem 3.5rem; grid-template-rows: 1.375rem; - .weapon-damage { text-align: center; } } - .weapon-control { text-align: center; line-height: 1.375rem; grid-area: weaponControl; } - .weapon-controls { line-height: 1.375rem; text-align: center; @@ -133,26 +115,22 @@ grid-template-rows: 1.375rem; grid-area: weaponControl; } - .item-controls { line-height: 1.375rem; display: block; text-align: end; grid-area: itemControl; } - .item-summary { grid-area: details; display: flex; flex-direction: column; flex-wrap: nowrap; - .item-labels { display: flex; flex-direction: row; flex-wrap: wrap; margin: 4px 0; - .item-label { display: flex; flex-direction: row; @@ -162,7 +140,6 @@ border: 1px groove; border-radius: 3px; margin: 0 2px 2px 0; - span { height: 1rem; line-height: 1rem; @@ -170,12 +147,10 @@ } } } - .item-properties { display: flex; flex-direction: row; flex-wrap: wrap; - .item-property { margin: 0 2px 2px 0; } diff --git a/styles/sheets/development.less b/styles/sheets/development.less index 3269fedd..1fdd8b10 100644 --- a/styles/sheets/development.less +++ b/styles/sheets/development.less @@ -4,7 +4,6 @@ flex-direction: column; flex-wrap: nowrap; margin: 40px 0; - .warning { border: 1px solid red; color: var(--main-sheet-back-color); @@ -13,21 +12,17 @@ color: var(--main-sheet-back-color); } } - .monitor { span { padding: 0 3px !important; } - input { text-align: center; } } - .validation { margin-top: 8px; } - .missing-attrib-warning { white-space: normal; line-height: 1; @@ -35,7 +30,6 @@ margin-top: 5px; } } - .development { .skills-list { height: 100%; @@ -44,7 +38,6 @@ flex-direction: column; flex-wrap: wrap; padding-top: 8px !important; - .item { .item-controls { font-family: system-ui; @@ -54,19 +47,15 @@ display: grid; grid-template-columns: 1rem auto 1.3rem 1.3rem 1.3rem 1.3rem 1.3rem; align-items: center; - &.pulpCharacter { grid-template-columns: 1.875rem auto 1.3rem 1.3rem 1.3rem 1.3rem 1.3rem 1.3rem; } - grid-template-rows: 1rem; border-bottom: 1px solid var(--main-sheet-front-color); margin-right: 0.5rem; - .flagged4dev { color: goldenrod; } - span { height: 1rem; line-height: 1rem; @@ -76,7 +65,6 @@ text-align: left; color: var(--main-sheet-front-color); } - input { height: 1rem; line-height: 1rem; @@ -88,12 +76,10 @@ text-align: right; min-width: 0; } - .adjustment-value { &.locked { background-color: white; } - border-right: 1px solid var(--main-sheet-front-color); text-align: right; } diff --git a/styles/sheets/items.less b/styles/sheets/items.less index 5e4d962f..36908fbb 100644 --- a/styles/sheets/items.less +++ b/styles/sheets/items.less @@ -171,8 +171,8 @@ grid-template-columns: 1em 2.75em; grid-template-rows: 1em 2em; grid-template-areas: - 'rollIcon characName' - 'characScore characScore'; + "rollIcon characName" + "characScore characScore"; align-items: baseline; .roll-icon { @@ -199,8 +199,8 @@ grid-template-columns: 2.375em 0.875em; grid-template-rows: 0.875em 0.875em; grid-template-areas: - 'mainScore halfScore' - 'mainScore fithScore'; + "mainScore halfScore" + "mainScore fithScore"; .main-score { grid-area: mainScore; @@ -302,7 +302,7 @@ margin-top: 2px; } - .unlock-control-disabbled { + .unlock-control-disabled { flex: 0 0 1.5rem; margin-top: 2px; color: darkred; @@ -351,7 +351,7 @@ font-weight: bold; font-size: 0.8rem; padding: 1px 3px; - input[type='text'] { + input[type="text"] { border: 0; margin-left: -3px; } @@ -412,7 +412,7 @@ } // Item Sheet form fields - input[type='text'], + input[type="text"], select { height: 20px; border: 1px solid @colorTan; @@ -474,7 +474,7 @@ font-size: 12px; line-height: 24px; } - input[type='text'] { + input[type="text"] { flex: 0 0 48px; margin-right: 10px; } @@ -569,10 +569,10 @@ } &.rollable:hover .item-image { - background-image: url('/icons/svg/d20-grey.svg') !important; + background-image: url("/icons/svg/d20-grey.svg") !important; } &.rollable .item-image:hover { - background-image: url('/icons/svg/d20-black.svg') !important; + background-image: url("/icons/svg/d20-black.svg") !important; } i.attuned { @@ -639,7 +639,7 @@ } // Item Sheet form fields - input[type='text'], + input[type="text"], select { height: 20px; border: 1px solid @colorTan; @@ -707,7 +707,7 @@ font-size: 12px; line-height: 24px; } - input[type='text'] { + input[type="text"] { flex: 0 0 48px; margin-right: 10px; } @@ -797,10 +797,10 @@ } &.rollable:hover .item-image { - background-image: url('/icons/svg/d20-grey.svg') !important; + background-image: url("/icons/svg/d20-grey.svg") !important; } &.rollable .item-image:hover { - background-image: url('/icons/svg/d20-black.svg') !important; + background-image: url("/icons/svg/d20-black.svg") !important; } i.attuned { diff --git a/styles/sheets/occupation.less b/styles/sheets/occupation.less index daefaca9..2ecabd47 100644 --- a/styles/sheets/occupation.less +++ b/styles/sheets/occupation.less @@ -5,53 +5,42 @@ padding: 0 5px; overflow-y: auto; scrollbar-width: thin; - - // Inventory Item .item { line-height: 16px; - padding: 0 2px; // to align with the header border + padding: 0 2px; border-bottom: 1px solid @colorFaint; &:last-child { border-bottom: none; } - - // Item Header Name .item-name { cursor: pointer; max-height: 24px; overflow: hidden; - .item-image { flex: 0 0 16px; background-size: 16px; margin-right: 5px; } - h4 { margin: 0; white-space: nowrap; overflow-x: hidden; } - &.rollable:hover .item-image { - background-image: url('/icons/svg/d20-grey.svg') !important; + background-image: url("/icons/svg/d20-grey.svg") !important; } &.rollable .item-image:hover { - background-image: url('/icons/svg/d20-black.svg') !important; + background-image: url("/icons/svg/d20-black.svg") !important; } - i.attuned { color: @colorTan; } } } - - // Item Control Buttons .item-controls { flex: 0 0 32px; .flexrow(); justify-content: flex-end; - a { flex: 0 0 16px; font-size: 10px; @@ -59,8 +48,6 @@ color: @colorTan; } } - - // Item Dropdown Summary .item-summary { flex: 0 0 100%; font-size: 12px; @@ -69,13 +56,11 @@ border-top: @borderGroove; } } - .optional-skills.form-group { label { height: 16px; } } - .group-control { width: 18px; flex: 0 0 18px; @@ -84,7 +69,6 @@ text-align: right; color: #7a7971; } - .optional-skills { .form-group { border-bottom: 1px groove; @@ -93,7 +77,6 @@ font-size: 12px; } } - h3.warning { text-align: center; } diff --git a/styles/sheets/sheet.less b/styles/sheets/sheet.less index cd7f1292..3092390b 100644 --- a/styles/sheets/sheet.less +++ b/styles/sheets/sheet.less @@ -3,7 +3,6 @@ width: 100%; height: 100%; } - .editor-content { height: 100%; overflow-y: auto; @@ -14,24 +13,18 @@ .inventory { height: 100%; } - .inventory-list { list-style: none; margin: 0; padding: 0 5px; - // overflow-y: auto; scrollbar-width: thin; - - // Inventory Item .item { line-height: 16px; - padding: 0 2px; // to align with the header border + padding: 0 2px; border-bottom: 1px solid @colorFaint; &:last-child { border-bottom: none; } - - // Item Header Name .item-name { cursor: pointer; max-height: 16px; @@ -39,43 +32,33 @@ text-overflow: ellipsis; overflow: hidden; } - .item-image { flex: 0 0 16px; background-size: 16px; margin-right: 5px; height: 16px; } - h4 { margin: 0; white-space: nowrap; overflow-x: hidden; } - &.rollable:hover .item-image { - background-image: url('/icons/svg/d20-grey.svg') !important; + background-image: url("/icons/svg/d20-grey.svg") !important; } &.rollable .item-image:hover { - background-image: url('/icons/svg/d20-black.svg') !important; + background-image: url("/icons/svg/d20-black.svg") !important; } - i.attuned { color: @colorTan; } - - // Item uses .item-uses input { width: 24px; text-align: center; } - - // Item Dropdown Properties .item-properties { margin-top: 3px; } - - // Charged .item-recharge { flex: 0 0 80px; text-align: right; @@ -84,8 +67,6 @@ white-space: nowrap; } } - - // Inventory Header .inventory-header { margin: 2px 0; padding: 0; @@ -93,20 +74,15 @@ border: @borderGroove; font-weight: bold; line-height: 25px; - h3 { margin: 0 -5px 0 0; padding-left: 5px; - // .modesto(); font-size: 1.125em; } - .item-controls a.item-create { flex: 0 0 100%; } } - - // Item Detail Sections .item-detail { flex: 0 0 70px; font-size: 12px; @@ -116,7 +92,6 @@ word-break: break-word; white-space: nowrap; overflow: hidden; - &:last-child { border-right: none; } @@ -124,26 +99,21 @@ flex: 0 0 100px; } } - .item-weight { flex: 0 0 60px; border-left: 1px solid @colorFaint; border-right: 1px solid @colorFaint; } - .item-list { list-style: none; margin: 0 0 10px; padding: 0; } - - // Item Control Buttons .item-controls { flex: 0 0 48px; .flexrow(); justify-content: flex-end; height: 16px; - a { flex: 0 0 16px; font-size: 10px; @@ -151,8 +121,6 @@ color: @colorTan; } } - - // Item Dropdown Summary .item-summary { flex: 0 0 100%; font-size: 12px; diff --git a/styles/sheets/sheets.less b/styles/sheets/sheets.less index 7b870bc6..17764ec7 100644 --- a/styles/sheets/sheets.less +++ b/styles/sheets/sheets.less @@ -56,7 +56,7 @@ h3.keeper-only-tab i { .rollable:hover { color: #000; - text-shadow: 0 0 10px var(--main-sheet-interactie-color); + text-shadow: 0 0 10px var(--main-sheet-interactive-color); cursor: pointer; } @@ -111,7 +111,7 @@ h3.keeper-only-tab i { background: rgba(0, 0, 0, 0.05); } - input[type='text'] { + input[type="text"] { flex: 1; height: 1.375rem; border: 0; @@ -125,7 +125,7 @@ h3.keeper-only-tab i { &:hover, &:focus { - box-shadow: 0 0 0.5rem var(--main-sheet-interactie-color); + box-shadow: 0 0 0.5rem var(--main-sheet-interactive-color); background: @greyBackground; } } diff --git a/styles/sheets/summary.less b/styles/sheets/summary.less index f58232e2..3eb3bde5 100644 --- a/styles/sheets/summary.less +++ b/styles/sheets/summary.less @@ -7,15 +7,15 @@ background: var(--other-sheet-bg); background-repeat: repeat; } - font-family: customSheetFont, 'Palatino Linotype', serif; + font-family: customSheetFont, "Palatino Linotype", serif; .container { display: grid; grid-template-columns: 1fr 1.35fr 1fr; grid-template-rows: 0.05fr 1fr; gap: 1px; grid-template-areas: - 'header header header' - 'characteristics skills other'; + "header header header" + "characteristics skills other"; .rollable { &:hover { color: #000; @@ -165,8 +165,8 @@ grid-template-columns: 1rem 2.75rem; grid-template-rows: 1rem 2rem; grid-template-areas: - 'rollIcon characName' - 'characScore characScore'; + "rollIcon characName" + "characScore characScore"; align-items: baseline; .roll-icon { color: var(--main-sheet-front-color); @@ -189,8 +189,8 @@ grid-template-columns: 2.375rem 0.875rem; grid-template-rows: 0.875rem 0.875rem; grid-template-areas: - 'mainScore halfScore' - 'mainScore fithScore'; + "mainScore halfScore" + "mainScore fithScore"; .main-score { grid-area: mainScore; justify-self: center; @@ -253,27 +253,22 @@ font-size: 0.75rem; grid-template-columns: 1rem auto 1.5rem 0.7rem; border-bottom: 1px solid; - &.specialization { margin-left: 0.5rem; width: var(--skill-specialization-length); border-left: 1px solid; } - .item-image { height: 0.875rem; background-size: contain; margin: 1px 0 0 0; } - .item-name { - // .cursive(); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding-left: 3px; line-height: 1rem; - input { height: 1rem; padding: 0; @@ -282,14 +277,11 @@ color: var(--main-sheet-front-color); } } - .item-score { - // .cursive(); color: var(--main-sheet-back-color); text-align: end; margin-right: 2px; line-height: 1rem; - input { height: 1rem; padding: 0; @@ -299,9 +291,7 @@ text-align: end; } } - .item-controls { - // font-family: system-ui; font-size: 0.625rem; line-height: 1rem; flex: 0 0 1.25rem; @@ -312,7 +302,6 @@ text-shadow: none; color: var(--main-sheet-back-color); } - .item-control { &.active { color: goldenrod; @@ -356,7 +345,7 @@ border-bottom: 1px solid; grid-template-columns: 1rem 5.5rem 2.5rem 2rem; grid-template-rows: 1rem; - grid-template-areas: 'image name damage weaponControl'; + grid-template-areas: "image name damage weaponControl"; .weapon-damage { grid-area: damage; color: var(--main-sheet-back-color); diff --git a/styles/sheets/vehicle.less b/styles/sheets/vehicle.less index 3e7f50f7..61e32c4e 100644 --- a/styles/sheets/vehicle.less +++ b/styles/sheets/vehicle.less @@ -5,7 +5,6 @@ top: 7.5rem; color: var(--main-sheet-front-color); } - .sheet-nav { a { &.active { @@ -16,19 +15,16 @@ } &.keeper-only-tab span { color: @colorGreen; - &:hover { border: 1px solid @colorGreen; } } } } - .armor-infos { display: flex; flex-direction: row; flex-wrap: nowrap; - .armor-location { flex: 1; display: block; diff --git a/styles/system/coc7.less b/styles/system/coc7.less index afe2af3c..8bcc7514 100644 --- a/styles/system/coc7.less +++ b/styles/system/coc7.less @@ -1,31 +1,24 @@ @headerHeight: 100px; @borderGroove: 2px groove #eeede0; @detailsHeight: 16px; - .coc7 { nav { - font-family: customSheetFont, 'Palatino Linotype', serif !important; + font-family: customSheetFont, "Palatino Linotype", serif !important; } - - // Item Sheet form fields - input[type='text'], + input[type="text"], select { height: calc(100% - 2px); border: 1px solid @colorTan; background: rgba(0, 0, 0, 0.05); color: @colorDark; } - - // Hovered Fields - input[type='text'] { + input[type="text"] { &:hover, &:focus { border: 1px solid #111; box-shadow: 0 0 8px red; } } - - // Disabled Fields input:disabled, select:disabled, textarea:disabled { @@ -36,7 +29,6 @@ outline: none !important; } } - label.checkbox { flex: auto; padding: 0; @@ -45,22 +37,20 @@ line-height: 22px; font-size: 11px; width: auto; - > input[type='checkbox'] { + > input[type="checkbox"] { width: 16px; height: 16px; margin: 0 2px 0 0; position: relative; top: 4px; } - &.right > input[type='checkbox'] { + &.right > input[type="checkbox"] { margin: 0 0 0 2px; } } - .sheet-header { flex: 0 0 @headerHeight; border-bottom: @borderGroove; - .summary { flex: 0 0 100%; height: @detailsHeight; @@ -69,11 +59,9 @@ list-style: none; border-top: 1px groove; border-bottom: 1px; - input { height: 16px; } - li { height: @detailsHeight; float: left; @@ -84,14 +72,12 @@ white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - &:last-child { border-right: none; } } } } - .form-group { label { flex: 1; @@ -111,8 +97,6 @@ flex: 0; } } - - // Stacked Groups .form-group.stacked { label { flex: 0 0 100%; @@ -123,32 +107,27 @@ text-align: left; } } - .form-group.subgroup { label { flex: 1; } - select { flex: 1; } - .penalty-selector { flex: 1; } } - .form-header { margin: 0 0 0.25em 0; padding: 2px 0; border-top: @borderGroove; border-bottom: @borderGroove; - font-family: customSheetFont, 'Palatino Linotype', serif; + font-family: customSheetFont, "Palatino Linotype", serif; .item-control { float: right; } } - .editor { height: 100%; .tox-toolbar-overlord, diff --git a/styles/system/constants.less b/styles/system/constants.less index 5cb7ec33..84e50e31 100644 --- a/styles/system/constants.less +++ b/styles/system/constants.less @@ -6,17 +6,17 @@ @greyBackground: rgba(0, 0, 0, 0.1); :root { - --main-sheet-bg: url('./assets/images/header.webp') 4 repeat; - --other-sheet-bg: url('./assets/images/background.webp'); - --main-sheet-image: url('./assets/images/tentacles.webp'); - --hp-background-image: url('./assets/images/hp-background.svg'); - --san-background-image: url('./assets/images/san-background.svg'); - --chat-background: url('../../ui/parchment.jpg') repeat; + --main-sheet-bg: url("./assets/images/header.webp") 4 repeat; + --other-sheet-bg: url("./assets/images/background.webp"); + --main-sheet-image: url("./assets/images/tentacles.webp"); + --hp-background-image: url("./assets/images/hp-background.svg"); + --san-background-image: url("./assets/images/san-background.svg"); + --chat-background: url("../../ui/parchment.jpg") repeat; --main-sheet-back-color: @colorRed; --main-sheet-front-color: @colorBlue; - --main-sheet-interactie-color: @colorRed; - --main-sheet-font: ''; - --main-sheet-cursive-font: ''; + --main-sheet-interactive-color: @colorRed; + --main-sheet-font: ""; + --main-sheet-cursive-font: ""; --skill-length: 160px; --skill-specialization-length: 152px; } @@ -32,11 +32,11 @@ // } .defaultFont { - font-family: customSheetFont, 'Bradley Hand', cursive; + font-family: customSheetFont, "Bradley Hand", cursive; } .chatFont { - font-family: customChatFont, 'Signika', sans-serif; + font-family: customChatFont, "Signika", sans-serif; } // .cursive{ diff --git a/styles/system/inline.less b/styles/system/inline.less index f3c64cbd..696de9d4 100644 --- a/styles/system/inline.less +++ b/styles/system/inline.less @@ -6,12 +6,10 @@ border-radius: 2px; white-space: nowrap; word-break: break-all; - i { vertical-align: middle; } } - .coc7-inline-check { .chatFont(); font-size: 0.75rem; diff --git a/styles/system/main.less b/styles/system/main.less index 6c5a236e..b8e45419 100644 --- a/styles/system/main.less +++ b/styles/system/main.less @@ -67,12 +67,12 @@ background-repeat: no-repeat; background-position: center; &:hover { - background-image: url('/icons/svg/d20-grey.svg') !important; + background-image: url("/icons/svg/d20-grey.svg") !important; } } .skill-image { &:hover { - background-image: url('/icons/svg/d20-grey.svg') !important; + background-image: url("/icons/svg/d20-grey.svg") !important; } } .weapon-image { @@ -81,7 +81,7 @@ background-repeat: no-repeat; background-position: center; &:hover { - background-image: url('/icons/svg/d20-grey.svg') !important; + background-image: url("/icons/svg/d20-grey.svg") !important; } } .item-summary { @@ -197,7 +197,7 @@ margin: 0 0 1px 0; border: 1px solid transparent; } - input[type='text'] { + input[type="text"] { flex: 1; height: 22px; border: 1px solid #7a7971; @@ -205,7 +205,7 @@ background: rgba(0, 0, 0, 0.05); color: #191813; } - input[type='number'] { + input[type="number"] { flex: 1; height: 22px; border: 1px solid #7a7971; @@ -296,7 +296,7 @@ span { line-height: 22px; } - input[type='text'] { + input[type="text"] { margin: 0; padding: 0; border: 0; @@ -305,7 +305,7 @@ border: 0; } } - input[type='number'] { + input[type="number"] { margin: 0; padding: 0; border: 0; @@ -316,7 +316,7 @@ resize: vertical; margin: 0; border: 0; - font-family: 'Modesto', 'Signika', 'Palatino Linotype', 'serif'; + font-family: "Modesto", "Signika", "Palatino Linotype", "serif"; font-size: 12px; white-space: pre-line; } @@ -414,7 +414,7 @@ .sheet-header { flex: 0 0 100px; border-bottom: 2px groove #eeede0; - font-family: customSheetFont, 'Palatino Linotype', serif; + font-family: customSheetFont, "Palatino Linotype", serif; font-size: 12px; .attribute-label { font-size: 14px; @@ -436,7 +436,7 @@ padding: 0; } } - input[type='text'].read-only { + input[type="text"].read-only { &:hover { border: 1px solid #111; box-shadow: 0 0 4px black; @@ -446,7 +446,7 @@ box-shadow: 0 0 4px black; } } - input[type='number'].read-only { + input[type="number"].read-only { &:hover { border: 1px solid #111; box-shadow: 0 0 4px black; @@ -456,7 +456,7 @@ box-shadow: 0 0 4px black; } } - input[type='text'].locked { + input[type="text"].locked { &:hover { border: 1px solid transparent; box-shadow: none; @@ -468,7 +468,7 @@ cursor: default; } } - input[type='number'].locked { + input[type="number"].locked { &:hover { border: 1px solid transparent; box-shadow: none; @@ -484,7 +484,7 @@ flex: 0 0 20px; margin: 4px 0 5px; line-height: 20px; - font-family: customSheetFont, 'Palatino Linotype', serif; + font-family: customSheetFont, "Palatino Linotype", serif; font-size: 20px; border: 0; .tab-name { @@ -519,7 +519,7 @@ padding: 0 5px; } } - input[type='text'] { + input[type="text"] { background: none; border: 1px solid transparent; &:hover { @@ -531,7 +531,7 @@ box-shadow: 0 0 4px red; } } - input[type='number'] { + input[type="number"] { background: none; border: 1px solid transparent; &:hover { @@ -789,7 +789,7 @@ opacity: 0; transition: opacity 0.3s; &::after { - content: ''; + content: ""; position: absolute; top: 100%; left: 50%; diff --git a/styles/system/variables.less b/styles/system/variables.less index 8b3284bc..3a672845 100644 --- a/styles/system/variables.less +++ b/styles/system/variables.less @@ -1,37 +1,5 @@ -/* Deprecated vars */ @borderLight: #ccc; @borderDark: #666; - -/* ----------------------------------------- */ -/* Fonts */ -/* ----------------------------------------- */ - -// @font-face { -// font-family: 'Modesto Condensed'; -// font-style: normal; -// font-weight: 400; -// src: url('../../assets/fonts/modesto-condensed/modesto-condensed.woff2') -// format('woff2'); -// } - -// @font-face { -// font-family: 'Modesto Condensed'; -// font-style: normal; -// font-weight: 700; -// src: url('../../assets/fonts/modesto-condensed/modesto-condensed-bold.woff2') -// format('woff2'); -// } - -// .modesto { -// font-family: customSheetFont, 'Modesto Condensed', 'Palatino Linotype', serif; -// font-size: 20px; -// font-weight: 700; -// } - -/* ----------------------------------------- */ -/* Sheet Styles */ -/* ----------------------------------------- */ - @colorDark: #191813; @colorFaint: #c9c7b8; @colorBeige: #b5b3a4; @@ -40,22 +8,15 @@ @colorCrimson: #44191a; @borderGroove: 2px groove #eeede0; @sheetBackground: url("../assets/images/background.webp") repeat; - -/* ----------------------------------------- */ -/* Flexbox */ -/* ----------------------------------------- */ - .flexrow { display: flex; flex-direction: row; flex-wrap: wrap; justify-content: flex-start; width: 100%; - > * { flex: 1; } - .flex1 { flex: 1; } @@ -69,16 +30,13 @@ flex: 4; } } - .flexcol { display: flex; flex-direction: column; flex-wrap: nowrap; - > * { flex: 1; } - .flex1 { flex: 1; } @@ -92,11 +50,3 @@ flex: 4; } } - -// .chat-message{ -// background: url(./assets/background.webp) repeat;; -// } - -// .window-app .window-content{ -// background: url(./assets/background.webp) repeat;; -// } diff --git a/templates/actors/character-sheet-v2.html b/templates/actors/character-sheet-v2.html index 0975c041..b0628654 100644 --- a/templates/actors/character-sheet-v2.html +++ b/templates/actors/character-sheet-v2.html @@ -153,9 +153,9 @@ {{/if}} {{else}} {{#if data.flags.locked}} - + {{else}} - + {{/if}} {{/if}} diff --git a/templates/actors/storage-sheet.html b/templates/actors/storage-sheet.html index b9439712..21cbbd4a 100644 --- a/templates/actors/storage-sheet.html +++ b/templates/actors/storage-sheet.html @@ -21,9 +21,9 @@

{{/if}} {{else}} {{#if data.flags.locked}} - + {{else}} - + {{/if}} {{/if}} From a417f97cfc2870a3a41fa2497f875dc66f302ea4 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 14 Sep 2021 21:00:50 +0100 Subject: [PATCH 059/726] Update Dice So Nice! triggered from chat card update to use current roll mode Update message card triggered from chat card update to use current roll mode --- module/check.js | 27 +++++++++++++++++++-------- module/dice.js | 10 ++++++++-- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/module/check.js b/module/check.js index e7a938a7..946a02bf 100644 --- a/module/check.js +++ b/module/check.js @@ -1580,6 +1580,23 @@ export class CoC7Check { */ async updateChatCard ({ makePublic = false, forceRoll = false } = {}) { if (makePublic) this.rollMode = false // reset roll mode + + const chatData = { flavor: this.flavor } + + if (makePublic) { + chatData.whisper = [] + chatData.blind = false + ChatMessage.applyRollMode(chatData) + } else { + chatData.whisper = [] + chatData.blind = false + ChatMessage.applyRollMode(chatData, game.settings.get('core', 'rollMode')) + } + + if (chatData.blind) { + this.isBlind = true + } + const template = 'systems/CoC7/templates/chat/roll-result.html' const html = await renderTemplate(template, this) let newContent = html @@ -1598,20 +1615,14 @@ export class CoC7Check { newContent = htmlMessage.outerHTML } - const chatData = { flavor: this.flavor, content: newContent } + chatData.content = newContent + if (CONST.CHAT_MESSAGE_TYPES.ROLL === message.data.type) { if (message.data.whisper?.length) { chatData.type = CONST.CHAT_MESSAGE_TYPES.WHISPER } else chatData.type = CONST.CHAT_MESSAGE_TYPES.OTHER } - if (makePublic) { - chatData.whisper = [] - chatData.blind = false - } - - ChatMessage.applyRollMode(chatData) - if (forceRoll && this.dice?.roll) { await CoC7Dice.showRollDice3d(this.dice.roll) } diff --git a/module/dice.js b/module/dice.js index 177b978d..96e2b85b 100644 --- a/module/dice.js +++ b/module/dice.js @@ -1,4 +1,4 @@ -/* global CONFIG, game, Roll */ +/* global ChatMessage, CONFIG, game, Roll */ export class CoC7Dice { static async roll (modif = 0, rollMode = null, hideDice = false) { @@ -58,7 +58,13 @@ export class CoC7Dice { if (game.modules.get('dice-so-nice')?.active) { const syncDice = game.settings.get('CoC7', 'syncDice3d') - await game.dice3d.showForRoll(roll, game.user, syncDice) + const chatData = { + whisper: null, + blind: false + } + ChatMessage.applyRollMode(chatData, game.settings.get('core', 'rollMode')) + + await game.dice3d.showForRoll(roll, game.user, syncDice, chatData.whisper, chatData.blind) } } } From 5918c4d0c37d4f3a10993140a7164783a0f1fc64 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 14 Sep 2021 22:25:07 +0100 Subject: [PATCH 060/726] Update en.json --- lang/en.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lang/en.json b/lang/en.json index 051d04aa..5850c440 100644 --- a/lang/en.json +++ b/lang/en.json @@ -2,6 +2,7 @@ "CoC7.title": "Call of Cthulhu 7h Edition (Unofficial)", "CoC7.Entities.Character": "Character", + "CoC7.Entities.Container": "Container", "CoC7.Entities.Creature": "Creature", "CoC7.Entities.Npc": "NPC", "CoC7.Entities.Vehicle": "Vehicle", @@ -89,6 +90,7 @@ "CoC7.Spells": "Spells", "CoC7.Spell": "Spell", "CoC7.Spells&Notes": "Spells & Notes", + "CoC7.Weapons": "Weapons", "CoC7.Effects": "Effects", "CoC7.Cost": "Cost", "CoC7.Source": "Source", @@ -400,7 +402,14 @@ "CoC7.AddItem": "Add item", "CoC7.EditItem": "Edit item", "CoC7.DeleteItem": "Delete Item", - "CoC7.AddWeapon": "Add Weapon", + "CoC7.TradeItem": "Trade / Store Item", + + "CoC7.NewBookName": "new book", + "CoC7.AddBook": "Add book", + "CoC7.NewSpellName": "new spell", + "CoC7.AddSpell": "Add spell", + + "CoC7.AddWeapon": "Add weapon", "CoC7.NewWeaponName": "new weapon", "CoC7.EditWeapon": "Edit Weapon", "CoC7.DeleteWeapon": "Delete Weapon", @@ -705,6 +714,9 @@ "CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", "CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2", + "CoC7.MessageTitleSelectUserToGiveTo": "Give item to another character", + "CoC7.MessageSelectUserToGiveTo": "Which character would you like to give this item to?", + "SETTINGS.ShowExperimentalFeatures": "Show Experimental Features", "SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds", "CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.", From b2ffec5b919936d55e725bc97201dc2b6c3a9d76 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 14 Sep 2021 22:26:08 +0100 Subject: [PATCH 061/726] Update en.json --- lang/en.json | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lang/en.json b/lang/en.json index 5850c440..9663a186 100644 --- a/lang/en.json +++ b/lang/en.json @@ -717,10 +717,6 @@ "CoC7.MessageTitleSelectUserToGiveTo": "Give item to another character", "CoC7.MessageSelectUserToGiveTo": "Which character would you like to give this item to?", - "SETTINGS.ShowExperimentalFeatures": "Show Experimental Features", - "SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds", - "CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.", - "SETTINGS.TitleRules": "Rules", "SETTINGS.TitleInitiative": "Initiative Settings", "SETTINGS.TitleRoll": "Roll Settings", @@ -821,5 +817,8 @@ "SETTINGS.OneBlockBackStory": "One block backstory", "SETTINGS.OneBlockBackStoryHint": "Turn backstory to one editor block, but you can format/add links.", "SETTINGS.EnableStatusIcons": "Enable status icons", - "SETTINGS.EnableStatusIconsHint": "Set if combat and sanity effects icons are shown in tokens." + "SETTINGS.EnableStatusIconsHint": "Set if combat and sanity effects icons are shown in tokens.", + "SETTINGS.ShowExperimentalFeatures": "Show Experimental Features", + "SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds", + "CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world." } From 6ee52bbb54f30b89bc4e7036fe9788a23766abf2 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 14 Sep 2021 21:27:17 +0000 Subject: [PATCH 062/726] Updated translations list --- .github/TRANSLATIONS.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index d2e15b99..f7d9e7eb 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,7 +4,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **326** | **102** | **119** | **14** | **14** | **121** | **14** | **14** | **12** | **42** | +| **Remaining**: | **329** | **105** | **122** | **17** | **17** | **124** | **17** | **17** | **15** | **45** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | @@ -86,6 +86,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -317,6 +318,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | | [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | | [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | @@ -657,6 +660,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.Expand": "Expand",` +##### CoC7.ExperimentalFeaturesWarning + +`"CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.",` + ##### CoC7.FakeRoll `"CoC7.FakeRoll": "Send a decoy roll to players",` @@ -1581,6 +1588,14 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"SETTINGS.SelfRollWhisperTargetHint": "As a GM, when doing self check roll, who do you want to send a notification to.",` +##### SETTINGS.ShowExperimentalFeatures + +`"SETTINGS.ShowExperimentalFeatures": "Show Experimental Features",` + +##### SETTINGS.ShowExperimentalFeaturesHint + +`"SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds",` + ##### SETTINGS.StanbyGMRolls `"SETTINGS.StanbyGMRolls": "Standby Keeper rolls",` From c383ed9b310a0b030ae4554903be0fbacc13fbb8 Mon Sep 17 00:00:00 2001 From: castanho Date: Wed, 15 Sep 2021 10:36:54 -0300 Subject: [PATCH 063/726] Add option to sort skills by value Resolve #679 --- module/actors/sheets/character.js | 21 ++-- styles/sheets/character.less | 2 +- templates/actors/parts/actor-skills-v2.html | 106 +++++++++++++------- 3 files changed, 86 insertions(+), 43 deletions(-) diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index f475f9ed..ecd0746c 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -40,6 +40,8 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { async getData () { const data = await super.getData() + if (!this.skillListMode) this.skillListMode = 'alphabetical' + if (this.actor.occupation) { data.data.infos.occupation = this.actor.occupation.name data.data.infos.occupationSet = true @@ -118,6 +120,7 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { data.oneBlockBackStory = game.settings.get('CoC7', 'oneBlockBackstory') data.summarized = this.summarized + data.skillListModeValue = this.skillListMode === 'value' data.skillList = [] let previousSpec = '' for (const skill of data.skills) { @@ -132,12 +135,10 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { } data.skillList.push(skill) } - data.topSkills = [...data.skills] - .sort((a, b) => { - return a.data.value - b.data.value - }) - .reverse() - .slice(0, 14) + data.skillsByValue = [...data.skills].sort((a, b) => { + return a.data.value - b.data.value + }).reverse() + data.topSkills = [...data.skillsByValue].slice(0, 14) data.topWeapons = [...data.meleeWpn, ...data.rangeWpn] .sort((a, b) => { return a.data.skill.main?.value - b.data.skill.main?.value @@ -197,9 +198,17 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { html .find('[name="data.attribs.hp.value"]') .change(event => this.actor.setHealthStatusManually(event)) + html.find('.toggle-list-mode').click(event => { + this.toggleSkillListMode(event) + }) } } + async toggleSkillListMode (event) { + this.skillListMode === 'alphabetical' ? this.skillListMode = 'value' : this.skillListMode = 'alphabetical' + return await this.render(true) + } + async _onSkillDev (event) { event.preventDefault() const skillId = event.currentTarget.closest('.item').dataset.itemId diff --git a/styles/sheets/character.less b/styles/sheets/character.less index 2b48ea4a..b6899d7e 100644 --- a/styles/sheets/character.less +++ b/styles/sheets/character.less @@ -2,7 +2,7 @@ &.character { .floating-left { position: absolute; - left: 140px; + left: 120px; color: var(--main-sheet-front-color); } diff --git a/templates/actors/parts/actor-skills-v2.html b/templates/actors/parts/actor-skills-v2.html index 49c6205b..438a64ac 100644 --- a/templates/actors/parts/actor-skills-v2.html +++ b/templates/actors/parts/actor-skills-v2.html @@ -1,42 +1,76 @@ {{#unless data.flags.locked}}
- + +
{{/unless}}
    - {{#each skillList as |skill|}} - {{#if skill.isSpecialization}} -
  1. {{skill.name}}
  2. - {{else}} -
  3. -
    - {{#if ../data.flags.locked}} -
    {{skill.name}}
    -
    {{skill.data.value}}
    -
    - {{#unless skill.data.properties.noxpgain}} - - {{#if skill.data.flags.developement}} - - {{else}} - - {{/if}} - {{/unless}} - -
    - {{else}} -
    - -
    -
    - -
    -
    - - -
    - {{/if}} -
  4. - {{/if}} - {{/each}} + {{#if skillListModeValue}} + {{#each skillsByValue as |skill|}} +
  5. +
    + {{#if ../data.flags.locked}} +
    {{skill.name}}
    +
    {{skill.data.value}}
    +
    + {{#unless skill.data.properties.noxpgain}} + {{#if skill.data.flags.developement}} + + {{else}} + + {{/if}} + {{/unless}} + +
    + {{else}} +
    + +
    +
    + +
    +
    + + +
    + {{/if}} +
  6. + {{/each}} + {{else}} + {{#each skillList as |skill|}} + {{#if skill.isSpecialization}} +
  7. {{skill.name}}
  8. + {{else}} +
  9. +
    + {{#if ../data.flags.locked}} +
    {{skill.name}}
    +
    {{skill.data.value}}
    +
    + {{#unless skill.data.properties.noxpgain}} + + {{#if skill.data.flags.developement}} + + {{else}} + + {{/if}} + {{/unless}} + +
    + {{else}} +
    + +
    +
    + +
    +
    + + +
    + {{/if}} +
  10. + {{/if}} + {{/each}} + {{/if}}
From f3d82394e0fb5d63da7589ce3a7ea3f66eb3b829 Mon Sep 17 00:00:00 2001 From: castanho Date: Wed, 15 Sep 2021 15:51:26 -0300 Subject: [PATCH 064/726] Add game-icons for skills --- assets/icons/skills/accounting.svg | 1 + assets/icons/skills/animal-handling.svg | 1 + assets/icons/skills/anthropology.svg | 1 + assets/icons/skills/appraise.svg | 1 + assets/icons/skills/archeology.svg | 1 + assets/icons/skills/art-craft_acting.svg | 1 + assets/icons/skills/art-craft_any.svg | 1 + assets/icons/skills/art-craft_forgery.svg | 1 + assets/icons/skills/art-craft_photography.svg | 1 + assets/icons/skills/art_craft_fine-art.svg | 1 + assets/icons/skills/astronomy.svg | 1 + assets/icons/skills/charm.svg | 1 + assets/icons/skills/climb.svg | 1 + assets/icons/skills/computer-use.svg | 1 + assets/icons/skills/credit-rating.svg | 1 + assets/icons/skills/cthulhu-mythos.svg | 1 + assets/icons/skills/demolitions.svg | 1 + assets/icons/skills/disguise.svg | 1 + assets/icons/skills/diving.svg | 1 + assets/icons/skills/dodge.svg | 1 + assets/icons/skills/drive-auto.svg | 1 + assets/icons/skills/electrical-repair.svg | 1 + assets/icons/skills/electronics.svg | 1 + assets/icons/skills/fast-talk.svg | 1 + assets/icons/skills/fighting_axe.svg | 1 + assets/icons/skills/fighting_brawl.svg | 1 + assets/icons/skills/fighting_chainsaw.svg | 1 + assets/icons/skills/fighting_flail.svg | 1 + assets/icons/skills/fighting_garrote.svg | 1 + assets/icons/skills/fighting_spear.svg | 1 + assets/icons/skills/fighting_sword.svg | 1 + assets/icons/skills/fighting_throw.svg | 1 + assets/icons/skills/fighting_whip.svg | 1 + assets/icons/skills/firearms_any.svg | 1 + assets/icons/skills/firearms_artillery.svg | 1 + assets/icons/skills/firearms_bow.svg | 1 + assets/icons/skills/firearms_handgun.svg | 1 + assets/icons/skills/firearms_heavy-weapons.svg | 1 + assets/icons/skills/firearms_machine-gun.svg | 1 + assets/icons/skills/firearms_rifle-shotgun.svg | 1 + assets/icons/skills/firearms_submachine-gun.svg | 1 + assets/icons/skills/first-aid.svg | 1 + assets/icons/skills/flamethrower.svg | 1 + assets/icons/skills/forgery.svg | 1 + assets/icons/skills/history.svg | 1 + assets/icons/skills/hypnosis.svg | 1 + assets/icons/skills/intimidation.svg | 1 + assets/icons/skills/jump.svg | 1 + assets/icons/skills/language_other.svg | 1 + assets/icons/skills/language_own.svg | 1 + assets/icons/skills/law.svg | 1 + assets/icons/skills/library-use.svg | 1 + assets/icons/skills/listen.svg | 1 + assets/icons/skills/locksmith.svg | 1 + assets/icons/skills/mechanical-repair.svg | 1 + assets/icons/skills/medicine.svg | 1 + assets/icons/skills/meteorology.svg | 1 + assets/icons/skills/natural-world.svg | 1 + assets/icons/skills/navigate.svg | 1 + assets/icons/skills/occult.svg | 1 + assets/icons/skills/operate-heavy-machinery.svg | 1 + assets/icons/skills/persuade.svg | 1 + assets/icons/skills/pilot_any.svg | 1 + assets/icons/skills/psychoanalysis.svg | 1 + assets/icons/skills/psychology.svg | 1 + assets/icons/skills/read-lips.svg | 1 + assets/icons/skills/ride.svg | 1 + assets/icons/skills/science_any.svg | 1 + assets/icons/skills/science_biology.svg | 1 + assets/icons/skills/science_botany.svg | 1 + assets/icons/skills/science_chemistry.svg | 1 + assets/icons/skills/science_cryptography.svg | 1 + assets/icons/skills/science_forensics.svg | 1 + assets/icons/skills/science_geology.svg | 1 + assets/icons/skills/science_mathematics.svg | 1 + assets/icons/skills/science_pharmacy.svg | 1 + assets/icons/skills/science_physics.svg | 1 + assets/icons/skills/science_zoology.svg | 1 + assets/icons/skills/sleight-of-hand.svg | 1 + assets/icons/skills/spot-hidden.svg | 1 + assets/icons/skills/stealth.svg | 1 + assets/icons/skills/survival_any.svg | 1 + assets/icons/skills/swim.svg | 1 + assets/icons/skills/track.svg | 1 + 84 files changed, 84 insertions(+) create mode 100644 assets/icons/skills/accounting.svg create mode 100644 assets/icons/skills/animal-handling.svg create mode 100644 assets/icons/skills/anthropology.svg create mode 100644 assets/icons/skills/appraise.svg create mode 100644 assets/icons/skills/archeology.svg create mode 100644 assets/icons/skills/art-craft_acting.svg create mode 100644 assets/icons/skills/art-craft_any.svg create mode 100644 assets/icons/skills/art-craft_forgery.svg create mode 100644 assets/icons/skills/art-craft_photography.svg create mode 100644 assets/icons/skills/art_craft_fine-art.svg create mode 100644 assets/icons/skills/astronomy.svg create mode 100644 assets/icons/skills/charm.svg create mode 100644 assets/icons/skills/climb.svg create mode 100644 assets/icons/skills/computer-use.svg create mode 100644 assets/icons/skills/credit-rating.svg create mode 100644 assets/icons/skills/cthulhu-mythos.svg create mode 100644 assets/icons/skills/demolitions.svg create mode 100644 assets/icons/skills/disguise.svg create mode 100644 assets/icons/skills/diving.svg create mode 100644 assets/icons/skills/dodge.svg create mode 100644 assets/icons/skills/drive-auto.svg create mode 100644 assets/icons/skills/electrical-repair.svg create mode 100644 assets/icons/skills/electronics.svg create mode 100644 assets/icons/skills/fast-talk.svg create mode 100644 assets/icons/skills/fighting_axe.svg create mode 100644 assets/icons/skills/fighting_brawl.svg create mode 100644 assets/icons/skills/fighting_chainsaw.svg create mode 100644 assets/icons/skills/fighting_flail.svg create mode 100644 assets/icons/skills/fighting_garrote.svg create mode 100644 assets/icons/skills/fighting_spear.svg create mode 100644 assets/icons/skills/fighting_sword.svg create mode 100644 assets/icons/skills/fighting_throw.svg create mode 100644 assets/icons/skills/fighting_whip.svg create mode 100644 assets/icons/skills/firearms_any.svg create mode 100644 assets/icons/skills/firearms_artillery.svg create mode 100644 assets/icons/skills/firearms_bow.svg create mode 100644 assets/icons/skills/firearms_handgun.svg create mode 100644 assets/icons/skills/firearms_heavy-weapons.svg create mode 100644 assets/icons/skills/firearms_machine-gun.svg create mode 100644 assets/icons/skills/firearms_rifle-shotgun.svg create mode 100644 assets/icons/skills/firearms_submachine-gun.svg create mode 100644 assets/icons/skills/first-aid.svg create mode 100644 assets/icons/skills/flamethrower.svg create mode 100644 assets/icons/skills/forgery.svg create mode 100644 assets/icons/skills/history.svg create mode 100644 assets/icons/skills/hypnosis.svg create mode 100644 assets/icons/skills/intimidation.svg create mode 100644 assets/icons/skills/jump.svg create mode 100644 assets/icons/skills/language_other.svg create mode 100644 assets/icons/skills/language_own.svg create mode 100644 assets/icons/skills/law.svg create mode 100644 assets/icons/skills/library-use.svg create mode 100644 assets/icons/skills/listen.svg create mode 100644 assets/icons/skills/locksmith.svg create mode 100644 assets/icons/skills/mechanical-repair.svg create mode 100644 assets/icons/skills/medicine.svg create mode 100644 assets/icons/skills/meteorology.svg create mode 100644 assets/icons/skills/natural-world.svg create mode 100644 assets/icons/skills/navigate.svg create mode 100644 assets/icons/skills/occult.svg create mode 100644 assets/icons/skills/operate-heavy-machinery.svg create mode 100644 assets/icons/skills/persuade.svg create mode 100644 assets/icons/skills/pilot_any.svg create mode 100644 assets/icons/skills/psychoanalysis.svg create mode 100644 assets/icons/skills/psychology.svg create mode 100644 assets/icons/skills/read-lips.svg create mode 100644 assets/icons/skills/ride.svg create mode 100644 assets/icons/skills/science_any.svg create mode 100644 assets/icons/skills/science_biology.svg create mode 100644 assets/icons/skills/science_botany.svg create mode 100644 assets/icons/skills/science_chemistry.svg create mode 100644 assets/icons/skills/science_cryptography.svg create mode 100644 assets/icons/skills/science_forensics.svg create mode 100644 assets/icons/skills/science_geology.svg create mode 100644 assets/icons/skills/science_mathematics.svg create mode 100644 assets/icons/skills/science_pharmacy.svg create mode 100644 assets/icons/skills/science_physics.svg create mode 100644 assets/icons/skills/science_zoology.svg create mode 100644 assets/icons/skills/sleight-of-hand.svg create mode 100644 assets/icons/skills/spot-hidden.svg create mode 100644 assets/icons/skills/stealth.svg create mode 100644 assets/icons/skills/survival_any.svg create mode 100644 assets/icons/skills/swim.svg create mode 100644 assets/icons/skills/track.svg diff --git a/assets/icons/skills/accounting.svg b/assets/icons/skills/accounting.svg new file mode 100644 index 00000000..49612a3d --- /dev/null +++ b/assets/icons/skills/accounting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/animal-handling.svg b/assets/icons/skills/animal-handling.svg new file mode 100644 index 00000000..a27239a9 --- /dev/null +++ b/assets/icons/skills/animal-handling.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/anthropology.svg b/assets/icons/skills/anthropology.svg new file mode 100644 index 00000000..5b7f6201 --- /dev/null +++ b/assets/icons/skills/anthropology.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/appraise.svg b/assets/icons/skills/appraise.svg new file mode 100644 index 00000000..5ff3542a --- /dev/null +++ b/assets/icons/skills/appraise.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/archeology.svg b/assets/icons/skills/archeology.svg new file mode 100644 index 00000000..58b3f7fa --- /dev/null +++ b/assets/icons/skills/archeology.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/art-craft_acting.svg b/assets/icons/skills/art-craft_acting.svg new file mode 100644 index 00000000..719dc623 --- /dev/null +++ b/assets/icons/skills/art-craft_acting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/art-craft_any.svg b/assets/icons/skills/art-craft_any.svg new file mode 100644 index 00000000..4c0bb876 --- /dev/null +++ b/assets/icons/skills/art-craft_any.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/art-craft_forgery.svg b/assets/icons/skills/art-craft_forgery.svg new file mode 100644 index 00000000..59f77a95 --- /dev/null +++ b/assets/icons/skills/art-craft_forgery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/art-craft_photography.svg b/assets/icons/skills/art-craft_photography.svg new file mode 100644 index 00000000..9b232a69 --- /dev/null +++ b/assets/icons/skills/art-craft_photography.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/art_craft_fine-art.svg b/assets/icons/skills/art_craft_fine-art.svg new file mode 100644 index 00000000..53f073ca --- /dev/null +++ b/assets/icons/skills/art_craft_fine-art.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/astronomy.svg b/assets/icons/skills/astronomy.svg new file mode 100644 index 00000000..f6cc149c --- /dev/null +++ b/assets/icons/skills/astronomy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/charm.svg b/assets/icons/skills/charm.svg new file mode 100644 index 00000000..dfe77d57 --- /dev/null +++ b/assets/icons/skills/charm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/climb.svg b/assets/icons/skills/climb.svg new file mode 100644 index 00000000..d2274a37 --- /dev/null +++ b/assets/icons/skills/climb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/computer-use.svg b/assets/icons/skills/computer-use.svg new file mode 100644 index 00000000..30de5a6f --- /dev/null +++ b/assets/icons/skills/computer-use.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/credit-rating.svg b/assets/icons/skills/credit-rating.svg new file mode 100644 index 00000000..fb6bb981 --- /dev/null +++ b/assets/icons/skills/credit-rating.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/cthulhu-mythos.svg b/assets/icons/skills/cthulhu-mythos.svg new file mode 100644 index 00000000..16d9c397 --- /dev/null +++ b/assets/icons/skills/cthulhu-mythos.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/demolitions.svg b/assets/icons/skills/demolitions.svg new file mode 100644 index 00000000..ff0e4342 --- /dev/null +++ b/assets/icons/skills/demolitions.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/disguise.svg b/assets/icons/skills/disguise.svg new file mode 100644 index 00000000..fdd33e2c --- /dev/null +++ b/assets/icons/skills/disguise.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/diving.svg b/assets/icons/skills/diving.svg new file mode 100644 index 00000000..1a112bad --- /dev/null +++ b/assets/icons/skills/diving.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/dodge.svg b/assets/icons/skills/dodge.svg new file mode 100644 index 00000000..79f24176 --- /dev/null +++ b/assets/icons/skills/dodge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/drive-auto.svg b/assets/icons/skills/drive-auto.svg new file mode 100644 index 00000000..64baf926 --- /dev/null +++ b/assets/icons/skills/drive-auto.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/electrical-repair.svg b/assets/icons/skills/electrical-repair.svg new file mode 100644 index 00000000..982817b9 --- /dev/null +++ b/assets/icons/skills/electrical-repair.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/electronics.svg b/assets/icons/skills/electronics.svg new file mode 100644 index 00000000..39fdeeaf --- /dev/null +++ b/assets/icons/skills/electronics.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/fast-talk.svg b/assets/icons/skills/fast-talk.svg new file mode 100644 index 00000000..11acaccd --- /dev/null +++ b/assets/icons/skills/fast-talk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/fighting_axe.svg b/assets/icons/skills/fighting_axe.svg new file mode 100644 index 00000000..8783307c --- /dev/null +++ b/assets/icons/skills/fighting_axe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/fighting_brawl.svg b/assets/icons/skills/fighting_brawl.svg new file mode 100644 index 00000000..f344b588 --- /dev/null +++ b/assets/icons/skills/fighting_brawl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/fighting_chainsaw.svg b/assets/icons/skills/fighting_chainsaw.svg new file mode 100644 index 00000000..d0b1cf63 --- /dev/null +++ b/assets/icons/skills/fighting_chainsaw.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/fighting_flail.svg b/assets/icons/skills/fighting_flail.svg new file mode 100644 index 00000000..a1a5f06f --- /dev/null +++ b/assets/icons/skills/fighting_flail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/fighting_garrote.svg b/assets/icons/skills/fighting_garrote.svg new file mode 100644 index 00000000..c9b595de --- /dev/null +++ b/assets/icons/skills/fighting_garrote.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/skills/fighting_spear.svg b/assets/icons/skills/fighting_spear.svg new file mode 100644 index 00000000..e2703d7f --- /dev/null +++ b/assets/icons/skills/fighting_spear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/fighting_sword.svg b/assets/icons/skills/fighting_sword.svg new file mode 100644 index 00000000..be414ba6 --- /dev/null +++ b/assets/icons/skills/fighting_sword.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/fighting_throw.svg b/assets/icons/skills/fighting_throw.svg new file mode 100644 index 00000000..b11ebb99 --- /dev/null +++ b/assets/icons/skills/fighting_throw.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/fighting_whip.svg b/assets/icons/skills/fighting_whip.svg new file mode 100644 index 00000000..db37e51d --- /dev/null +++ b/assets/icons/skills/fighting_whip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/firearms_any.svg b/assets/icons/skills/firearms_any.svg new file mode 100644 index 00000000..589d6847 --- /dev/null +++ b/assets/icons/skills/firearms_any.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/firearms_artillery.svg b/assets/icons/skills/firearms_artillery.svg new file mode 100644 index 00000000..35a7e4ba --- /dev/null +++ b/assets/icons/skills/firearms_artillery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/firearms_bow.svg b/assets/icons/skills/firearms_bow.svg new file mode 100644 index 00000000..beae887a --- /dev/null +++ b/assets/icons/skills/firearms_bow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/firearms_handgun.svg b/assets/icons/skills/firearms_handgun.svg new file mode 100644 index 00000000..0cffcaa8 --- /dev/null +++ b/assets/icons/skills/firearms_handgun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/firearms_heavy-weapons.svg b/assets/icons/skills/firearms_heavy-weapons.svg new file mode 100644 index 00000000..a5a3d998 --- /dev/null +++ b/assets/icons/skills/firearms_heavy-weapons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/firearms_machine-gun.svg b/assets/icons/skills/firearms_machine-gun.svg new file mode 100644 index 00000000..4c2be6c8 --- /dev/null +++ b/assets/icons/skills/firearms_machine-gun.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/skills/firearms_rifle-shotgun.svg b/assets/icons/skills/firearms_rifle-shotgun.svg new file mode 100644 index 00000000..a3275bea --- /dev/null +++ b/assets/icons/skills/firearms_rifle-shotgun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/firearms_submachine-gun.svg b/assets/icons/skills/firearms_submachine-gun.svg new file mode 100644 index 00000000..2484ef22 --- /dev/null +++ b/assets/icons/skills/firearms_submachine-gun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/first-aid.svg b/assets/icons/skills/first-aid.svg new file mode 100644 index 00000000..ee9b358c --- /dev/null +++ b/assets/icons/skills/first-aid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/flamethrower.svg b/assets/icons/skills/flamethrower.svg new file mode 100644 index 00000000..84c26d2d --- /dev/null +++ b/assets/icons/skills/flamethrower.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/forgery.svg b/assets/icons/skills/forgery.svg new file mode 100644 index 00000000..df0f4a54 --- /dev/null +++ b/assets/icons/skills/forgery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/history.svg b/assets/icons/skills/history.svg new file mode 100644 index 00000000..1c38ab8b --- /dev/null +++ b/assets/icons/skills/history.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/hypnosis.svg b/assets/icons/skills/hypnosis.svg new file mode 100644 index 00000000..ebb3a178 --- /dev/null +++ b/assets/icons/skills/hypnosis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/intimidation.svg b/assets/icons/skills/intimidation.svg new file mode 100644 index 00000000..f5432be7 --- /dev/null +++ b/assets/icons/skills/intimidation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/jump.svg b/assets/icons/skills/jump.svg new file mode 100644 index 00000000..309ff905 --- /dev/null +++ b/assets/icons/skills/jump.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/language_other.svg b/assets/icons/skills/language_other.svg new file mode 100644 index 00000000..756bcf5a --- /dev/null +++ b/assets/icons/skills/language_other.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/language_own.svg b/assets/icons/skills/language_own.svg new file mode 100644 index 00000000..82f77445 --- /dev/null +++ b/assets/icons/skills/language_own.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/law.svg b/assets/icons/skills/law.svg new file mode 100644 index 00000000..90265aa7 --- /dev/null +++ b/assets/icons/skills/law.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/library-use.svg b/assets/icons/skills/library-use.svg new file mode 100644 index 00000000..70029a15 --- /dev/null +++ b/assets/icons/skills/library-use.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/skills/listen.svg b/assets/icons/skills/listen.svg new file mode 100644 index 00000000..d5d39f68 --- /dev/null +++ b/assets/icons/skills/listen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/locksmith.svg b/assets/icons/skills/locksmith.svg new file mode 100644 index 00000000..3fe250f3 --- /dev/null +++ b/assets/icons/skills/locksmith.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/mechanical-repair.svg b/assets/icons/skills/mechanical-repair.svg new file mode 100644 index 00000000..3529ff89 --- /dev/null +++ b/assets/icons/skills/mechanical-repair.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/medicine.svg b/assets/icons/skills/medicine.svg new file mode 100644 index 00000000..b94a8eb8 --- /dev/null +++ b/assets/icons/skills/medicine.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/meteorology.svg b/assets/icons/skills/meteorology.svg new file mode 100644 index 00000000..9c998553 --- /dev/null +++ b/assets/icons/skills/meteorology.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/natural-world.svg b/assets/icons/skills/natural-world.svg new file mode 100644 index 00000000..853fdd41 --- /dev/null +++ b/assets/icons/skills/natural-world.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/navigate.svg b/assets/icons/skills/navigate.svg new file mode 100644 index 00000000..db5f1a57 --- /dev/null +++ b/assets/icons/skills/navigate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/occult.svg b/assets/icons/skills/occult.svg new file mode 100644 index 00000000..49ef9b3c --- /dev/null +++ b/assets/icons/skills/occult.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/operate-heavy-machinery.svg b/assets/icons/skills/operate-heavy-machinery.svg new file mode 100644 index 00000000..c097e2db --- /dev/null +++ b/assets/icons/skills/operate-heavy-machinery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/persuade.svg b/assets/icons/skills/persuade.svg new file mode 100644 index 00000000..2b4ed244 --- /dev/null +++ b/assets/icons/skills/persuade.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/pilot_any.svg b/assets/icons/skills/pilot_any.svg new file mode 100644 index 00000000..a3f03fb7 --- /dev/null +++ b/assets/icons/skills/pilot_any.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/skills/psychoanalysis.svg b/assets/icons/skills/psychoanalysis.svg new file mode 100644 index 00000000..a05bdde2 --- /dev/null +++ b/assets/icons/skills/psychoanalysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/psychology.svg b/assets/icons/skills/psychology.svg new file mode 100644 index 00000000..9374ee14 --- /dev/null +++ b/assets/icons/skills/psychology.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/read-lips.svg b/assets/icons/skills/read-lips.svg new file mode 100644 index 00000000..2967339f --- /dev/null +++ b/assets/icons/skills/read-lips.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/ride.svg b/assets/icons/skills/ride.svg new file mode 100644 index 00000000..48204de2 --- /dev/null +++ b/assets/icons/skills/ride.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/skills/science_any.svg b/assets/icons/skills/science_any.svg new file mode 100644 index 00000000..17eca230 --- /dev/null +++ b/assets/icons/skills/science_any.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/science_biology.svg b/assets/icons/skills/science_biology.svg new file mode 100644 index 00000000..8a3e480e --- /dev/null +++ b/assets/icons/skills/science_biology.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/science_botany.svg b/assets/icons/skills/science_botany.svg new file mode 100644 index 00000000..11c4304c --- /dev/null +++ b/assets/icons/skills/science_botany.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/science_chemistry.svg b/assets/icons/skills/science_chemistry.svg new file mode 100644 index 00000000..9a2773d8 --- /dev/null +++ b/assets/icons/skills/science_chemistry.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/science_cryptography.svg b/assets/icons/skills/science_cryptography.svg new file mode 100644 index 00000000..2b20098c --- /dev/null +++ b/assets/icons/skills/science_cryptography.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/science_forensics.svg b/assets/icons/skills/science_forensics.svg new file mode 100644 index 00000000..dc78e39a --- /dev/null +++ b/assets/icons/skills/science_forensics.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/science_geology.svg b/assets/icons/skills/science_geology.svg new file mode 100644 index 00000000..446789da --- /dev/null +++ b/assets/icons/skills/science_geology.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/science_mathematics.svg b/assets/icons/skills/science_mathematics.svg new file mode 100644 index 00000000..3bb8917a --- /dev/null +++ b/assets/icons/skills/science_mathematics.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/skills/science_pharmacy.svg b/assets/icons/skills/science_pharmacy.svg new file mode 100644 index 00000000..0c735477 --- /dev/null +++ b/assets/icons/skills/science_pharmacy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/science_physics.svg b/assets/icons/skills/science_physics.svg new file mode 100644 index 00000000..236c7a01 --- /dev/null +++ b/assets/icons/skills/science_physics.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/science_zoology.svg b/assets/icons/skills/science_zoology.svg new file mode 100644 index 00000000..8acfeb3e --- /dev/null +++ b/assets/icons/skills/science_zoology.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/sleight-of-hand.svg b/assets/icons/skills/sleight-of-hand.svg new file mode 100644 index 00000000..1fbd92db --- /dev/null +++ b/assets/icons/skills/sleight-of-hand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/spot-hidden.svg b/assets/icons/skills/spot-hidden.svg new file mode 100644 index 00000000..b8dbfa8c --- /dev/null +++ b/assets/icons/skills/spot-hidden.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/stealth.svg b/assets/icons/skills/stealth.svg new file mode 100644 index 00000000..42f3fcb6 --- /dev/null +++ b/assets/icons/skills/stealth.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/survival_any.svg b/assets/icons/skills/survival_any.svg new file mode 100644 index 00000000..2cccb990 --- /dev/null +++ b/assets/icons/skills/survival_any.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/swim.svg b/assets/icons/skills/swim.svg new file mode 100644 index 00000000..a55f4a48 --- /dev/null +++ b/assets/icons/skills/swim.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/track.svg b/assets/icons/skills/track.svg new file mode 100644 index 00000000..7deb7ffc --- /dev/null +++ b/assets/icons/skills/track.svg @@ -0,0 +1 @@ + \ No newline at end of file From 6d609a202ecf1a75a5a90baef754a0ada640cacb Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 15 Sep 2021 21:07:32 +0100 Subject: [PATCH 065/726] Standardise skill icon names, set default icons for skills --- ...nimal-handling.svg => animal_handling.svg} | 0 .../{archeology.svg => archaeology.svg} | 0 assets/icons/skills/art-craft_forgery.svg | 1 - ...-craft_acting.svg => art_craft_acting.svg} | 0 .../{art-craft_any.svg => art_craft_any.svg} | 0 ...ft_fine-art.svg => art_craft_fine_art.svg} | 0 .../{forgery.svg => art_craft_forgery.svg} | 0 ...tography.svg => art_craft_photography.svg} | 0 .../{computer-use.svg => computer_use.svg} | 0 .../{credit-rating.svg => credit_rating.svg} | 0 ...{cthulhu-mythos.svg => cthulhu_mythos.svg} | 0 .../skills/{drive-auto.svg => drive_auto.svg} | 0 ...rical-repair.svg => electrical_repair.svg} | 0 .../skills/{fast-talk.svg => fast_talk.svg} | 0 assets/icons/skills/firearms_any.svg | 1 - ...ethrower.svg => firearms_flamethrower.svg} | 0 ...weapons.svg => firearms_heavy_weapons.svg} | 0 ...chine-gun.svg => firearms_machine_gun.svg} | 0 ...shotgun.svg => firearms_rifle_shotgun.svg} | 0 ...ne-gun.svg => firearms_submachine_gun.svg} | 0 .../skills/{first-aid.svg => first_aid.svg} | 0 .../{intimidation.svg => intimidate.svg} | 0 .../{language_other.svg => language.svg} | 0 assets/icons/skills/language_own.svg | 1 - .../{library-use.svg => library_use.svg} | 0 ...nical-repair.svg => mechanical_repair.svg} | 0 .../{natural-world.svg => natural_world.svg} | 0 ...hinery.svg => operate_heavy_machinery.svg} | 0 .../skills/{read-lips.svg => read_lips.svg} | 0 .../{astronomy.svg => science_astronomy.svg} | 0 ...eteorology.svg => science_meteorology.svg} | 0 ...leight-of-hand.svg => sleight_of_hand.svg} | 0 .../{spot-hidden.svg => spot_hidden.svg} | 0 packs/skills.db | 168 +++++++++--------- 34 files changed, 84 insertions(+), 87 deletions(-) rename assets/icons/skills/{animal-handling.svg => animal_handling.svg} (100%) rename assets/icons/skills/{archeology.svg => archaeology.svg} (100%) delete mode 100644 assets/icons/skills/art-craft_forgery.svg rename assets/icons/skills/{art-craft_acting.svg => art_craft_acting.svg} (100%) rename assets/icons/skills/{art-craft_any.svg => art_craft_any.svg} (100%) rename assets/icons/skills/{art_craft_fine-art.svg => art_craft_fine_art.svg} (100%) rename assets/icons/skills/{forgery.svg => art_craft_forgery.svg} (100%) rename assets/icons/skills/{art-craft_photography.svg => art_craft_photography.svg} (100%) rename assets/icons/skills/{computer-use.svg => computer_use.svg} (100%) rename assets/icons/skills/{credit-rating.svg => credit_rating.svg} (100%) rename assets/icons/skills/{cthulhu-mythos.svg => cthulhu_mythos.svg} (100%) rename assets/icons/skills/{drive-auto.svg => drive_auto.svg} (100%) rename assets/icons/skills/{electrical-repair.svg => electrical_repair.svg} (100%) rename assets/icons/skills/{fast-talk.svg => fast_talk.svg} (100%) delete mode 100644 assets/icons/skills/firearms_any.svg rename assets/icons/skills/{flamethrower.svg => firearms_flamethrower.svg} (100%) rename assets/icons/skills/{firearms_heavy-weapons.svg => firearms_heavy_weapons.svg} (100%) rename assets/icons/skills/{firearms_machine-gun.svg => firearms_machine_gun.svg} (100%) rename assets/icons/skills/{firearms_rifle-shotgun.svg => firearms_rifle_shotgun.svg} (100%) rename assets/icons/skills/{firearms_submachine-gun.svg => firearms_submachine_gun.svg} (100%) rename assets/icons/skills/{first-aid.svg => first_aid.svg} (100%) rename assets/icons/skills/{intimidation.svg => intimidate.svg} (100%) rename assets/icons/skills/{language_other.svg => language.svg} (100%) delete mode 100644 assets/icons/skills/language_own.svg rename assets/icons/skills/{library-use.svg => library_use.svg} (100%) rename assets/icons/skills/{mechanical-repair.svg => mechanical_repair.svg} (100%) rename assets/icons/skills/{natural-world.svg => natural_world.svg} (100%) rename assets/icons/skills/{operate-heavy-machinery.svg => operate_heavy_machinery.svg} (100%) rename assets/icons/skills/{read-lips.svg => read_lips.svg} (100%) rename assets/icons/skills/{astronomy.svg => science_astronomy.svg} (100%) rename assets/icons/skills/{meteorology.svg => science_meteorology.svg} (100%) rename assets/icons/skills/{sleight-of-hand.svg => sleight_of_hand.svg} (100%) rename assets/icons/skills/{spot-hidden.svg => spot_hidden.svg} (100%) diff --git a/assets/icons/skills/animal-handling.svg b/assets/icons/skills/animal_handling.svg similarity index 100% rename from assets/icons/skills/animal-handling.svg rename to assets/icons/skills/animal_handling.svg diff --git a/assets/icons/skills/archeology.svg b/assets/icons/skills/archaeology.svg similarity index 100% rename from assets/icons/skills/archeology.svg rename to assets/icons/skills/archaeology.svg diff --git a/assets/icons/skills/art-craft_forgery.svg b/assets/icons/skills/art-craft_forgery.svg deleted file mode 100644 index 59f77a95..00000000 --- a/assets/icons/skills/art-craft_forgery.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/icons/skills/art-craft_acting.svg b/assets/icons/skills/art_craft_acting.svg similarity index 100% rename from assets/icons/skills/art-craft_acting.svg rename to assets/icons/skills/art_craft_acting.svg diff --git a/assets/icons/skills/art-craft_any.svg b/assets/icons/skills/art_craft_any.svg similarity index 100% rename from assets/icons/skills/art-craft_any.svg rename to assets/icons/skills/art_craft_any.svg diff --git a/assets/icons/skills/art_craft_fine-art.svg b/assets/icons/skills/art_craft_fine_art.svg similarity index 100% rename from assets/icons/skills/art_craft_fine-art.svg rename to assets/icons/skills/art_craft_fine_art.svg diff --git a/assets/icons/skills/forgery.svg b/assets/icons/skills/art_craft_forgery.svg similarity index 100% rename from assets/icons/skills/forgery.svg rename to assets/icons/skills/art_craft_forgery.svg diff --git a/assets/icons/skills/art-craft_photography.svg b/assets/icons/skills/art_craft_photography.svg similarity index 100% rename from assets/icons/skills/art-craft_photography.svg rename to assets/icons/skills/art_craft_photography.svg diff --git a/assets/icons/skills/computer-use.svg b/assets/icons/skills/computer_use.svg similarity index 100% rename from assets/icons/skills/computer-use.svg rename to assets/icons/skills/computer_use.svg diff --git a/assets/icons/skills/credit-rating.svg b/assets/icons/skills/credit_rating.svg similarity index 100% rename from assets/icons/skills/credit-rating.svg rename to assets/icons/skills/credit_rating.svg diff --git a/assets/icons/skills/cthulhu-mythos.svg b/assets/icons/skills/cthulhu_mythos.svg similarity index 100% rename from assets/icons/skills/cthulhu-mythos.svg rename to assets/icons/skills/cthulhu_mythos.svg diff --git a/assets/icons/skills/drive-auto.svg b/assets/icons/skills/drive_auto.svg similarity index 100% rename from assets/icons/skills/drive-auto.svg rename to assets/icons/skills/drive_auto.svg diff --git a/assets/icons/skills/electrical-repair.svg b/assets/icons/skills/electrical_repair.svg similarity index 100% rename from assets/icons/skills/electrical-repair.svg rename to assets/icons/skills/electrical_repair.svg diff --git a/assets/icons/skills/fast-talk.svg b/assets/icons/skills/fast_talk.svg similarity index 100% rename from assets/icons/skills/fast-talk.svg rename to assets/icons/skills/fast_talk.svg diff --git a/assets/icons/skills/firearms_any.svg b/assets/icons/skills/firearms_any.svg deleted file mode 100644 index 589d6847..00000000 --- a/assets/icons/skills/firearms_any.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/icons/skills/flamethrower.svg b/assets/icons/skills/firearms_flamethrower.svg similarity index 100% rename from assets/icons/skills/flamethrower.svg rename to assets/icons/skills/firearms_flamethrower.svg diff --git a/assets/icons/skills/firearms_heavy-weapons.svg b/assets/icons/skills/firearms_heavy_weapons.svg similarity index 100% rename from assets/icons/skills/firearms_heavy-weapons.svg rename to assets/icons/skills/firearms_heavy_weapons.svg diff --git a/assets/icons/skills/firearms_machine-gun.svg b/assets/icons/skills/firearms_machine_gun.svg similarity index 100% rename from assets/icons/skills/firearms_machine-gun.svg rename to assets/icons/skills/firearms_machine_gun.svg diff --git a/assets/icons/skills/firearms_rifle-shotgun.svg b/assets/icons/skills/firearms_rifle_shotgun.svg similarity index 100% rename from assets/icons/skills/firearms_rifle-shotgun.svg rename to assets/icons/skills/firearms_rifle_shotgun.svg diff --git a/assets/icons/skills/firearms_submachine-gun.svg b/assets/icons/skills/firearms_submachine_gun.svg similarity index 100% rename from assets/icons/skills/firearms_submachine-gun.svg rename to assets/icons/skills/firearms_submachine_gun.svg diff --git a/assets/icons/skills/first-aid.svg b/assets/icons/skills/first_aid.svg similarity index 100% rename from assets/icons/skills/first-aid.svg rename to assets/icons/skills/first_aid.svg diff --git a/assets/icons/skills/intimidation.svg b/assets/icons/skills/intimidate.svg similarity index 100% rename from assets/icons/skills/intimidation.svg rename to assets/icons/skills/intimidate.svg diff --git a/assets/icons/skills/language_other.svg b/assets/icons/skills/language.svg similarity index 100% rename from assets/icons/skills/language_other.svg rename to assets/icons/skills/language.svg diff --git a/assets/icons/skills/language_own.svg b/assets/icons/skills/language_own.svg deleted file mode 100644 index 82f77445..00000000 --- a/assets/icons/skills/language_own.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/icons/skills/library-use.svg b/assets/icons/skills/library_use.svg similarity index 100% rename from assets/icons/skills/library-use.svg rename to assets/icons/skills/library_use.svg diff --git a/assets/icons/skills/mechanical-repair.svg b/assets/icons/skills/mechanical_repair.svg similarity index 100% rename from assets/icons/skills/mechanical-repair.svg rename to assets/icons/skills/mechanical_repair.svg diff --git a/assets/icons/skills/natural-world.svg b/assets/icons/skills/natural_world.svg similarity index 100% rename from assets/icons/skills/natural-world.svg rename to assets/icons/skills/natural_world.svg diff --git a/assets/icons/skills/operate-heavy-machinery.svg b/assets/icons/skills/operate_heavy_machinery.svg similarity index 100% rename from assets/icons/skills/operate-heavy-machinery.svg rename to assets/icons/skills/operate_heavy_machinery.svg diff --git a/assets/icons/skills/read-lips.svg b/assets/icons/skills/read_lips.svg similarity index 100% rename from assets/icons/skills/read-lips.svg rename to assets/icons/skills/read_lips.svg diff --git a/assets/icons/skills/astronomy.svg b/assets/icons/skills/science_astronomy.svg similarity index 100% rename from assets/icons/skills/astronomy.svg rename to assets/icons/skills/science_astronomy.svg diff --git a/assets/icons/skills/meteorology.svg b/assets/icons/skills/science_meteorology.svg similarity index 100% rename from assets/icons/skills/meteorology.svg rename to assets/icons/skills/science_meteorology.svg diff --git a/assets/icons/skills/sleight-of-hand.svg b/assets/icons/skills/sleight_of_hand.svg similarity index 100% rename from assets/icons/skills/sleight-of-hand.svg rename to assets/icons/skills/sleight_of_hand.svg diff --git a/assets/icons/skills/spot-hidden.svg b/assets/icons/skills/spot_hidden.svg similarity index 100% rename from assets/icons/skills/spot-hidden.svg rename to assets/icons/skills/spot_hidden.svg diff --git a/packs/skills.db b/packs/skills.db index 80112e71..18ef702f 100644 --- a/packs/skills.db +++ b/packs/skills.db @@ -1,84 +1,84 @@ -{"_id":"0CW96pjN3moX6MiA","name":"Hypnosis","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":true,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"0KVMEYlXmj96Hg8r","name":"Fast Talk","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"0rUZhmuvWnGiAq03","name":"First Aid","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"30","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"2NJ3DogsxWVMqeUr","name":"Bow","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"combat":true,"special":true,"rarity":false,"push":false,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"name":"Track (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Track","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","_id":"4TTVJmCu9mP5kFrx"} -{"_id":"4qHYlBBt1EbF4DgR","name":"Flail","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"combat":true,"special":true,"rarity":false,"push":false,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"6FqhuAKXfO6lMptC","name":"Pharmacy","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"6HwjKQGcNn75EPHi","name":"Geology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"6oM9fULWVvvHSO1U","name":"Electronics","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"7Nhb8ENox4QjMb0t","name":"Navigate","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"8HHFjJXoRN2hgBxf","name":"Credit Rating","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"0","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"8p5j2JjSGPdWBCZk","name":"Computer Use","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":false,"mdrn":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"9Pum9Y2Atd5ug6zz","name":"Physics","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"9Z7rRlJ4kLXaJC6k","name":"Electrical Repair","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"A0NyE5kmHe5FOnq9","name":"Swim","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"AT5eymQCpQxdye9q","name":"Heavy Weapons","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"BRELpaLp238XzXH5","name":"Diving","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"CQY7mhxduGFebAmi","name":"Handgun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"CW0IWXL3plauUGy1","name":"Mechanical Repair","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"DkKL3tUlmx5Zp22E","name":"Ride","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"E0EfSSzQYmwWrbeD","name":"Stealth","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"E9rcTG3csEG4Huem","name":"Psychology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"FwWQNfn382EwfDFt","name":"Climb","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"H4WNjYG7llDZtXwv","name":"History","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"HDm4U3h0GzJOWuWd","name":"Machine Gun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"HN6sbF97tFoe30mU","name":"Biology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"HUMkjdW611GCpLt4","name":"Axe","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"HbucA5Kk0d0uFRxy","name":"Listen","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"I7CWN0BbRpoIvfq6","name":"Fine Art","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"IAdLwI8enGyWT6p8","name":"Zoology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"J64juR0msBUXvhTr","name":"Animal Handling","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"rarity":true,"special":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"JFeTpQwuaTYBmLal","name":"Submachine Gun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"JZUHBDwlowUDf18G","name":"Sword","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"K758AJaZfwHl94c2","name":"Garrote","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"combat":true,"special":true,"rarity":false,"push":false,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"KenfdXHN02NKca6S","name":"Astronomy","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"MDBvDDlP5IzOOnOC","name":"Dodge","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1/2*@DEX","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":false,"combat":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"MeleogcP07f9rJ1O","name":"Throw","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"name":"Language (Other)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","_id":"NFT5i3X7647Fct8Y"} -{"_id":"ObgfYtNCMv4MlgbO","name":"Archaeology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"OhbBGAkOrr1409Oq","name":"Jump","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"PZOkZrOJJwK7uO2s","name":"Read Lips","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"Q8BDb3YnQ3i3xjd4","name":"Forensics","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"RIQSmuWCMPYYjUtg","name":"Sleight of Hand","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"Rcl3EJFkPbYouMbS","name":"Acting","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"SPY7wJwnkG4anTwM","name":"Persuade","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"UD69qjXe0ZqPdnDZ","name":"Rifle/Shotgun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"UPSL4EYXndGwNPhP","name":"Library Use","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"UZoCHFgYoXCbdoY6","name":"Pilot (Any)","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Pilot","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"WTi5Q8fFYGqFDDam","name":"Anthropology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"Xy7GNIbB3B0SqgtM","name":"Track","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"YotlGwVZUtNvZJg1","name":"Natural World","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"Yu2CFYCkaNw3VBsH","name":"Photography","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"Z7C3nynZIXiFXmrF","name":"Accounting","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"ZDZMcoLOxhvcqvMT","name":"Meteorology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"ZZXhgUnol1QMCUJB","name":"Law","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"ZtxEbrCNxPbTqACu","name":"Language (Own)","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"@EDU","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"f8ExwWlSUGhNmnVe","name":"Operate Heavy Machinery","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"g9Q95Ei79qs3XZAz","name":"Science (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"gX0oxNXQBcZq24LG","name":"Botany","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"gihGN2AcqDpGPOe2","name":"Chemistry","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"hR4F1soQKk56BsE6","name":"Whip","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"iMNZslICSfOBrhnv","name":"Occult","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"iV3SdrNKsGB5BSli","name":"Art/Craft (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"iWEzROSFc6QA2Qd7","name":"Mathematics","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"iorK6UqzpjU4WR38","name":"Demolitions","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"0","value":-1,"attributes":{},"properties":{"rarity":true,"special":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"j4vj4HUviZd6TAKz","name":"Appraise","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"jbaeBCTsMiw0ut8O","name":"Forgery","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"jtcQKVVfZ3TGCdAD","name":"Flamethrower","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"combat":true,"special":true,"rarity":false,"push":false,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"kKafbgrncOGqYwjH","name":"Disguise","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"keyAD0YXeAafdvmi","name":"Brawl","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"m4C6RDUbfHZwVucS","name":"Survival (Any)","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Survival","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"otgWxSXPtfSKtzd9","name":"Charm","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"rfO2kgQTYP2X2lL3","name":"Intimidate","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"rzihAJYn5Mf9Bf6N","name":"Spear","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"s7Yhk0flkG1B1lWY","name":"Locksmith","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"sJjQGgjj6gohyaMd","name":"Psychoanalysis","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"tA5sEnhUyrzdCEu4","name":"Drive Auto","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"tRg3Zh07008k7xpb","name":"Artillery","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"rarity":true,"special":true,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"name":"Language (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Language","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","_id":"tZ75GTRGUNa7Ofj4"} -{"_id":"vdTRwJvIbXasRUxC","name":"Spot Hidden","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"yo3S2tR0SkfEisbe","name":"Cthulhu Mythos","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"0","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":false,"combat":false,"noxpgain":true,"noadjustments":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"zM1rVfUxTAX7hRys","name":"Cryptography","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"ziCzgTCp2g2sQzfD","name":"Medicine","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} -{"_id":"zzaYcf3NQmgmOwut","name":"Chainsaw","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"} +{"_id":"0CW96pjN3moX6MiA","name":"Hypnosis","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":true,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/hypnosis.svg"} +{"_id":"0KVMEYlXmj96Hg8r","name":"Fast Talk","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fast_talk.svg"} +{"_id":"0rUZhmuvWnGiAq03","name":"First Aid","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"30","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/first_aid.svg"} +{"_id":"2NJ3DogsxWVMqeUr","name":"Bow","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"combat":true,"special":true,"rarity":false,"push":false,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_bow.svg"} +{"name":"Track (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Track","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills/track.svg","_id":"4TTVJmCu9mP5kFrx"} +{"_id":"4qHYlBBt1EbF4DgR","name":"Flail","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"combat":true,"special":true,"rarity":false,"push":false,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_flail.svg"} +{"_id":"6FqhuAKXfO6lMptC","name":"Pharmacy","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_pharmacy.svg"} +{"_id":"6HwjKQGcNn75EPHi","name":"Geology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_geology.svg"} +{"_id":"6oM9fULWVvvHSO1U","name":"Electronics","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/electronics.svg"} +{"_id":"7Nhb8ENox4QjMb0t","name":"Navigate","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/navigate.svg"} +{"_id":"8HHFjJXoRN2hgBxf","name":"Credit Rating","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"0","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/credit_rating.svg"} +{"_id":"8p5j2JjSGPdWBCZk","name":"Computer Use","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":false,"mdrn":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/computer_use.svg"} +{"_id":"9Pum9Y2Atd5ug6zz","name":"Physics","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_physics.svg"} +{"_id":"9Z7rRlJ4kLXaJC6k","name":"Electrical Repair","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/electrical_repair.svg"} +{"_id":"A0NyE5kmHe5FOnq9","name":"Swim","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/swim.svg"} +{"_id":"AT5eymQCpQxdye9q","name":"Heavy Weapons","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_heavy_weapons.svg"} +{"_id":"BRELpaLp238XzXH5","name":"Diving","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/diving.svg"} +{"_id":"CQY7mhxduGFebAmi","name":"Handgun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg"} +{"_id":"CW0IWXL3plauUGy1","name":"Mechanical Repair","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg"} +{"_id":"DkKL3tUlmx5Zp22E","name":"Ride","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/ride.svg"} +{"_id":"E0EfSSzQYmwWrbeD","name":"Stealth","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills/stealth.svg"} +{"_id":"E9rcTG3csEG4Huem","name":"Psychology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/psychology.svg"} +{"_id":"FwWQNfn382EwfDFt","name":"Climb","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/climb.svg"} +{"_id":"H4WNjYG7llDZtXwv","name":"History","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/history.svg"} +{"_id":"HDm4U3h0GzJOWuWd","name":"Machine Gun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_machine_gun.svg"} +{"_id":"HN6sbF97tFoe30mU","name":"Biology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_biology.svg"} +{"_id":"HUMkjdW611GCpLt4","name":"Axe","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_axe.svg"} +{"_id":"HbucA5Kk0d0uFRxy","name":"Listen","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/listen.svg"} +{"_id":"I7CWN0BbRpoIvfq6","name":"Fine Art","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/art_craft_fine_art.svg"} +{"_id":"IAdLwI8enGyWT6p8","name":"Zoology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_zoology.svg"} +{"_id":"J64juR0msBUXvhTr","name":"Animal Handling","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"rarity":true,"special":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/animal_handling.svg"} +{"_id":"JFeTpQwuaTYBmLal","name":"Submachine Gun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_submachine_gun.svg"} +{"_id":"JZUHBDwlowUDf18G","name":"Sword","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_sword.svg"} +{"_id":"K758AJaZfwHl94c2","name":"Garrote","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"combat":true,"special":true,"rarity":false,"push":false,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_garrote.svg"} +{"_id":"KenfdXHN02NKca6S","name":"Astronomy","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_astronomy.svg"} +{"_id":"MDBvDDlP5IzOOnOC","name":"Dodge","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1/2*@DEX","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":false,"combat":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/dodge.svg"} +{"_id":"MeleogcP07f9rJ1O","name":"Throw","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_throw.svg"} +{"name":"Language (Other)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills/language.svg","_id":"NFT5i3X7647Fct8Y"} +{"_id":"ObgfYtNCMv4MlgbO","name":"Archaeology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/archaeology.svg"} +{"_id":"OhbBGAkOrr1409Oq","name":"Jump","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/jump.svg"} +{"_id":"PZOkZrOJJwK7uO2s","name":"Read Lips","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/read_lips.svg"} +{"_id":"Q8BDb3YnQ3i3xjd4","name":"Forensics","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_forensics.svg"} +{"_id":"RIQSmuWCMPYYjUtg","name":"Sleight of Hand","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg"} +{"_id":"Rcl3EJFkPbYouMbS","name":"Acting","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/art_craft_acting.svg"} +{"_id":"SPY7wJwnkG4anTwM","name":"Persuade","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/persuade.svg"} +{"_id":"UD69qjXe0ZqPdnDZ","name":"Rifle/Shotgun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg"} +{"_id":"UPSL4EYXndGwNPhP","name":"Library Use","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/library_use.svg"} +{"_id":"UZoCHFgYoXCbdoY6","name":"Pilot (Any)","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Pilot","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/pilot_any.svg"} +{"_id":"WTi5Q8fFYGqFDDam","name":"Anthropology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/anthropology.svg"} +{"_id":"Xy7GNIbB3B0SqgtM","name":"Track","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/track.svg"} +{"_id":"YotlGwVZUtNvZJg1","name":"Natural World","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/natural_world.svg"} +{"_id":"Yu2CFYCkaNw3VBsH","name":"Photography","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/art_craft_photography.svg"} +{"_id":"Z7C3nynZIXiFXmrF","name":"Accounting","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/accounting.svg"} +{"_id":"ZDZMcoLOxhvcqvMT","name":"Meteorology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_meteorology.svg"} +{"_id":"ZZXhgUnol1QMCUJB","name":"Law","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/law.svg"} +{"_id":"ZtxEbrCNxPbTqACu","name":"Language (Own)","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"@EDU","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/language.svg"} +{"_id":"f8ExwWlSUGhNmnVe","name":"Operate Heavy Machinery","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg"} +{"_id":"g9Q95Ei79qs3XZAz","name":"Science (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_any.svg"} +{"_id":"gX0oxNXQBcZq24LG","name":"Botany","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_botany.svg"} +{"_id":"gihGN2AcqDpGPOe2","name":"Chemistry","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_chemistry.svg"} +{"_id":"hR4F1soQKk56BsE6","name":"Whip","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_whip.svg"} +{"_id":"iMNZslICSfOBrhnv","name":"Occult","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/occult.svg"} +{"_id":"iV3SdrNKsGB5BSli","name":"Art/Craft (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills/art_craft_any.svg"} +{"_id":"iWEzROSFc6QA2Qd7","name":"Mathematics","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_mathematics.svg"} +{"_id":"iorK6UqzpjU4WR38","name":"Demolitions","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"0","value":-1,"attributes":{},"properties":{"rarity":true,"special":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/demolitions.svg"} +{"_id":"j4vj4HUviZd6TAKz","name":"Appraise","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/appraise.svg"} +{"_id":"jbaeBCTsMiw0ut8O","name":"Forgery","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/art_craft_forgery.svg"} +{"_id":"jtcQKVVfZ3TGCdAD","name":"Flamethrower","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"combat":true,"special":true,"rarity":false,"push":false,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_flamethrower.svg"} +{"_id":"kKafbgrncOGqYwjH","name":"Disguise","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/disguise.svg"} +{"_id":"keyAD0YXeAafdvmi","name":"Brawl","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg"} +{"_id":"m4C6RDUbfHZwVucS","name":"Survival (Any)","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Survival","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/survival_any.svg"} +{"_id":"otgWxSXPtfSKtzd9","name":"Charm","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/charm.svg"} +{"_id":"rfO2kgQTYP2X2lL3","name":"Intimidate","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/intimidate.svg"} +{"_id":"rzihAJYn5Mf9Bf6N","name":"Spear","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_spear.svg"} +{"_id":"s7Yhk0flkG1B1lWY","name":"Locksmith","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/locksmith.svg"} +{"_id":"sJjQGgjj6gohyaMd","name":"Psychoanalysis","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg"} +{"_id":"tA5sEnhUyrzdCEu4","name":"Drive Auto","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/drive_auto.svg"} +{"_id":"tRg3Zh07008k7xpb","name":"Artillery","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"rarity":true,"special":true,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_artillery.svg"} +{"name":"Language (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Language","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills/language.svg","_id":"tZ75GTRGUNa7Ofj4"} +{"_id":"vdTRwJvIbXasRUxC","name":"Spot Hidden","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/spot_hidden.svg"} +{"_id":"yo3S2tR0SkfEisbe","name":"Cthulhu Mythos","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"0","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":false,"combat":false,"noxpgain":true,"noadjustments":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg"} +{"_id":"zM1rVfUxTAX7hRys","name":"Cryptography","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_cryptography.svg"} +{"_id":"ziCzgTCp2g2sQzfD","name":"Medicine","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/medicine.svg"} +{"_id":"zzaYcf3NQmgmOwut","name":"Chainsaw","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_chainsaw.svg"} From ecb4c753e7c1d3b440602489135efd178ba83ed5 Mon Sep 17 00:00:00 2001 From: zeteticl Date: Thu, 16 Sep 2021 14:59:04 +0800 Subject: [PATCH 066/726] Update zh-TW.json --- lang/zh-TW.json | 51 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/lang/zh-TW.json b/lang/zh-TW.json index 49f1c236..b0774864 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -691,7 +691,7 @@ "CoC7.Entities.Chase": "追逐戰", "CoC7.Entities.Item": "物品", "CoC7.Entities.Occupation": "職業", - "CoC7.Entities.Setup": "設置", + "CoC7.Entities.Setup": "設定", "CoC7.Entities.Skill": "技能", "CoC7.Entities.Spell": "法術", "CoC7.Entities.Status": "狀態", @@ -731,5 +731,50 @@ "CoC7.Migrate.ButtonSkip": "跳過", "CoC7.Migrate.ButtonOkay": "好的", "SETTINGS.EnableStatusIcons": "啟用狀態圖示", - "SETTINGS.EnableStatusIconsHint": "設定戰鬥和理智效果的圖示是否會顯示在Token裡." -} + "SETTINGS.EnableStatusIconsHint": "設定戰鬥和理智效果的圖示是否會顯示在Token裡.", + "CoC7.Entities.Container": "容器", + "CoC7.Weapons": "武器", + "CoC7.NoTargetToDamage": "沒有目標可以施加傷害。", + "CoC7.DevelopAttribWarn": "你不能在成長/創角模式中訪問某些屬性。", + "CoC7.TradeItem": "交易 / 儲存物品。", + "CoC7.NewBookName": "新書。", + "CoC7.AddBook": "添加書籍。", + "CoC7.NewSpellName": "新法術", + "CoC7.AddSpell": "添加法術。", + "CoC7.BookHasNothingMoreToTeach": "{book} 沒有什麼可學習的了。{actor} 的克蘇魯神話技能大於這本書的神話等級。", + "CoC7.DragSpell": "拖曳法術到這裡,將它們加入書中……", + "CoC7.GainsForReading": "閱讀{book}的技能提升。", + "CoC7.InitialReadingNeeded": "{actor}需要對{book}進行泛讀,以便能夠進行精讀。", + "CoC7.LearnSpellAttempt": "嘗試從{book}學習咒語{spell}。", + "CoC7.MarkedForDevelopment": "被標記為可成長", + "CoC7.Mythos": "神話", + "CoC7.NotOwned": "這本書需要被一個角色擁有才能執行這個動作。", + "CoC7.Points": "點數", + "CoC7.RedoFullStudy": "重新精讀。", + "CoC7.ReadAttempt": "嘗試閱讀{book}({language}),{difficulty}難度。", + "CoC7.ReadingMythosTome": "閱讀{book}。。", + "CoC7.SpellsLearned": "已習得法術", + "CoC7.UnknownLanguage": "{actor}不知道這本書是用什麼語言編寫的。", + "CoC7.Maximize": "最大化", + "CoC7.Summarize": "總結", + "CoC7.UnableToInteractWithChatCard": "你無法與這條信息互動,如果你需要進行此行動,請讓你的KP去幫你進行選擇。", + "CoC7.UnableToCopyToClipboard": "無法複製到剪貼板,這可能是由於你的瀏覽器安全設定造成的。", + "CoC7.WarningCharacterSheetV1Depreciated": "這個佈局已經過時了,可能無法正常工作。它將隨著FoundryVTT v9的發布而被移除,請讓你的KP將紙張類型改為CoC7.CoC7CharacterSheetV2。", + "CoC7.MessageTitleSelectUserToGiveTo": "將物品交給另一個角色。", + "CoC7.MessageSelectUserToGiveTo": "你想把這個物品給哪個角色?。", + "SETTINGS.TitleRules": "規則", + "SETTINGS.TitleInitiative": "先攻表設定", + "SETTINGS.TitleRoll": "擲骰設定", + "SETTINGS.TitleChatCards": "聊天卡設定", + "SETTINGS.TitleScene": "場景設定", + "SETTINGS.TitleSheet": "角色卡設定", + "SETTINGS.TitleWeapon": "武器設定", + "SETTINGS.TitleDiceSoNice": "Dice So Nice 設定", + "SETTINGS.TitleDeveloperDebug": "開發人員和Debug設定。", + "SETTINGS.TitleRollTable": "隨機表設定", + "SETTINGS.StanbyGMRolls": "備用的KP擲骰", + "SETTINGS.StanbyGMRollsHint": "當KP從指定的角色卡中進行擲骰時,顯示一個擲骰按鈕而不是擲骰。", + "SETTINGS.ShowExperimentalFeatures": "顯示實驗性功能。", + "SETTINGS.ShowExperimentalFeaturesHint": "如果你使用這些功能,你的世界可能在未來的版本中變得無法使用。僅用於測試。不要在你遊玩中的遊戲世界使用這些功能。", + "CoC7.ExperimentalFeaturesWarning": "該功能正在開發中,不建議在你的遊戲世界中使用。" +} \ No newline at end of file From 53ca434105e2585548d9368fee1d2eda154ba710 Mon Sep 17 00:00:00 2001 From: zeteticl Date: Thu, 16 Sep 2021 15:08:11 +0800 Subject: [PATCH 067/726] Update zh-TW.json --- lang/zh-TW.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/zh-TW.json b/lang/zh-TW.json index b0774864..c69b2efd 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -691,7 +691,7 @@ "CoC7.Entities.Chase": "追逐戰", "CoC7.Entities.Item": "物品", "CoC7.Entities.Occupation": "職業", - "CoC7.Entities.Setup": "設定", + "CoC7.Entities.Setup": "偏好設定", "CoC7.Entities.Skill": "技能", "CoC7.Entities.Spell": "法術", "CoC7.Entities.Status": "狀態", From 6dfe466853de1abcf394fed31cc80346c4bf90e6 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 16 Sep 2021 10:38:54 +0100 Subject: [PATCH 068/726] More preparations for FoundryVTT 0.9 --- module/actors/actor.js | 2 +- module/actors/sheets/base.js | 1 + module/chat/cards/combined-roll.js | 4 ++-- module/items/book/data.js | 6 +++--- module/items/book/sheet.js | 6 +++--- module/items/sheets/archetype.js | 10 +++++----- module/items/sheets/occupation.js | 14 +++++++------- module/items/sheets/setup.js | 10 +++++----- module/utilities.js | 4 ++-- 9 files changed, 29 insertions(+), 28 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index 6e3fe289..93eea5c4 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -1525,7 +1525,7 @@ export class CoCActor extends Actor { } get luck () { - return parseInt(this.data.data.attribs.lck.value) + return parseInt(this.data.data.attribs?.lck?.value) } async setLuck (value) { diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 3e949beb..428f6b1d 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -974,6 +974,7 @@ export class CoC7ActorSheet extends ActorSheet { }) await game.CoC7socket.executeAsGM('gmtradeitemto', message) } + _onDragCharacteristic (event) { const box = event.currentTarget.parentElement const data = { diff --git a/module/chat/cards/combined-roll.js b/module/chat/cards/combined-roll.js index 3469152f..33c1fbd5 100644 --- a/module/chat/cards/combined-roll.js +++ b/module/chat/cards/combined-roll.js @@ -198,7 +198,7 @@ export class CombinedCheckCard extends RollCard { async compute () { if (!this._roll) return - this.rolls.forEach(async r => { + for (const r of this.rolls) { if (!r.rolled) { r.modifier = this.options.modifier || 0 r.difficulty = @@ -207,7 +207,7 @@ export class CombinedCheckCard extends RollCard { r.flatThresholdModifier = this.options.flatThresholdModifier || 0 await r._perform({ roll: this._roll, silent: true }) } - }) + } for (let i = 0; i < this.rolls.length; i++) { if (this.rolls[i].rolled) { diff --git a/module/items/book/data.js b/module/items/book/data.js index ad4dce14..a3f6680e 100644 --- a/module/items/book/data.js +++ b/module/items/book/data.js @@ -37,7 +37,7 @@ export class CoC7Book extends CoC7Item { const collection = this.data.data.spells ? duplicate(this.data.data.spells) : [] - spells.forEach(async spell => { + spells.forEach(spell => { collection.push(spell) }) return await this.update({ 'data.spells': collection }) @@ -230,7 +230,7 @@ export class CoC7Book extends CoC7Item { }) } if (other.type) { - other.gains.forEach(async skill => { + for (const skill of other.gains) { const pattern = skill.name.match(/^(.+) \((.+)\)$/) /** Sanitization to deal with specializations */ if (pattern) { @@ -249,7 +249,7 @@ export class CoC7Book extends CoC7Item { specialization: skill.specialization }) } - }) + } } await this.grantSkillDevelopment(developments) if ((mythos.type || occult.type) && this.data.data.sanityLoss) { diff --git a/module/items/book/sheet.js b/module/items/book/sheet.js index b6c925f2..0b4c371c 100644 --- a/module/items/book/sheet.js +++ b/module/items/book/sheet.js @@ -115,10 +115,10 @@ export class CoC7BookSheet extends ItemSheet { const dataList = await CoC7Utilities.getDataFromDropEvent(event, 'Item') const spells = [] - dataList.forEach(async item => { - if (!item || !(item.data.type === 'spell')) return + for (const item of dataList) { + if (!item || !(item.data.type === 'spell')) continue spells.push(item.data) - }) + } await this.item.addSpells(spells) } diff --git a/module/items/sheets/archetype.js b/module/items/sheets/archetype.js index 93a90cb6..dd06d09e 100644 --- a/module/items/sheets/archetype.js +++ b/module/items/sheets/archetype.js @@ -36,19 +36,19 @@ export class CoC7ArchetypeSheet extends ItemSheet { const collection = this.item.data.data[collectionName] ? duplicate(this.item.data.data[collectionName]) : [] - dataList.forEach(async item => { - if (!item || !item.data) return + for (const item of dataList) { + if (!item || !item.data) continue if (![type].includes(item.data.type)) { - return + continue } if (!CoC7Item.isAnySpec(item)) { if (collection.find(el => el.name === item.data.name)) { - return + continue } } collection.push(duplicate(item.data)) - }) + } await this.item.update({ [`data.${collectionName}`]: collection }) } diff --git a/module/items/sheets/occupation.js b/module/items/sheets/occupation.js index 6b02c196..8e82abac 100644 --- a/module/items/sheets/occupation.js +++ b/module/items/sheets/occupation.js @@ -54,20 +54,20 @@ export class CoC7OccupationSheet extends ItemSheet { ? duplicate(this.item.data.data.groups) : [] - dataList.forEach(async item => { - if (!item || !item.data) return + for (const item of dataList) { + if (!item || !item.data) continue if (![type].includes(item.data.type)) { - return + continue } if (optionalSkill) { if (!CoC7Item.isAnySpec(item)) { // Generic specialization can be included many times if (collection.find(el => el.name === item.data.name)) { - return // If skill is already in main don't add it + continue // If skill is already in main don't add it } if (groups[index].skills.find(el => el.name === item.name)) { - return // If skill is already in group don't add it + continue // If skill is already in group don't add it } } @@ -76,7 +76,7 @@ export class CoC7OccupationSheet extends ItemSheet { if (!CoC7Item.isAnySpec(item)) { // Generic specialization can be included many times if (collection.find(el => el.name === item.data.name)) { - return + continue } for (let i = 0; i < groups.length; i++) { @@ -91,7 +91,7 @@ export class CoC7OccupationSheet extends ItemSheet { } collection.push(duplicate(item.data)) } - }) + } await this.item.update({ 'data.groups': groups }) await this.item.update({ [`data.${collectionName}`]: collection }) } diff --git a/module/items/sheets/setup.js b/module/items/sheets/setup.js index 6aa4a8eb..2f3273a5 100644 --- a/module/items/sheets/setup.js +++ b/module/items/sheets/setup.js @@ -45,22 +45,22 @@ export class CoC7SetupSheet extends ItemSheet { const collection = this.item.data.data[collectionName] ? duplicate(this.item.data.data[collectionName]) : [] - dataList.forEach(async item => { - if (!item || !item.data) return + for (const item of dataList) { + if (!item || !item.data) continue if ( !['item', 'weapon', 'skill', 'book', 'spell'].includes(item.data.type) ) { - return + continue } if (!CoC7Item.isAnySpec(item)) { if (collection.find(el => el.name === item.data.name)) { - return + continue } } collection.push(duplicate(item.data)) - }) + } await this.item.update({ [`data.${collectionName}`]: collection }) } diff --git a/module/utilities.js b/module/utilities.js index ee9e2035..3f50e4b8 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -567,7 +567,7 @@ export class CoC7Utilities { actors.push(game.user.character.tokenKey) } - await actors.forEach(async tk => { + for (const tk of actors) { const check = new CoC7Check() check.diceModifier = diceModifier || 0 check.difficulty = difficulty || CoC7Check.difficultyLevel.regular @@ -577,7 +577,7 @@ export class CoC7Utilities { check.actor = tk await check.roll() check.toMessage() - }) + } if (!actors.length) { const check = new CoC7Check() From 35d986e481422a2bcaf94071f98d87b3dafc1789 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 16 Sep 2021 09:46:57 +0000 Subject: [PATCH 069/726] Updated translations list --- .github/TRANSLATIONS.md | 668 ++++++++++++++++++++-------------------- 1 file changed, 335 insertions(+), 333 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index f7d9e7eb..740ce5be 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,339 +2,341 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -| Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **329** | **105** | **122** | **17** | **17** | **124** | **17** | **17** | **15** | **45** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +The **zh-TW** translation is currently up to date + +| Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **329** | **105** | **122** | **17** | **17** | **124** | **17** | **17** | **15** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.ActorImporter From 3c1369d6f9f9d90e0bcb152a7b0111796290b36f Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 16 Sep 2021 10:58:22 +0100 Subject: [PATCH 070/726] Fix character movement else if ordering --- module/actors/actor.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index 93eea5c4..2029212a 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -2280,12 +2280,12 @@ export class CoCActor extends Actor { if (this.data.data.attribs.mov.auto) { let MOV if ( - this.data.data.characteristics.dex.value < + this.data.data.characteristics.dex.value > this.data.data.characteristics.siz.value && - this.data.data.characteristics.str.value < + this.data.data.characteristics.str.value > this.data.data.characteristics.siz.value ) { - MOV = 7 + MOV = 9 // Bug correction by AdmiralNyar. } else if ( this.data.data.characteristics.dex.value >= this.data.data.characteristics.siz.value || @@ -2293,13 +2293,8 @@ export class CoCActor extends Actor { this.data.data.characteristics.siz.value ) { MOV = 8 - } else if ( - this.data.data.characteristics.dex.value > - this.data.data.characteristics.siz.value && - this.data.data.characteristics.str.value > - this.data.data.characteristics.siz.value - ) { - MOV = 9 // Bug correction by AdmiralNyar. + } else { + MOV = 7 } if (this.data.data.type !== 'creature') { if (!isNaN(parseInt(this.data.data.infos.age))) { From bae69d44a9de483456b447f37d3518c2749025d5 Mon Sep 17 00:00:00 2001 From: paxpelus Date: Thu, 16 Sep 2021 14:40:05 +0300 Subject: [PATCH 071/726] Fix wrong repository url on CONTRIBUTING.md file --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 444c2149..63bf360a 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -69,7 +69,7 @@ Follow the installation steps and then make sure everything went right with: On the directory where you would like to pull your changes open the terminal or shell of your choice, run: -`git clone https://github.com/HavlockV/CoC7-FoundryVTT.git` +`git clone https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT.git` This will create a local clone of the project repository. From de82407bef5bc583c77de328575404d283ec80dd Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 16 Sep 2021 17:03:22 +0100 Subject: [PATCH 072/726] Change skill icon colour so they show up in the item directory Recreate all items/actors in packs so they use the current icons and template.json --- assets/icons/skills/accounting.svg | 2 +- assets/icons/skills/animal_handling.svg | 2 +- assets/icons/skills/anthropology.svg | 2 +- assets/icons/skills/appraise.svg | 2 +- assets/icons/skills/archaeology.svg | 2 +- assets/icons/skills/art_craft_acting.svg | 2 +- assets/icons/skills/art_craft_any.svg | 2 +- assets/icons/skills/art_craft_fine_art.svg | 2 +- assets/icons/skills/art_craft_forgery.svg | 2 +- assets/icons/skills/art_craft_photography.svg | 2 +- assets/icons/skills/charm.svg | 2 +- assets/icons/skills/climb.svg | 2 +- assets/icons/skills/computer_use.svg | 2 +- assets/icons/skills/credit_rating.svg | 2 +- assets/icons/skills/cthulhu_mythos.svg | 2 +- assets/icons/skills/demolitions.svg | 2 +- assets/icons/skills/disguise.svg | 2 +- assets/icons/skills/diving.svg | 2 +- assets/icons/skills/dodge.svg | 2 +- assets/icons/skills/drive_auto.svg | 2 +- assets/icons/skills/electrical_repair.svg | 2 +- assets/icons/skills/electronics.svg | 2 +- assets/icons/skills/fast_talk.svg | 2 +- assets/icons/skills/fighting_axe.svg | 2 +- assets/icons/skills/fighting_brawl.svg | 2 +- assets/icons/skills/fighting_chainsaw.svg | 2 +- assets/icons/skills/fighting_flail.svg | 2 +- assets/icons/skills/fighting_garrote.svg | 2 +- assets/icons/skills/fighting_spear.svg | 2 +- assets/icons/skills/fighting_sword.svg | 2 +- assets/icons/skills/fighting_throw.svg | 2 +- assets/icons/skills/fighting_whip.svg | 2 +- assets/icons/skills/firearms_artillery.svg | 2 +- assets/icons/skills/firearms_bow.svg | 2 +- assets/icons/skills/firearms_flamethrower.svg | 2 +- assets/icons/skills/firearms_handgun.svg | 2 +- .../icons/skills/firearms_heavy_weapons.svg | 2 +- assets/icons/skills/firearms_machine_gun.svg | 2 +- .../icons/skills/firearms_rifle_shotgun.svg | 2 +- .../icons/skills/firearms_submachine_gun.svg | 2 +- assets/icons/skills/first_aid.svg | 2 +- assets/icons/skills/history.svg | 2 +- assets/icons/skills/hypnosis.svg | 2 +- assets/icons/skills/intimidate.svg | 2 +- assets/icons/skills/jump.svg | 2 +- assets/icons/skills/language.svg | 2 +- assets/icons/skills/law.svg | 2 +- assets/icons/skills/library_use.svg | 2 +- assets/icons/skills/listen.svg | 2 +- assets/icons/skills/locksmith.svg | 2 +- assets/icons/skills/mechanical_repair.svg | 2 +- assets/icons/skills/medicine.svg | 2 +- assets/icons/skills/natural_world.svg | 2 +- assets/icons/skills/navigate.svg | 2 +- assets/icons/skills/occult.svg | 2 +- .../icons/skills/operate_heavy_machinery.svg | 2 +- assets/icons/skills/persuade.svg | 2 +- assets/icons/skills/pilot_any.svg | 2 +- assets/icons/skills/psychoanalysis.svg | 2 +- assets/icons/skills/psychology.svg | 2 +- assets/icons/skills/read_lips.svg | 2 +- assets/icons/skills/ride.svg | 2 +- assets/icons/skills/science_any.svg | 2 +- assets/icons/skills/science_astronomy.svg | 2 +- assets/icons/skills/science_biology.svg | 2 +- assets/icons/skills/science_botany.svg | 2 +- assets/icons/skills/science_chemistry.svg | 2 +- assets/icons/skills/science_cryptography.svg | 2 +- assets/icons/skills/science_forensics.svg | 2 +- assets/icons/skills/science_geology.svg | 2 +- assets/icons/skills/science_mathematics.svg | 2 +- assets/icons/skills/science_meteorology.svg | 2 +- assets/icons/skills/science_pharmacy.svg | 2 +- assets/icons/skills/science_physics.svg | 2 +- assets/icons/skills/science_zoology.svg | 2 +- assets/icons/skills/sleight_of_hand.svg | 2 +- assets/icons/skills/spot_hidden.svg | 2 +- assets/icons/skills/stealth.svg | 2 +- assets/icons/skills/survival_any.svg | 2 +- assets/icons/skills/swim.svg | 2 +- assets/icons/skills/track.svg | 2 +- packs/examples.db | 9 +- packs/items.db | 16 +- packs/sanity-tables-examples.db | 8 +- packs/skills.db | 168 +++++++++--------- 85 files changed, 184 insertions(+), 179 deletions(-) diff --git a/assets/icons/skills/accounting.svg b/assets/icons/skills/accounting.svg index 49612a3d..9ae48b2d 100644 --- a/assets/icons/skills/accounting.svg +++ b/assets/icons/skills/accounting.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/animal_handling.svg b/assets/icons/skills/animal_handling.svg index a27239a9..5feb51a9 100644 --- a/assets/icons/skills/animal_handling.svg +++ b/assets/icons/skills/animal_handling.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/anthropology.svg b/assets/icons/skills/anthropology.svg index 5b7f6201..bc467b0d 100644 --- a/assets/icons/skills/anthropology.svg +++ b/assets/icons/skills/anthropology.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/appraise.svg b/assets/icons/skills/appraise.svg index 5ff3542a..8297a4d6 100644 --- a/assets/icons/skills/appraise.svg +++ b/assets/icons/skills/appraise.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/archaeology.svg b/assets/icons/skills/archaeology.svg index 58b3f7fa..b4d92a76 100644 --- a/assets/icons/skills/archaeology.svg +++ b/assets/icons/skills/archaeology.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/art_craft_acting.svg b/assets/icons/skills/art_craft_acting.svg index 719dc623..050b01e9 100644 --- a/assets/icons/skills/art_craft_acting.svg +++ b/assets/icons/skills/art_craft_acting.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/art_craft_any.svg b/assets/icons/skills/art_craft_any.svg index 4c0bb876..8623fdee 100644 --- a/assets/icons/skills/art_craft_any.svg +++ b/assets/icons/skills/art_craft_any.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/art_craft_fine_art.svg b/assets/icons/skills/art_craft_fine_art.svg index 53f073ca..47c515fc 100644 --- a/assets/icons/skills/art_craft_fine_art.svg +++ b/assets/icons/skills/art_craft_fine_art.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/art_craft_forgery.svg b/assets/icons/skills/art_craft_forgery.svg index df0f4a54..b5594c3c 100644 --- a/assets/icons/skills/art_craft_forgery.svg +++ b/assets/icons/skills/art_craft_forgery.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/art_craft_photography.svg b/assets/icons/skills/art_craft_photography.svg index 9b232a69..75e5c377 100644 --- a/assets/icons/skills/art_craft_photography.svg +++ b/assets/icons/skills/art_craft_photography.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/charm.svg b/assets/icons/skills/charm.svg index dfe77d57..163ea3d8 100644 --- a/assets/icons/skills/charm.svg +++ b/assets/icons/skills/charm.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/climb.svg b/assets/icons/skills/climb.svg index d2274a37..998cc229 100644 --- a/assets/icons/skills/climb.svg +++ b/assets/icons/skills/climb.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/computer_use.svg b/assets/icons/skills/computer_use.svg index 30de5a6f..d2d62934 100644 --- a/assets/icons/skills/computer_use.svg +++ b/assets/icons/skills/computer_use.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/credit_rating.svg b/assets/icons/skills/credit_rating.svg index fb6bb981..fe687a67 100644 --- a/assets/icons/skills/credit_rating.svg +++ b/assets/icons/skills/credit_rating.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/cthulhu_mythos.svg b/assets/icons/skills/cthulhu_mythos.svg index 16d9c397..5f46ddc8 100644 --- a/assets/icons/skills/cthulhu_mythos.svg +++ b/assets/icons/skills/cthulhu_mythos.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/demolitions.svg b/assets/icons/skills/demolitions.svg index ff0e4342..64ad98ef 100644 --- a/assets/icons/skills/demolitions.svg +++ b/assets/icons/skills/demolitions.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/disguise.svg b/assets/icons/skills/disguise.svg index fdd33e2c..aa1f22b4 100644 --- a/assets/icons/skills/disguise.svg +++ b/assets/icons/skills/disguise.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/diving.svg b/assets/icons/skills/diving.svg index 1a112bad..7a4595f9 100644 --- a/assets/icons/skills/diving.svg +++ b/assets/icons/skills/diving.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/dodge.svg b/assets/icons/skills/dodge.svg index 79f24176..b63e1bda 100644 --- a/assets/icons/skills/dodge.svg +++ b/assets/icons/skills/dodge.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/drive_auto.svg b/assets/icons/skills/drive_auto.svg index 64baf926..5fee4ff4 100644 --- a/assets/icons/skills/drive_auto.svg +++ b/assets/icons/skills/drive_auto.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/electrical_repair.svg b/assets/icons/skills/electrical_repair.svg index 982817b9..7c4b7df7 100644 --- a/assets/icons/skills/electrical_repair.svg +++ b/assets/icons/skills/electrical_repair.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/electronics.svg b/assets/icons/skills/electronics.svg index 39fdeeaf..e9759079 100644 --- a/assets/icons/skills/electronics.svg +++ b/assets/icons/skills/electronics.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/fast_talk.svg b/assets/icons/skills/fast_talk.svg index 11acaccd..1d2311b1 100644 --- a/assets/icons/skills/fast_talk.svg +++ b/assets/icons/skills/fast_talk.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/fighting_axe.svg b/assets/icons/skills/fighting_axe.svg index 8783307c..f18ac107 100644 --- a/assets/icons/skills/fighting_axe.svg +++ b/assets/icons/skills/fighting_axe.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/fighting_brawl.svg b/assets/icons/skills/fighting_brawl.svg index f344b588..d01caf16 100644 --- a/assets/icons/skills/fighting_brawl.svg +++ b/assets/icons/skills/fighting_brawl.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/fighting_chainsaw.svg b/assets/icons/skills/fighting_chainsaw.svg index d0b1cf63..0d2010bb 100644 --- a/assets/icons/skills/fighting_chainsaw.svg +++ b/assets/icons/skills/fighting_chainsaw.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/fighting_flail.svg b/assets/icons/skills/fighting_flail.svg index a1a5f06f..cbc1bc2d 100644 --- a/assets/icons/skills/fighting_flail.svg +++ b/assets/icons/skills/fighting_flail.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/fighting_garrote.svg b/assets/icons/skills/fighting_garrote.svg index c9b595de..bd7714d3 100644 --- a/assets/icons/skills/fighting_garrote.svg +++ b/assets/icons/skills/fighting_garrote.svg @@ -1 +1 @@ - + diff --git a/assets/icons/skills/fighting_spear.svg b/assets/icons/skills/fighting_spear.svg index e2703d7f..34bb74f4 100644 --- a/assets/icons/skills/fighting_spear.svg +++ b/assets/icons/skills/fighting_spear.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/fighting_sword.svg b/assets/icons/skills/fighting_sword.svg index be414ba6..c435486e 100644 --- a/assets/icons/skills/fighting_sword.svg +++ b/assets/icons/skills/fighting_sword.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/fighting_throw.svg b/assets/icons/skills/fighting_throw.svg index b11ebb99..1de4870e 100644 --- a/assets/icons/skills/fighting_throw.svg +++ b/assets/icons/skills/fighting_throw.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/fighting_whip.svg b/assets/icons/skills/fighting_whip.svg index db37e51d..abdc626a 100644 --- a/assets/icons/skills/fighting_whip.svg +++ b/assets/icons/skills/fighting_whip.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/firearms_artillery.svg b/assets/icons/skills/firearms_artillery.svg index 35a7e4ba..e7734542 100644 --- a/assets/icons/skills/firearms_artillery.svg +++ b/assets/icons/skills/firearms_artillery.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/firearms_bow.svg b/assets/icons/skills/firearms_bow.svg index beae887a..1ddd83f0 100644 --- a/assets/icons/skills/firearms_bow.svg +++ b/assets/icons/skills/firearms_bow.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/firearms_flamethrower.svg b/assets/icons/skills/firearms_flamethrower.svg index 84c26d2d..03a9d191 100644 --- a/assets/icons/skills/firearms_flamethrower.svg +++ b/assets/icons/skills/firearms_flamethrower.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/firearms_handgun.svg b/assets/icons/skills/firearms_handgun.svg index 0cffcaa8..70542d8b 100644 --- a/assets/icons/skills/firearms_handgun.svg +++ b/assets/icons/skills/firearms_handgun.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/firearms_heavy_weapons.svg b/assets/icons/skills/firearms_heavy_weapons.svg index a5a3d998..4bfb7e3b 100644 --- a/assets/icons/skills/firearms_heavy_weapons.svg +++ b/assets/icons/skills/firearms_heavy_weapons.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/firearms_machine_gun.svg b/assets/icons/skills/firearms_machine_gun.svg index 4c2be6c8..e5c5dce7 100644 --- a/assets/icons/skills/firearms_machine_gun.svg +++ b/assets/icons/skills/firearms_machine_gun.svg @@ -1 +1 @@ - + diff --git a/assets/icons/skills/firearms_rifle_shotgun.svg b/assets/icons/skills/firearms_rifle_shotgun.svg index a3275bea..9184c7fb 100644 --- a/assets/icons/skills/firearms_rifle_shotgun.svg +++ b/assets/icons/skills/firearms_rifle_shotgun.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/firearms_submachine_gun.svg b/assets/icons/skills/firearms_submachine_gun.svg index 2484ef22..99900884 100644 --- a/assets/icons/skills/firearms_submachine_gun.svg +++ b/assets/icons/skills/firearms_submachine_gun.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/first_aid.svg b/assets/icons/skills/first_aid.svg index ee9b358c..e9224538 100644 --- a/assets/icons/skills/first_aid.svg +++ b/assets/icons/skills/first_aid.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/history.svg b/assets/icons/skills/history.svg index 1c38ab8b..930caf18 100644 --- a/assets/icons/skills/history.svg +++ b/assets/icons/skills/history.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/hypnosis.svg b/assets/icons/skills/hypnosis.svg index ebb3a178..b7b4b4c9 100644 --- a/assets/icons/skills/hypnosis.svg +++ b/assets/icons/skills/hypnosis.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/intimidate.svg b/assets/icons/skills/intimidate.svg index f5432be7..6af0ba15 100644 --- a/assets/icons/skills/intimidate.svg +++ b/assets/icons/skills/intimidate.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/jump.svg b/assets/icons/skills/jump.svg index 309ff905..1edd0599 100644 --- a/assets/icons/skills/jump.svg +++ b/assets/icons/skills/jump.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/language.svg b/assets/icons/skills/language.svg index 756bcf5a..26de1f2c 100644 --- a/assets/icons/skills/language.svg +++ b/assets/icons/skills/language.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/law.svg b/assets/icons/skills/law.svg index 90265aa7..a07f809c 100644 --- a/assets/icons/skills/law.svg +++ b/assets/icons/skills/law.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/library_use.svg b/assets/icons/skills/library_use.svg index 70029a15..b4a27b6c 100644 --- a/assets/icons/skills/library_use.svg +++ b/assets/icons/skills/library_use.svg @@ -1 +1 @@ - + diff --git a/assets/icons/skills/listen.svg b/assets/icons/skills/listen.svg index d5d39f68..d81ebded 100644 --- a/assets/icons/skills/listen.svg +++ b/assets/icons/skills/listen.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/locksmith.svg b/assets/icons/skills/locksmith.svg index 3fe250f3..a0cb4618 100644 --- a/assets/icons/skills/locksmith.svg +++ b/assets/icons/skills/locksmith.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/mechanical_repair.svg b/assets/icons/skills/mechanical_repair.svg index 3529ff89..6cf906ff 100644 --- a/assets/icons/skills/mechanical_repair.svg +++ b/assets/icons/skills/mechanical_repair.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/medicine.svg b/assets/icons/skills/medicine.svg index b94a8eb8..ef407994 100644 --- a/assets/icons/skills/medicine.svg +++ b/assets/icons/skills/medicine.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/natural_world.svg b/assets/icons/skills/natural_world.svg index 853fdd41..ce67827b 100644 --- a/assets/icons/skills/natural_world.svg +++ b/assets/icons/skills/natural_world.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/navigate.svg b/assets/icons/skills/navigate.svg index db5f1a57..401a5987 100644 --- a/assets/icons/skills/navigate.svg +++ b/assets/icons/skills/navigate.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/occult.svg b/assets/icons/skills/occult.svg index 49ef9b3c..ffd075f3 100644 --- a/assets/icons/skills/occult.svg +++ b/assets/icons/skills/occult.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/operate_heavy_machinery.svg b/assets/icons/skills/operate_heavy_machinery.svg index c097e2db..65fe2bf1 100644 --- a/assets/icons/skills/operate_heavy_machinery.svg +++ b/assets/icons/skills/operate_heavy_machinery.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/persuade.svg b/assets/icons/skills/persuade.svg index 2b4ed244..ad75ba7d 100644 --- a/assets/icons/skills/persuade.svg +++ b/assets/icons/skills/persuade.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/pilot_any.svg b/assets/icons/skills/pilot_any.svg index a3f03fb7..7eba3ab9 100644 --- a/assets/icons/skills/pilot_any.svg +++ b/assets/icons/skills/pilot_any.svg @@ -1 +1 @@ - + diff --git a/assets/icons/skills/psychoanalysis.svg b/assets/icons/skills/psychoanalysis.svg index a05bdde2..c32f3612 100644 --- a/assets/icons/skills/psychoanalysis.svg +++ b/assets/icons/skills/psychoanalysis.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/psychology.svg b/assets/icons/skills/psychology.svg index 9374ee14..a9b40d8b 100644 --- a/assets/icons/skills/psychology.svg +++ b/assets/icons/skills/psychology.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/read_lips.svg b/assets/icons/skills/read_lips.svg index 2967339f..2aef9d33 100644 --- a/assets/icons/skills/read_lips.svg +++ b/assets/icons/skills/read_lips.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/ride.svg b/assets/icons/skills/ride.svg index 48204de2..371a4ad2 100644 --- a/assets/icons/skills/ride.svg +++ b/assets/icons/skills/ride.svg @@ -1 +1 @@ - + diff --git a/assets/icons/skills/science_any.svg b/assets/icons/skills/science_any.svg index 17eca230..640362c3 100644 --- a/assets/icons/skills/science_any.svg +++ b/assets/icons/skills/science_any.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/science_astronomy.svg b/assets/icons/skills/science_astronomy.svg index f6cc149c..9f6bf447 100644 --- a/assets/icons/skills/science_astronomy.svg +++ b/assets/icons/skills/science_astronomy.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/science_biology.svg b/assets/icons/skills/science_biology.svg index 8a3e480e..1842ed4d 100644 --- a/assets/icons/skills/science_biology.svg +++ b/assets/icons/skills/science_biology.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/science_botany.svg b/assets/icons/skills/science_botany.svg index 11c4304c..ed949236 100644 --- a/assets/icons/skills/science_botany.svg +++ b/assets/icons/skills/science_botany.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/science_chemistry.svg b/assets/icons/skills/science_chemistry.svg index 9a2773d8..18e19bea 100644 --- a/assets/icons/skills/science_chemistry.svg +++ b/assets/icons/skills/science_chemistry.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/science_cryptography.svg b/assets/icons/skills/science_cryptography.svg index 2b20098c..afb25a47 100644 --- a/assets/icons/skills/science_cryptography.svg +++ b/assets/icons/skills/science_cryptography.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/science_forensics.svg b/assets/icons/skills/science_forensics.svg index dc78e39a..e1085a2e 100644 --- a/assets/icons/skills/science_forensics.svg +++ b/assets/icons/skills/science_forensics.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/science_geology.svg b/assets/icons/skills/science_geology.svg index 446789da..e10e7a54 100644 --- a/assets/icons/skills/science_geology.svg +++ b/assets/icons/skills/science_geology.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/science_mathematics.svg b/assets/icons/skills/science_mathematics.svg index 3bb8917a..07532b6b 100644 --- a/assets/icons/skills/science_mathematics.svg +++ b/assets/icons/skills/science_mathematics.svg @@ -1 +1 @@ - + diff --git a/assets/icons/skills/science_meteorology.svg b/assets/icons/skills/science_meteorology.svg index 9c998553..b68bf443 100644 --- a/assets/icons/skills/science_meteorology.svg +++ b/assets/icons/skills/science_meteorology.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/science_pharmacy.svg b/assets/icons/skills/science_pharmacy.svg index 0c735477..0ca15112 100644 --- a/assets/icons/skills/science_pharmacy.svg +++ b/assets/icons/skills/science_pharmacy.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/science_physics.svg b/assets/icons/skills/science_physics.svg index 236c7a01..b51f53e2 100644 --- a/assets/icons/skills/science_physics.svg +++ b/assets/icons/skills/science_physics.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/science_zoology.svg b/assets/icons/skills/science_zoology.svg index 8acfeb3e..17c41213 100644 --- a/assets/icons/skills/science_zoology.svg +++ b/assets/icons/skills/science_zoology.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/sleight_of_hand.svg b/assets/icons/skills/sleight_of_hand.svg index 1fbd92db..fdd02218 100644 --- a/assets/icons/skills/sleight_of_hand.svg +++ b/assets/icons/skills/sleight_of_hand.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/spot_hidden.svg b/assets/icons/skills/spot_hidden.svg index b8dbfa8c..d0d73815 100644 --- a/assets/icons/skills/spot_hidden.svg +++ b/assets/icons/skills/spot_hidden.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/stealth.svg b/assets/icons/skills/stealth.svg index 42f3fcb6..dcab84a6 100644 --- a/assets/icons/skills/stealth.svg +++ b/assets/icons/skills/stealth.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/survival_any.svg b/assets/icons/skills/survival_any.svg index 2cccb990..e8aca530 100644 --- a/assets/icons/skills/survival_any.svg +++ b/assets/icons/skills/survival_any.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/swim.svg b/assets/icons/skills/swim.svg index a55f4a48..68aa64b7 100644 --- a/assets/icons/skills/swim.svg +++ b/assets/icons/skills/swim.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/skills/track.svg b/assets/icons/skills/track.svg index 7deb7ffc..7d78266e 100644 --- a/assets/icons/skills/track.svg +++ b/assets/icons/skills/track.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packs/examples.db b/packs/examples.db index a17b0e49..f4e86299 100644 --- a/packs/examples.db +++ b/packs/examples.db @@ -1,4 +1,5 @@ -{"_id":"3z7VR4iGfJY8fQLG","name":"Creature example","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"creature","data":{"characteristics":{"str":{"value":0,"short":"CHARAC.STR","label":"CHARAC.Strengh","formula":"1d6"},"con":{"value":0,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":"2d6"},"siz":{"value":0,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":"5*3d6"},"dex":{"value":0,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":"4d6"},"app":{"value":0,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":"5d6"},"int":{"value":0,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":"6d6"},"pow":{"value":0,"short":"CHARAC.POW","label":"CHARAC.Power","formula":""},"edu":{"value":0,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":"0"}},"attribs":{"hp":{"value":0,"max":0,"short":"HP","label":"Hit points","auto":true},"mp":{"value":0,"max":0,"short":"HP","label":"Magic points","auto":true},"lck":{"value":0,"short":"LCK","label":"Luck","max":0},"san":{"value":0,"max":99,"short":"SAN","label":"Sanity","auto":true},"mov":{"value":"auto","short":"MOV","label":"Movement rate","auto":true},"db":{"value":"auto","short":"DB","label":"Damage bonus","auto":true},"build":{"value":"auto","short":"BLD","label":"Build","auto":true},"armor":{"value":null,"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"personalDescription":{"type":"string","value":""},"special":{"attribs":{"move":{"primary":{"enabled":false,"value":null,"type":null},"secondary":{"enabled":false,"value":null,"type":null}}},"sanLoss":{"checkPassed":null,"checkFailled":null},"attacksPerRound":1},"infos":{"type":"","age":"","occupation":"To be removed"},"flags":{"locked":true,"displayFormula":false},"biography":{"personalDescription":{"value":"

Clicking the lock will allow modification of the sheet.

\n

When sheet is unlock you can modify things directly from the sheet. You can also open the entities sheets and delete things.

\n

In that mode you can create skills/possessions by clicking the + icon. Holding shift will bypass the opening of the corresponding sheet.

\n

You can enter characteristics as numbers and as formulas. Click the right icon to toggle modes. Clicking the red dice will roll the formula when possible. So you can have your creature with defined values, or roll/reroll the value on demand.

\n

 

"}},"items":{"0":{"name":["Slice PCs in small cubes","Pile of junk"],"value":75}}},"sort":100001,"flags":{},"img":"icons/svg/mystery-man.svg","token":{"flags":{},"name":"Creature example","displayName":0,"img":"icons/svg/sword.svg","tint":null,"width":1,"height":1,"scale":1,"lockRotation":false,"rotation":0,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":360,"lightAngle":360,"lightAlpha":1,"lightAnimation":{"speed":5,"intensity":5},"actorId":"3z7VR4iGfJY8fQLG","actorLink":false,"disposition":-1,"displayBars":0,"bar1":{},"bar2":{},"randomImg":false},"items":[{"_id":"dLLdlRaQmkE9QYUJ","name":"Slice PCs in small cubes","type":"skill","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":0,"value":"75","attributes":{},"properties":{"special":false,"rarity":false,"push":false,"combat":true,"shortlist":false},"eras":{},"flags":{}},"sort":100000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"H30y50QJUdx9Xjii","name":"Deadly claws","type":"weapon","data":{"description":{"value":"

Description of the weapon

\n

selecting 'Area of effect' will enable 3 different damage and range

\n

selecting 'Full-auto' will allow 2 different skilss to be selected for the weapon

\n

selecting 'Special' will activate the special input field

\n

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

\n

Edit the weapon and select the correct skill.

","chat":"","special":"

You can add special description or slugs there :

\n

Slug 1 : 2d17kh

"},"wpnType":"","skill":{"main":{"name":"To be selected once the weapon is owned","id":"dLLdlRaQmkE9QYUJ"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"15ft","units":"","damage":"10d6"},"long":{"value":"25ft","units":"","damage":"2d6"},"extreme":{"value":"35ft","units":"","damage":"3d6"}},"usesPerRound":{"normal":"","max":""},"bullets":"","malfunction":"85","properties":{"rngd":false,"impl":false,"rare":false,"ahdb":false,"addb":false,"slnt":false,"xplv":false,"brst":true,"auto":false,"spcl":true,"mont":false,"dbrl":false,"blst":false,"stun":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"sort":100001,"flags":{},"img":"icons/svg/sword.svg","effects":[]},{"_id":"i6nvPoQNE6CTSz5C","name":"Pile of junk","type":"item","data":{"description":"","quantity":1,"weight":0,"attributes":{}},"sort":200001,"flags":{},"img":"icons/svg/item-bag.svg","effects":[]},{"_id":"blVIcQR6OUZ4LeqG","name":"Fighting","type":"skill","data":{"specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":0,"value":"50","attributes":{},"properties":{"combat":true,"fighting":true,"special":true},"eras":{},"flags":{}},"sort":300001,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"izZoClJXLwUpoiy7","name":"Innate attack","type":"weapon","data":{"description":{"value":"Creature's natural attack","chat":"Creature's natural attack","special":""},"wpnType":"innate","skill":{"main":{"name":"Fighting","id":"blVIcQR6OUZ4LeqG"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1d3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"","max":""},"bullets":"","malfunction":"","properties":{"addb":true,"slnt":true},"eras":{},"price":{}},"sort":400001,"flags":{},"img":"icons/svg/mystery-man.svg","effects":[]}],"effects":[]} -{"_id":"6FdxkxUI1uwDtElA","name":"Goon","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"npc","data":{"characteristics":{"str":{"value":null,"short":"CHARAC.STR","label":"CHARAC.Strengh","formula":"5*2d6+6"},"con":{"value":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":"5*3d6"},"siz":{"value":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":"5*3d6"},"dex":{"value":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":"5*3d6"},"app":{"value":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":"5*1d6"},"int":{"value":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":"5*1d6"},"pow":{"value":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":"0"},"edu":{"value":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":"0"}},"attribs":{"hp":{"value":null,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":null,"max":null,"short":"HP","label":"Magic points","auto":true},"lck":{"value":null,"short":"LCK","label":"Luck","max":0},"san":{"value":50,"max":99,"short":"SAN","label":"Sanity","auto":true},"mov":{"value":null,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":"","short":"DB","label":"Damage bonus","auto":true},"build":{"value":null,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"personalDescription":{"type":"string","value":""},"infos":{"occupation":"Obey to the vilain","age":"Average","sex":"","organization":""},"flags":{"locked":true,"displayFormula":false},"items":{"0":{"name":["Bark orders","Plan to enslave humanity"],"value":45},"1":{"name":["Be a pain","Very mean sidekick"],"value":50},"2":{"name":"Dodge","value":null},"3":{"name":"Brawl","value":25},"4":{"name":"Shotgun","value":25},"5":{"name":"Language (Own)","value":null},"6":{"name":"Takeover the world","value":80},"7":{"name":"Torment the PC","value":75}}},"sort":100001,"flags":{},"img":"icons/svg/mystery-man.svg","token":{"flags":{},"name":"Vilain example","displayName":0,"img":"icons/svg/mystery-man.svg","tint":null,"width":1,"height":1,"scale":1,"lockRotation":false,"rotation":0,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":360,"lightAngle":360,"lightAlpha":1,"lightAnimation":{"speed":5,"intensity":5},"actorId":"6FdxkxUI1uwDtElA","actorLink":false,"disposition":-1,"displayBars":0,"bar1":{},"bar2":{},"randomImg":false},"items":[{"_id":"MLzJUjOk8pGvbark","name":"Be a pain","type":"skill","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":0,"value":"50","attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false,"shortlist":false},"eras":{},"flags":{}},"sort":400000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"vahGLRAWBleHGipn","name":"Try hard","type":"skill","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":0,"value":"10","attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false,"shortlist":false},"eras":{},"flags":{}},"sort":600000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"MzS8tNzfklkMETxe","name":"Orders","type":"item","data":{"description":"","quantity":1,"weight":0,"attributes":{}},"sort":700000,"flags":{},"img":"icons/svg/item-bag.svg","effects":[]},{"_id":"55AtqIMUTt5uER3Z","name":"Secret documents","type":"item","data":{"description":"","quantity":1,"weight":0,"attributes":{}},"sort":800000,"flags":{},"img":"icons/svg/item-bag.svg","effects":[]},{"_id":"bP89oaMSNTuMQdt5","name":"Punch","type":"weapon","data":{"description":{"value":"

Description of the weapon

\n

selecting 'Area of effect' will enable 3 different damage and range

\n

selecting 'Full-auto' will allow 2 different skilss to be selected for the weapon

\n

selecting 'Special' will activate the special input field

\n

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

\n

Edit the weapon and select the correct skill.

","chat":"","special":"

You can add special description or slugs there :

\n

Slug 1 : 2d17kh

"},"wpnType":"","skill":{"main":{"name":"Brawl","id":"EUUoTqgF104Htwp5"},"alternativ":{"name":"","id":"GpHiBjo9O4FrPzdl"}},"range":{"normal":{"value":"15ft","units":"","damage":"1d3"},"long":{"value":"25ft","units":"","damage":"2d6"},"extreme":{"value":"35ft","units":"","damage":"3d6"}},"usesPerRound":{"normal":"","max":""},"bullets":"","malfunction":"85","properties":{"rngd":false,"impl":false,"rare":false,"ahdb":false,"addb":true,"slnt":true,"xplv":false,"brst":false,"auto":false,"spcl":false,"mont":false,"dbrl":false,"blst":false,"stun":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"sort":100001,"flags":{},"img":"icons/svg/sword.svg","effects":[]},{"_id":"GpHiBjo9O4FrPzdl","name":"Shotgun","type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":"25","attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"firearm":true,"fighting":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":6400000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"DqmtcxhedeGwNdPb","name":"Dodge","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1/2*@DEX","value":25,"attributes":{},"properties":{"special":false,"rarity":false,"push":false,"combat":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":2200000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"EUUoTqgF104Htwp5","name":"Brawl","type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":"65","attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"firearm":false,"fighting":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":1100000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"odgm7NgwjcrVBoRZ","name":"Language (Own)","type":"skill","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"@EDU","value":"@EDU","attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":4000000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"Cgn0EMY6vNZ9iVHW","name":"Receive orders","type":"skill","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":0,"value":"95","attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false,"shortlist":false},"eras":{},"flags":{}},"sort":6500000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"SZhoTtcwS9wOPXBU","name":"Shotgun","type":"weapon","data":{"description":{"value":"

Description of the weapon

\n

selecting 'Area of effect' will enable 3 different damage and range

\n

selecting 'Full-auto' will allow 2 different skilss to be selected for the weapon

\n

selecting 'Special' will activate the special input field

\n

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

\n

Edit the weapon and select the correct skill.

","chat":"","special":"

You can add special description or slugs there :

\n

Slug 1 : 2d17kh

"},"wpnType":"","skill":{"main":{"name":"Shotgun","id":"GpHiBjo9O4FrPzdl"},"alternativ":{"name":"Shotgun","id":"GpHiBjo9O4FrPzdl"}},"range":{"normal":{"value":"15ft","units":"","damage":"1d6"},"long":{"value":"25ft","units":"","damage":"2d6"},"extreme":{"value":"35ft","units":"","damage":"3d6"}},"usesPerRound":{"normal":"","max":""},"bullets":"","malfunction":"85","properties":{"rngd":true,"impl":false,"rare":false,"ahdb":false,"addb":false,"slnt":false,"xplv":true,"brst":false,"auto":false,"spcl":false,"mont":false,"dbrl":false,"blst":false,"stun":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"sort":100001,"flags":{},"img":"icons/svg/sword.svg","effects":[]},{"_id":"yfEPFv1QVtPS8pJQ","name":"Club","type":"weapon","data":{"description":{"value":"","chat":"","special":""},"wpnType":"","skill":{"main":{"name":"","id":"EUUoTqgF104Htwp5"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1d4"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"","max":""},"bullets":"","malfunction":"","properties":{"rngd":false,"impl":false,"rare":false,"ahdb":true,"addb":false,"slnt":true,"xplv":false,"brst":false,"auto":false,"spcl":false,"mont":false,"dbrl":false,"blst":false,"stun":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{"1920":0,"nvct":0,"drka":0,"ddts":0,"glit":0,"pulp":0,"mdrn":0}},"sort":6600000,"flags":{},"img":"icons/svg/sword.svg","effects":[]}],"effects":[]} -{"_id":"F7NaTPsNa9YdF1JD","name":"Vilain example","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"npc","data":{"characteristics":{"str":{"value":50,"short":"CHARAC.STR","label":"CHARAC.Strengh","formula":null},"con":{"value":50,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":null},"siz":{"value":50,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":null},"dex":{"value":50,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":null},"app":{"value":50,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":null},"int":{"value":50,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":null},"pow":{"value":50,"short":"CHARAC.POW","label":"CHARAC.Power","formula":null},"edu":{"value":50,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":null}},"attribs":{"hp":{"value":10,"max":10,"short":"HP","label":"Hit points","auto":true},"mp":{"value":10,"max":10,"short":"HP","label":"Magic points","auto":true},"lck":{"value":null,"short":"LCK","label":"Luck","max":0},"san":{"value":50,"max":99,"short":"SAN","label":"Sanity","auto":true},"mov":{"value":null,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":"","short":"DB","label":"Damage bonus","auto":true},"build":{"value":null,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"personalDescription":{"type":"string","value":""},"infos":{"occupation":"Be a vilain","age":"Very old","sex":"","organization":""},"flags":{"locked":true,"displayFormula":false},"items":{"0":{"name":["Bark orders","Plan to enslave humanity"],"value":45},"1":{"name":["Be a pain","Very mean sidekick"],"value":50},"2":{"name":"Dodge","value":null},"3":{"name":"Brawl","value":25},"4":{"name":"Shotgun","value":25},"5":{"name":"Language (Own)","value":null},"6":{"name":"Takeover the world","value":80},"7":{"name":"Torment the PC","value":75}}},"sort":100001,"flags":{},"img":"icons/svg/mystery-man.svg","token":{"flags":{},"name":"Vilain example","displayName":0,"img":"icons/svg/mystery-man.svg","tint":null,"width":1,"height":1,"scale":1,"lockRotation":false,"rotation":0,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":360,"lightAngle":360,"lightAlpha":1,"lightAnimation":{"speed":5,"intensity":5},"actorId":"F7NaTPsNa9YdF1JD","actorLink":false,"disposition":-1,"displayBars":0,"bar1":{},"bar2":{},"randomImg":false},"items":[{"_id":"MLzJUjOk8pGvbark","name":"Be a pain","type":"skill","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":0,"value":"50","attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false,"shortlist":false},"eras":{},"flags":{}},"sort":400000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"MUMDYUZ4xaEPfwin","name":"Takeover the world","type":"skill","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":0,"value":"80","attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false,"shortlist":false},"eras":{},"flags":{}},"sort":500000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"vahGLRAWBleHGipn","name":"Torment the PC","type":"skill","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":0,"value":"75","attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false,"shortlist":false},"eras":{},"flags":{}},"sort":600000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"MzS8tNzfklkMETxe","name":"Plan to enslave humanity","type":"item","data":{"description":"","quantity":1,"weight":0,"attributes":{}},"sort":700000,"flags":{},"img":"icons/svg/item-bag.svg","effects":[]},{"_id":"55AtqIMUTt5uER3Z","name":"Very mean sidekick","type":"item","data":{"description":"","quantity":1,"weight":0,"attributes":{}},"sort":800000,"flags":{},"img":"icons/svg/item-bag.svg","effects":[]},{"_id":"bP89oaMSNTuMQdt5","name":"Punch","type":"weapon","data":{"description":{"value":"

Description of the weapon

\n

selecting 'Area of effect' will enable 3 different damage and range

\n

selecting 'Full-auto' will allow 2 different skilss to be selected for the weapon

\n

selecting 'Special' will activate the special input field

\n

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

\n

Edit the weapon and select the correct skill.

","chat":"","special":"

You can add special description or slugs there :

\n

Slug 1 : 2d17kh

"},"wpnType":"","skill":{"main":{"name":"Brawl","id":"EUUoTqgF104Htwp5"},"alternativ":{"name":"","id":"GpHiBjo9O4FrPzdl"}},"range":{"normal":{"value":"15ft","units":"","damage":"1d6"},"long":{"value":"25ft","units":"","damage":"2d6"},"extreme":{"value":"35ft","units":"","damage":"3d6"}},"usesPerRound":{"normal":"","max":""},"bullets":"","malfunction":"85","properties":{"rngd":false,"impl":false,"rare":false,"ahdb":false,"addb":true,"slnt":false,"xplv":false,"brst":false,"auto":false,"spcl":false,"mont":false,"dbrl":false,"blst":false,"stun":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"sort":100001,"flags":{},"img":"icons/svg/sword.svg","effects":[]},{"_id":"GpHiBjo9O4FrPzdl","name":"Shotgun","type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":"25","attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"firearm":true,"fighting":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":6400000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"DqmtcxhedeGwNdPb","name":"Dodge","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1/2*@DEX","value":25,"attributes":{},"properties":{"special":false,"rarity":false,"push":false,"combat":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":2200000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"EUUoTqgF104Htwp5","name":"Brawl","type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":"25","attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"firearm":false,"fighting":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":1100000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"odgm7NgwjcrVBoRZ","name":"Language (Own)","type":"skill","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"@EDU","value":50,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":4000000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"Cgn0EMY6vNZ9iVHW","name":"Bark orders","type":"skill","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":0,"value":"45","attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false,"shortlist":false},"eras":{},"flags":{}},"sort":6500000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"SZhoTtcwS9wOPXBU","name":"My test weapon","type":"weapon","data":{"description":{"value":"

Description of the weapon

\n

selecting 'Area of effect' will enable 3 different damage and range

\n

selecting 'Full-auto' will allow 2 different skilss to be selected for the weapon

\n

selecting 'Special' will activate the special input field

\n

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

\n

Edit the weapon and select the correct skill.

","chat":"","special":"

You can add special description or slugs there :

\n

Slug 1 : 2d17kh

"},"wpnType":"","skill":{"main":{"name":"Shotgun","id":"GpHiBjo9O4FrPzdl"},"alternativ":{"name":"Shotgun","id":"GpHiBjo9O4FrPzdl"}},"range":{"normal":{"value":"15ft","units":"","damage":"1d6"},"long":{"value":"25ft","units":"","damage":"2d6"},"extreme":{"value":"35ft","units":"","damage":"3d6"}},"usesPerRound":{"normal":"","max":""},"bullets":"","malfunction":"85","properties":{"rngd":true,"impl":false,"rare":false,"ahdb":false,"addb":false,"slnt":false,"xplv":true,"brst":true,"auto":true,"spcl":false,"mont":false,"dbrl":false,"blst":false,"stun":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"sort":100001,"flags":{},"img":"icons/svg/sword.svg","effects":[]}],"effects":[]} -{"_id":"oRob2oqTWrybfLVU","name":"1920 Character","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"character","data":{"characteristics":{"str":{"value":null,"short":"CHARAC.STR","label":"CHARAC.Strengh","formula":null},"con":{"value":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":null},"siz":{"value":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":null},"dex":{"value":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":null},"app":{"value":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":null},"int":{"value":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":null},"pow":{"value":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":null},"edu":{"value":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":null}},"attribs":{"hp":{"value":null,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":null,"max":null,"short":"HP","label":"Magic points","auto":true},"lck":{"value":null,"short":"LCK","label":"Luck","max":99},"san":{"value":null,"max":99,"short":"SAN","label":"Sanity","auto":true},"mov":{"value":"auto","short":"MOV","label":"Movement rate","auto":true},"db":{"value":"-2","short":"DB","label":"Damage bonus","auto":true},"build":{"value":"auto","short":"BLD","label":"Build","auto":true},"armor":{"value":null,"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"dead":{"type":"Boolean","value":false},"prone":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"infos":{"occupation":"","age":"","sex":"","residence":"","birthplace":"","archetype":"","organization":""},"flags":{"locked":true,"manualCredit":false},"credit":{"monetarySymbol":"","multiplier":null,"spent":"","assetsDetails":""},"development":{"personal":null,"occupation":null,"archetype":null},"biography":[{"title":"Personal Description","value":null},{"title":"Ideology/Beliefs","value":null},{"title":"Significant People","value":null},{"title":"Meaningful Locations","value":null},{"title":"Treasured Possessions","value":null},{"title":"Traits","value":null}],"encounteredCreatures":[],"personalDescription":{"type":"string","value":""},"indefiniteInsanityLevel":{"value":0,"max":0},"adjustments":{"personal":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"experience":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]}},"sort":100001,"flags":{},"img":"icons/svg/mystery-man.svg","token":{"flags":{},"name":"1920 Character","displayName":0,"img":"icons/svg/mystery-man.svg","tint":null,"width":1,"height":1,"scale":1,"lockRotation":false,"rotation":0,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":360,"lightAngle":360,"lightAlpha":1,"lightAnimation":{"speed":5,"intensity":5},"actorId":"oRob2oqTWrybfLVU","actorLink":false,"disposition":-1,"displayBars":0,"bar1":{},"bar2":{},"randomImg":false},"items":[{"_id":"E3y6HmUAZGyAv5zM","name":"Accounting","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":100000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"XhHYF5tSQj8n7nIt","name":"Anthropology","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":200000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"VDsiVSMGcoUXCxdw","name":"Appraise","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":300000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"lDsTVk3C1CALLJV9","name":"Charm","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":400000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"k4q7dNE6yyaWvg6t","name":"Credit Rating","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":500000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"U82PaYvshoVvFLTt","name":"Cthulhu Mythos","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":false,"combat":false,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":600000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"J0lo87g53txd5SLS","name":"Disguise","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":700000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"84CUVd7oXCBoDRh7","name":"Dodge","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1/2 @DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":false,"combat":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":800000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"bHgRyyed99nleqcG","name":"Drive Auto","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":900000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"lYpc5wP0ocjfX38X","name":"Electrical Repair","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":1000000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"rDU26YAzBpBMQP27","name":"Fast Talk","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":1100000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"kjaEOLz2p8ZrEowW","name":"Brawl","type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"firearm":false,"fighting":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":1200000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"O6xeAxF7aEY8zHdm","name":"Handgun","type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"firearm":true,"fighting":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":1300000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"MaFf4EBxPNbDiFoZ","name":"Shotgun","type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"firearm":true,"fighting":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":1400000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"ZI31AYDfuXNjE6W9","name":"First Aid","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"30","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":1500000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"2LmfyHywLRLjfYZK","name":"History","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":1600000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"pW0uDSp9w8CFCPLN","name":"Intimidate","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":1700000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"1WVyK6rnfd5LiwZF","name":"Jump","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":1800000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"eYqdGfBBKGBihakf","name":"Language (Own)","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":1900000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"IwRD21t2beB16frp","name":"Law","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":2000000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"m6cYXpQe1bY13JD8","name":"Library Use","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":2100000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"RW3uFJY5WH9lg49Z","name":"Climb","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":2200000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"AHG7Inw3sZTY6qWV","name":"Listen","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":2300000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"3Jysn2i3cSgykZHp","name":"Locksmith","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":2400000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"IbwXpzOw7IyzPqmI","name":"Mechanical Repair","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":2500000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"Mmy1vrySUmlMq8Wu","name":"Medicine","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":2600000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"PhzNWFslePSOjMeE","name":"Natural World","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":2700000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"kzdAswgR5VFrc8wH","name":"Navigate","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":2800000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"8Vz3jYVrRH4z6kZR","name":"Occult","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":2900000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"WPppQWg72tJf8Ufs","name":"Operate Heavy Machinery","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":3000000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"v2mCLTJ5uV9xcZtU","name":"Persuade","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":3100000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"OFaRTxDfNzPqnWPE","name":"Any","type":"skill","data":{"specialization":"Pilot","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":3200000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"3RIMHZyf9dI5HIOF","name":"Psychoanalysis","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":3300000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"IChZCFGH2cJeQmmw","name":"Psychology","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":3400000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"EEEND8YZ91rtVW48","name":"Ride","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":3500000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"XE0HsG49O1CPI9r1","name":"Sleight of Hand","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":3600000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"jEaOE3HSP6EGGfUO","name":"Spot Hidden","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":3700000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"3mLypx5XOhaE0kDB","name":"Any","type":"skill","data":{"specialization":"Survival","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":3800000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"5jLflB6Ez9h2ILPA","name":"Stealth","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{},"flags":{}},"sort":3900000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"2Wrbf4c9TNiW5DYu","name":"Throw","type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":4000000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"laKcJWNqaQQa8tHg","name":"Archaeology","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":4100000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"IeaxvTs5r5KQxSvQ","name":"Swim","type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":4200000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"i1VYLHBcWrIUd57K","name":"Fists","type":"weapon","data":{"description":{"value":"","chat":"","special":""},"wpnType":"","skill":{"main":{"name":"","id":"kjaEOLz2p8ZrEowW"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"rngd":false,"impl":false,"rare":false,"ahdb":false,"addb":true,"slnt":false,"xplv":false,"brst":false,"auto":false,"spcl":false,"mont":false,"dbrl":false,"blst":false,"stun":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{"1920":0,"nvct":0,"drka":0,"ddts":0,"glit":0,"pulp":0,"mdrn":0}},"sort":4400000,"flags":{},"img":"icons/svg/sword.svg","effects":[]},{"_id":"jR4Qq2clAIB5kSIn","name":"Any","type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"sort":4500000,"flags":{"core":{"sourceId":"Compendium.CoC7.skills.iV3SdrNKsGB5BSli"}},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"wj7Dm3wKkoU2ox16","name":"Any","type":"skill","data":{"specialization":"Language","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"sort":4600000,"flags":{"core":{"sourceId":"Compendium.CoC7.skills.tZ75GTRGUNa7Ofj4"}},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"mVvcxcuAj4siP5Fl","name":"Any","type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"sort":4700000,"flags":{"core":{"sourceId":"Compendium.CoC7.skills.g9Q95Ei79qs3XZAz"}},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]},{"_id":"1sx4ciqtI5dOWbrC","name":"Any","type":"skill","data":{"specialization":"Track","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"sort":4800000,"flags":{"core":{"sourceId":"Compendium.CoC7.skills.4TTVJmCu9mP5kFrx"}},"img":"systems/CoC7/assets/icons/skills.svg","effects":[]}],"effects":[]} +{"name":"Villain example","type":"npc","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":50,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":null},"con":{"value":50,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":null},"siz":{"value":50,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":null},"dex":{"value":50,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":null},"app":{"value":50,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":null},"int":{"value":50,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":null},"pow":{"value":50,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":null},"edu":{"value":50,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":null}},"attribs":{"hp":{"value":10,"max":10,"short":"HP","label":"Hit points","auto":true},"mp":{"value":10,"max":10,"short":"HP","label":"Magic points","auto":true},"lck":{"value":50,"short":"LCK","label":"Luck","max":99},"san":{"value":50,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":8,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":0,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":0,"value":0,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"dead":{"type":"Boolean","value":false},"prone":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"infos":{"occupation":"Be a villain","age":"Very old","sex":""},"flags":{"locked":true,"displayFormula":false}},"token":{"name":"Villain example","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg"},"items":[{"_id":"JKPFlce4fXskHrco","name":"Very mean sidekick","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.MpvookJWHQs0NX6M"}}},{"_id":"Uyw5Vo86WmxaCbLt","name":"Plan to enslave humanity","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.H7yLjkXpmrlhPFRt"}}},{"_id":"75xFKGouCIhczLRe","name":"Punch","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"mjNPsr30tOVP1OUa"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":100000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.Uldjvs5fvCMri6RN"}}},{"_id":"mjNPsr30tOVP1OUa","name":"Brawl","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vS8bsPWFlwgOecoB"}}},{"_id":"Wc35ZVZlbGvnt4Dk","name":"Rifle/Shotgun","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.m2pYjKk4Gk3FcEBL"}}},{"_id":"GEX2If3omq2h3kf0","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wK8XxNj9QwXlGFEb"}}},{"_id":"CpenApM1POTvS9uc","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":50,"attributes":{},"properties":{"push":true,"special":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id":"7VR4auTMAPfaEqyA","name":"My test weapon","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"

Description of the weapon

\n

selecting 'Area of effect' will enable 3 different damage and range

\n

selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

\n

selecting 'Special' will activate the special input field

\n

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

\n

Edit the weapon and select the correct skill.

","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Rifle/Shotgun","id":"Wc35ZVZlbGvnt4Dk"},"alternativ":{"name":"Rifle/Shotgun","id":"Wc35ZVZlbGvnt4Dk"}},"range":{"normal":{"value":"15ft","units":"","damage":"1d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":""},"bullets":"","ammo":0,"malfunction":"85","blastRadius":null,"properties":{"melee":false,"rngd":true,"auto":true,"brst":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"$5","mdrn":"$6"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.ar306rfjUIZFenWF"}}},{"_id":"gCpN0Jqn85LVYRcD","name":"Torment the PC","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"75","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.l4vz66H4IkqiXKzB"}}},{"_id":"0AHo1cSc7ueMEg1C","name":"Takeover the world","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"80","attributes":{},"properties":{},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DuQXiLwoHb7JnNGv"}}},{"_id":"gtLHe6r4xczLReMd","name":"Be a pain","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"0","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DGD3CQQWsYIqhLWL"}}},{"_id":"tzxgO3tPQTvSHXKv","name":"Bark orders","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"45","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.M4Q1ps8ecPWKfnI0"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.KIFjLTP875sS5weT"}},"_id":"4kSvDc4n13oFx8RG"} +{"name":"1920 Character","type":"character","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":null,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":null},"con":{"value":null,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":null},"siz":{"value":null,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":null},"dex":{"value":null,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":null},"app":{"value":null,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":null},"int":{"value":null,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":null},"pow":{"value":null,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":null},"edu":{"value":null,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":null}},"attribs":{"hp":{"value":null,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":null,"max":null,"short":"HP","label":"Magic points","auto":true},"lck":{"value":null,"short":"LCK","label":"Luck","max":99},"san":{"value":null,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":8,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":-2,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":-2,"value":-2,"short":"BLD","label":"Build","auto":true},"armor":{"value":"","localized":false,"locations":[],"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"dead":{"type":"Boolean","value":false},"prone":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"infos":{"occupation":"","age":"","sex":"","residence":"","birthplace":"","archetype":"","organization":"","playername":""},"flags":{"locked":true,"manualCredit":false},"credit":{"monetarySymbol":"","multiplier":null,"spent":"","assetsDetails":""},"development":{"personal":null,"occupation":null,"archetype":null},"biography":[{"title":"Personal Description","value":null},{"title":"Ideology/Beliefs","value":null},{"title":"Significant People","value":null},{"title":"Meaningful Locations","value":null},{"title":"Treasured Possessions","value":null},{"title":"Traits","value":null}],"encounteredCreatures":[],"backstory":"","indefiniteInsanityLevel":{"value":0,"max":0},"description":{"keeper":""},"notes":""},"token":{"vision":true,"dimSight":30,"brightSight":0,"actorLink":true,"disposition":1,"name":"1920 Character","displayName":0,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg"},"items":[{"_id":"Xm0JdbwxJzHLLtYZ","name":"Any","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","data":{"specialization":"Track","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":10,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.w0eY2fJe6CEHY9pq"}}},{"_id":"JMvqU49qbRiTKJGb","name":"Swim","type":"skill","img":"systems/CoC7/assets/icons/skills/swim.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.1zSIeY0eat2AxQok"}}},{"_id":"RGnZ6pAqojV0yLwM","name":"Any","type":"skill","img":"systems/CoC7/assets/icons/skills/survival_any.svg","data":{"specialization":"Survival","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":10,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.X99v5MtRlfTNjL3B"}}},{"_id":"ahBy1reywUrr7lgk","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.DcV524K0jNfjDEZC"}}},{"_id":"WYY5kolG5SyG2aH1","name":"Spot Hidden","type":"skill","img":"systems/CoC7/assets/icons/skills/spot_hidden.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.nHaWNwtW3Lg0sqYJ"}}},{"_id":"GJGoB7xXaIyP3ciE","name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.KKFNX5M4LtEtiuxs"}}},{"_id":"dY60dvWH18v1sSTW","name":"Any","type":"skill","img":"systems/CoC7/assets/icons/skills/science_any.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.KvZuYcg3AmVrwKi2"}}},{"_id":"rCfoj0uGHg492k6D","name":"Ride","type":"skill","img":"systems/CoC7/assets/icons/skills/ride.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.o7TdzbuSP7ticONf"}}},{"_id":"PrdpOJWdNCRTZ0EE","name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.MFR4eR79niGaLfph"}}},{"_id":"1Pan4WIJDkZbqESM","name":"Psychoanalysis","type":"skill","img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rXBU2GofiO2qOsGv"}}},{"_id":"i9errUuZqlwAVi7v","name":"Any","type":"skill","img":"systems/CoC7/assets/icons/skills/pilot_any.svg","data":{"specialization":"Pilot","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.uQsVn8K6XRXQmtaI"}}},{"_id":"bMbjk7ytnd1Ow4j5","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.uMzSNURmZqjxr7mU"}}},{"_id":"pMYQtwYDRSmb9wWA","name":"Operate Heavy Machinery","type":"skill","img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.cuExWy1130KUwuWz"}}},{"_id":"Exqibxs7ijhDp0Oz","name":"Occult","type":"skill","img":"systems/CoC7/assets/icons/skills/occult.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.6pSfZVS68jSHxa5T"}}},{"_id":"CgTtqUAM5uMMTUV6","name":"Navigate","type":"skill","img":"systems/CoC7/assets/icons/skills/navigate.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.1c3fdvpQtvZf5YXK"}}},{"_id":"CF86aFA8aBiuIBnC","name":"Natural World","type":"skill","img":"systems/CoC7/assets/icons/skills/natural_world.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.jTcu6Ni2ek7Yz5q3"}}},{"_id":"lVyVqAsQNvAy4quQ","name":"Medicine","type":"skill","img":"systems/CoC7/assets/icons/skills/medicine.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.Xmg7oAy70DKpv4kq"}}},{"_id":"PTaJmdgk1UZ5TKSF","name":"Mechanical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.0qCTuRFUCACSEsWj"}}},{"_id":"dx5b6LHcyLTHt42D","name":"Locksmith","type":"skill","img":"systems/CoC7/assets/icons/skills/locksmith.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.MRbFH52Zh9TzhLBh"}}},{"_id":"exZnZAWT4P7MO36B","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.MoAB0NRNlpEc2qWr"}}},{"_id":"UJu9tY8PlscU8ZkB","name":"Library Use","type":"skill","img":"systems/CoC7/assets/icons/skills/library_use.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.BcWHh8EhmyKj7bNk"}}},{"_id":"lp6SOOP4SMs0lU07","name":"Law","type":"skill","img":"systems/CoC7/assets/icons/skills/law.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.64hnBZNC8FM7oTkg"}}},{"_id":"QLUOsnhvE5AFJxaB","name":"Any","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.Yu3Xk8kZBlz0G82y"}}},{"_id":"a26s0DWcoCU4qtmm","name":"Own","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":0,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id":"wW21dwp7rzAp15cl","name":"Jump","type":"skill","img":"systems/CoC7/assets/icons/skills/jump.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.c5utlFbDM7J8TA8b"}}},{"_id":"mZ5ZZL7ObfXV8Iiv","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.hDr4eUbS398oniTa"}}},{"_id":"m1yN6RN0njMJODkX","name":"History","type":"skill","img":"systems/CoC7/assets/icons/skills/history.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.URo2NSSJSNdvOqXU"}}},{"_id":"7rOwHbUVLndS15g5","name":"First Aid","type":"skill","img":"systems/CoC7/assets/icons/skills/first_aid.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"30","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.nZ8rdL4PLb7A7f5B"}}},{"_id":"Ubh99M4zdwX9mp1x","name":"Rifle/Shotgun","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.m2pYjKk4Gk3FcEBL"}}},{"_id":"C7bqom4UhyJcnkB3","name":"Handgun","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.KmDGtn7ukUFVb265"}}},{"_id":"t8O7Rj8Vu4C4afTC","name":"Throw","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_throw.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true,"push":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.sWt5Q3ZXd6NlwhXU"}}},{"_id":"bw5XofBHsubMPXrH","name":"Brawl","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vS8bsPWFlwgOecoB"}}},{"_id":"HoRlO4r5ppzKQHH9","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.ld78TITwKNFPpanQ"}}},{"_id":"mLjRnUqQIp6CYJQH","name":"Electrical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/electrical_repair.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.NBkq8oCGM1FjmsyF"}}},{"_id":"R8g0Gp4AkZuILeoB","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.Og2OWQH93aSDWAMZ"}}},{"_id":"DKWmZRfC0zuCcODP","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":0,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wK8XxNj9QwXlGFEb"}}},{"_id":"kYSMTiL0H1tGNUEb","name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.gzNPM9gbx0EZffBV"}}},{"_id":"20PG6iyVubohJnVH","name":"Cthulhu Mythos","type":"skill","img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"noadjustments":true,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.WJky66ezt2ef5ksH"}}},{"_id":"odMxKer3Rc3uA48Z","name":"Credit Rating","type":"skill","img":"systems/CoC7/assets/icons/skills/credit_rating.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"noxpgain":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vYrJ5h9cIQBzvw8E"}}},{"_id":"BWFywTfWSGwgK9hs","name":"Climb","type":"skill","img":"systems/CoC7/assets/icons/skills/climb.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.oh5eFj00Wohnx1My"}}},{"_id":"wie2UBnNX1qeOqb7","name":"Any","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":5,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.HAuFBG4ZT2yO9yn7"}}},{"_id":"CZrHf3aUx24pTuQ1","name":"Archaeology","type":"skill","img":"systems/CoC7/assets/icons/skills/archaeology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.GHhkcJUqjcP4lToY"}}},{"_id":"7e40WoR9jIsZYXqN","name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wOs3gryeGRPkGoWD"}}},{"_id":"KloYBzryxIJqJCjC","name":"Anthropology","type":"skill","img":"systems/CoC7/assets/icons/skills/anthropology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.ovIp66Luwfwbq28F"}}},{"_id":"zDv5sOhdbzGoc0cF","name":"Accounting","type":"skill","img":"systems/CoC7/assets/icons/skills/accounting.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.UOuN0gESXPp2HXwH"}}},{"_id":"z8XBu0n5NcYhH9Nj","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.JgtxiN3KzooOWIQV"}}},{"_id":"HQTh5EPAeYzdcBpS","name":"Fists","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"bw5XofBHsubMPXrH"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"addb":true,"ahdb":false,"stun":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.NRmTURxUXvhNFuZi"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.WeWSVgjL1YEYNVm2"}},"_id":"JuI2aWDSEuQNKeUI"} +{"name":"Goon","type":"npc","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":null,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":"5*2d6+6"},"con":{"value":null,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":"5*3d6"},"siz":{"value":null,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":"5*3d6"},"dex":{"value":null,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":"5*3d6"},"app":{"value":null,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":"5*1d6"},"int":{"value":null,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":"5*1d6"},"pow":{"value":null,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":"0"},"edu":{"value":null,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":"0"}},"attribs":{"hp":{"value":null,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":null,"max":null,"short":"HP","label":"Magic points","auto":true},"lck":{"value":null,"short":"LCK","label":"Luck","max":99},"san":{"value":50,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":8,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":-2,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":-2,"value":-2,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"dead":{"type":"Boolean","value":false},"prone":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"infos":{"occupation":"Obey to the villain","age":"Average","sex":""},"flags":{"locked":true,"displayFormula":false}},"token":{"name":"Goon","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg"},"items":[{"_id":"nhNyqjmMf2xgLEAh","name":"Secret documents","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.5lfgKDdff95ONHW5"}}},{"_id":"pjiFo3geRss79cUu","name":"Orders","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.PFxgMt9PmW9JcrS6"}}},{"_id":"dRfkuKnn9Vl7BAnR","name":"Shotgun","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"specialization":"Firearms","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{"special":true,"fighting":false,"firearm":true,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"x3n4xMyqXSGATZ9L","name":"Shotgun","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"

Description of the weapon

\n

selecting 'Area of effect' will enable 3 different damage and range

\n

selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

\n

selecting 'Special' will activate the special input field

\n

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

\n

Edit the weapon and select the correct skill.

","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Shotgun","id":"dRfkuKnn9Vl7BAnR"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"15ft","units":"","damage":"1d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":false,"rngd":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.fnyCgkQluYSM4yTl"}}},{"_id":"bn7QZKctB109130p","name":"Punch","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"coPK7CiB6zbpnofh"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"slnt":true,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":100000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.Uldjvs5fvCMri6RN"}}},{"_id":"coPK7CiB6zbpnofh","name":"Brawl","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vS8bsPWFlwgOecoB"}}},{"_id":"cYRUJwddg0yvccHL","name":"Club","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"coPK7CiB6zbpnofh"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1d4"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"ahdb":true,"addb":false,"slnt":true,"stun":true,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":300000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.BZRfjXQ4V43t4fNw"}}},{"_id":"Cy8zEO2hzmxHYe1g","name":"Receive orders","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"95","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.cOzs5LkYR1icbzo9"}}},{"_id":"bQq5zs3LeTyZ8O57","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"@EDU","attributes":{},"properties":{"push":true,"special":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id":"AWcXwvVJG779q7fH","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"1/2*@DEX","attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wK8XxNj9QwXlGFEb"}}},{"_id":"U7Nsi0qkuJjemOaf","name":"Try hard","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"10","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.aEK9aFa8uoMJLiSg"}}},{"_id":"lm867qysqMBwLEK9","name":"Be a pain","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"50","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DGD3CQQWsYIqhLWL"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.0skVq6Pae0GlrSMU"}},"_id":"KgyqcEJZZztYfpEr"} +{"name":"Creature example","type":"creature","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":0,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":"1d6"},"con":{"value":10,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":"2d6"},"siz":{"value":50,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":"5*3d6"},"dex":{"value":10,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":"4d6"},"app":{"value":20,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":"5d6"},"int":{"value":20,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":"6d6"},"pow":{"value":0,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":""},"edu":{"value":0,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":"0"}},"attribs":{"hp":{"value":6,"max":6,"short":"HP","label":"Hit points","auto":true},"mp":{"value":0,"max":0,"short":"HP","label":"Magic points","auto":true},"lck":{"value":0,"short":"LCK","label":"Luck","max":99},"san":{"value":0,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":7,"max":7,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":-2,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":-2,"value":-2,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"dead":{"type":"Boolean","value":false},"prone":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"special":{"attribs":{"move":{"primary":{"enabled":false,"value":null,"type":null},"secondary":{"enabled":false,"value":null,"type":null}}},"sanLoss":{"checkPassed":"","checkFailled":""},"attacksPerRound":1},"infos":{"type":""},"flags":{"locked":true,"displayFormula":false},"biography":{"personalDescription":{"value":"

Clicking the lock will allow modification of the sheet.

\n

When sheet is unlock you can modify things directly from the sheet. You can also open the entities sheets and delete things.

\n

In that mode you can create skills/possessions by clicking the + icon. Holding shift will bypass the opening of the corresponding sheet.

\n

You can enter characteristics as numbers and as formulas. Click the right icon to toggle modes. Clicking the red dice will roll the formula when possible. So you can have your creature with defined values, or roll/reroll the value on demand.

"}}},"token":{"name":"Creature example","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg"},"items":[{"_id":"uThvps46yrs3LyNw","name":"Pile of junk","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.r8S7V9kUWpjtMxaX"}}},{"_id":"jc6aXhzjXLKREJIy","name":"Fighting","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"50","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":50,"attributes":{},"properties":{"special":true,"fighting":true,"firearm":false,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ddI3EOxhNRDrbiWW","name":"Innate attack","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"

Creature's natural attack

","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Fighting","id":"jc6aXhzjXLKREJIy"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1d3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"addb":true,"ahdb":false,"slnt":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.i9tOh6fwndVIGwHR"}}},{"_id":"qMUYPKo3mj4zOPjA","name":"Slice PCs in small cubes","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"75","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":75,"attributes":{},"properties":{"special":true,"fighting":true,"firearm":false,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"wxRnkgFqjB1A0dOY","name":"Deadly claws","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"

You can add special description or slugs there :

\n

Slug 1 : 2d17kh

","keeper":""},"wpnType":"","skill":{"main":{"name":"Slice PCs in small cubes","id":"qMUYPKo3mj4zOPjA"},"alternativ":{"name":"Fighting","id":"jc6aXhzjXLKREJIy"}},"range":{"normal":{"value":0,"units":"","damage":"10d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":""},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"brst":true,"spcl":true,"melee":true,"rngd":false,"shotgun":false,"auto":false,"dbrl":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.NWkpD68urH6gwHkU"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.ExVcSKXT23bi0A4u"}},"_id":"XE2vjLG03wGfnYLw"} +{"name":"Cupboard","type":"container","img":"icons/svg/chest.svg","data":{"description":{"value":"

The lock on the door was removed years ago leaving a hole. You have to poke something in the hole to pull the door open.

","keeper":""},"flags":{"locked":false}},"token":{"actorLink":true,"name":"Floor safe","displayName":0,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/chest.svg"},"items":[{"_id":"L7F6PDH2dK7ZNYxZ","name":"Sword","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":20,"attributes":{},"properties":{"special":true,"fighting":true,"firearm":false,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ZtIdjmVil351PsA2","name":"Rapier","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Sword","id":"L7F6PDH2dK7ZNYxZ"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D6+1"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"$15","mdrn":"$100"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.h57LwHlUKVT0oQvU"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.M8hvUblNcgImyozT"}},"_id":"r7bDSY4OYKxQYEas"} diff --git a/packs/items.db b/packs/items.db index de499494..6e756252 100644 --- a/packs/items.db +++ b/packs/items.db @@ -1,6 +1,10 @@ -{"name":"1920's Setup Example","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"setup","data":{"description":{"value":"

Default setup for 1920's character.

\n

 

"},"characteristics":{"points":{"enabled":false,"value":"460"},"rolls":{"enabled":true,"enableIndividualRolls":true,"str":"(3D6)*5","con":"(3D6)*5","siz":"(2D6+6)*5","dex":"(3D6)*5","app":"(3D6)*5","int":"(2D6+6)*5","pow":"(3D6)*5","edu":"(2D6+6)*5","luck":"(3D6)*5"},"values":{"str":null,"con":null,"siz":null,"dex":null,"app":null,"int":null,"pow":null,"edu":null,"luck":null}},"source":"Keeper's rule book","enableCharacterisitics":true,"items":[{"_id":"Z7C3nynZIXiFXmrF","name":"Accounting","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"WTi5Q8fFYGqFDDam","name":"Anthropology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"j4vj4HUviZd6TAKz","name":"Appraise","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"ObgfYtNCMv4MlgbO","name":"Archaeology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"iV3SdrNKsGB5BSli","name":"Art/Craft (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"otgWxSXPtfSKtzd9","name":"Charm","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"FwWQNfn382EwfDFt","name":"Climb","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"8HHFjJXoRN2hgBxf","name":"Credit Rating","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"0","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"yo3S2tR0SkfEisbe","name":"Cthulhu Mythos","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"0","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":false,"combat":false,"noxpgain":true,"noadjustments":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"kKafbgrncOGqYwjH","name":"Disguise","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"MDBvDDlP5IzOOnOC","name":"Dodge","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1/2*@DEX","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":false,"combat":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"tA5sEnhUyrzdCEu4","name":"Drive Auto","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"9Z7rRlJ4kLXaJC6k","name":"Electrical Repair","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"0KVMEYlXmj96Hg8r","name":"Fast Talk","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"keyAD0YXeAafdvmi","name":"Brawl","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"CQY7mhxduGFebAmi","name":"Handgun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"UD69qjXe0ZqPdnDZ","name":"Shotgun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"0rUZhmuvWnGiAq03","name":"First Aid","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"30","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"H4WNjYG7llDZtXwv","name":"History","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"rfO2kgQTYP2X2lL3","name":"Intimidate","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"OhbBGAkOrr1409Oq","name":"Jump","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"NFT5i3X7647Fct8Y","name":"Language (Other)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"ZtxEbrCNxPbTqACu","name":"Language (Own)","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"@EDU","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"ZZXhgUnol1QMCUJB","name":"Law","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"UPSL4EYXndGwNPhP","name":"Library Use","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"HbucA5Kk0d0uFRxy","name":"Listen","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"s7Yhk0flkG1B1lWY","name":"Locksmith","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"CW0IWXL3plauUGy1","name":"Mechanical Repair","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"ziCzgTCp2g2sQzfD","name":"Medicine","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"YotlGwVZUtNvZJg1","name":"Natural World","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"7Nhb8ENox4QjMb0t","name":"Navigate","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"iMNZslICSfOBrhnv","name":"Occult","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"f8ExwWlSUGhNmnVe","name":"Operate Heavy Machinery","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"SPY7wJwnkG4anTwM","name":"Persuade","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"UZoCHFgYoXCbdoY6","name":"Pilot (Any)","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Pilot","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"E9rcTG3csEG4Huem","name":"Psychology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"sJjQGgjj6gohyaMd","name":"Psychoanalysis","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"DkKL3tUlmx5Zp22E","name":"Ride","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"g9Q95Ei79qs3XZAz","name":"Science (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"RIQSmuWCMPYYjUtg","name":"Sleight of Hand","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"vdTRwJvIbXasRUxC","name":"Spot Hidden","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"E0EfSSzQYmwWrbeD","name":"Stealth","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"m4C6RDUbfHZwVucS","name":"Survival (Any)","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Survival","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"A0NyE5kmHe5FOnq9","name":"Swim","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"MeleogcP07f9rJ1O","name":"Throw","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"Xy7GNIbB3B0SqgtM","name":"Track","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"name":"Unarmed","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"weapon","data":{"description":{"value":"","chat":"","special":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"addb":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{"1920":0,"nvct":0,"drka":0,"ddts":0,"glit":0,"pulp":0,"mdrn":0}},"folder":"","sort":200001,"flags":{},"effects":[],"_id":"MBlFrQLq64WAHfYP","img":"systems/CoC7/assets/icons/skills.svg"}],"bioSections":["Personal Description","Ideology/Beliefs","Significant People","Meaningful Locations","Treasured Possessions","Traits"],"attributes":{},"properties":{},"eras":{"1920":{"selected":true},"nvct":{"selected":false},"drka":{"selected":false},"ddts":{"selected":false},"glit":{"selected":false},"pulp":{"selected":false},"mdrn":{"selected":false}},"flags":{},"coreCharacteristics":{"str":false,"con":false,"siz":false,"dex":false,"app":false,"int":false,"pow":false,"edu":false}},"flags":{"exportSource":{"world":"bb","system":"CoC7","coreVersion":"0.6.6","systemVersion":"0.3.8"},"core":{"sourceId":"Item.klaZapSP1VRJnqCj"}},"img":"icons/svg/item-bag.svg","effects":[],"_id":"7XeBHRFmmUVblQQm"} -{"_id":"I863WvfdHlKSKCQk","name":"Punch","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"weapon","data":{"description":{"value":"","chat":"","special":""},"wpnType":"","skill":{"main":{"name":"","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"","max":""},"bullets":"","malfunction":"","properties":{"addb":true,"rngd":false,"impl":false,"rare":false,"ahdb":false,"slnt":false,"xplv":false,"brst":false,"auto":false,"spcl":false,"mont":false,"dbrl":false,"blst":false,"stun":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{"1920":0,"nvct":0,"drka":0,"ddts":0,"glit":0,"pulp":0,"mdrn":0}},"flags":{},"img":"icons/svg/sword.svg","effects":[]} -{"name":"Occupation Example","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"occupation","data":{"description":{"value":null},"source":"","type":{"classic":true,"lovecraftian":false,"modern":false,"pulp":false},"related":null,"occupationSkillPoints":{"str":{"multiplier":null,"selected":false,"optional":false,"active":false},"con":{"multiplier":null,"selected":false,"optional":false,"active":false},"siz":{"multiplier":null,"selected":false,"optional":false,"active":false},"dex":{"multiplier":null,"selected":false,"optional":false,"active":false},"app":{"multiplier":2,"selected":true,"optional":false,"active":false},"int":{"multiplier":null,"selected":false,"optional":false,"active":false},"pow":{"multiplier":null,"selected":false,"optional":false,"active":false},"edu":{"multiplier":2,"selected":true,"optional":false,"active":false}},"creditRating":{"min":"10","max":"80"},"suggestedContacts":"","skills":[{"_id":"tA5sEnhUyrzdCEu4","name":"Drive Auto","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"HbucA5Kk0d0uFRxy","name":"Listen","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"E0EfSSzQYmwWrbeD","name":"Stealth","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"6hqUf8Kt7wcLL7Zk","name":"Any","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"folder":null,"sort":2200000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"6hqUf8Kt7wcLL7Zk","name":"Any","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"folder":null,"sort":2200000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"}],"groups":[{"options":"2","skills":[{"_id":"otgWxSXPtfSKtzd9","name":"Charm","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"0KVMEYlXmj96Hg8r","name":"Fast Talk","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"rfO2kgQTYP2X2lL3","name":"Intimidate","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"SPY7wJwnkG4anTwM","name":"Persuade","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"6hqUf8Kt7wcLL7Zk","name":"Any","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"folder":null,"sort":2200000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"6hqUf8Kt7wcLL7Zk","name":"Any","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"folder":null,"sort":2200000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"}]},{"options":"1","skills":[{"_id":"keyAD0YXeAafdvmi","name":"Brawl","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"CQY7mhxduGFebAmi","name":"Handgun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"}]}],"personal":1,"attributes":{},"properties":{},"eras":{},"flags":{}},"flags":{"core":{"sourceId":"Item.CUil67teWVm6X0Cd"}},"img":"icons/svg/item-bag.svg","effects":[],"_id":"LAms0Gr7OwvRmrnu"} -{"_id":"WZWlWgxqrf8kXTjX","name":"Experimental weapon","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"weapon","data":{"description":{"value":"

Description of the weapon

\n

selecting 'Area of effect' will enable 3 different damage and range

\n

selecting 'Full-auto' will allow 2 different skilss to be selected for the weapon

\n

selecting 'Special' will activate the special input field

\n

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

\n

Edit the weapon and select the correct skill.

","chat":"","special":"

You can add special description or slugs there :

\n

Slug 1 : 2d17kh

"},"wpnType":"","skill":{"main":{"name":"To be selected once the weapon is owned","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"15ft","units":"","damage":"3d6"},"long":{"value":"25ft","units":"","damage":"2d6"},"extreme":{"value":"35ft","units":"","damage":"1d6"}},"usesPerRound":{"normal":"","max":""},"bullets":"","malfunction":"85","properties":{"rngd":true,"impl":false,"rare":false,"ahdb":false,"addb":false,"slnt":false,"xplv":true,"brst":true,"auto":false,"spcl":true,"mont":false,"dbrl":false,"blst":false,"stun":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","nvct":0,"drka":0,"ddts":0,"glit":0,"pulp":0,"mdrn":"6$"}},"flags":{},"img":"icons/svg/sword.svg"} -{"_id":"iZIjoR0YWLPzvMxp","name":"Death ray (prototype)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"weapon","data":{"description":{"value":"","chat":"","special":""},"wpnType":"","skill":{"main":{"name":"","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"50ft","units":"","damage":"5d6"},"long":{"value":"","units":"","damage":""},"extreme":{"value":"","units":"","damage":""}},"usesPerRound":{"normal":"","max":""},"bullets":"","malfunction":"","properties":{"rngd":true,"impl":false,"rare":false,"ahdb":false,"addb":false,"slnt":true,"xplv":false,"brst":false,"auto":false,"spcl":false,"mont":false,"dbrl":false,"blst":false,"stun":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{"1920":0,"nvct":0,"drka":0,"ddts":0,"glit":0,"pulp":0,"mdrn":0}},"flags":{},"img":"icons/svg/sword.svg"} -{"name":"Archetype Example","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"archetype","data":{"description":{"value":null},"source":"","type":{"classic":false,"lovecraftian":false,"modern":false},"bonusPoints":100,"coreCharacteristics":{"str":false,"con":false,"siz":false,"dex":false,"app":true,"int":true,"pow":false,"edu":false},"coreCharacteristicsFormula":{"enabled":true,"value":"(1D6+13)*5"},"suggestedOccupations":null,"suggestedTraits":null,"talents":2,"skills":[{"_id":"j4vj4HUviZd6TAKz","name":"Appraise","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"otgWxSXPtfSKtzd9","name":"Charm","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"kKafbgrncOGqYwjH","name":"Disguise","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"tA5sEnhUyrzdCEu4","name":"Drive Auto","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"0KVMEYlXmj96Hg8r","name":"Fast Talk","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"keyAD0YXeAafdvmi","name":"Brawl","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"CQY7mhxduGFebAmi","name":"Handgun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"HbucA5Kk0d0uFRxy","name":"Listen","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"E9rcTG3csEG4Huem","name":"Psychology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"RIQSmuWCMPYYjUtg","name":"Sleight of Hand","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"E0EfSSzQYmwWrbeD","name":"Stealth","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"_id":"6hqUf8Kt7wcLL7Zk","name":"Any","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"folder":null,"sort":2200000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg"},{"name":"Acting","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"folder":null,"sort":2300000,"flags":{},"img":"systems/CoC7/assets/icons/skills.svg","effects":[],"_id":"dnvGW4Q62msCmid0"}],"attributes":{},"properties":{},"eras":{},"flags":{}},"flags":{"core":{"sourceId":"Item.5iwggJCIAtfGiWn6"}},"img":"icons/svg/item-bag.svg","effects":[],"_id":"oSyopDdPyz48yDo6"} +{"name":"Punch","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.Uldjvs5fvCMri6RN"}},"_id":"3elxAwnv7WCUNwng"} +{"name":"1920's Setup Example","type":"setup","img":"icons/svg/item-bag.svg","data":{"description":{"value":"

Default setup for 1920's character.

","keeper":""},"characteristics":{"points":{"enabled":false,"value":460},"rolls":{"enabled":true,"enableIndividualRolls":true,"str":"(3D6)*5","con":"(3D6)*5","siz":"(2D6+6)*5","dex":"(3D6)*5","app":"(3D6)*5","int":"(2D6+6)*5","pow":"(3D6)*5","edu":"(2D6+6)*5","luck":"(3D6)*5"},"values":{"str":null,"con":null,"siz":null,"dex":null,"app":null,"int":null,"pow":null,"edu":null,"luck":null}},"source":"Keeper's rule book","enableCharacterisitics":true,"items":[{"_id":"R8GJXPMc4LC3bn1D","name":"Unarmed","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"addb":true,"ahdb":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{"1920":"0","nvct":"0","drka":"0","ddts":"0","glit":"0","pulp":"0","mdrn":"0"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":100000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.R8GJXPMc4LC3bn1D"}}},{"_id":"UOuN0gESXPp2HXwH","name":"Accounting","type":"skill","img":"systems/CoC7/assets/icons/skills/accounting.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ovIp66Luwfwbq28F","name":"Anthropology","type":"skill","img":"systems/CoC7/assets/icons/skills/anthropology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"wOs3gryeGRPkGoWD","name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"GHhkcJUqjcP4lToY","name":"Archaeology","type":"skill","img":"systems/CoC7/assets/icons/skills/archaeology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"JgtxiN3KzooOWIQV","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"vYrJ5h9cIQBzvw8E","name":"Credit Rating","type":"skill","img":"systems/CoC7/assets/icons/skills/credit_rating.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noxpgain":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"WJky66ezt2ef5ksH","name":"Cthulhu Mythos","type":"skill","img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noadjustments":true,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"gzNPM9gbx0EZffBV","name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"wK8XxNj9QwXlGFEb","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"Og2OWQH93aSDWAMZ","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"NBkq8oCGM1FjmsyF","name":"Electrical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/electrical_repair.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ld78TITwKNFPpanQ","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"vS8bsPWFlwgOecoB","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"sWt5Q3ZXd6NlwhXU","name":"Fighting (Throw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_throw.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true,"push":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KmDGtn7ukUFVb265","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"m2pYjKk4Gk3FcEBL","name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"nZ8rdL4PLb7A7f5B","name":"First Aid","type":"skill","img":"systems/CoC7/assets/icons/skills/first_aid.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"30","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"URo2NSSJSNdvOqXU","name":"History","type":"skill","img":"systems/CoC7/assets/icons/skills/history.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"hDr4eUbS398oniTa","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"c5utlFbDM7J8TA8b","name":"Jump","type":"skill","img":"systems/CoC7/assets/icons/skills/jump.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ISklIkQXD3o7heee","name":"Language (Other)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"rhJ1Q9OB3uTUZmjD","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"64hnBZNC8FM7oTkg","name":"Law","type":"skill","img":"systems/CoC7/assets/icons/skills/law.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"BcWHh8EhmyKj7bNk","name":"Library Use","type":"skill","img":"systems/CoC7/assets/icons/skills/library_use.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MoAB0NRNlpEc2qWr","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MRbFH52Zh9TzhLBh","name":"Locksmith","type":"skill","img":"systems/CoC7/assets/icons/skills/locksmith.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"0qCTuRFUCACSEsWj","name":"Mechanical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"Xmg7oAy70DKpv4kq","name":"Medicine","type":"skill","img":"systems/CoC7/assets/icons/skills/medicine.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"jTcu6Ni2ek7Yz5q3","name":"Natural World","type":"skill","img":"systems/CoC7/assets/icons/skills/natural_world.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"1c3fdvpQtvZf5YXK","name":"Navigate","type":"skill","img":"systems/CoC7/assets/icons/skills/navigate.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"6pSfZVS68jSHxa5T","name":"Occult","type":"skill","img":"systems/CoC7/assets/icons/skills/occult.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"cuExWy1130KUwuWz","name":"Operate Heavy Machinery","type":"skill","img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"uMzSNURmZqjxr7mU","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"uQsVn8K6XRXQmtaI","name":"Pilot (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/pilot_any.svg","data":{"specialization":"Pilot","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"rXBU2GofiO2qOsGv","name":"Psychoanalysis","type":"skill","img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MFR4eR79niGaLfph","name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"o7TdzbuSP7ticONf","name":"Ride","type":"skill","img":"systems/CoC7/assets/icons/skills/ride.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KvZuYcg3AmVrwKi2","name":"Science (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_any.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KKFNX5M4LtEtiuxs","name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"nHaWNwtW3Lg0sqYJ","name":"Spot Hidden","type":"skill","img":"systems/CoC7/assets/icons/skills/spot_hidden.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"DcV524K0jNfjDEZC","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"X99v5MtRlfTNjL3B","name":"Survival (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/survival_any.svg","data":{"specialization":"Survival","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"1zSIeY0eat2AxQok","name":"Swim","type":"skill","img":"systems/CoC7/assets/icons/skills/swim.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"AcUIbZFhfoXqQP2m","name":"Track","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"oh5eFj00Wohnx1My","name":"Climb","type":"skill","img":"systems/CoC7/assets/icons/skills/climb.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}],"bioSections":["Personal Description","Ideology/Beliefs","Significant People","Meaningful Locations","Treasured Possessions","Traits"],"backstory":"","attributes":{},"properties":{},"eras":{"1920":{"selected":true},"nvct":{"selected":false},"drka":{"selected":false},"ddts":{"selected":false},"glit":{"selected":false},"pulp":{"selected":false},"mdrn":{"selected":false}},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.K8145914TxcC70wL"}},"_id":"CcH7CdXGtGTjMSCg"} +{"name":"Occupation Example","type":"occupation","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"source":"","type":{"classic":true,"lovecraftian":false,"modern":false,"pulp":false},"related":null,"occupationSkillPoints":{"str":{"multiplier":null,"selected":false,"optional":false,"active":false},"con":{"multiplier":null,"selected":false,"optional":false,"active":false},"siz":{"multiplier":null,"selected":false,"optional":false,"active":false},"dex":{"multiplier":null,"selected":false,"optional":false,"active":false},"app":{"multiplier":2,"selected":true,"optional":false,"active":false},"int":{"multiplier":null,"selected":false,"optional":false,"active":false},"pow":{"multiplier":null,"selected":false,"optional":false,"active":false},"edu":{"multiplier":2,"selected":true,"optional":false,"active":false}},"creditRating":{"min":"10","max":"80"},"suggestedContacts":"","skills":[{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"Og2OWQH93aSDWAMZ","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MoAB0NRNlpEc2qWr","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"DcV524K0jNfjDEZC","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}],"groups":[{"options":"2","skills":[{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"JgtxiN3KzooOWIQV","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ld78TITwKNFPpanQ","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"hDr4eUbS398oniTa","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"uMzSNURmZqjxr7mU","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}]},{"options":"1","skills":[{"_id":"vS8bsPWFlwgOecoB","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KmDGtn7ukUFVb265","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}]}],"personal":1,"attributes":{},"properties":{},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.VV21NKX0pHuShVr0"}},"_id":"NOsh6EdNSjpjahDF"} +{"name":"Archetype Example","type":"archetype","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"source":"","type":{"classic":false,"lovecraftian":false,"modern":false},"bonusPoints":100,"coreCharacteristics":{"str":false,"con":false,"siz":false,"dex":false,"app":true,"int":true,"pow":false,"edu":false},"coreCharacteristicsFormula":{"enabled":true,"value":"(1D6+13)*5"},"suggestedOccupations":"","suggestedTraits":"","talents":2,"skills":[{"_id":"wOs3gryeGRPkGoWD","name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"m6V53lyfz7zh95FE","name":"Art/Craft (Acting)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_acting.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"JgtxiN3KzooOWIQV","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"gzNPM9gbx0EZffBV","name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"Og2OWQH93aSDWAMZ","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ld78TITwKNFPpanQ","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"vS8bsPWFlwgOecoB","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KmDGtn7ukUFVb265","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MoAB0NRNlpEc2qWr","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MFR4eR79niGaLfph","name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KKFNX5M4LtEtiuxs","name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"DcV524K0jNfjDEZC","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}],"attributes":{},"properties":{},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.CrhRlgbg1O6F4vaY"}},"_id":"lu04TIRrg9P3vRqY"} +{"name":"Experimental weapon","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"

Description of the weapon

\n

selecting 'Area of effect' will enable 3 different damage and range

\n

selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

\n

selecting 'Special' will activate the special input field

\n

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

\n

Edit the weapon and select the correct skill.

","chat":"","special":"

You can add special description or slugs there :

\n

Slug 1 : 2d17kh

","keeper":""},"wpnType":"","skill":{"main":{"name":"To be selected once the weapon is owned","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"15ft","units":"","damage":"3d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":""},"bullets":"","ammo":0,"malfunction":"85","blastRadius":null,"properties":{"melee":false,"rngd":true,"spcl":true,"brst":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.NzTqCxAlJVfdUmxR"}},"_id":"uWQYNsMURpspTetM"} +{"name":"Death ray (prototype)","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"50ft","units":"","damage":"5d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":false,"rngd":true,"slnt":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.fkfXxQQKhfMfUWGE"}},"_id":"zyCszwqyTg21l9E2"} +{"name":"Phobia 1","type":"status","img":"icons/svg/aura.svg","data":{"active":false,"source":"","description":{"value":"","chat":"","notes":"","keeper":""},"duration":{"permanent":true,"hours":null,"minutes":null,"rounds":null},"type":{"mania":false,"phobia":true}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.LIabvJunZPiq0brc"}},"_id":"PFpgtSKUcBDLVLY6"} +{"name":"Phobia 2","type":"status","img":"icons/svg/aura.svg","data":{"active":false,"source":"","description":{"value":"","chat":"","notes":"","keeper":""},"duration":{"permanent":true,"hours":null,"minutes":null,"rounds":null},"type":{"mania":false,"phobia":true}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.b5DeLy1KETMeE8ZC"}},"_id":"2dqgtyGfwr8M60he"} +{"name":"Mania 1","type":"status","img":"icons/svg/aura.svg","data":{"active":false,"source":"","description":{"value":"","chat":"","notes":"","keeper":""},"duration":{"permanent":true,"hours":null,"minutes":null,"rounds":null},"type":{"mania":true,"phobia":false}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.956QyPlpQ1ED4VQw"}},"_id":"DVdvEDizPZPux1pK"} +{"name":"Mania 2","type":"status","img":"icons/svg/aura.svg","data":{"active":false,"source":"","description":{"value":"","chat":"","notes":"","keeper":""},"duration":{"permanent":true,"hours":null,"minutes":null,"rounds":null},"type":{"mania":true,"phobia":false}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.4gH7MiriVDWx31YF"}},"_id":"Vm9OzZnAVOpDdwfB"} diff --git a/packs/sanity-tables-examples.db b/packs/sanity-tables-examples.db index 552dbda4..7747e723 100644 --- a/packs/sanity-tables-examples.db +++ b/packs/sanity-tables-examples.db @@ -1,4 +1,4 @@ -{"name":"Table X: Sample Manias","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"flags":{"core":{"sourceId":"RollTable.6EIZXhKnmAyhEsBn"}},"img":"icons/svg/d20-grey.svg","description":"See Keeper rulebook P161 for details","results":[{"_id":"p5lnrVyhzlOlTW1X","flags":{},"type":0,"text":"Sample mania (Text) See Keeper rulebook P161 for details","img":"icons/svg/d20-black.svg","resultId":"","weight":1,"range":[1,1],"drawn":false},{"_id":"baysUyR0Z4JlNImd","flags":{},"type":1,"text":"Mania 1","img":"icons/svg/mystery-man.svg","collection":"Item","resultId":"CMTjeaHyUMY4Imf1","weight":1,"range":[2,2],"drawn":false},{"_id":"U7snRGZkre4uzX1t","flags":{},"type":1,"text":"Mania 2","img":"icons/svg/mystery-man.svg","collection":"Item","resultId":"9iyfHPXXsWrTFtG3","weight":1,"range":[3,3],"drawn":false}],"formula":"1d3","replacement":true,"displayRoll":true,"_id":"5riZ59lJC7b2Ch0D"} -{"name":"Table VIII: Bouts of Madness - Summary","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"flags":{"core":{"sourceId":"RollTable.l7cMZea9U61j7mAo"}},"img":"icons/svg/d20-grey.svg","description":"See - Keeper Rulebook V7 - P159 for details","results":[{"_id":"Esb0GbmbJW31Bt3y","flags":{},"type":0,"text":"See bout of madness table P159 [[1D10]] hours","img":"icons/svg/d20-black.svg","resultId":"","weight":8,"range":[1,8],"drawn":false},{"_id":"QtgBj3oqttScUu1O","flags":{},"type":1,"text":"Table IX: Sample Phobias","img":"icons/svg/d20-grey.svg","collection":"RollTable","resultId":"ue3FzoIrV2ImVFit","weight":1,"range":[9,9],"drawn":false},{"_id":"mRE43rMBB1bzqpwp","flags":{},"type":1,"text":"Table X: Sample Manias","img":"icons/svg/d20-grey.svg","collection":"RollTable","resultId":"6EIZXhKnmAyhEsBn","weight":1,"range":[10,10],"drawn":false}],"formula":"1d10","replacement":true,"displayRoll":true,"_id":"FfUXO8GfEEbejJqq"} -{"name":"Table VII: Bouts of Madness - Real Time","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"flags":{"core":{"sourceId":"RollTable.0mHHERDsF3gfjb2J"}},"img":"icons/svg/d20-grey.svg","description":"See - Keeper Rulebook V7 - P157 for details","results":[{"_id":"wkAoS0CZin60yxqq","flags":{},"type":0,"text":"See bout of madness table P157 [[1D10]] rounds","img":"icons/svg/d20-black.svg","resultId":"","weight":8,"range":[1,8],"drawn":false},{"_id":"f7lQW70JZoV65k7t","flags":{},"type":1,"text":"Table IX: Sample Phobias","img":"icons/svg/d20-grey.svg","collection":"RollTable","resultId":"ue3FzoIrV2ImVFit","weight":1,"range":[9,9],"drawn":false},{"_id":"NVwiNwt5AJTDsbOF","flags":{},"type":1,"text":"Table X: Sample Manias","img":"icons/svg/d20-grey.svg","collection":"RollTable","resultId":"6EIZXhKnmAyhEsBn","weight":1,"range":[10,10],"drawn":false}],"formula":"1d10","replacement":true,"displayRoll":true,"_id":"QP9JVWHvEchOHaXH"} -{"name":"Table IX: Sample Phobias","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"flags":{"core":{"sourceId":"RollTable.ue3FzoIrV2ImVFit"}},"img":"icons/svg/d20-grey.svg","description":"See Keeper rulebook P160 for details","results":[{"_id":"zPS16v4ejOf001Oa","flags":{},"type":0,"text":"Sample phobia (Text) See Keeper rulebook P160 for details","img":"icons/svg/d20-black.svg","resultId":"","weight":1,"range":[1,1],"drawn":false},{"_id":"0moeYAVLI9D4ieHc","flags":{},"type":1,"text":"Phobia 1","img":"icons/svg/mystery-man.svg","collection":"Item","resultId":"HRR0Dr6I4Xk9ngfy","weight":1,"range":[2,2],"drawn":false},{"_id":"QQGyA9Mj3KXXLE7L","flags":{},"type":1,"text":"Phobia 2","img":"icons/svg/mystery-man.svg","collection":"Item","resultId":"prcaM7hJKNIGEzG8","weight":1,"range":[3,3],"drawn":false}],"formula":"1d3","replacement":true,"displayRoll":true,"_id":"v08s0eKtKnkoHd6N"} +{"name":"Table IX: Sample Phobias","img":"icons/svg/d20-grey.svg","description":"See Keeper rulebook P160 for details","results":[{"_id":"zPS16v4ejOf001Oa","flags":{},"type":0,"text":"Sample phobia (Text) See Keeper rulebook P160 for details","img":"icons/svg/d20-black.svg","weight":1,"range":[1,1],"drawn":false,"rangeL":1,"rangeH":1},{"_id":"0moeYAVLI9D4ieHc","flags":{},"type":1,"text":"Phobia 1","img":"icons/svg/aura.svg","collection":"Item","resultId":"LIabvJunZPiq0brc","weight":1,"range":[2,2],"drawn":false,"rangeL":2,"rangeH":2},{"_id":"QQGyA9Mj3KXXLE7L","flags":{},"type":1,"text":"Phobia 2","img":"icons/svg/aura.svg","collection":"Item","resultId":"b5DeLy1KETMeE8ZC","weight":1,"range":[3,3],"drawn":false,"rangeL":3,"rangeH":3}],"formula":"1d3","replacement":true,"displayRoll":true,"folder":null,"sort":0,"permission":{"default":0,"6Y6opwuMdxc52cY3":3},"flags":{"core":{"sourceId":"RollTable.ue3FzoIrV2ImVFit"}},"_id":"6daRognwiyG5eoQd"} +{"name":"Table VII: Bouts of Madness - Real Time","img":"icons/svg/d20-grey.svg","description":"See - Keeper Rulebook V7 - P157 for details","results":[{"_id":"wkAoS0CZin60yxqq","flags":{},"type":0,"text":"See bout of madness table P157 [[1D10]] rounds","img":"icons/svg/d20-black.svg","weight":8,"range":[1,8],"drawn":false,"rangeL":1,"rangeH":8},{"_id":"f7lQW70JZoV65k7t","flags":{},"type":1,"text":"Table IX: Sample Phobias","img":"icons/svg/d20-grey.svg","collection":"RollTable","resultId":"LxRFNAbfFi9UPzNs","weight":1,"range":[9,9],"drawn":false,"rangeL":9,"rangeH":9},{"_id":"NVwiNwt5AJTDsbOF","flags":{},"type":1,"text":"Table X: Sample Manias","img":"icons/svg/d20-grey.svg","collection":"RollTable","resultId":"qlbDIJB7HHNpzbOW","weight":1,"range":[10,10],"drawn":false,"rangeL":10,"rangeH":10}],"formula":"1d10","replacement":true,"displayRoll":true,"folder":null,"sort":0,"permission":{"default":0,"6Y6opwuMdxc52cY3":3},"flags":{"core":{"sourceId":"RollTable.0mHHERDsF3gfjb2J"}},"_id":"NNX6jAG2DBkw9red"} +{"name":"Table VIII: Bouts of Madness - Summary","img":"icons/svg/d20-grey.svg","description":"See - Keeper Rulebook V7 - P159 for details","results":[{"_id":"Esb0GbmbJW31Bt3y","flags":{},"type":0,"text":"See bout of madness table P159 [[1D10]] hours","img":"icons/svg/d20-black.svg","weight":8,"range":[1,8],"drawn":false,"rangeL":1,"rangeH":8},{"_id":"QtgBj3oqttScUu1O","flags":{},"type":1,"text":"Table IX: Sample Phobias","img":"icons/svg/d20-grey.svg","collection":"RollTable","resultId":"LxRFNAbfFi9UPzNs","weight":1,"range":[9,9],"drawn":false,"rangeL":9,"rangeH":9},{"_id":"mRE43rMBB1bzqpwp","flags":{},"type":1,"text":"Table X: Sample Manias","img":"icons/svg/d20-grey.svg","collection":"RollTable","resultId":"qlbDIJB7HHNpzbOW","weight":1,"range":[10,10],"drawn":false,"rangeL":10,"rangeH":10}],"formula":"1d10","replacement":true,"displayRoll":true,"folder":null,"sort":0,"permission":{"default":0,"6Y6opwuMdxc52cY3":3},"flags":{"core":{"sourceId":"RollTable.l7cMZea9U61j7mAo"}},"_id":"ZyCIR3PbyYaIE8W2"} +{"name":"Table X: Sample Manias","img":"icons/svg/d20-grey.svg","description":"See Keeper rulebook P161 for details","results":[{"_id":"p5lnrVyhzlOlTW1X","flags":{},"type":0,"text":"Sample mania (Text) See Keeper rulebook P161 for details","img":"icons/svg/d20-black.svg","weight":1,"range":[1,1],"drawn":false,"rangeL":1,"rangeH":1},{"_id":"baysUyR0Z4JlNImd","flags":{},"type":1,"text":"Mania 1","img":"icons/svg/aura.svg","collection":"Item","resultId":"956QyPlpQ1ED4VQw","weight":1,"range":[2,2],"drawn":false,"rangeL":2,"rangeH":2},{"_id":"U7snRGZkre4uzX1t","flags":{},"type":1,"text":"Mania 2","img":"icons/svg/aura.svg","collection":"Item","resultId":"4gH7MiriVDWx31YF","weight":1,"range":[3,3],"drawn":false,"rangeL":3,"rangeH":3}],"formula":"1d3","replacement":true,"displayRoll":true,"folder":null,"sort":0,"permission":{"default":0,"6Y6opwuMdxc52cY3":3},"flags":{"core":{"sourceId":"RollTable.6EIZXhKnmAyhEsBn"}},"_id":"mWs2LZoSvSBqlqhW"} diff --git a/packs/skills.db b/packs/skills.db index 18ef702f..ce4ca9c3 100644 --- a/packs/skills.db +++ b/packs/skills.db @@ -1,84 +1,84 @@ -{"_id":"0CW96pjN3moX6MiA","name":"Hypnosis","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":true,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/hypnosis.svg"} -{"_id":"0KVMEYlXmj96Hg8r","name":"Fast Talk","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fast_talk.svg"} -{"_id":"0rUZhmuvWnGiAq03","name":"First Aid","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"30","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/first_aid.svg"} -{"_id":"2NJ3DogsxWVMqeUr","name":"Bow","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"combat":true,"special":true,"rarity":false,"push":false,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_bow.svg"} -{"name":"Track (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Track","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills/track.svg","_id":"4TTVJmCu9mP5kFrx"} -{"_id":"4qHYlBBt1EbF4DgR","name":"Flail","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"combat":true,"special":true,"rarity":false,"push":false,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_flail.svg"} -{"_id":"6FqhuAKXfO6lMptC","name":"Pharmacy","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_pharmacy.svg"} -{"_id":"6HwjKQGcNn75EPHi","name":"Geology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_geology.svg"} -{"_id":"6oM9fULWVvvHSO1U","name":"Electronics","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/electronics.svg"} -{"_id":"7Nhb8ENox4QjMb0t","name":"Navigate","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/navigate.svg"} -{"_id":"8HHFjJXoRN2hgBxf","name":"Credit Rating","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"0","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/credit_rating.svg"} -{"_id":"8p5j2JjSGPdWBCZk","name":"Computer Use","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":false,"mdrn":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/computer_use.svg"} -{"_id":"9Pum9Y2Atd5ug6zz","name":"Physics","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_physics.svg"} -{"_id":"9Z7rRlJ4kLXaJC6k","name":"Electrical Repair","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/electrical_repair.svg"} -{"_id":"A0NyE5kmHe5FOnq9","name":"Swim","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/swim.svg"} -{"_id":"AT5eymQCpQxdye9q","name":"Heavy Weapons","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_heavy_weapons.svg"} -{"_id":"BRELpaLp238XzXH5","name":"Diving","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/diving.svg"} -{"_id":"CQY7mhxduGFebAmi","name":"Handgun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg"} -{"_id":"CW0IWXL3plauUGy1","name":"Mechanical Repair","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg"} -{"_id":"DkKL3tUlmx5Zp22E","name":"Ride","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/ride.svg"} -{"_id":"E0EfSSzQYmwWrbeD","name":"Stealth","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills/stealth.svg"} -{"_id":"E9rcTG3csEG4Huem","name":"Psychology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/psychology.svg"} -{"_id":"FwWQNfn382EwfDFt","name":"Climb","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/climb.svg"} -{"_id":"H4WNjYG7llDZtXwv","name":"History","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/history.svg"} -{"_id":"HDm4U3h0GzJOWuWd","name":"Machine Gun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_machine_gun.svg"} -{"_id":"HN6sbF97tFoe30mU","name":"Biology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_biology.svg"} -{"_id":"HUMkjdW611GCpLt4","name":"Axe","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_axe.svg"} -{"_id":"HbucA5Kk0d0uFRxy","name":"Listen","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/listen.svg"} -{"_id":"I7CWN0BbRpoIvfq6","name":"Fine Art","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/art_craft_fine_art.svg"} -{"_id":"IAdLwI8enGyWT6p8","name":"Zoology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_zoology.svg"} -{"_id":"J64juR0msBUXvhTr","name":"Animal Handling","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"rarity":true,"special":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/animal_handling.svg"} -{"_id":"JFeTpQwuaTYBmLal","name":"Submachine Gun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_submachine_gun.svg"} -{"_id":"JZUHBDwlowUDf18G","name":"Sword","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_sword.svg"} -{"_id":"K758AJaZfwHl94c2","name":"Garrote","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"combat":true,"special":true,"rarity":false,"push":false,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_garrote.svg"} -{"_id":"KenfdXHN02NKca6S","name":"Astronomy","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_astronomy.svg"} -{"_id":"MDBvDDlP5IzOOnOC","name":"Dodge","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1/2*@DEX","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":false,"combat":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/dodge.svg"} -{"_id":"MeleogcP07f9rJ1O","name":"Throw","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_throw.svg"} -{"name":"Language (Other)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills/language.svg","_id":"NFT5i3X7647Fct8Y"} -{"_id":"ObgfYtNCMv4MlgbO","name":"Archaeology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/archaeology.svg"} -{"_id":"OhbBGAkOrr1409Oq","name":"Jump","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/jump.svg"} -{"_id":"PZOkZrOJJwK7uO2s","name":"Read Lips","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/read_lips.svg"} -{"_id":"Q8BDb3YnQ3i3xjd4","name":"Forensics","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_forensics.svg"} -{"_id":"RIQSmuWCMPYYjUtg","name":"Sleight of Hand","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg"} -{"_id":"Rcl3EJFkPbYouMbS","name":"Acting","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/art_craft_acting.svg"} -{"_id":"SPY7wJwnkG4anTwM","name":"Persuade","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/persuade.svg"} -{"_id":"UD69qjXe0ZqPdnDZ","name":"Rifle/Shotgun","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg"} -{"_id":"UPSL4EYXndGwNPhP","name":"Library Use","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/library_use.svg"} -{"_id":"UZoCHFgYoXCbdoY6","name":"Pilot (Any)","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Pilot","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/pilot_any.svg"} -{"_id":"WTi5Q8fFYGqFDDam","name":"Anthropology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/anthropology.svg"} -{"_id":"Xy7GNIbB3B0SqgtM","name":"Track","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/track.svg"} -{"_id":"YotlGwVZUtNvZJg1","name":"Natural World","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/natural_world.svg"} -{"_id":"Yu2CFYCkaNw3VBsH","name":"Photography","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/art_craft_photography.svg"} -{"_id":"Z7C3nynZIXiFXmrF","name":"Accounting","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/accounting.svg"} -{"_id":"ZDZMcoLOxhvcqvMT","name":"Meteorology","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_meteorology.svg"} -{"_id":"ZZXhgUnol1QMCUJB","name":"Law","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/law.svg"} -{"_id":"ZtxEbrCNxPbTqACu","name":"Language (Own)","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"@EDU","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/language.svg"} -{"_id":"f8ExwWlSUGhNmnVe","name":"Operate Heavy Machinery","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg"} -{"_id":"g9Q95Ei79qs3XZAz","name":"Science (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_any.svg"} -{"_id":"gX0oxNXQBcZq24LG","name":"Botany","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_botany.svg"} -{"_id":"gihGN2AcqDpGPOe2","name":"Chemistry","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_chemistry.svg"} -{"_id":"hR4F1soQKk56BsE6","name":"Whip","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_whip.svg"} -{"_id":"iMNZslICSfOBrhnv","name":"Occult","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/occult.svg"} -{"_id":"iV3SdrNKsGB5BSli","name":"Art/Craft (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills/art_craft_any.svg"} -{"_id":"iWEzROSFc6QA2Qd7","name":"Mathematics","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_mathematics.svg"} -{"_id":"iorK6UqzpjU4WR38","name":"Demolitions","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"0","value":-1,"attributes":{},"properties":{"rarity":true,"special":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/demolitions.svg"} -{"_id":"j4vj4HUviZd6TAKz","name":"Appraise","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/appraise.svg"} -{"_id":"jbaeBCTsMiw0ut8O","name":"Forgery","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/art_craft_forgery.svg"} -{"_id":"jtcQKVVfZ3TGCdAD","name":"Flamethrower","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"combat":true,"special":true,"rarity":false,"push":false,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_flamethrower.svg"} -{"_id":"kKafbgrncOGqYwjH","name":"Disguise","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"5","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/disguise.svg"} -{"_id":"keyAD0YXeAafdvmi","name":"Brawl","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg"} -{"_id":"m4C6RDUbfHZwVucS","name":"Survival (Any)","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Survival","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/survival_any.svg"} -{"_id":"otgWxSXPtfSKtzd9","name":"Charm","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/charm.svg"} -{"_id":"rfO2kgQTYP2X2lL3","name":"Intimidate","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"15","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/intimidate.svg"} -{"_id":"rzihAJYn5Mf9Bf6N","name":"Spear","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_spear.svg"} -{"_id":"s7Yhk0flkG1B1lWY","name":"Locksmith","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/locksmith.svg"} -{"_id":"sJjQGgjj6gohyaMd","name":"Psychoanalysis","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"push":true,"special":false,"rarity":false,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg"} -{"_id":"tA5sEnhUyrzdCEu4","name":"Drive Auto","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"20","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/drive_auto.svg"} -{"_id":"tRg3Zh07008k7xpb","name":"Artillery","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"rarity":true,"special":true,"push":false,"combat":true,"fighting":false,"firearm":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/firearms_artillery.svg"} -{"name":"Language (Any)","permission":{"default":0,"6Y6opwuMdxc52cY3":3},"type":"skill","data":{"specialization":"Language","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"flags":{},"img":"systems/CoC7/assets/icons/skills/language.svg","_id":"tZ75GTRGUNa7Ofj4"} -{"_id":"vdTRwJvIbXasRUxC","name":"Spot Hidden","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"25","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/spot_hidden.svg"} -{"_id":"yo3S2tR0SkfEisbe","name":"Cthulhu Mythos","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"0","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":false,"combat":false,"noxpgain":true,"noadjustments":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg"} -{"_id":"zM1rVfUxTAX7hRys","name":"Cryptography","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/science_cryptography.svg"} -{"_id":"ziCzgTCp2g2sQzfD","name":"Medicine","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"1","value":-1,"attributes":{},"properties":{"special":false,"rarity":false,"push":true,"combat":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/medicine.svg"} -{"_id":"zzaYcf3NQmgmOwut","name":"Chainsaw","permission":{"default":0,"kEjKgSLquYZFCui9":3},"type":"skill","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":""},"base":"10","value":-1,"attributes":{},"properties":{"special":true,"rarity":false,"push":false,"combat":true,"fighting":true,"firearm":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"markforxp":false},"flags":{},"img":"systems/CoC7/assets/icons/skills/fighting_chainsaw.svg"} +{"name":"Mechanical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"0qCTuRFUCACSEsWj"} +{"name":"Science (Zoology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_zoology.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"0rlp7EuZDzQGjIYf"} +{"name":"Navigate","type":"skill","img":"systems/CoC7/assets/icons/skills/navigate.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"1c3fdvpQtvZf5YXK"} +{"name":"Swim","type":"skill","img":"systems/CoC7/assets/icons/skills/swim.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"1zSIeY0eat2AxQok"} +{"name":"Firearms (Heavy Weapons)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_heavy_weapons.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"23vdyJDDfjyneH3I"} +{"name":"Firearms (Flamethrower)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_flamethrower.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"35dvJDsrY8JipXRU"} +{"name":"Diving","type":"skill","img":"systems/CoC7/assets/icons/skills/diving.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"4lN6yD6zwbjX6BFp"} +{"name":"Law","type":"skill","img":"systems/CoC7/assets/icons/skills/law.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"64hnBZNC8FM7oTkg"} +{"name":"Occult","type":"skill","img":"systems/CoC7/assets/icons/skills/occult.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"6pSfZVS68jSHxa5T"} +{"name":"Science (Chemistry)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_chemistry.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"8twBT7nbyh5dEp3J"} +{"name":"Track","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"AcUIbZFhfoXqQP2m"} +{"name":"Library Use","type":"skill","img":"systems/CoC7/assets/icons/skills/library_use.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"BcWHh8EhmyKj7bNk"} +{"name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"DcV524K0jNfjDEZC"} +{"name":"Science (Physics)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_physics.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Dh6sHWep0qKQmi3I"} +{"name":"Fighting (Chainsaw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_chainsaw.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Ed8OShyl7D834Ihk"} +{"name":"Archaeology","type":"skill","img":"systems/CoC7/assets/icons/skills/archaeology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"GHhkcJUqjcP4lToY"} +{"name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"HAuFBG4ZT2yO9yn7"} +{"name":"Science (Biology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_biology.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"IBSDR6U4dE1uejVp"} +{"name":"Language (Other)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"ISklIkQXD3o7heee"} +{"name":"Fighting (Spear)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_spear.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"IttOdCAGTeE6VU3F"} +{"name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"JgtxiN3KzooOWIQV"} +{"name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"KKFNX5M4LtEtiuxs"} +{"name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"KmDGtn7ukUFVb265"} +{"name":"Science (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_any.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"KvZuYcg3AmVrwKi2"} +{"name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"MFR4eR79niGaLfph"} +{"name":"Locksmith","type":"skill","img":"systems/CoC7/assets/icons/skills/locksmith.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"MRbFH52Zh9TzhLBh"} +{"name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"MoAB0NRNlpEc2qWr"} +{"name":"Electrical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/electrical_repair.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"NBkq8oCGM1FjmsyF"} +{"name":"Science (Forensics)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_forensics.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Nw5tSvi2Knxlqmg1"} +{"name":"Fighting (Flail)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_flail.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"OcnZzOYWaP4VsjXS"} +{"name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Og2OWQH93aSDWAMZ"} +{"name":"Fighting (Whip)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_whip.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Pb3QI7x9xJVeXi8a"} +{"name":"Firearms (Machine Gun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_machine_gun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"QcomAOgmOS5g3dsh"} +{"name":"Science (Geology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_geology.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"QwaL3UC3Gvjd3hmF"} +{"name":"Read Lips","type":"skill","img":"systems/CoC7/assets/icons/skills/read_lips.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"rarity":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"SL2OorS0Xx6ty02A"} +{"name":"Science (Botany)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_botany.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"ShPoibiLsd07AtZv"} +{"_id":"T8fSLCwSD8C0iK8t","name":"Fighting (Axe)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_axe.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"name":"Fighting (Garrote)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_garrote.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"TPOu48DT4QIrqE68"} +{"name":"Science (Mathematics)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_mathematics.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"TwYYqLHe1PXnOCDF"} +{"name":"Science (Cryptography)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_cryptography.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"UASTWOvgCYi8G1QQ"} +{"name":"Accounting","type":"skill","img":"systems/CoC7/assets/icons/skills/accounting.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"UOuN0gESXPp2HXwH"} +{"name":"History","type":"skill","img":"systems/CoC7/assets/icons/skills/history.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"URo2NSSJSNdvOqXU"} +{"name":"Science (Pharmacy)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_pharmacy.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"V9ulAwDyLVqqQ0su"} +{"name":"Computer Use","type":"skill","img":"systems/CoC7/assets/icons/skills/computer_use.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"VZSv9eodMQ4ZPcrO"} +{"name":"Firearms (Bow)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_bow.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"VwGWZ2LBOwtMaw08"} +{"name":"Cthulhu Mythos","type":"skill","img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noadjustments":true,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"WJky66ezt2ef5ksH"} +{"name":"Art/Craft (Photography)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_photography.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"WLYZNASZ2YP8zN3g"} +{"name":"Survival (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/survival_any.svg","data":{"specialization":"Survival","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"X99v5MtRlfTNjL3B"} +{"name":"Medicine","type":"skill","img":"systems/CoC7/assets/icons/skills/medicine.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Xmg7oAy70DKpv4kq"} +{"name":"Language (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Yu3Xk8kZBlz0G82y"} +{"name":"Demolitions","type":"skill","img":"systems/CoC7/assets/icons/skills/demolitions.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"rarity":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"bJt90h73GqdP7ti6"} +{"name":"Jump","type":"skill","img":"systems/CoC7/assets/icons/skills/jump.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"c5utlFbDM7J8TA8b"} +{"name":"Operate Heavy Machinery","type":"skill","img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"cuExWy1130KUwuWz"} +{"name":"Animal Handling","type":"skill","img":"systems/CoC7/assets/icons/skills/animal_handling.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"rarity":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"dQ4zUjSteT3sgwKx"} +{"name":"Firearms (Submachine Gun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_submachine_gun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"gRUXG91zIJXOLye1"} +{"name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"gzNPM9gbx0EZffBV"} +{"name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"hDr4eUbS398oniTa"} +{"name":"Fighting (Sword)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_sword.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"hRPbMl2N0t6aBlyc"} +{"name":"Science (Astronomy)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_astronomy.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"hhvqA2BOljk1FHVg"} +{"name":"Natural World","type":"skill","img":"systems/CoC7/assets/icons/skills/natural_world.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"jTcu6Ni2ek7Yz5q3"} +{"name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"ld78TITwKNFPpanQ"} +{"name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"m2pYjKk4Gk3FcEBL"} +{"name":"Art/Craft (Acting)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_acting.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"m6V53lyfz7zh95FE"} +{"name":"Art/Craft (Fine Art)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_fine_art.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"m8sBJxvuUdtQ2mDU"} +{"name":"Hypnosis","type":"skill","img":"systems/CoC7/assets/icons/skills/hypnosis.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"rarity":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"mEblnQjptKvKCeIg"} +{"name":"Spot Hidden","type":"skill","img":"systems/CoC7/assets/icons/skills/spot_hidden.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"nHaWNwtW3Lg0sqYJ"} +{"name":"First Aid","type":"skill","img":"systems/CoC7/assets/icons/skills/first_aid.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"30","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"nZ8rdL4PLb7A7f5B"} +{"name":"Ride","type":"skill","img":"systems/CoC7/assets/icons/skills/ride.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"o7TdzbuSP7ticONf"} +{"name":"Electronics","type":"skill","img":"systems/CoC7/assets/icons/skills/electronics.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"oEfvPMTx0cgyPlgV"} +{"name":"Climb","type":"skill","img":"systems/CoC7/assets/icons/skills/climb.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"oh5eFj00Wohnx1My"} +{"name":"Anthropology","type":"skill","img":"systems/CoC7/assets/icons/skills/anthropology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"ovIp66Luwfwbq28F"} +{"name":"Firearms (Artillery)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_artillery.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true,"rarity":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"qET2wCGGdy3z18Gc"} +{"name":"Psychoanalysis","type":"skill","img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"rXBU2GofiO2qOsGv"} +{"name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"rhJ1Q9OB3uTUZmjD"} +{"name":"Fighting (Throw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_throw.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true,"push":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"sWt5Q3ZXd6NlwhXU"} +{"name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"uMzSNURmZqjxr7mU"} +{"name":"Pilot (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/pilot_any.svg","data":{"specialization":"Pilot","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"uQsVn8K6XRXQmtaI"} +{"name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"vS8bsPWFlwgOecoB"} +{"name":"Credit Rating","type":"skill","img":"systems/CoC7/assets/icons/skills/credit_rating.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noxpgain":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"vYrJ5h9cIQBzvw8E"} +{"name":"Track (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","data":{"specialization":"Track","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"w0eY2fJe6CEHY9pq"} +{"name":"Science (Meteorology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_meteorology.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"w7hWVU14syjweIH2"} +{"name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"wK8XxNj9QwXlGFEb"} +{"name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"wOs3gryeGRPkGoWD"} +{"name":"Art/Craft (Forgery)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_forgery.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"zcvnv8qY4GrVwwTL"} From ceafeb8b94578dcb97c85c773081918d86ea4b72 Mon Sep 17 00:00:00 2001 From: castanho Date: Thu, 16 Sep 2021 16:07:15 -0300 Subject: [PATCH 073/726] Add option to show only icons on the summarized sheet skills list --- lang/en.json | 1 + module/actors/sheets/character.js | 1 + module/scripts/register-settings.js | 7 +++++++ styles/sheets/summary.less | 3 +++ templates/actors/character/summary.html | 10 ++++++++++ 5 files changed, 22 insertions(+) diff --git a/lang/en.json b/lang/en.json index 9663a186..7b2b18fe 100644 --- a/lang/en.json +++ b/lang/en.json @@ -733,6 +733,7 @@ "SETTINGS.DefaultDifficultyHint": "You can choose the default difficulty for checks. Unknown will roll checks without the player knowing the check difficulty.", "SETTINGS.CheckDifficultyRegular": "Default difficulty", "SETTINGS.CheckDifficultyUnknown": "Unknown difficulty", + "SETTINGS.showIconsOnly": "On summarized sheet, show only icons on skills list.", "SETTINGS.UseToken": "Use token image", "SETTINGS.UseTokenHint": "Use token image instead of portraits in chat-cards", "SETTINGS.DisplayActorOnCard": "Display actor on card", diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index ecd0746c..c6f31aed 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -41,6 +41,7 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { const data = await super.getData() if (!this.skillListMode) this.skillListMode = 'alphabetical' + data.showIconsOnly = game.settings.get('CoC7', 'showIconsOnly') if (this.actor.occupation) { data.data.infos.occupation = this.actor.occupation.name diff --git a/module/scripts/register-settings.js b/module/scripts/register-settings.js index 14ee0540..1ea9a13c 100644 --- a/module/scripts/register-settings.js +++ b/module/scripts/register-settings.js @@ -188,6 +188,13 @@ export function registerSettings () { default: false, type: Boolean }) + game.settings.register('CoC7', 'showIconsOnly', { + name: 'SETTINGS.showIconsOnly', + scope: 'world', + config: true, + default: false, + type: Boolean + }) /** Allow player to unlock the sheet outside of creation mode */ game.settings.register('CoC7', 'playerUnlockSheetMode', { name: 'SETTINGS.PlayerUnlockSheetMode', diff --git a/styles/sheets/summary.less b/styles/sheets/summary.less index 3eb3bde5..47c466c4 100644 --- a/styles/sheets/summary.less +++ b/styles/sheets/summary.less @@ -245,6 +245,9 @@ height: 100%; flex-direction: column; flex-wrap: wrap; + &.icons { + list-style: none; + } .itemV2 { max-height: 1.25rem; width: 125px; diff --git a/templates/actors/character/summary.html b/templates/actors/character/summary.html index e4c62b2e..0f1bf676 100644 --- a/templates/actors/character/summary.html +++ b/templates/actors/character/summary.html @@ -115,6 +115,15 @@

+ {{#if showIconsOnly}} +
    + {{#each skillsByValue as |skill|}} +
  1. +
    +
  2. + {{/each}} +
+ {{else}}
    {{#each topSkills as |skill|}}
  1. @@ -133,6 +142,7 @@
  2. {{/each}}
+ {{/if}}
    From 0cd5d385f2f63da5eee498041aef407e5ce852eb Mon Sep 17 00:00:00 2001 From: castanho Date: Thu, 16 Sep 2021 16:08:38 -0300 Subject: [PATCH 074/726] Add initial files for future implementation of a welcome message --- module/apps/welcome-message.js | 74 +++++++++++++++++++++++++++++ module/hooks/ready.js | 8 +++- module/scripts/register-settings.js | 9 ++++ templates/apps/welcome-message.html | 9 ++++ 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 module/apps/welcome-message.js create mode 100644 templates/apps/welcome-message.html diff --git a/module/apps/welcome-message.js b/module/apps/welcome-message.js new file mode 100644 index 00000000..4e4e5dc8 --- /dev/null +++ b/module/apps/welcome-message.js @@ -0,0 +1,74 @@ +/* global $, Dialog, game, renderTemplate */ + +export class CoC7WelcomeMessage extends Dialog { + activateListeners (html) { + super.activateListeners(html) + html + .find('#artwork-style').on('change', (event) => { + const style = $(event.currentTarget).val() + CoC7WelcomeMessage.changeArtworkStyle(style) + }) + } + + static async changeArtworkStyle (style) { + await game.settings.set('CoC7', 'overrideSheetArtwork', true) + const artworkOptions = CoC7WelcomeMessage.getStyles(style) + await game.settings.set('CoC7', 'artWorkSheetBackground', artworkOptions.mainSheetBackground) + await game.settings.set('CoC7', 'artWorkOtherSheetBackground', artworkOptions.additionalSheetBackground) + await game.settings.set('CoC7', 'artworkSheetImage', artworkOptions.mainSheetImage) + await game.settings.set('CoC7', 'artworkFrontColor', artworkOptions.mainColor) + await game.settings.set('CoC7', 'artworkBackgroundColor', artworkOptions.secondaryColor) + await game.settings.set('CoC7', 'artworkInteractiveColor', artworkOptions.interactiveColor) + await game.actors.getName('Harold Philips Lovecraft').sheet.render(true) + } + + static getStyles (style) { + switch (style) { + case '1920': + return { + mainColor: 'rgba(43,55,83,1)', + secondaryColor: 'rgba(103,11,11,1)', + interactiveColor: 'rgba(103,11,11,1)', + mainSheetBackground: 'url(\'./assets/images/background.webp\') 4 repeat', + mainSheetImage: 'url(\'./assets/images/tentacles.webp\')', + additionalSheetBackground: 'url(\'./assets/images/background.webp\')' + } + case 'nyarlathotep': + return { + mainColor: 'rgba(229, 210, 128, 1)', + secondaryColor: 'rgba(255, 255, 255, 1)', + interactiveColor: 'rgba(229, 210, 128, 1)', + mainSheetBackground: 'url(\'./assets/images/nyarlathotep.png\') 4 repeat', + mainSheetImage: '', + additionalSheetBackground: 'url(\'./assets/images/nyarlathotep.png\') 4 repeat' + } + } + } + + static disableWelcomeMessage () { + game.settings.set('CoC7', 'showWelcomeMessage', false) + } + + static async create () { + const template = 'systems/CoC7/templates/apps/welcome-message.html' + const html = await renderTemplate(template) + console.log(html) + return new Promise(resolve => { + const dialog = new CoC7WelcomeMessage({ + title: 'Welcome Message', + classes: ['coc7', 'app', 'dialog'], + content: html, + buttons: { + disable: { + label: 'Disable Welcome Message', + callback: CoC7WelcomeMessage.disableWelcomeMessage + }, + continue: { + label: 'Continue without Disabling' + } + } + }) + dialog.render(true) + }) + } +} diff --git a/module/hooks/ready.js b/module/hooks/ready.js index afb231bb..ffea9173 100644 --- a/module/hooks/ready.js +++ b/module/hooks/ready.js @@ -1,7 +1,13 @@ -/* global Hooks */ +/* global game, Hooks */ + +// import { CoC7WelcomeMessage } from '../apps/welcome-message.js' export function listen () { Hooks.once('ready', async () => { console.log('Call of Cthulhu 7th Edition | Ready') + if (game.settings.get('CoC7', 'showWelcomeMessage') && game.user.isGM) { + /** This will prompt the welcome message when it is finished */ + // await CoC7WelcomeMessage.create() + } }) } diff --git a/module/scripts/register-settings.js b/module/scripts/register-settings.js index 1ea9a13c..dfe86fcf 100644 --- a/module/scripts/register-settings.js +++ b/module/scripts/register-settings.js @@ -408,6 +408,15 @@ export function registerSettings () { type: Boolean, default: false }) + /** Feat: welcome message */ + game.settings.register('CoC7', 'showWelcomeMessage', { + name: 'SETTINGS.showWelcomeMessage', + hint: 'SETTINGS.showWelcomeMessage', + scope: 'world', + config: false, + default: true, + type: Boolean + }) game.settings.register('CoC7', 'charCreationEnabled', { name: 'Char creation allowed', scope: 'world', diff --git a/templates/apps/welcome-message.html b/templates/apps/welcome-message.html new file mode 100644 index 00000000..433ba9a4 --- /dev/null +++ b/templates/apps/welcome-message.html @@ -0,0 +1,9 @@ +
    +

    Welcome!

    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    + + +
    From 4c47058aa13f780d81c1344874dea4b236850083 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 16 Sep 2021 19:09:24 +0000 Subject: [PATCH 075/726] Updated translations list --- .github/TRANSLATIONS.md | 673 ++++++++++++++++++++-------------------- 1 file changed, 338 insertions(+), 335 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 740ce5be..c73b2e01 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,341 +2,340 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The **zh-TW** translation is currently up to date - -| Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **329** | **105** | **122** | **17** | **17** | **124** | **17** | **17** | **15** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **330** | **106** | **123** | **18** | **18** | **125** | **18** | **18** | **16** | **1** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.combatCard.surprised](#coc7combatcardsurprised) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ##### CoC7.ActorImporter @@ -1657,3 +1656,7 @@ The **zh-TW** translation is currently up to date ##### SETTINGS.displayPlayerNameOnSheet `"SETTINGS.displayPlayerNameOnSheet": "Display player's name on sheet",` + +##### SETTINGS.showIconsOnly + +`"SETTINGS.showIconsOnly": "On summarized sheet, show only icons on skills list.",` From ed95752eedff1f5d13b1cfb52812e334fad1aa86 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 16 Sep 2021 20:48:06 +0100 Subject: [PATCH 076/726] Fix experimental feature checkbox --- module/hooks/render-dialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/hooks/render-dialog.js b/module/hooks/render-dialog.js index 89d2783c..d7e7a9a1 100644 --- a/module/hooks/render-dialog.js +++ b/module/hooks/render-dialog.js @@ -11,7 +11,7 @@ export function listen () { if (game.i18n.has(`CoC7.Entities.${key}`)) { entityOption.textContent = game.i18n.localize(`CoC7.Entities.${key}`) } - if (!showExperimental && !['chase', 'vehicle'].includes(entityOption.value)) { + if (showExperimental || !['chase', 'vehicle'].includes(entityOption.value)) { entitySortedList.push(entityOption) } }) From 6a5c5ea49ae66a185d12fba7f8dc0aa41e75faf3 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 16 Sep 2021 23:02:09 +0100 Subject: [PATCH 077/726] Ignore experience in credit value when checking if you are in the occupation range --- module/actors/sheets/base.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 428f6b1d..87079ef3 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -1790,7 +1790,7 @@ export class CoC7ActorSheet extends ActorSheet { } } if (game.i18n.localize(COC7.creditRatingSkillName) === item.name) { - const creditValue = value || 0 + const creditValue = (item.value || 0) - (item.data.data.adjustments?.experience || 0) if ( creditValue > Number(this.actor.occupation.data.data.creditRating.max) || From 322a360e932ca8bf26ffe02abe4d2c1080134173 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Fri, 17 Sep 2021 11:24:40 +0100 Subject: [PATCH 078/726] Merge NPC and Creature sheets/features, Creatures have type, NPCs have Occupation, Organization, and Age Add attacks per round to NPC/Creature sheet Update NPC, Creature, CharacterV1, CharacterV2, and Container to use same inventory list system Only show empty inventory item types if the sheet is unlocked Update updater and compendium for new fields --- lang/en.json | 1 + module/actors/sheets/base.js | 12 +- module/actors/sheets/character.js | 6 + module/actors/sheets/container.js | 6 +- module/actors/sheets/creature-sheet.js | 136 +----- module/actors/sheets/npc-sheet.js | 90 +++- module/updater.js | 16 + packs/examples.db | 4 +- template.json | 7 + templates/actors/character-sheet.html | 88 +--- templates/actors/creature-sheet.html | 408 ------------------ templates/actors/npc-sheet.html | 201 ++++----- .../actors/parts/actor-inventory-items.html | 293 ++++++------- templates/actors/parts/actor-inventory.html | 2 + templates/items/item-sheet.html | 25 -- 15 files changed, 363 insertions(+), 932 deletions(-) delete mode 100644 templates/actors/creature-sheet.html delete mode 100644 templates/items/item-sheet.html diff --git a/lang/en.json b/lang/en.json index 7b2b18fe..4bf2619c 100644 --- a/lang/en.json +++ b/lang/en.json @@ -118,6 +118,7 @@ "CoC7.Icon": "Icon", "CoC7.Check": "Check", "CoC7.ItemWeapon": "Item (Weapon)", + "CoC7.AttacksPerRound": "Attacks per round", "CoC7.CopyToClipboard": "Copy to clipboard", "CoC7.WhisperToSelection": "Whisper to selected tokens", diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 87079ef3..673d6e8c 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -651,11 +651,13 @@ export class CoC7ActorSheet extends ActorSheet { data.data.attribs.san.value / 5 ) } - data.hasInventory = - Object.prototype.hasOwnProperty.call(data.itemsByType, 'item') || - Object.prototype.hasOwnProperty.call(data.itemsByType, 'book') || - Object.prototype.hasOwnProperty.call(data.itemsByType, 'spell') || - Object.prototype.hasOwnProperty.call(data.itemsByType, 'talent') + data.showInventoryItems = false + data.showInventoryBooks = false + data.showInventorySpells = false + data.showInventoryTalents = false + data.showInventoryStatuses = false + data.showInventoryWeapons = false + // const first = data.data.biography[0]; // first.isFirst = true; // data.data.biography[0] = first; diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index c6f31aed..ef0e7837 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -156,6 +156,12 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { data.data.infos.playername = user.name } } + + data.showInventoryItems = Object.prototype.hasOwnProperty.call(data.itemsByType, 'item') || !data.data.flags.locked + data.showInventoryBooks = Object.prototype.hasOwnProperty.call(data.itemsByType, 'book') || !data.data.flags.locked + data.showInventorySpells = Object.prototype.hasOwnProperty.call(data.itemsByType, 'spell') || !data.data.flags.locked + data.showInventoryTalents = Object.prototype.hasOwnProperty.call(data.itemsByType, 'talent') || !data.data.flags.locked + data.showInventoryStatuses = Object.prototype.hasOwnProperty.call(data.itemsByType, 'status') || !data.data.flags.locked return data } diff --git a/module/actors/sheets/container.js b/module/actors/sheets/container.js index e94f7846..7768ec88 100644 --- a/module/actors/sheets/container.js +++ b/module/actors/sheets/container.js @@ -61,7 +61,11 @@ export class CoC7ContainerSheet extends ActorSheet { game.settings.get('CoC7', 'playerUnlockSheetMode') === 'always' || game.user.isGM - sheetData.showWeaponsInsteadOfStatus = true + sheetData.showInventoryItems = Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'item') || !sheetData.data.flags.locked + sheetData.showInventoryBooks = Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'book') || !sheetData.data.flags.locked + sheetData.showInventorySpells = Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'spell') || !sheetData.data.flags.locked + sheetData.showInventoryTalents = Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'talent') || !sheetData.data.flags.locked + sheetData.showInventoryWeapons = Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'weapon') || !sheetData.data.flags.locked return sheetData } diff --git a/module/actors/sheets/creature-sheet.js b/module/actors/sheets/creature-sheet.js index 219c5f63..422e8291 100644 --- a/module/actors/sheets/creature-sheet.js +++ b/module/actors/sheets/creature-sheet.js @@ -1,151 +1,27 @@ -/* global game, mergeObject */ - -import { CoC7ActorSheet } from './base.js' -import { RollDialog } from '../../apps/roll-dialog.js' -import { CoC7Parser } from '../../apps/parser.js' -import { chatHelper } from '../../chat/helper.js' -import { SanCheckCard } from '../../chat/cards/san-check.js' +/* global mergeObject */ +import { CoC7NPCSheet } from './npc-sheet.js' /** * Extend the basic ActorSheet with some very simple modifications */ -export class CoC7CreatureSheet extends CoC7ActorSheet { +export class CoC7CreatureSheet extends CoC7NPCSheet { /** * Prepare data for rendering the Actor sheet * The prepared data object contains both the actor data as well as additional sheet options */ async getData () { const data = await super.getData() - // console.log('*********************CoC7CreatureSheet getdata***************'); - - // TODO : do we need that ? - data.allowFormula = true - data.displayFormula = this.actor.getActorFlag('displayFormula') - if (data.displayFormula === undefined) data.displayFormula = false - // await this.actor.creatureInit(); - data.hasSan = data.data.attribs.san.value !== null - data.hasMp = data.data.attribs.mp.value !== null - data.hasLuck = data.data.attribs.lck.value !== null - + data.isCreature = true return data } - activateListeners (html) { - super.activateListeners(html) - html.find('.roll-san').click(this._onSanCheck.bind(this)) - if (this.actor.isOwner) { - html - .find('[name="data.attribs.hp.value"]') - .change(event => this.actor.setHealthStatusManually(event)) - } - } - - async _onSanCheck (event) { - event.preventDefault() - if ( - !this.actor.data.data.special.sanLoss.checkPassed && - !this.actor.data.data.special.sanLoss.checkFailled - ) { - // ui.notifications.info('No sanity loss value'); - return - } - if ( - (event.metaKey || - event.ctrlKey || - event.keyCode === 91 || - event.keyCode === 224) && - game.user.isGM - ) { - let difficulty, modifier - if (!event.shiftKey) { - const usage = await RollDialog.create({ - disableFlatDiceModifier: true - }) - if (usage) { - modifier = Number(usage.get('bonusDice')) - difficulty = Number(usage.get('difficulty')) - } - } - const linkData = { - check: 'sanloss', - sanMin: this.actor.data.data.special.sanLoss.checkPassed, - sanMax: this.actor.data.data.special.sanLoss.checkFailled - } - if (game.settings.get('core', 'rollMode') === 'blindroll') { - linkData.blind = true - } - if (typeof modifier !== 'undefined') linkData.modifier = modifier - if (typeof difficulty !== 'undefined') linkData.difficulty = difficulty - const link = CoC7Parser.createCoC7Link(linkData) - if (link) { - chatHelper.createMessage( - null, - game.i18n.format('CoC7.MessageCheckRequestedWait', { - check: link - }) - ) - } - } else { - SanCheckCard.checkTargets(this.actor.tokenKey, event.shiftKey) - // CoC7SanCheck.checkTargets( this.actor.data.data.special.sanLoss.checkPassed, this.actor.data.data.special.sanLoss.checkFailled, event.shiftKey, this.tokenKey); - } - } - - onCloseSheet () { - this.actor.unsetActorFlag('displayFormula') - super.onCloseSheet() - } - - /* -------------------------------------------- */ - /** * Extend and override the default options used by the Actor Sheet * @returns {Object} */ - static get defaultOptions () { - const options = mergeObject(super.defaultOptions, { - template: 'systems/CoC7/templates/actors/creature-sheet.html', - width: 580, - classes: ['coc7', 'sheet', 'actor', 'npc', 'creature'], - dragDrop: [{ dragSelector: '.item', dropSelector: null }] + return mergeObject(super.defaultOptions, { + classes: ['coc7', 'sheet', 'actor', 'npc', 'creature'] }) - return options - } - - /** - * Implement the _updateObject method as required by the parent class spec - * This defines how to update the subject of the form when the form is submitted - * @private - */ - - async _updateObject (event, formData) { - if (event.currentTarget) { - if (event.currentTarget.classList) { - if (event.currentTarget.classList.contains('characteristic-score')) { - this.actor.setCharacteristic( - event.currentTarget.name, - event.currentTarget.value - ) - return - } - } - } - return super._updateObject(event, formData) - } - - static forceAuto (app, html) { - const cell = html.find('.description.pannel.expanded') - if (cell.length) { - cell.height( - Math.max(130, (html.height() - cell.position().top - 8) / cell.length) + - 'px' - ) - } - } - - setPosition (a) { - super.setPosition(a) - CoC7CreatureSheet.forceAuto(a, this._element) } } diff --git a/module/actors/sheets/npc-sheet.js b/module/actors/sheets/npc-sheet.js index 86ff10dd..2c8c7b65 100644 --- a/module/actors/sheets/npc-sheet.js +++ b/module/actors/sheets/npc-sheet.js @@ -1,6 +1,10 @@ -/* global mergeObject */ +/* global game, mergeObject */ import { CoC7ActorSheet } from './base.js' +import { RollDialog } from '../../apps/roll-dialog.js' +import { CoC7Parser } from '../../apps/parser.js' +import { chatHelper } from '../../chat/helper.js' +import { SanCheckCard } from '../../chat/cards/san-check.js' /** * Extend the basic ActorSheet with some very simple modifications @@ -22,11 +26,22 @@ export class CoC7NPCSheet extends CoC7ActorSheet { data.hasMp = data.data.attribs.mp.value !== null data.hasLuck = data.data.attribs.lck.value !== null + data.isCreature = false + + data.showInventoryItems = Object.prototype.hasOwnProperty.call(data.itemsByType, 'item') || !data.data.flags.locked + data.showInventoryBooks = Object.prototype.hasOwnProperty.call(data.itemsByType, 'book') || !data.data.flags.locked + data.showInventorySpells = Object.prototype.hasOwnProperty.call(data.itemsByType, 'spell') || !data.data.flags.locked + data.showInventoryTalents = Object.prototype.hasOwnProperty.call(data.itemsByType, 'talent') || !data.data.flags.locked + data.showInventoryStatuses = Object.prototype.hasOwnProperty.call(data.itemsByType, 'status') || !data.data.flags.locked + data.showInventoryWeapons = false + data.hasInventory = data.showInventoryItems || data.showInventoryBooks || data.showInventorySpells || data.showInventoryTalents || data.showInventoryStatuses || data.showInventoryWeapons + return data } activateListeners (html) { super.activateListeners(html) + html.find('.roll-san').click(this._onSanCheck.bind(this)) if (this.actor.isOwner) { html .find('[name="data.attribs.hp.value"]') @@ -34,6 +49,56 @@ export class CoC7NPCSheet extends CoC7ActorSheet { } } + async _onSanCheck (event) { + event.preventDefault() + if ( + !this.actor.data.data.special.sanLoss.checkPassed && + !this.actor.data.data.special.sanLoss.checkFailled + ) { + // ui.notifications.info('No sanity loss value'); + return + } + if ( + (event.metaKey || + event.ctrlKey || + event.keyCode === 91 || + event.keyCode === 224) && + game.user.isGM + ) { + let difficulty, modifier + if (!event.shiftKey) { + const usage = await RollDialog.create({ + disableFlatDiceModifier: true + }) + if (usage) { + modifier = Number(usage.get('bonusDice')) + difficulty = Number(usage.get('difficulty')) + } + } + const linkData = { + check: 'sanloss', + sanMin: this.actor.data.data.special.sanLoss.checkPassed, + sanMax: this.actor.data.data.special.sanLoss.checkFailled + } + if (game.settings.get('core', 'rollMode') === 'blindroll') { + linkData.blind = true + } + if (typeof modifier !== 'undefined') linkData.modifier = modifier + if (typeof difficulty !== 'undefined') linkData.difficulty = difficulty + const link = CoC7Parser.createCoC7Link(linkData) + if (link) { + chatHelper.createMessage( + null, + game.i18n.format('CoC7.MessageCheckRequestedWait', { + check: link + }) + ) + } + } else { + SanCheckCard.checkTargets(this.actor.tokenKey, event.shiftKey) + } + } + onCloseSheet () { this.actor.unsetActorFlag('displayFormula') super.onCloseSheet() @@ -42,7 +107,7 @@ export class CoC7NPCSheet extends CoC7ActorSheet { /* -------------------------------------------- */ /** - * Extend and override the default options used by the 5e Actor Sheet + * Extend and override the default options used by the Actor Sheet * @returns {Object} */ @@ -56,6 +121,27 @@ export class CoC7NPCSheet extends CoC7ActorSheet { }) } + /** + * Implement the _updateObject method as required by the parent class spec + * This defines how to update the subject of the form when the form is submitted + * @private + */ + + async _updateObject (event, formData) { + if (event.currentTarget) { + if (event.currentTarget.classList) { + if (event.currentTarget.classList.contains('characteristic-score')) { + this.actor.setCharacteristic( + event.currentTarget.name, + event.currentTarget.value + ) + return + } + } + } + return super._updateObject(event, formData) + } + static forceAuto (app, html) { const cell = html.find('.description.pannel.expanded') if (cell.length) { diff --git a/module/updater.js b/module/updater.js index cb706c75..e2fddbe6 100644 --- a/module/updater.js +++ b/module/updater.js @@ -114,6 +114,7 @@ export class Updater { Updater._migrateActorCharacterSanity(actor, updateData) Updater._migrateActorArtwork(actor, updateData) Updater._migrateActorKeeperNotes(actor, updateData) + Updater._migrateActorNpcCreature(actor, updateData) // Migrate World Actor Items if (actor.items) { @@ -398,6 +399,21 @@ export class Updater { return updateData } + static _migrateActorNpcCreature (actor, updateData) { + if (['npc'].includes(actor.type)) { + if (typeof actor.data.special === 'undefined') { + updateData['data.special'] = { + checkPassed: null, + checkFailled: null + } + } + if (typeof actor.data.attacksPerRound === 'undefined') { + updateData['data.attacksPerRound'] = 1 + } + } + return updateData + } + static _migrateActorCharacterSanity (actor, updateData) { if (actor.type === 'character') { const oneFifthSanity = Math.ceil(actor.data.attribs.san.value / 5) diff --git a/packs/examples.db b/packs/examples.db index f4e86299..7bc72ad0 100644 --- a/packs/examples.db +++ b/packs/examples.db @@ -1,5 +1,5 @@ -{"name":"Villain example","type":"npc","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":50,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":null},"con":{"value":50,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":null},"siz":{"value":50,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":null},"dex":{"value":50,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":null},"app":{"value":50,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":null},"int":{"value":50,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":null},"pow":{"value":50,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":null},"edu":{"value":50,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":null}},"attribs":{"hp":{"value":10,"max":10,"short":"HP","label":"Hit points","auto":true},"mp":{"value":10,"max":10,"short":"HP","label":"Magic points","auto":true},"lck":{"value":50,"short":"LCK","label":"Luck","max":99},"san":{"value":50,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":8,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":0,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":0,"value":0,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"dead":{"type":"Boolean","value":false},"prone":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"infos":{"occupation":"Be a villain","age":"Very old","sex":""},"flags":{"locked":true,"displayFormula":false}},"token":{"name":"Villain example","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg"},"items":[{"_id":"JKPFlce4fXskHrco","name":"Very mean sidekick","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.MpvookJWHQs0NX6M"}}},{"_id":"Uyw5Vo86WmxaCbLt","name":"Plan to enslave humanity","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.H7yLjkXpmrlhPFRt"}}},{"_id":"75xFKGouCIhczLRe","name":"Punch","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"mjNPsr30tOVP1OUa"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":100000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.Uldjvs5fvCMri6RN"}}},{"_id":"mjNPsr30tOVP1OUa","name":"Brawl","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vS8bsPWFlwgOecoB"}}},{"_id":"Wc35ZVZlbGvnt4Dk","name":"Rifle/Shotgun","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"specialization":"Firearms","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.m2pYjKk4Gk3FcEBL"}}},{"_id":"GEX2If3omq2h3kf0","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wK8XxNj9QwXlGFEb"}}},{"_id":"CpenApM1POTvS9uc","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":50,"attributes":{},"properties":{"push":true,"special":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id":"7VR4auTMAPfaEqyA","name":"My test weapon","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"

    Description of the weapon

    \n

    selecting 'Area of effect' will enable 3 different damage and range

    \n

    selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

    \n

    selecting 'Special' will activate the special input field

    \n

    In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

    \n

    Edit the weapon and select the correct skill.

    ","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Rifle/Shotgun","id":"Wc35ZVZlbGvnt4Dk"},"alternativ":{"name":"Rifle/Shotgun","id":"Wc35ZVZlbGvnt4Dk"}},"range":{"normal":{"value":"15ft","units":"","damage":"1d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":""},"bullets":"","ammo":0,"malfunction":"85","blastRadius":null,"properties":{"melee":false,"rngd":true,"auto":true,"brst":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"$5","mdrn":"$6"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.ar306rfjUIZFenWF"}}},{"_id":"gCpN0Jqn85LVYRcD","name":"Torment the PC","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"75","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.l4vz66H4IkqiXKzB"}}},{"_id":"0AHo1cSc7ueMEg1C","name":"Takeover the world","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"80","attributes":{},"properties":{},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DuQXiLwoHb7JnNGv"}}},{"_id":"gtLHe6r4xczLReMd","name":"Be a pain","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"0","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DGD3CQQWsYIqhLWL"}}},{"_id":"tzxgO3tPQTvSHXKv","name":"Bark orders","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"45","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.M4Q1ps8ecPWKfnI0"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.KIFjLTP875sS5weT"}},"_id":"4kSvDc4n13oFx8RG"} +{"name":"Villain example","type":"npc","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":50,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":null},"con":{"value":50,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":null},"siz":{"value":50,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":null},"dex":{"value":50,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":null},"app":{"value":50,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":null},"int":{"value":50,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":null},"pow":{"value":50,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":null},"edu":{"value":50,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":null}},"attribs":{"hp":{"value":10,"max":10,"short":"HP","label":"Hit points","auto":true},"mp":{"value":10,"max":10,"short":"HP","label":"Magic points","auto":true},"lck":{"value":50,"short":"LCK","label":"Luck","max":99},"san":{"value":50,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":8,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":0,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":0,"value":0,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"dead":{"type":"Boolean","value":false},"prone":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"special":{"sanLoss":{"checkPassed":"","checkFailled":""},"attacksPerRound":1},"infos":{"occupation":"Be a villain","age":"Very old","sex":""},"flags":{"locked":true,"displayFormula":false}},"token":{"name":"Villain example","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg"},"items":[{"_id":"JKPFlce4fXskHrco","name":"Very mean sidekick","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.MpvookJWHQs0NX6M"}}},{"_id":"Uyw5Vo86WmxaCbLt","name":"Plan to enslave humanity","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.H7yLjkXpmrlhPFRt"}}},{"_id":"75xFKGouCIhczLRe","name":"Punch","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"mjNPsr30tOVP1OUa"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":100000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.Uldjvs5fvCMri6RN"}}},{"_id":"mjNPsr30tOVP1OUa","name":"Brawl","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vS8bsPWFlwgOecoB"}}},{"_id":"Wc35ZVZlbGvnt4Dk","name":"Rifle/Shotgun","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"specialization":"Firearms","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.m2pYjKk4Gk3FcEBL"}}},{"_id":"GEX2If3omq2h3kf0","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wK8XxNj9QwXlGFEb"}}},{"_id":"CpenApM1POTvS9uc","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":50,"attributes":{},"properties":{"push":true,"special":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id":"7VR4auTMAPfaEqyA","name":"My test weapon","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"

    Description of the weapon

    \n

    selecting 'Area of effect' will enable 3 different damage and range

    \n

    selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

    \n

    selecting 'Special' will activate the special input field

    \n

    In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

    \n

    Edit the weapon and select the correct skill.

    ","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Rifle/Shotgun","id":"Wc35ZVZlbGvnt4Dk"},"alternativ":{"name":"Rifle/Shotgun","id":"Wc35ZVZlbGvnt4Dk"}},"range":{"normal":{"value":"15ft","units":"","damage":"1d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":""},"bullets":"","ammo":0,"malfunction":"85","blastRadius":null,"properties":{"melee":false,"rngd":true,"auto":true,"brst":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"$5","mdrn":"$6"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.ar306rfjUIZFenWF"}}},{"_id":"gCpN0Jqn85LVYRcD","name":"Torment the PC","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"75","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.l4vz66H4IkqiXKzB"}}},{"_id":"0AHo1cSc7ueMEg1C","name":"Takeover the world","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"80","attributes":{},"properties":{},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DuQXiLwoHb7JnNGv"}}},{"_id":"gtLHe6r4xczLReMd","name":"Be a pain","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"0","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DGD3CQQWsYIqhLWL"}}},{"_id":"tzxgO3tPQTvSHXKv","name":"Bark orders","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"45","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.M4Q1ps8ecPWKfnI0"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.KIFjLTP875sS5weT"}},"_id":"4kSvDc4n13oFx8RG"} {"name":"1920 Character","type":"character","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":null,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":null},"con":{"value":null,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":null},"siz":{"value":null,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":null},"dex":{"value":null,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":null},"app":{"value":null,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":null},"int":{"value":null,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":null},"pow":{"value":null,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":null},"edu":{"value":null,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":null}},"attribs":{"hp":{"value":null,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":null,"max":null,"short":"HP","label":"Magic points","auto":true},"lck":{"value":null,"short":"LCK","label":"Luck","max":99},"san":{"value":null,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":8,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":-2,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":-2,"value":-2,"short":"BLD","label":"Build","auto":true},"armor":{"value":"","localized":false,"locations":[],"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"dead":{"type":"Boolean","value":false},"prone":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"infos":{"occupation":"","age":"","sex":"","residence":"","birthplace":"","archetype":"","organization":"","playername":""},"flags":{"locked":true,"manualCredit":false},"credit":{"monetarySymbol":"","multiplier":null,"spent":"","assetsDetails":""},"development":{"personal":null,"occupation":null,"archetype":null},"biography":[{"title":"Personal Description","value":null},{"title":"Ideology/Beliefs","value":null},{"title":"Significant People","value":null},{"title":"Meaningful Locations","value":null},{"title":"Treasured Possessions","value":null},{"title":"Traits","value":null}],"encounteredCreatures":[],"backstory":"","indefiniteInsanityLevel":{"value":0,"max":0},"description":{"keeper":""},"notes":""},"token":{"vision":true,"dimSight":30,"brightSight":0,"actorLink":true,"disposition":1,"name":"1920 Character","displayName":0,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg"},"items":[{"_id":"Xm0JdbwxJzHLLtYZ","name":"Any","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","data":{"specialization":"Track","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":10,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.w0eY2fJe6CEHY9pq"}}},{"_id":"JMvqU49qbRiTKJGb","name":"Swim","type":"skill","img":"systems/CoC7/assets/icons/skills/swim.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.1zSIeY0eat2AxQok"}}},{"_id":"RGnZ6pAqojV0yLwM","name":"Any","type":"skill","img":"systems/CoC7/assets/icons/skills/survival_any.svg","data":{"specialization":"Survival","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":10,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.X99v5MtRlfTNjL3B"}}},{"_id":"ahBy1reywUrr7lgk","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.DcV524K0jNfjDEZC"}}},{"_id":"WYY5kolG5SyG2aH1","name":"Spot Hidden","type":"skill","img":"systems/CoC7/assets/icons/skills/spot_hidden.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.nHaWNwtW3Lg0sqYJ"}}},{"_id":"GJGoB7xXaIyP3ciE","name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.KKFNX5M4LtEtiuxs"}}},{"_id":"dY60dvWH18v1sSTW","name":"Any","type":"skill","img":"systems/CoC7/assets/icons/skills/science_any.svg","data":{"specialization":"Science","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.KvZuYcg3AmVrwKi2"}}},{"_id":"rCfoj0uGHg492k6D","name":"Ride","type":"skill","img":"systems/CoC7/assets/icons/skills/ride.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.o7TdzbuSP7ticONf"}}},{"_id":"PrdpOJWdNCRTZ0EE","name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.MFR4eR79niGaLfph"}}},{"_id":"1Pan4WIJDkZbqESM","name":"Psychoanalysis","type":"skill","img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rXBU2GofiO2qOsGv"}}},{"_id":"i9errUuZqlwAVi7v","name":"Any","type":"skill","img":"systems/CoC7/assets/icons/skills/pilot_any.svg","data":{"specialization":"Pilot","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.uQsVn8K6XRXQmtaI"}}},{"_id":"bMbjk7ytnd1Ow4j5","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.uMzSNURmZqjxr7mU"}}},{"_id":"pMYQtwYDRSmb9wWA","name":"Operate Heavy Machinery","type":"skill","img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.cuExWy1130KUwuWz"}}},{"_id":"Exqibxs7ijhDp0Oz","name":"Occult","type":"skill","img":"systems/CoC7/assets/icons/skills/occult.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.6pSfZVS68jSHxa5T"}}},{"_id":"CgTtqUAM5uMMTUV6","name":"Navigate","type":"skill","img":"systems/CoC7/assets/icons/skills/navigate.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.1c3fdvpQtvZf5YXK"}}},{"_id":"CF86aFA8aBiuIBnC","name":"Natural World","type":"skill","img":"systems/CoC7/assets/icons/skills/natural_world.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.jTcu6Ni2ek7Yz5q3"}}},{"_id":"lVyVqAsQNvAy4quQ","name":"Medicine","type":"skill","img":"systems/CoC7/assets/icons/skills/medicine.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.Xmg7oAy70DKpv4kq"}}},{"_id":"PTaJmdgk1UZ5TKSF","name":"Mechanical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.0qCTuRFUCACSEsWj"}}},{"_id":"dx5b6LHcyLTHt42D","name":"Locksmith","type":"skill","img":"systems/CoC7/assets/icons/skills/locksmith.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.MRbFH52Zh9TzhLBh"}}},{"_id":"exZnZAWT4P7MO36B","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.MoAB0NRNlpEc2qWr"}}},{"_id":"UJu9tY8PlscU8ZkB","name":"Library Use","type":"skill","img":"systems/CoC7/assets/icons/skills/library_use.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.BcWHh8EhmyKj7bNk"}}},{"_id":"lp6SOOP4SMs0lU07","name":"Law","type":"skill","img":"systems/CoC7/assets/icons/skills/law.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.64hnBZNC8FM7oTkg"}}},{"_id":"QLUOsnhvE5AFJxaB","name":"Any","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.Yu3Xk8kZBlz0G82y"}}},{"_id":"a26s0DWcoCU4qtmm","name":"Own","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":0,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id":"wW21dwp7rzAp15cl","name":"Jump","type":"skill","img":"systems/CoC7/assets/icons/skills/jump.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.c5utlFbDM7J8TA8b"}}},{"_id":"mZ5ZZL7ObfXV8Iiv","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.hDr4eUbS398oniTa"}}},{"_id":"m1yN6RN0njMJODkX","name":"History","type":"skill","img":"systems/CoC7/assets/icons/skills/history.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.URo2NSSJSNdvOqXU"}}},{"_id":"7rOwHbUVLndS15g5","name":"First Aid","type":"skill","img":"systems/CoC7/assets/icons/skills/first_aid.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"30","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.nZ8rdL4PLb7A7f5B"}}},{"_id":"Ubh99M4zdwX9mp1x","name":"Rifle/Shotgun","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"specialization":"Firearms","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.m2pYjKk4Gk3FcEBL"}}},{"_id":"C7bqom4UhyJcnkB3","name":"Handgun","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","data":{"specialization":"Firearms","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.KmDGtn7ukUFVb265"}}},{"_id":"t8O7Rj8Vu4C4afTC","name":"Throw","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_throw.svg","data":{"specialization":"Fighting","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true,"push":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.sWt5Q3ZXd6NlwhXU"}}},{"_id":"bw5XofBHsubMPXrH","name":"Brawl","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vS8bsPWFlwgOecoB"}}},{"_id":"HoRlO4r5ppzKQHH9","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.ld78TITwKNFPpanQ"}}},{"_id":"mLjRnUqQIp6CYJQH","name":"Electrical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/electrical_repair.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.NBkq8oCGM1FjmsyF"}}},{"_id":"R8g0Gp4AkZuILeoB","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.Og2OWQH93aSDWAMZ"}}},{"_id":"DKWmZRfC0zuCcODP","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":0,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wK8XxNj9QwXlGFEb"}}},{"_id":"kYSMTiL0H1tGNUEb","name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.gzNPM9gbx0EZffBV"}}},{"_id":"20PG6iyVubohJnVH","name":"Cthulhu Mythos","type":"skill","img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"noadjustments":true,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.WJky66ezt2ef5ksH"}}},{"_id":"odMxKer3Rc3uA48Z","name":"Credit Rating","type":"skill","img":"systems/CoC7/assets/icons/skills/credit_rating.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"noxpgain":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vYrJ5h9cIQBzvw8E"}}},{"_id":"BWFywTfWSGwgK9hs","name":"Climb","type":"skill","img":"systems/CoC7/assets/icons/skills/climb.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.oh5eFj00Wohnx1My"}}},{"_id":"wie2UBnNX1qeOqb7","name":"Any","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":5,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.HAuFBG4ZT2yO9yn7"}}},{"_id":"CZrHf3aUx24pTuQ1","name":"Archaeology","type":"skill","img":"systems/CoC7/assets/icons/skills/archaeology.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.GHhkcJUqjcP4lToY"}}},{"_id":"7e40WoR9jIsZYXqN","name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wOs3gryeGRPkGoWD"}}},{"_id":"KloYBzryxIJqJCjC","name":"Anthropology","type":"skill","img":"systems/CoC7/assets/icons/skills/anthropology.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.ovIp66Luwfwbq28F"}}},{"_id":"zDv5sOhdbzGoc0cF","name":"Accounting","type":"skill","img":"systems/CoC7/assets/icons/skills/accounting.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.UOuN0gESXPp2HXwH"}}},{"_id":"z8XBu0n5NcYhH9Nj","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.JgtxiN3KzooOWIQV"}}},{"_id":"HQTh5EPAeYzdcBpS","name":"Fists","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"bw5XofBHsubMPXrH"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"addb":true,"ahdb":false,"stun":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.NRmTURxUXvhNFuZi"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.WeWSVgjL1YEYNVm2"}},"_id":"JuI2aWDSEuQNKeUI"} -{"name":"Goon","type":"npc","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":null,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":"5*2d6+6"},"con":{"value":null,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":"5*3d6"},"siz":{"value":null,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":"5*3d6"},"dex":{"value":null,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":"5*3d6"},"app":{"value":null,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":"5*1d6"},"int":{"value":null,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":"5*1d6"},"pow":{"value":null,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":"0"},"edu":{"value":null,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":"0"}},"attribs":{"hp":{"value":null,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":null,"max":null,"short":"HP","label":"Magic points","auto":true},"lck":{"value":null,"short":"LCK","label":"Luck","max":99},"san":{"value":50,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":8,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":-2,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":-2,"value":-2,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"dead":{"type":"Boolean","value":false},"prone":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"infos":{"occupation":"Obey to the villain","age":"Average","sex":""},"flags":{"locked":true,"displayFormula":false}},"token":{"name":"Goon","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg"},"items":[{"_id":"nhNyqjmMf2xgLEAh","name":"Secret documents","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.5lfgKDdff95ONHW5"}}},{"_id":"pjiFo3geRss79cUu","name":"Orders","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.PFxgMt9PmW9JcrS6"}}},{"_id":"dRfkuKnn9Vl7BAnR","name":"Shotgun","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"specialization":"Firearms","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{"special":true,"fighting":false,"firearm":true,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"x3n4xMyqXSGATZ9L","name":"Shotgun","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"

    Description of the weapon

    \n

    selecting 'Area of effect' will enable 3 different damage and range

    \n

    selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

    \n

    selecting 'Special' will activate the special input field

    \n

    In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

    \n

    Edit the weapon and select the correct skill.

    ","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Shotgun","id":"dRfkuKnn9Vl7BAnR"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"15ft","units":"","damage":"1d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":false,"rngd":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.fnyCgkQluYSM4yTl"}}},{"_id":"bn7QZKctB109130p","name":"Punch","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"coPK7CiB6zbpnofh"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"slnt":true,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":100000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.Uldjvs5fvCMri6RN"}}},{"_id":"coPK7CiB6zbpnofh","name":"Brawl","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vS8bsPWFlwgOecoB"}}},{"_id":"cYRUJwddg0yvccHL","name":"Club","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"coPK7CiB6zbpnofh"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1d4"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"ahdb":true,"addb":false,"slnt":true,"stun":true,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":300000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.BZRfjXQ4V43t4fNw"}}},{"_id":"Cy8zEO2hzmxHYe1g","name":"Receive orders","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"95","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.cOzs5LkYR1icbzo9"}}},{"_id":"bQq5zs3LeTyZ8O57","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"@EDU","attributes":{},"properties":{"push":true,"special":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id":"AWcXwvVJG779q7fH","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"1/2*@DEX","attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wK8XxNj9QwXlGFEb"}}},{"_id":"U7Nsi0qkuJjemOaf","name":"Try hard","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"10","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.aEK9aFa8uoMJLiSg"}}},{"_id":"lm867qysqMBwLEK9","name":"Be a pain","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"50","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DGD3CQQWsYIqhLWL"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.0skVq6Pae0GlrSMU"}},"_id":"KgyqcEJZZztYfpEr"} +{"name":"Goon","type":"npc","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":null,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":"5*2d6+6"},"con":{"value":null,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":"5*3d6"},"siz":{"value":null,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":"5*3d6"},"dex":{"value":null,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":"5*3d6"},"app":{"value":null,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":"5*1d6"},"int":{"value":null,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":"5*1d6"},"pow":{"value":null,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":"0"},"edu":{"value":null,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":"0"}},"attribs":{"hp":{"value":null,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":null,"max":null,"short":"HP","label":"Magic points","auto":true},"lck":{"value":null,"short":"LCK","label":"Luck","max":99},"san":{"value":50,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":8,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":-2,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":-2,"value":-2,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"dead":{"type":"Boolean","value":false},"prone":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"special":{"sanLoss":{"checkPassed":"","checkFailled":""},"attacksPerRound":1},"infos":{"occupation":"Obey to the villain","age":"Average","sex":""},"flags":{"locked":true,"displayFormula":false}},"token":{"name":"Goon","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg"},"items":[{"_id":"nhNyqjmMf2xgLEAh","name":"Secret documents","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.5lfgKDdff95ONHW5"}}},{"_id":"pjiFo3geRss79cUu","name":"Orders","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.PFxgMt9PmW9JcrS6"}}},{"_id":"dRfkuKnn9Vl7BAnR","name":"Shotgun","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"specialization":"Firearms","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{"special":true,"fighting":false,"firearm":true,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"x3n4xMyqXSGATZ9L","name":"Shotgun","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"

    Description of the weapon

    \n

    selecting 'Area of effect' will enable 3 different damage and range

    \n

    selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

    \n

    selecting 'Special' will activate the special input field

    \n

    In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

    \n

    Edit the weapon and select the correct skill.

    ","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Shotgun","id":"dRfkuKnn9Vl7BAnR"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"15ft","units":"","damage":"1d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":false,"rngd":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.fnyCgkQluYSM4yTl"}}},{"_id":"bn7QZKctB109130p","name":"Punch","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"coPK7CiB6zbpnofh"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"slnt":true,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":100000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.Uldjvs5fvCMri6RN"}}},{"_id":"coPK7CiB6zbpnofh","name":"Brawl","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vS8bsPWFlwgOecoB"}}},{"_id":"cYRUJwddg0yvccHL","name":"Club","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"coPK7CiB6zbpnofh"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1d4"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"ahdb":true,"addb":false,"slnt":true,"stun":true,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":300000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.BZRfjXQ4V43t4fNw"}}},{"_id":"Cy8zEO2hzmxHYe1g","name":"Receive orders","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"95","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.cOzs5LkYR1icbzo9"}}},{"_id":"bQq5zs3LeTyZ8O57","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"@EDU","attributes":{},"properties":{"push":true,"special":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id":"AWcXwvVJG779q7fH","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"specialization":"","description":{"value":"

    See the Call of Cthulhu - 7th Ed Core Rulebook

    ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"1/2*@DEX","attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wK8XxNj9QwXlGFEb"}}},{"_id":"U7Nsi0qkuJjemOaf","name":"Try hard","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"10","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.aEK9aFa8uoMJLiSg"}}},{"_id":"lm867qysqMBwLEK9","name":"Be a pain","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"50","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DGD3CQQWsYIqhLWL"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.0skVq6Pae0GlrSMU"}},"_id":"KgyqcEJZZztYfpEr"} {"name":"Creature example","type":"creature","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":0,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":"1d6"},"con":{"value":10,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":"2d6"},"siz":{"value":50,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":"5*3d6"},"dex":{"value":10,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":"4d6"},"app":{"value":20,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":"5d6"},"int":{"value":20,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":"6d6"},"pow":{"value":0,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":""},"edu":{"value":0,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":"0"}},"attribs":{"hp":{"value":6,"max":6,"short":"HP","label":"Hit points","auto":true},"mp":{"value":0,"max":0,"short":"HP","label":"Magic points","auto":true},"lck":{"value":0,"short":"LCK","label":"Luck","max":99},"san":{"value":0,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":7,"max":7,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":-2,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":-2,"value":-2,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"status":{"criticalWounds":{"type":"Boolean","value":false},"unconscious":{"type":"Boolean","value":false},"dying":{"type":"Boolean","value":false},"dead":{"type":"Boolean","value":false},"prone":{"type":"Boolean","value":false},"tempoInsane":{"type":"boolean","value":false},"indefInsane":{"type":"boolean","value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"special":{"attribs":{"move":{"primary":{"enabled":false,"value":null,"type":null},"secondary":{"enabled":false,"value":null,"type":null}}},"sanLoss":{"checkPassed":"","checkFailled":""},"attacksPerRound":1},"infos":{"type":""},"flags":{"locked":true,"displayFormula":false},"biography":{"personalDescription":{"value":"

    Clicking the lock will allow modification of the sheet.

    \n

    When sheet is unlock you can modify things directly from the sheet. You can also open the entities sheets and delete things.

    \n

    In that mode you can create skills/possessions by clicking the + icon. Holding shift will bypass the opening of the corresponding sheet.

    \n

    You can enter characteristics as numbers and as formulas. Click the right icon to toggle modes. Clicking the red dice will roll the formula when possible. So you can have your creature with defined values, or roll/reroll the value on demand.

    "}}},"token":{"name":"Creature example","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg"},"items":[{"_id":"uThvps46yrs3LyNw","name":"Pile of junk","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.r8S7V9kUWpjtMxaX"}}},{"_id":"jc6aXhzjXLKREJIy","name":"Fighting","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"50","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":50,"attributes":{},"properties":{"special":true,"fighting":true,"firearm":false,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ddI3EOxhNRDrbiWW","name":"Innate attack","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"

    Creature's natural attack

    ","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Fighting","id":"jc6aXhzjXLKREJIy"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1d3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"addb":true,"ahdb":false,"slnt":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.i9tOh6fwndVIGwHR"}}},{"_id":"qMUYPKo3mj4zOPjA","name":"Slice PCs in small cubes","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"75","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":75,"attributes":{},"properties":{"special":true,"fighting":true,"firearm":false,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"wxRnkgFqjB1A0dOY","name":"Deadly claws","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"

    You can add special description or slugs there :

    \n

    Slug 1 : 2d17kh

    ","keeper":""},"wpnType":"","skill":{"main":{"name":"Slice PCs in small cubes","id":"qMUYPKo3mj4zOPjA"},"alternativ":{"name":"Fighting","id":"jc6aXhzjXLKREJIy"}},"range":{"normal":{"value":0,"units":"","damage":"10d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":""},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"brst":true,"spcl":true,"melee":true,"rngd":false,"shotgun":false,"auto":false,"dbrl":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.NWkpD68urH6gwHkU"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.ExVcSKXT23bi0A4u"}},"_id":"XE2vjLG03wGfnYLw"} {"name":"Cupboard","type":"container","img":"icons/svg/chest.svg","data":{"description":{"value":"

    The lock on the door was removed years ago leaving a hole. You have to poke something in the hole to pull the door open.

    ","keeper":""},"flags":{"locked":false}},"token":{"actorLink":true,"name":"Floor safe","displayName":0,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/chest.svg"},"items":[{"_id":"L7F6PDH2dK7ZNYxZ","name":"Sword","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":20,"attributes":{},"properties":{"special":true,"fighting":true,"firearm":false,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ZtIdjmVil351PsA2","name":"Rapier","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Sword","id":"L7F6PDH2dK7ZNYxZ"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D6+1"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"$15","mdrn":"$100"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.h57LwHlUKVT0oQvU"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.M8hvUblNcgImyozT"}},"_id":"r7bDSY4OYKxQYEas"} diff --git a/template.json b/template.json index c33bb344..ad8a0e86 100644 --- a/template.json +++ b/template.json @@ -204,6 +204,13 @@ "description": { "keeper": "" }, + "special": { + "sanLoss": { + "checkPassed": null, + "checkFailled": null + }, + "attacksPerRound": 1 + }, "infos": { "occupation": "", "age": "", diff --git a/templates/actors/character-sheet.html b/templates/actors/character-sheet.html index ab86a205..027d8948 100644 --- a/templates/actors/character-sheet.html +++ b/templates/actors/character-sheet.html @@ -218,93 +218,7 @@
    - {{#unless data.flags.locked}} -
    -
    {{localize 'CoC7.AddItem'}}
    -
    - {{/unless}} -
      -
      -
    1. -
      -

      {{localize 'CoC7.Items'}}

      -
      -
    2. -
        - {{#each itemsByType.item as |item id|}} -
      1. -
        -

        {{item.name}}

        -
        - - -
        -
      2. - {{/each}} -
      -
      -
      -
    3. -
      -

      {{localize 'CoC7.Books'}}

      -
      -
    4. -
        - {{#each itemsByType.book as |item id|}} -
      1. -
        -

        {{item.name}}

        -
        - - -
        -
      2. - {{/each}} -
      -
      -
      -
    5. -
      -

      {{localize 'CoC7.Spells'}}

      -
      -
    6. -
        - {{#each itemsByType.spell as |item id|}} -
      1. -
        -

        {{item.name}}

        -
        - - -
        -
      2. - {{/each}} -
      -
      - {{#if pulpCharacter}} - {{#if itemsByType.talent}} -
      -
    7. -
      -

      {{localize 'CoC7.PulpTalents'}}

      -
      -
    8. -
        - {{#each itemsByType.talent as |item id|}} -
      1. -
        -

        {{item.name}}

        -
        - - -
        -
      2. - {{/each}} -
      -
      - {{/if}} - {{/if}} -
    + {{> "systems/CoC7/templates/actors/parts/actor-inventory-items.html"}}
    {{#unless data.flags.locked}} diff --git a/templates/actors/creature-sheet.html b/templates/actors/creature-sheet.html deleted file mode 100644 index 1cae4758..00000000 --- a/templates/actors/creature-sheet.html +++ /dev/null @@ -1,408 +0,0 @@ -
    - - {{!-- Sheet Header --}} -
    -
    -
    -
    - - -
    -
    - - -
    -
    - -
    - {{#each data.characteristics as |characteristic key|}} - {{#if ../data.flags.locked}} - {{#if characteristic.display}} -
    -
    - -
    -
    - {{#if characteristic.editable}} - - {{else}} - - {{/if}} -
    -
    - {{/if}} - {{else}} -
    -
    - -
    - {{#if ../displayFormula}} -
    - -
    - {{else}} -
    - {{#if characteristic.editable}} - - {{else}} - - {{/if}} -
    - {{/if}} -
    - {{/if}} - {{/each}} -
    - -
    -
    - - - / - {{#if data.attribs.hp.auto}} - - - {{else}} - - {{/if}} - - {{#unless data.flags.locked}} -
    - {{/unless}} - -
    - {{#if data.flags.locked}} -
    - {{#if hasMp}} - - - / - {{#if data.attribs.mp.auto}} - - - {{else}} - - {{/if}} - - {{/if}} -
    - -
    - {{#if hasSan}} - - - / - - - {{/if}} -
    - -
    - {{#if hasLuck}} - - - - {{/if}} -
    - {{else}} -
    - - - / - {{#if data.attribs.mp.auto}} - - - {{else}} - - {{/if}} -
    - -
    - -
    - - - / - {{#if data.attribs.san.auto}} - - {{else}} - - {{/if}} -
    - -
    - -
    - - - -
    - {{/if}} -
    - -
    -
    - - - {{#if data.attribs.mov.auto}} - {{data.attribs.mov.value}} - {{else}} - - {{/if}} - - {{#unless data.flags.locked}} -
    - {{/unless}} - -
    -
    - - - {{#if data.attribs.db.auto}} - {{data.attribs.db.value}} - {{else}} - - {{/if}} - - - {{#unless data.flags.locked}} -
    - {{/unless}} -
    -
    - - {{#if data.attribs.build.auto}} - {{data.attribs.build.value}} - {{else}} - - {{/if}} - - {{#unless data.flags.locked}} -
    - {{/unless}} -
    -
    - - - - -
    -
    - -
    - {{#if isDying}} - - {{else}} - - - - - - - -
    -
    - - - {{#if data.flags.locked}} - {{data.special.sanLoss.checkPassed}} - / - {{data.special.sanLoss.checkFailled}} - {{else}} - - / - - {{/if}} -
    -
    -
    - {{#if allowFormula}} - {{#if data.flags.locked}} -
    - {{else}} - {{#if displayFormula}} -
    - {{else}} - - - {{/if}} - {{/if}} - {{else}} -
    - {{/if}} - {{#if data.flags.locked}} - - {{else}} - - {{#if allowFormula}} - {{#if displayFormula}} - - {{else}} - - {{/if}} - {{/if}} - {{/if}} -
    - {{/if}} -
    -
    - {{#if isDead}} -
    - -
    - {{else}} - {{#if isDying}} -
    - -
    - {{else}} - - {{/if}} - {{/if}} -
    - - - {{!-- Sheet Body --}} -
    -
    - -
    -
    -

    {{localize 'CoC7.Skills'}}

    - {{#unless data.flags.locked}} -
    - -
    - {{/unless}} -
    -
    - {{> "systems/CoC7/templates/actors/parts/npc-skills.html"}} -
    -
    - -
    -
    -

    {{localize 'CoC7.Combat'}}

    - {{#unless data.flags.locked}} -
    - -
    - {{/unless}} -
    -
    - {{> "systems/CoC7/templates/actors/parts/npc-combat.html"}} -
    -
    - - {{#if hasInventory}} -
    -
    -

    {{localize 'CoC7.Inventory'}}

    - {{#unless data.flags.locked}} -
    - -
    - {{/unless}} -
    -
    -
      - {{#if itemsByType.item}} -
      -
    1. -
      -

      {{localize 'CoC7.Items'}}

      -
      -
    2. -
        - {{#each itemsByType.item as |item id|}} -
      1. -
        -

        {{item.name}}

        -
        - - -
        -
      2. - {{/each}} -
      -
      - {{/if}} - {{#if itemsByType.book}} -
      -
    3. -
      -

      {{localize 'CoC7.Books'}}

      -
      -
    4. -
        - {{#each itemsByType.book as |item id|}} -
      1. -
        -

        {{item.name}}

        -
        - - -
        -
      2. - {{/each}} -
      -
      - {{/if}} - {{#if itemsByType.spell}} -
      -
    5. -
      -

      {{localize 'CoC7.Spells'}}

      -
      -
    6. -
        - {{#each itemsByType.spell as |item id|}} -
      1. -
        -

        {{item.name}}

        -
        - - -
        -
      2. - {{/each}} -
      -
      - {{/if}} -
    -
    -
    - {{/if}} - - {{#if isGM}} -
    -
    -

    {{localize 'CoC7.GmNotes'}}

    -
    -
    - {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} -
    -
    - {{/if}} - -
    -
    -

    {{localize 'CoC7.Notes'}}

    -
    -
    - {{editor content=data.biography.personalDescription.value target="data.biography.personalDescription.value" button=true owner=owner editable=editable}} -
    -
    -
    -
    -
    diff --git a/templates/actors/npc-sheet.html b/templates/actors/npc-sheet.html index 120787a5..850b4065 100644 --- a/templates/actors/npc-sheet.html +++ b/templates/actors/npc-sheet.html @@ -5,24 +5,35 @@ {{#unless permissionLimited}}
    -
    - - -
    -
    - - -
    - {{#if pulpCharacter}} -
    - - -
    + {{#if isCreature}} +
    + + +
    +
    + + +
    + {{else}} +
    + + +
    +
    + + +
    + {{#if pulpCharacter}} +
    + + +
    + {{/if}} +
    + + +
    {{/if}} -
    - - -
    @@ -114,7 +125,7 @@
    {{#if hasLuck}} - + {{/if}} @@ -214,6 +225,9 @@
    + {{#if isDying}} + + {{else}} @@ -223,6 +237,20 @@
    +
    + + {{#if data.flags.locked}} + {{data.special.sanLoss.checkPassed}} + / + {{data.special.sanLoss.checkFailled}} + {{else}} + + / + + {{/if}} +
    +
    +
    {{#if allowFormula}} {{#if data.flags.locked}} @@ -239,18 +267,19 @@
    {{/if}} {{#if data.flags.locked}} - + {{else}} - + {{#if allowFormula}} {{#if displayFormula}} - + {{else}} - + {{/if}} {{/if}} {{/if}}
    + {{/if}}
    {{/unless}} @@ -269,14 +298,13 @@ {{/if}}
- {{!-- Sheet Body --}} {{#unless permissionLimited}}
-
+

{{localize 'CoC7.Skills'}}

{{#unless data.flags.locked}}
@@ -299,6 +327,17 @@

{{localize 'CoC7.Combat'}}

{{/unless}}
+
+
 
+
+

{{localize 'CoC7.AttacksPerRound'}} :

+ {{#if data.flags.locked}} +
{{data.special.attacksPerRound}}
+ {{else}} + + {{/if}} +
+
{{> "systems/CoC7/templates/actors/parts/npc-combat.html"}}
@@ -307,124 +346,32 @@

{{localize 'CoC7.Combat'}}

{{localize 'CoC7.Inventory'}}

- {{#unless data.flags.locked}} -
- -
- {{/unless}}
-
    - {{#if itemsByType.item}} -
    -
  1. -
    -

    {{localize 'CoC7.Items'}}

    -
    -
  2. -
      - {{#each itemsByType.item as |item id|}} -
    1. -
      -

      {{item.name}}

      -
      - - -
      -
    2. - {{/each}} -
    -
    - {{/if}} - {{#if itemsByType.book}} -
    -
  3. -
    -

    {{localize 'CoC7.Books'}}

    -
    -
  4. -
      - {{#each itemsByType.book as |item id|}} -
    1. -
      -

      {{item.name}}

      -
      - - -
      -
    2. - {{/each}} -
    -
    - {{/if}} - {{#if itemsByType.spell}} -
    -
  5. -
    -

    {{localize 'CoC7.Spells'}}

    -
    -
  6. -
      - {{#each itemsByType.spell as |item id|}} -
    1. -
      -

      {{item.name}}

      -
      - - -
      -
    2. - {{/each}} -
    -
    - {{/if}} - {{#if pulpCharacter}} - {{#if itemsByType.talent}} -
    -
  7. -
    -

    {{localize 'CoC7.PulpTalents'}}

    -
    -
  8. -
      - {{#each itemsByType.talent as |item id|}} -
    1. -
      -

      {{item.name}}

      -
      - - -
      -
    2. - {{/each}} -
    -
    - {{/if}} - {{/if}} -
+ {{> "systems/CoC7/templates/actors/parts/actor-inventory-items.html"}}
{{/if}} +
+
+

{{localize 'CoC7.Notes'}}

+
+
+ {{editor content=data.biography.personalDescription.value target="data.biography.personalDescription.value" button=true owner=owner editable=editable}} +
+
+ {{#if isGM}}

{{localize 'CoC7.GmNotes'}}

-
+
{{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}}
{{/if}} - -
-
-

{{localize 'CoC7.Notes'}}

-
-
- {{editor content=data.biography.personalDescription.value target="data.biography.personalDescription.value" button=true owner=owner editable=editable}} -
-
{{/unless}} diff --git a/templates/actors/parts/actor-inventory-items.html b/templates/actors/parts/actor-inventory-items.html index 290a3ab2..87c9fe5b 100644 --- a/templates/actors/parts/actor-inventory-items.html +++ b/templates/actors/parts/actor-inventory-items.html @@ -1,153 +1,156 @@ -
-
    -
  1. -
    -
      -
    1. -
      -

      {{localize 'CoC7.Items'}}

      - {{#unless data.flags.locked}} -
      -
      {{localize 'CoC7.AddItem'}}
      -
      - {{/unless}} -
      -
    2. - {{#each itemsByType.item as |item id|}} -
    3. -
      -

      {{item.name}}

      -
      - - - -
      -
    4. - {{/each}} -
    -
    -
    -
      -
    1. -
      -

      {{localize 'CoC7.Books'}}

      - {{#unless data.flags.locked}} -
      -
      {{localize 'CoC7.AddBook'}}
      -
      - {{/unless}} -
      -
    2. - {{#each itemsByType.book as |item id|}} -
    3. -
      -

      {{item.name}}

      -
      - - - -
      -
    4. - {{/each}} -
    -
    -
    +
      +
    1. + {{#if showInventoryItems}} +
      +
        +
      1. +
        +

        {{localize 'CoC7.Items'}}

        + {{#unless data.flags.locked}} +
        +
        {{localize 'CoC7.AddItem'}}
        +
        + {{/unless}} +
        +
      2. + {{#each itemsByType.item as |item id|}} +
      3. +
        +

        {{item.name}}

        +
        + + + +
        +
      4. + {{/each}} +
      +
      + {{/if}} + {{#if showInventoryBooks}} +
        -
      1. -
        -

        {{localize 'CoC7.Spells'}}

        - {{#unless data.flags.locked}} -
        -
        {{localize 'CoC7.AddSpell'}}
        -
        - {{/unless}} -
        -
      2. - {{#each itemsByType.spell as |item id|}} -
      3. -
        -

        {{item.name}}

        -
        - - - -
        -
      4. - {{/each}} +
      5. +
        +

        {{localize 'CoC7.Books'}}

        + {{#unless data.flags.locked}} +
        +
        {{localize 'CoC7.AddBook'}}
        +
        + {{/unless}} +
        +
      6. + {{#each itemsByType.book as |item id|}} +
      7. +
        +

        {{item.name}}

        +
        + + + +
        +
      8. + {{/each}} +
      +
      + {{/if}} + {{#if showInventorySpells}} +
      +
        +
      1. +
        +

        {{localize 'CoC7.Spells'}}

        + {{#unless data.flags.locked}} +
        +
        {{localize 'CoC7.AddSpell'}}
        +
        + {{/unless}} +
        +
      2. + {{#each itemsByType.spell as |item id|}} +
      3. +
        +

        {{item.name}}

        +
        + + + +
        +
      4. + {{/each}} +
      +
      + {{/if}} + {{#if (and pulpCharacter showInventoryTalents)}} +
      +
        +
      1. +
        +

        {{localize 'CoC7.PulpTalents'}}

        +
        +
      2. + {{#each itemsByType.talent as |item id|}} +
      3. +
        +

        {{item.name}}

        +
        + + +
        +
      4. + {{/each}}
      -
      - {{#if pulpCharacter}} - {{#if itemsByType.talent}} -
      -
        -
      1. -
        -

        {{localize 'CoC7.PulpTalents'}}

        -
        -
      2. - {{#each itemsByType.talent as |item id|}} -
      3. -
        -

        {{item.name}}

        -
        - - -
        -
      4. - {{/each}} -
      -
      - {{/if}} - {{/if}} - {{#if showWeaponsInsteadOfStatus}} -
      -
        -
      1. -
        -

        {{localize 'CoC7.Weapons'}}

        - {{#unless data.flags.locked}} -
        -
        {{localize 'CoC7.AddWeapon'}}
        -
        - {{/unless}} +
        + {{/if}} + {{#if showInventoryWeapons}} +
        +
          +
        1. +
          +

          {{localize 'CoC7.Weapons'}}

          + {{#unless data.flags.locked}} +
          +
          {{localize 'CoC7.AddWeapon'}}
          +
          + {{/unless}} +
          +
        2. + {{#each itemsByType.weapon as |item id|}} +
        3. +
          +

          {{item.name}}

          +
          + + +
        4. - {{#each itemsByType.weapon as |item id|}} -
        5. -
          -

          {{item.name}}

          -
          - + {{/each}} +
        +
        + {{/if}} + {{#if showInventoryStatuses}} +
        +
          +
        1. +
          +

          {{localize 'CoC7.Status'}}

          +
          +
        2. + {{#each itemsByType.status as |item id|}} +
        3. +
          +

          {{item.name}}

          +
          + {{#if ../isGM}} -
          -
        4. - {{/each}} -
        -
        - {{else}} -
        -
          -
        1. -
          -

          {{localize 'CoC7.Status'}}

          + {{/if}}
        2. - {{#each itemsByType.status as |item id|}} -
        3. -
          -

          {{item.name}}

          -
          - {{#if ../isGM}} - - - {{/if}} -
          -
        4. - {{/each}} -
        -
        - {{/if}} -
      2. -
      -
      + {{/each}} +
    +
    + {{/if}} +
  2. +
diff --git a/templates/actors/parts/actor-inventory.html b/templates/actors/parts/actor-inventory.html index 1aa80767..0ebdd7f4 100644 --- a/templates/actors/parts/actor-inventory.html +++ b/templates/actors/parts/actor-inventory.html @@ -1,5 +1,7 @@
+
{{> "systems/CoC7/templates/actors/parts/actor-inventory-items.html"}} +
{{#unless data.flags.locked}}
diff --git a/templates/items/item-sheet.html b/templates/items/item-sheet.html deleted file mode 100644 index 011be88c..00000000 --- a/templates/items/item-sheet.html +++ /dev/null @@ -1,25 +0,0 @@ -
- -
- -
-

-
- - -
-
- - -
-
-
- - - - {{!-- Description Tab --}} -
- {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} -
- -
From cdb3cc0c2f236defb7cd513d7534e76753271cfc Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Fri, 17 Sep 2021 10:37:31 +0000 Subject: [PATCH 079/726] Updated translations list --- .github/TRANSLATIONS.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index c73b2e01..294fa5ad 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,7 +4,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **330** | **106** | **123** | **18** | **18** | **125** | **18** | **18** | **16** | **1** | +| **Remaining**: | **331** | **107** | **124** | **19** | **19** | **126** | **19** | **19** | **17** | **2** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | @@ -20,6 +20,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -397,6 +398,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.AttackSuccess": "{name} landed a blow.",` +##### CoC7.AttacksPerRound + +`"CoC7.AttacksPerRound": "Attacks per round",` + ##### CoC7.Attribute `"CoC7.Attribute": "Attribute",` From 444f2af0295cae69f39c3155eba64669c3cdc289 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Fri, 17 Sep 2021 19:13:30 +0100 Subject: [PATCH 080/726] Remove Art/Craft from example occupation interpersonal skills Add hook trigger after setup dragged onto actor has finished --- module/actors/actor.js | 3 ++- packs/items.db | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index 2029212a..ba902f65 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -1,4 +1,4 @@ -/* global Actor, CONST, Dialog, Die, duplicate, game, getProperty, mergeObject, Roll, TextEditor, Token, ui */ +/* global Actor, CONST, Dialog, Die, duplicate, game, getProperty, Hooks, mergeObject, Roll, TextEditor, Token, ui */ import { COC7 } from '../config.js' import { CoC7Check } from '../check.js' @@ -1039,6 +1039,7 @@ export class CoCActor extends Actor { } } } + Hooks.call('setupFinishedCoC7') break } case 'archetype': diff --git a/packs/items.db b/packs/items.db index 6e756252..85ca35ec 100644 --- a/packs/items.db +++ b/packs/items.db @@ -1,6 +1,6 @@ {"name":"Punch","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.Uldjvs5fvCMri6RN"}},"_id":"3elxAwnv7WCUNwng"} {"name":"1920's Setup Example","type":"setup","img":"icons/svg/item-bag.svg","data":{"description":{"value":"

Default setup for 1920's character.

","keeper":""},"characteristics":{"points":{"enabled":false,"value":460},"rolls":{"enabled":true,"enableIndividualRolls":true,"str":"(3D6)*5","con":"(3D6)*5","siz":"(2D6+6)*5","dex":"(3D6)*5","app":"(3D6)*5","int":"(2D6+6)*5","pow":"(3D6)*5","edu":"(2D6+6)*5","luck":"(3D6)*5"},"values":{"str":null,"con":null,"siz":null,"dex":null,"app":null,"int":null,"pow":null,"edu":null,"luck":null}},"source":"Keeper's rule book","enableCharacterisitics":true,"items":[{"_id":"R8GJXPMc4LC3bn1D","name":"Unarmed","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"addb":true,"ahdb":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{"1920":"0","nvct":"0","drka":"0","ddts":"0","glit":"0","pulp":"0","mdrn":"0"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":100000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.R8GJXPMc4LC3bn1D"}}},{"_id":"UOuN0gESXPp2HXwH","name":"Accounting","type":"skill","img":"systems/CoC7/assets/icons/skills/accounting.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ovIp66Luwfwbq28F","name":"Anthropology","type":"skill","img":"systems/CoC7/assets/icons/skills/anthropology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"wOs3gryeGRPkGoWD","name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"GHhkcJUqjcP4lToY","name":"Archaeology","type":"skill","img":"systems/CoC7/assets/icons/skills/archaeology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"JgtxiN3KzooOWIQV","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"vYrJ5h9cIQBzvw8E","name":"Credit Rating","type":"skill","img":"systems/CoC7/assets/icons/skills/credit_rating.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noxpgain":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"WJky66ezt2ef5ksH","name":"Cthulhu Mythos","type":"skill","img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noadjustments":true,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"gzNPM9gbx0EZffBV","name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"wK8XxNj9QwXlGFEb","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"Og2OWQH93aSDWAMZ","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"NBkq8oCGM1FjmsyF","name":"Electrical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/electrical_repair.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ld78TITwKNFPpanQ","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"vS8bsPWFlwgOecoB","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"sWt5Q3ZXd6NlwhXU","name":"Fighting (Throw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_throw.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true,"push":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KmDGtn7ukUFVb265","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"m2pYjKk4Gk3FcEBL","name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"nZ8rdL4PLb7A7f5B","name":"First Aid","type":"skill","img":"systems/CoC7/assets/icons/skills/first_aid.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"30","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"URo2NSSJSNdvOqXU","name":"History","type":"skill","img":"systems/CoC7/assets/icons/skills/history.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"hDr4eUbS398oniTa","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"c5utlFbDM7J8TA8b","name":"Jump","type":"skill","img":"systems/CoC7/assets/icons/skills/jump.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ISklIkQXD3o7heee","name":"Language (Other)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"rhJ1Q9OB3uTUZmjD","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"64hnBZNC8FM7oTkg","name":"Law","type":"skill","img":"systems/CoC7/assets/icons/skills/law.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"BcWHh8EhmyKj7bNk","name":"Library Use","type":"skill","img":"systems/CoC7/assets/icons/skills/library_use.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MoAB0NRNlpEc2qWr","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MRbFH52Zh9TzhLBh","name":"Locksmith","type":"skill","img":"systems/CoC7/assets/icons/skills/locksmith.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"0qCTuRFUCACSEsWj","name":"Mechanical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"Xmg7oAy70DKpv4kq","name":"Medicine","type":"skill","img":"systems/CoC7/assets/icons/skills/medicine.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"jTcu6Ni2ek7Yz5q3","name":"Natural World","type":"skill","img":"systems/CoC7/assets/icons/skills/natural_world.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"1c3fdvpQtvZf5YXK","name":"Navigate","type":"skill","img":"systems/CoC7/assets/icons/skills/navigate.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"6pSfZVS68jSHxa5T","name":"Occult","type":"skill","img":"systems/CoC7/assets/icons/skills/occult.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"cuExWy1130KUwuWz","name":"Operate Heavy Machinery","type":"skill","img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"uMzSNURmZqjxr7mU","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"uQsVn8K6XRXQmtaI","name":"Pilot (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/pilot_any.svg","data":{"specialization":"Pilot","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"rXBU2GofiO2qOsGv","name":"Psychoanalysis","type":"skill","img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MFR4eR79niGaLfph","name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"o7TdzbuSP7ticONf","name":"Ride","type":"skill","img":"systems/CoC7/assets/icons/skills/ride.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KvZuYcg3AmVrwKi2","name":"Science (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_any.svg","data":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KKFNX5M4LtEtiuxs","name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"nHaWNwtW3Lg0sqYJ","name":"Spot Hidden","type":"skill","img":"systems/CoC7/assets/icons/skills/spot_hidden.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"DcV524K0jNfjDEZC","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"X99v5MtRlfTNjL3B","name":"Survival (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/survival_any.svg","data":{"specialization":"Survival","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"1zSIeY0eat2AxQok","name":"Swim","type":"skill","img":"systems/CoC7/assets/icons/skills/swim.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"AcUIbZFhfoXqQP2m","name":"Track","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"oh5eFj00Wohnx1My","name":"Climb","type":"skill","img":"systems/CoC7/assets/icons/skills/climb.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}],"bioSections":["Personal Description","Ideology/Beliefs","Significant People","Meaningful Locations","Treasured Possessions","Traits"],"backstory":"","attributes":{},"properties":{},"eras":{"1920":{"selected":true},"nvct":{"selected":false},"drka":{"selected":false},"ddts":{"selected":false},"glit":{"selected":false},"pulp":{"selected":false},"mdrn":{"selected":false}},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.K8145914TxcC70wL"}},"_id":"CcH7CdXGtGTjMSCg"} -{"name":"Occupation Example","type":"occupation","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"source":"","type":{"classic":true,"lovecraftian":false,"modern":false,"pulp":false},"related":null,"occupationSkillPoints":{"str":{"multiplier":null,"selected":false,"optional":false,"active":false},"con":{"multiplier":null,"selected":false,"optional":false,"active":false},"siz":{"multiplier":null,"selected":false,"optional":false,"active":false},"dex":{"multiplier":null,"selected":false,"optional":false,"active":false},"app":{"multiplier":2,"selected":true,"optional":false,"active":false},"int":{"multiplier":null,"selected":false,"optional":false,"active":false},"pow":{"multiplier":null,"selected":false,"optional":false,"active":false},"edu":{"multiplier":2,"selected":true,"optional":false,"active":false}},"creditRating":{"min":"10","max":"80"},"suggestedContacts":"","skills":[{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"Og2OWQH93aSDWAMZ","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MoAB0NRNlpEc2qWr","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"DcV524K0jNfjDEZC","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}],"groups":[{"options":"2","skills":[{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"JgtxiN3KzooOWIQV","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ld78TITwKNFPpanQ","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"hDr4eUbS398oniTa","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"uMzSNURmZqjxr7mU","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}]},{"options":"1","skills":[{"_id":"vS8bsPWFlwgOecoB","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KmDGtn7ukUFVb265","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}]}],"personal":1,"attributes":{},"properties":{},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.VV21NKX0pHuShVr0"}},"_id":"NOsh6EdNSjpjahDF"} +{"name":"Occupation Example","type":"occupation","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"source":"","type":{"classic":true,"lovecraftian":false,"modern":false,"pulp":false},"related":null,"occupationSkillPoints":{"str":{"multiplier":null,"selected":false,"optional":false,"active":false},"con":{"multiplier":null,"selected":false,"optional":false,"active":false},"siz":{"multiplier":null,"selected":false,"optional":false,"active":false},"dex":{"multiplier":null,"selected":false,"optional":false,"active":false},"app":{"multiplier":2,"selected":true,"optional":false,"active":false},"int":{"multiplier":null,"selected":false,"optional":false,"active":false},"pow":{"multiplier":null,"selected":false,"optional":false,"active":false},"edu":{"multiplier":2,"selected":true,"optional":false,"active":false}},"creditRating":{"min":"10","max":"80"},"suggestedContacts":"","skills":[{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"Og2OWQH93aSDWAMZ","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MoAB0NRNlpEc2qWr","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"DcV524K0jNfjDEZC","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}],"groups":[{"options":"2","skills":[{"_id":"JgtxiN3KzooOWIQV","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ld78TITwKNFPpanQ","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"hDr4eUbS398oniTa","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"uMzSNURmZqjxr7mU","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}]},{"options":"1","skills":[{"_id":"vS8bsPWFlwgOecoB","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KmDGtn7ukUFVb265","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}]}],"personal":1,"attributes":{},"properties":{},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.VV21NKX0pHuShVr0"}},"_id":"NOsh6EdNSjpjahDF"} {"name":"Archetype Example","type":"archetype","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"source":"","type":{"classic":false,"lovecraftian":false,"modern":false},"bonusPoints":100,"coreCharacteristics":{"str":false,"con":false,"siz":false,"dex":false,"app":true,"int":true,"pow":false,"edu":false},"coreCharacteristicsFormula":{"enabled":true,"value":"(1D6+13)*5"},"suggestedOccupations":"","suggestedTraits":"","talents":2,"skills":[{"_id":"wOs3gryeGRPkGoWD","name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"m6V53lyfz7zh95FE","name":"Art/Craft (Acting)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_acting.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"JgtxiN3KzooOWIQV","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"gzNPM9gbx0EZffBV","name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"Og2OWQH93aSDWAMZ","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ld78TITwKNFPpanQ","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"vS8bsPWFlwgOecoB","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KmDGtn7ukUFVb265","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","data":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MoAB0NRNlpEc2qWr","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MFR4eR79niGaLfph","name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KKFNX5M4LtEtiuxs","name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"DcV524K0jNfjDEZC","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","data":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}],"attributes":{},"properties":{},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.CrhRlgbg1O6F4vaY"}},"_id":"lu04TIRrg9P3vRqY"} {"name":"Experimental weapon","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"

Description of the weapon

\n

selecting 'Area of effect' will enable 3 different damage and range

\n

selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

\n

selecting 'Special' will activate the special input field

\n

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

\n

Edit the weapon and select the correct skill.

","chat":"","special":"

You can add special description or slugs there :

\n

Slug 1 : 2d17kh

","keeper":""},"wpnType":"","skill":{"main":{"name":"To be selected once the weapon is owned","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"15ft","units":"","damage":"3d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":""},"bullets":"","ammo":0,"malfunction":"85","blastRadius":null,"properties":{"melee":false,"rngd":true,"spcl":true,"brst":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.NzTqCxAlJVfdUmxR"}},"_id":"uWQYNsMURpspTetM"} {"name":"Death ray (prototype)","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"50ft","units":"","damage":"5d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":false,"rngd":true,"slnt":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.fkfXxQQKhfMfUWGE"}},"_id":"zyCszwqyTg21l9E2"} From 3c81a202f8ccc4cede4f429bb1744c2ce1620c03 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 18 Sep 2021 00:42:22 +0100 Subject: [PATCH 081/726] Further async and item.base fixes --- module/actors/actor.js | 137 ++++++++++++------------ module/actors/sheets/base.js | 14 +-- module/actors/sheets/container.js | 12 +-- module/apps/actor-importer.js | 24 ++--- module/apps/canvas.js | 8 +- module/apps/link-creation-dialog.js | 4 +- module/apps/parser.js | 4 +- module/apps/point-selection-dialog.js | 4 +- module/chat.js | 18 ++-- module/chat/cards/combined-roll.js | 4 +- module/chat/cards/opposed-roll.js | 8 +- module/chat/cards/roll-card.js | 4 +- module/chat/cards/san-check.js | 4 +- module/chat/combat/melee-target.js | 8 +- module/chat/helper.js | 24 ++--- module/chat/interactive-chat-card.js | 4 +- module/chat/rangecombat.js | 32 +++--- module/chat/sancheck.js | 4 +- module/check.js | 12 +-- module/coc7.js | 4 +- module/dice.js | 4 +- module/items/book/data.js | 4 +- module/items/item.js | 24 +++++ module/items/sheets/archetype.js | 6 +- module/items/sheets/chase.js | 16 +-- module/items/sheets/occupation.js | 10 +- module/items/sheets/setup.js | 6 +- module/utilities.js | 148 +++++++++++++------------- 28 files changed, 293 insertions(+), 258 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index ba902f65..72b335ee 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -785,16 +785,20 @@ export class CoCActor extends Actor { async createEmbeddedDocuments (embeddedName, dataArray, options) { const output = [] let allCreated = [] + let baseValue = 0 + let baseCalculated = 0 for (const data of dataArray) { switch (data.type) { case 'skill': + baseValue = data.data.base + baseCalculated = await CoC7Item.calculateBase(this, data) if (this.data.type !== 'character') { // If not a PC set skill value to base if (this.getItemIdByName(data.name)) return // If skill with this name exist return - if (data.data.base) { - if (String(data.data.base) !== String(data.data.value)) { - data.data.value = data.data.base + if (baseValue) { + if (String(baseValue) !== String(data.data.value)) { + data.data.value = baseCalculated } } @@ -843,7 +847,7 @@ export class CoCActor extends Actor { const skillData = await SkillSpecSelectDialog.create( skillList, data.data.specialization, - data.data.base + baseCalculated ) if (skillData) { if (skillData.get('existing-skill')) { @@ -859,11 +863,6 @@ export class CoCActor extends Actor { if (skillData.get('new-skill-name')) { data.name = skillData.get('new-skill-name') } else data.name = CoC7Item.getNameWithoutSpec(data) - - if (skillData.get('base-value')) { - const value = Number(skillData.get('base-value')) - if (!isNaN(value)) data.data.base = value - } } } } @@ -875,6 +874,9 @@ export class CoCActor extends Actor { } } + if (String(baseValue) !== String(baseCalculated)) { + data.data.base = baseCalculated + } allCreated = await super.createEmbeddedDocuments( embeddedName, [data], @@ -989,16 +991,14 @@ export class CoCActor extends Actor { const rolled = await CharacRollDialog.create(data.data) if (rolled) { const updateData = {} - ;['str', 'con', 'siz', 'dex', 'app', 'int', 'pow', 'edu'].forEach( - key => { - if (data.data.characteristics.values[key]) { - updateData[`data.characteristics.${key}.value`] = - data.data.characteristics.values[key] - updateData[`data.characteristics.${key}.formula`] = - data.data.characteristics.rolls[key] - } + for (const key of ['str', 'con', 'siz', 'dex', 'app', 'int', 'pow', 'edu']) { + if (data.data.characteristics.values[key]) { + updateData[`data.characteristics.${key}.value`] = + data.data.characteristics.values[key] + updateData[`data.characteristics.${key}.formula`] = + data.data.characteristics.rolls[key] } - ) + } if (data.data.characteristics.values.luck) { updateData['data.attribs.lck.value'] = data.data.characteristics.values.luck @@ -1062,7 +1062,7 @@ export class CoCActor extends Actor { } const coreCharac = [] - Object.entries(data.data.coreCharacteristics).forEach(entry => { + for (const entry of Object.entries(data.data.coreCharacteristics)) { const [key, value] = entry data.data.coreCharacteristics[key] = false if (value) { @@ -1070,7 +1070,7 @@ export class CoCActor extends Actor { char.key = key coreCharac.push(char) } - }) + } let charac @@ -1146,7 +1146,7 @@ export class CoCActor extends Actor { pointsDialogData.characteristics = data.data.occupationSkillPoints let total = 0 let optionalChar = false - Object.entries(data.data.occupationSkillPoints).forEach(entry => { + for (const entry of Object.entries(data.data.occupationSkillPoints)) { const [key, value] = entry const char = this.getCharacteristic(key) pointsDialogData.characteristics[key].name = char.label @@ -1161,7 +1161,7 @@ export class CoCActor extends Actor { optionalChar = true } } - }) + } pointsDialogData.total = total if (optionalChar) { // Is there any optional char to choose for points calc ? @@ -1179,7 +1179,7 @@ export class CoCActor extends Actor { dialogData.title = game.i18n.localize('CoC7.SkillSelectionWindow') // Select only skills that are not present or are not flagged as occupation. - data.data.groups[index].skills.forEach(value => { + for (const value of data.data.groups[index].skills) { if (CoC7Item.isAnySpec(value)) dialogData.skills.push(value) // If it's a generic spec we always add it else { @@ -1194,18 +1194,18 @@ export class CoCActor extends Actor { if (!alreadySelectedSkill) dialogData.skills.push(value) } } - }) + } // if there's none, do nothing. if (dialogData.skills.length !== 0) { - dialogData.skills.forEach(skill => { + for (const skill of dialogData.skills) { if ( skill.data.specialization && !skill.name.includes(skill.data.specialization) ) { skill.displayName = `${skill.data.specialization} (${skill.name})` } else skill.displayName = skill.name - }) + } if (dialogData.skills.length <= dialogData.optionsCount) { // If there's is less skill than options, add them all. @@ -1250,7 +1250,7 @@ export class CoCActor extends Actor { }) // Select only skills that are not present or are not flagged as occupation. - this.skills.forEach(s => { + for (const s of this.skills) { // Select all skills that are not already flagged as occupation, can have adjustments and XP. if ( !s.data.data.flags.occupation && @@ -1263,18 +1263,18 @@ export class CoCActor extends Actor { }) if (!alreadySelectedSkill) dialogData.skills.push(s.data) } - }) + } // if there's none, do nothing. if (dialogData.skills.length !== 0) { - dialogData.skills.forEach(skill => { + for (const skill of dialogData.skills) { if ( skill.data.specialization && !skill.name.includes(skill.data.specialization) ) { skill.displayName = `${skill.data.specialization} (${skill.name})` } else skill.displayName = skill.name - }) + } if (dialogData.skills.length <= dialogData.optionsCount) { // If there's is less skill than options, add them all. ui.notifications.info( @@ -1330,6 +1330,7 @@ export class CoCActor extends Actor { output.push(created) } } + Hooks.call('occupationFinishedCoC7') break default: @@ -1348,9 +1349,9 @@ export class CoCActor extends Actor { // getSkillIdByName( skillName){ // let id = null; - // this.items.forEach( (value, key, map) => { + // for (const [map, key, value] of this.items) { // if( value.name == skillName) id = value.id; - // }); + // }; // return id; // } @@ -1360,22 +1361,22 @@ export class CoCActor extends Actor { const name = itemName.match(/\(([^)]+)\)/) ? itemName.match(/\(([^)]+)\)/)[1] : itemName - this.items.forEach(value => { + for (const value of this.items) { if ( CoC7Item.getNameWithoutSpec(value).toLowerCase() === name.toLowerCase() ) { id = value.id } - }) + } return id } getItemsByName (itemName) { const itemList = [] - this.items.forEach(value => { + for (const value of this.items) { if (value.name === itemName) itemList.push(value) - }) + } return itemList } @@ -1391,7 +1392,7 @@ export class CoCActor extends Actor { ? skillName.match(/\(([^)]+)\)/)[1] : skillName - this.items.forEach(value => { + for (const value of this.items) { if ( CoC7Item.getNameWithoutSpec(value).toLowerCase() === name.toLowerCase() && @@ -1399,7 +1400,7 @@ export class CoCActor extends Actor { ) { skillList.push(value) } - }) + } return skillList } @@ -1600,12 +1601,9 @@ export class CoCActor extends Actor { if (CoC7Item.isAnySpec(skill)) { if (!skill.data.flags) skill.data.flags = {} if (flag) skill.data.flags[flag] = true - /** MODIF 0.8.x **/ - // await this.createOwnedItem( skill, {renderSheet:false}); await this.createEmbeddedDocuments('Item', [skill], { renderSheet: false }) - /*****************/ } else { const itemId = this.getItemIdByName(skill.name) if (!itemId) { @@ -1613,12 +1611,9 @@ export class CoCActor extends Actor { if (!skill.data.flags) skill.data.flags = {} skill.data.flags[flag] = true } - /** MODIF 0.8.x **/ - // await this.createOwnedItem( skill, {renderSheet:false}); await this.createEmbeddedDocuments('Item', [skill], { renderSheet: false }) - /*****************/ } else if (flag) { const item = this.items.get(itemId) await item.setItemFlag(flag) @@ -2096,15 +2091,13 @@ export class CoCActor extends Actor { get occupationPoints () { if (!this.occupation) return 0 let points = 0 - Object.entries(this.occupation.data.data.occupationSkillPoints).forEach( - entry => { - const [key, value] = entry - const char = this.getCharacteristic(key) - if (value.selected) { - points += char.value * Number(value.multiplier) - } + for (const entry of Object.entries(this.occupation.data.data.occupationSkillPoints)) { + const [key, value] = entry + const char = this.getCharacteristic(key) + if (value.selected) { + points += char.value * Number(value.multiplier) } - ) + } return points } @@ -3078,7 +3071,9 @@ export class CoCActor extends Actor { await this.unsetStatus('dead') effectEffect = await this.hasActiveEffect('dead') if (effectEffect.length > 0) { - effectEffect.forEach(effect => effect.delete()) + for (const effect of effectEffect) { + effect.delete() + } } } else this.fallDead() break @@ -3087,7 +3082,9 @@ export class CoCActor extends Actor { await this.unsetStatus('dying') effectEffect = await this.hasActiveEffect('dying') if (effectEffect.length > 0) { - effectEffect.forEach(effect => effect.delete()) + for (const effect of effectEffect) { + effect.delete() + } } } else this.fallDying() break @@ -3096,7 +3093,9 @@ export class CoCActor extends Actor { await this.unsetStatus('prone') effectEffect = await this.hasActiveEffect('prone') if (effectEffect.length > 0) { - effectEffect.forEach(effect => effect.delete()) + for (const effect of effectEffect) { + effect.delete() + } } } else this.fallProne() break @@ -3105,7 +3104,9 @@ export class CoCActor extends Actor { await this.unsetStatus('unconscious') effectEffect = await this.hasActiveEffect('unconscious') if (effectEffect.length > 0) { - effectEffect.forEach(effect => effect.delete()) + for (const effect of effectEffect) { + effect.delete() + } } } else this.fallUnconscious() break @@ -3219,11 +3220,11 @@ export class CoCActor extends Actor { get fightingSkills () { const skillList = [] - this.items.forEach(value => { + for (const value of this.items) { if (value.type === 'skill' && value.data.data.properties.fighting) { skillList.push(value) } - }) + } skillList.sort((a, b) => { return a.name.localeCompare(b.name) @@ -3234,13 +3235,13 @@ export class CoCActor extends Actor { get closeCombatWeapons () { const weaponList = [] - this.items.forEach(value => { + for (const value of this.items) { if (value.type === 'weapon' && !value.data.data.properties.rngd) { const skill = this.items.get(value.data.data.skill.main.id) value.data.data.skill.main.value = skill ? skill.value : 0 weaponList.push(value) } - }) + } weaponList.sort((a, b) => { return a.name.localeCompare(b.name) @@ -3251,11 +3252,11 @@ export class CoCActor extends Actor { get firearmSkills () { const skillList = [] - this.items.forEach(value => { + for (const value of this.items) { if (value.type === 'skill' && value.data.data.properties.firearm) { skillList.push(value) } - }) + } skillList.sort((a, b) => { return a.name.localeCompare(b.name) @@ -3358,9 +3359,9 @@ export class CoCActor extends Actor { get skills () { const skillList = [] - this.items.forEach(value => { + for (const value of this.items) { if (value.type === 'skill') skillList.push(value) - }) + } skillList.sort((a, b) => { return a.name.localeCompare(b.name) @@ -3473,7 +3474,9 @@ export class CoCActor extends Actor { await this.unsetStatus(COC7.status.criticalWounds) const criticalWoundsEffect = await this.hasActiveEffect('criticalWounds') if (criticalWoundsEffect.length > 0) { - criticalWoundsEffect.forEach(effect => effect.delete()) + for (const effect of criticalWoundsEffect) { + effect.delete() + } } } @@ -3568,7 +3571,9 @@ export class CoCActor extends Actor { } const dyingEffect = await this.hasActiveEffect('dying') if (!this.dying && dyingEffect.length > 0) { - dyingEffect.forEach(effect => effect.delete()) + for (const effect of dyingEffect) { + effect.delete() + } } } diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 673d6e8c..5f3831de 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -918,7 +918,7 @@ export class CoC7ActorSheet extends ActorSheet { // await effect.sheet.render(true); // // effect.delete(); // } - // this.actor.effects.forEach( e => e.delete()); + // for (const e of this.actor.effects) { e.delete() } // await setProperty( this.actor, 'data.data.encounteredCreatures', []); // await this.actor.update( {['data.encounteredCreatures'] : []}); @@ -967,11 +967,11 @@ export class CoC7ActorSheet extends ActorSheet { content: content, callback: html => { const formData = new FormData(html[0].querySelector('#selectform')) - formData.forEach(function (value, name) { + for (const [name, value] of formData) { if (name === 'user') { message.actorTo = value } - }) + } } }) await game.CoC7socket.executeAsGM('gmtradeitemto', message) @@ -1160,11 +1160,11 @@ export class CoC7ActorSheet extends ActorSheet { const div = $('
') const labels = $('
') - chatData.labels.forEach(p => + for (const p of chatData.labels) { labels.append( `
${p.name} :${p.value}
` ) - ) + } div.append(labels) div.append( @@ -1179,11 +1179,11 @@ export class CoC7ActorSheet extends ActorSheet { } const props = $('
') - chatData.properties.forEach(p => + for (const p of chatData.properties) { props.append( `
${game.i18n.localize(p)}
` ) - ) + } div.append(props) li.append(div.hide()) diff --git a/module/actors/sheets/container.js b/module/actors/sheets/container.js index 7768ec88..0d170ea3 100644 --- a/module/actors/sheets/container.js +++ b/module/actors/sheets/container.js @@ -161,11 +161,11 @@ export class CoC7ContainerSheet extends ActorSheet { content: content, callback: html => { const formData = new FormData(html[0].querySelector('#selectform')) - formData.forEach(function (value, name) { + for (const [name, value] of formData) { if (name === 'user') { message.actorTo = value } - }) + } } }) await game.CoC7socket.executeAsGM('gmtradeitemto', message) @@ -185,11 +185,11 @@ export class CoC7ContainerSheet extends ActorSheet { const div = $('
') const labels = $('
') - chatData.labels.forEach(p => + for (const p of chatData.labels) { labels.append( `
${p.name} :${p.value}
` ) - ) + } div.append(labels) div.append( @@ -204,11 +204,11 @@ export class CoC7ContainerSheet extends ActorSheet { } const props = $('
') - chatData.properties.forEach(p => + for (const p of chatData.properties) { props.append( `
${game.i18n.localize(p)}
` ) - ) + } div.append(props) li.append(div.hide()) diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index 1778f1e5..664b9a2b 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -163,9 +163,9 @@ export class CoC7ActorImporter { const results = [] if (spells !== null) { const spellsArr = spells.replace(/(\n|\r)/g, ' ').split(',') - spellsArr.forEach(s => { + for (const s of spellsArr) { results.push(this.cleanString(s)) - }) + } } if (CONFIG.debug.CoC7Importer) { console.debug('spells', results) @@ -210,7 +210,7 @@ export class CoC7ActorImporter { if (CONFIG.debug.CoC7Importer) { console.debug('skillsArr', skillsArr) } - skillsArr.forEach(skill => { + for (const skill of skillsArr) { const parsedSkill = this.RE.skillRegExp.exec(skill) if (CONFIG.debug.CoC7Importer) { console.debug('parsedSkill', parsedSkill) @@ -222,7 +222,7 @@ export class CoC7ActorImporter { value: Number(parsedSkill.groups.percentage) }) } - }) + } } if (CONFIG.debug.CoC7Importer) { console.debug('skills', results) @@ -332,18 +332,18 @@ export class CoC7ActorImporter { async updateActorData (pc, npc) { let updateData = {} - ;['str', 'con', 'siz', 'dex', 'app', 'int', 'pow', 'edu'].forEach(key => { + for (const key of ['str', 'con', 'siz', 'dex', 'app', 'int', 'pow', 'edu']) { updateData[`data.characteristics.${key}.value`] = Number(pc[key]) - }) + } await npc.update(updateData) await npc.setLuck(Number(pc.lck)) await npc.setHp(Number(pc.hp)) await npc.setMp(Number(pc.mp)) updateData = {} - ;['san', 'mov', 'db', 'build', 'armor'].forEach(key => { + for (const key of ['san', 'mov', 'db', 'build', 'armor']) { updateData[`data.attribs.${key}.value`] = Number(pc[key]) - }) + } if (pc.age !== null) { updateData['data.infos.age'] = pc.age } @@ -549,11 +549,11 @@ export class CoC7ActorImporter { */ needsConversion (npc) { let needsConversionResult = true - ;['str', 'con', 'siz', 'dex', 'app', 'int', 'pow', 'edu'].forEach(key => { + for (const key of ['str', 'con', 'siz', 'dex', 'app', 'int', 'pow', 'edu']) { if (npc[key] > 30) { needsConversionResult = false } - }) + } if (CONFIG.debug.CoC7Importer) { console.debug('needsConversion:', needsConversionResult) } @@ -597,9 +597,9 @@ export class CoC7ActorImporter { if (CONFIG.debug.CoC7Importer) { console.debug('Converting creature', creature) } - ;['str', 'con', 'siz', 'dex', 'app', 'int', 'pow'].forEach(key => { + for (const key of ['str', 'con', 'siz', 'dex', 'app', 'int', 'pow']) { creature[key] *= 5 - }) + } if (creature.edu <= 18) { creature.edu *= 5 } else if (creature.edu <= 26) { diff --git a/module/apps/canvas.js b/module/apps/canvas.js index 6c95b218..50623549 100644 --- a/module/apps/canvas.js +++ b/module/apps/canvas.js @@ -43,7 +43,7 @@ export class CoC7Canvas { const whisperTargets = game.users.players.filter( u => !!u.character ) // User with at least a character - whisperTargets.forEach(u => { + for (const u of whisperTargets) { option.whisper = [u] chatHelper.createMessage( null, @@ -53,9 +53,9 @@ export class CoC7Canvas { }), option ) - }) + } } else { - dropTargetTokens.forEach(t => { + for (const t of dropTargetTokens) { if (t.actor.hasPlayerOwner) { option.whisper = t.actor.owners chatHelper.createMessage( @@ -67,7 +67,7 @@ export class CoC7Canvas { option ) } - }) + } } } break diff --git a/module/apps/link-creation-dialog.js b/module/apps/link-creation-dialog.js index 30e6856a..74fa5dc7 100644 --- a/module/apps/link-creation-dialog.js +++ b/module/apps/link-creation-dialog.js @@ -258,7 +258,7 @@ export class CoC7LinkCreationDialog extends FormApplication { option.speaker = { alias: game.user.name } - canvas.tokens.controlled.forEach(t => { + for (const t of canvas.tokens.controlled) { if (t.actor.hasPlayerOwner) { option.whisper = t.actor.owners chatHelper.createMessage( @@ -270,7 +270,7 @@ export class CoC7LinkCreationDialog extends FormApplication { option ) } - }) + } } break diff --git a/module/apps/parser.js b/module/apps/parser.js index 20d460a4..c95aad41 100644 --- a/module/apps/parser.js +++ b/module/apps/parser.js @@ -410,7 +410,7 @@ export class CoC7Parser { return } if (canvas.tokens.controlled.length) { - canvas.tokens.controlled.forEach(token => { + for (const token of canvas.tokens.controlled) { switch (options.check) { case 'check': if ( @@ -463,7 +463,7 @@ export class CoC7Parser { default: } - }) + } } else { if (game.user.data.document.character?.data) { await Promise.all( diff --git a/module/apps/point-selection-dialog.js b/module/apps/point-selection-dialog.js index fec2cb1a..80575ef7 100644 --- a/module/apps/point-selection-dialog.js +++ b/module/apps/point-selection-dialog.js @@ -13,11 +13,11 @@ export class PointSelectDialog extends Dialog { async _onSelectCharacteristic (event) { const li = event.currentTarget.closest('.item') const itemList = li.closest('.item-list') - itemList.querySelectorAll('.selectable').forEach(item => { + for (const item of itemList.querySelectorAll('.selectable')) { item.classList.remove('selected') this.data.data.characteristics[item.dataset.key].selected = false this.data.data.characteristics[item.dataset.key].optional = false - }) + } $(li).toggleClass('selected') this.data.data.characteristics[li.dataset.key].selected = true const totalPoints = li diff --git a/module/chat.js b/module/chat.js index 339d95af..83763910 100644 --- a/module/chat.js +++ b/module/chat.js @@ -374,17 +374,17 @@ export class CoC7Chat { static _onTargetSelect (event) { const index = parseInt(event.currentTarget.dataset.key) const targetsSelector = event.currentTarget.closest('.targets-selector') - targetsSelector.querySelectorAll('img').forEach(i => { + for (const i of targetsSelector.querySelectorAll('img')) { i.style.border = 'none' - }) + } targetsSelector .querySelector(`[data-key="${index}"]`) .querySelector('img').style.border = '1px solid #000' const targets = event.currentTarget.closest('.targets') - targets.querySelectorAll('.target').forEach(t => { + for (const t of targets.querySelectorAll('.target')) { t.style.display = 'none' t.dataset.active = 'false' - }) + } const targetToDisplay = targets.querySelector( `[data-target-key="${index}"]` ) @@ -407,9 +407,9 @@ export class CoC7Chat { const dropDownBoxes = event.currentTarget .closest('.response-selection') .querySelectorAll('.toggle-switch') - ;[].forEach.call(dropDownBoxes, dpdnBox => + for (const dpdnBox of dropDownBoxes) { dpdnBox.classList.remove('switched-on') - ) + } event.currentTarget.closest('.toggle-switch').classList.add('switched-on') // close dropdown @@ -490,9 +490,9 @@ export class CoC7Chat { const dropDownBoxes = event.currentTarget .closest('.response-selection') .querySelectorAll('.toggle-switch') - ;[].forEach.call(dropDownBoxes, dpdnBox => + for (const dpdnBox of dropDownBoxes) { dpdnBox.classList.remove('switched-on') - ) + } event.currentTarget.classList.add('switched-on') // Need to test if it's really a dodge !!! // Save action for the roll @@ -940,7 +940,7 @@ export class CoC7Chat { // if( originMessage.dataset.messageId) damageCard.messageId = originMessage.dataset.messageId; // damageCard.rollDamage(); // if( originMessage.dataset.messageId) { - // card.querySelectorAll('.card-buttons').forEach( b => b.remove()); + // for (const b of card.querySelectorAll('.card-buttons')) { b.remove() } // await CoC7Chat.updateChatCard( card); // } break diff --git a/module/chat/cards/combined-roll.js b/module/chat/cards/combined-roll.js index 33c1fbd5..9a8cb48d 100644 --- a/module/chat/cards/combined-roll.js +++ b/module/chat/cards/combined-roll.js @@ -40,9 +40,9 @@ export class CombinedCheckCard extends RollCard { get successCount () { if (this.rolled) { let count = 0 - this.rolls.forEach(r => { + for (const r of this.rolls) { if (r.passed) count += 1 - }) + } return count } return undefined diff --git a/module/chat/cards/opposed-roll.js b/module/chat/cards/opposed-roll.js index 0bd1a92a..7f4761de 100644 --- a/module/chat/cards/opposed-roll.js +++ b/module/chat/cards/opposed-roll.js @@ -126,9 +126,9 @@ export class OpposedCheckCard extends RollCard { get winnerCount () { let count = 0 - this.rolls.forEach(r => { + for (const r of this.rolls) { if (r.winner) count += 1 - }) + } return count } @@ -340,10 +340,10 @@ export class OpposedCheckCard extends RollCard { // Combat roll includes only 2 persons, remove the rest. if (this.rolls.length > 1) { this.rolls = [this.rolls[0], this.rolls[1]] - this.rolls.forEach(r => { + for (const r of this.rolls) { delete r.winner delete r.tie - }) + } } // First person added is the attacker. diff --git a/module/chat/cards/roll-card.js b/module/chat/cards/roll-card.js index f3be015a..2bc78b0f 100644 --- a/module/chat/cards/roll-card.js +++ b/module/chat/cards/roll-card.js @@ -59,7 +59,9 @@ export class RollCard { card.toggleFlag(flag) } else { const buttons = toggle.querySelectorAll('.toggle-switch') - buttons.forEach(b => card.unsetFlag(b.dataset.flag)) + for (const b of buttons) { + card.unsetFlag(b.dataset.flag) + } card.setFlag(flag) } card.updateChatCard() diff --git a/module/chat/cards/san-check.js b/module/chat/cards/san-check.js index 3dc292ae..c39e2e22 100644 --- a/module/chat/cards/san-check.js +++ b/module/chat/cards/san-check.js @@ -519,7 +519,7 @@ export class SanCheckCard extends ChatCardActor { static checkTargets (creatureKey, fastForward = false) { const targets = [...game.user.targets] if (targets.length) { - targets.forEach(t => { + for (const t of targets) { // TODO : ? Make async call to create ? if (t.actor.isToken) { SanCheckCard.create( @@ -534,7 +534,7 @@ export class SanCheckCard extends ChatCardActor { { fastForward: fastForward } ) } - }) + } } } diff --git a/module/chat/combat/melee-target.js b/module/chat/combat/melee-target.js index fe7914b2..4897240c 100644 --- a/module/chat/combat/melee-target.js +++ b/module/chat/combat/melee-target.js @@ -172,7 +172,7 @@ export class CoC7MeleeTarget extends ChatCardActor { content = '

' + game.i18n.localize('CoC7.MessageSelectSingleUserForTarget') content = content + '

' await Dialog.prompt({ title: game.i18n.localize( @@ -191,11 +191,11 @@ export class CoC7MeleeTarget extends ChatCardActor { const formData = new FormData( html[0].querySelector('#selectform') ) - formData.forEach(function (value, name) { + for (const [name, value] of formData) { if (name === 'user') { user = game.users.get(value) } - }) + } } }) } diff --git a/module/chat/helper.js b/module/chat/helper.js index 8af4f342..e8cadf81 100644 --- a/module/chat/helper.js +++ b/module/chat/helper.js @@ -143,7 +143,7 @@ export class chatHelper { } static attachObjectToElement (object, element, objectName = '') { - Object.keys(object).forEach(prop => { + for (const prop of Object.keys(object)) { if (!prop.startsWith('_')) { if (typeof object[prop] === 'object') { chatHelper.attachObjectToElement( @@ -155,7 +155,7 @@ export class chatHelper { element.dataset[`${objectName}${prop}`] = object[prop] } } - }) + } } static getObjectFromElement (object, element) { @@ -175,10 +175,10 @@ export class chatHelper { } if (!element || !object) return - Object.keys(element.dataset).forEach(prop => { + for (const prop of Object.keys(element.dataset)) { if (prop === 'template') return deserialize(object, prop, element.dataset[prop]) - }) + } } static getTokenFromKey (key) { @@ -345,9 +345,9 @@ export class CoC7Roll { showDiceRoll () { if (game.modules.get('dice-so-nice')?.active) { const diceResults = [] - this.dices.tens.forEach(dieResult => { + for (const dieResult of this.dices.tens) { diceResults.push(dieResult.value === 100 ? 0 : dieResult.value / 10) - }) + } diceResults.push(this.dices.unit.value) const diceData = { @@ -380,7 +380,7 @@ export class CoC7Roll { : game.i18n.format('CoC7.DiceModifierBonus') const tenDice = element.querySelector('.ten-dice') if (tenDice) { - tenDice.querySelectorAll('li').forEach(d => { + for (const d of tenDice.querySelectorAll('li')) { const die = { selected: false, isMax: false, @@ -389,7 +389,7 @@ export class CoC7Roll { } chatHelper.getObjectFromElement(die, d) roll.dices.tens.push(die) - }) + } } const unitDie = element.querySelector('.unit-die') ? element.querySelector('.unit-die').querySelector('li') @@ -399,11 +399,11 @@ export class CoC7Roll { roll.increaseSuccess = [] const increaseSuccess = element.querySelector('.increase-success') if (increaseSuccess && increaseSuccess.querySelectorAll('button')) { - increaseSuccess.querySelectorAll('button').forEach(isl => { + for (const isl of increaseSuccess.querySelectorAll('button')) { const newSuccesLevel = {} chatHelper.getObjectFromElement(newSuccesLevel, isl) roll.increaseSuccess.push(newSuccesLevel) - }) + } } if (roll.luckNeeded) { @@ -475,11 +475,11 @@ export class CoC7Damage { chatHelper.getObjectFromElement(damage, element) const rolls = element.querySelector('.dice-rolls').querySelectorAll('li') damage.rolls = [] - rolls.forEach(r => { + for (const r of rolls) { const roll = {} chatHelper.getObjectFromElement(roll, r) damage.rolls.push(roll) - }) + } if (!object) return damage } diff --git a/module/chat/interactive-chat-card.js b/module/chat/interactive-chat-card.js index 59d2c5ae..78475926 100644 --- a/module/chat/interactive-chat-card.js +++ b/module/chat/interactive-chat-card.js @@ -273,7 +273,9 @@ export class InteractiveChatCard { this.toggleFlag(flag) } else { const buttons = toggle.querySelectorAll('.ic-radio-switch') - buttons.forEach(b => this.unsetFlag(b.dataset.flag)) + for (const b of buttons) { + this.unsetFlag(b.dataset.flag) + } this.setFlag(flag) } const card = target.closest('.interactive-card') diff --git a/module/chat/rangecombat.js b/module/chat/rangecombat.js index 0aba8d20..680f3892 100644 --- a/module/chat/rangecombat.js +++ b/module/chat/rangecombat.js @@ -27,11 +27,11 @@ export class CoC7RangeInitiator { this.aimed = false this.totalBulletsFired = 0 this._targets = [] - ;[...game.user.targets].forEach(t => { + for (const t of [...game.user.targets]) { const target = new CoC7RangeTarget(`${t.scene.id}.${t.id}`) // target.token = t this._targets.push(target) - }) + } if (this._targets.length) this._targets[0].active = true else { const target = new CoC7RangeTarget() @@ -51,7 +51,7 @@ export class CoC7RangeInitiator { } } if (this.tokenKey) { - this._targets.forEach(t => { + for (const t of this._targets) { if (t.token && this.token) { t.distance = chatHelper.getDistance(t.token, this.token) t.roundedDistance = Math.round(t.distance.value * 100) / 100 @@ -111,7 +111,7 @@ export class CoC7RangeInitiator { } // } } else t.baseRange = true - }) + } } } @@ -201,9 +201,9 @@ export class CoC7RangeInitiator { get didAnyShotHit () { let anyHit = false - this.rolls.forEach(r => { + for (const r of this.rolls) { anyHit = anyHit || r.isSuccess - }) + } return anyHit } @@ -294,9 +294,9 @@ export class CoC7RangeInitiator { } calcTargetsDifficulty () { - this.targets.forEach(t => { + for (const t of this.targets) { t.shotDifficulty = this.shotDifficulty(t) - }) + } } shotDifficulty (t = null) { @@ -662,18 +662,18 @@ export class CoC7RangeInitiator { chatHelper.getObjectFromElement(rangeInitiator, card) const cardTargets = card.querySelectorAll('.target') - cardTargets.forEach(t => { + for (const t of cardTargets) { const target = CoC7RangeTarget.getFromElement(t) rangeInitiator.targets.push(target) - }) + } const cardShots = card.querySelectorAll('.shot') if (cardShots) { - cardShots.forEach(s => { + for (const s of cardShots) { const shot = {} chatHelper.getObjectFromElement(shot, s) rangeInitiator.shots.push(shot) - }) + } } // else { // const shot = { @@ -685,17 +685,17 @@ export class CoC7RangeInitiator { rangeInitiator.rolls = [] const rolls = card.querySelectorAll('.roll-result') - rolls.forEach(r => { + for (const r of rolls) { const roll = CoC7Roll.getFromElement(r) rangeInitiator.rolls.push(roll) - }) + } rangeInitiator.damage = [] const damageRolls = card.querySelectorAll('.damage-results') - damageRolls.forEach(dr => { + for (const dr of damageRolls) { const damageRoll = CoC7Damage.getFromElement(dr) rangeInitiator.damage.push(damageRoll) - }) + } return rangeInitiator } diff --git a/module/chat/sancheck.js b/module/chat/sancheck.js index ed1f6b0d..daa751cb 100644 --- a/module/chat/sancheck.js +++ b/module/chat/sancheck.js @@ -102,7 +102,7 @@ export class CoC7SanCheck { static checkTargets (sanMin, sanMax, fastForward = false, tokenKey = null) { const targets = [...game.user.targets] if (targets.length) { - targets.forEach(t => { + for (const t of targets) { let check if (t.actor.isToken) { check = new CoC7SanCheck(t.actor.tokenKey, sanMin, sanMax) @@ -110,7 +110,7 @@ export class CoC7SanCheck { check = new CoC7SanCheck(t.actor.id, sanMin, sanMax) } check.toMessage(fastForward) - }) + } } else { if (tokenKey) { const speaker = chatHelper.getSpeakerFromKey(tokenKey) diff --git a/module/check.js b/module/check.js index 946a02bf..e3cdfb2c 100644 --- a/module/check.js +++ b/module/check.js @@ -1001,9 +1001,9 @@ export class CoC7Check { showDiceRoll () { if (game.modules.get('dice-so-nice')?.active) { const diceResults = [] - this.dices.tens.forEach(dieResult => { + for (const dieResult of this.dices.tens) { diceResults.push(dieResult.value === 100 ? 0 : dieResult.value / 10) - }) + } diceResults.push(this.dices.unit.value) const diceData = { @@ -1088,9 +1088,9 @@ export class CoC7Check { for (let index = 0; index < upgradeindex + 1; index++) { this.increaseSuccess.shift() } - this.increaseSuccess.forEach(s => { + for (const s of this.increaseSuccess) { s.luckToSpend = s.luckToSpend - luckAmount - }) + } this.luckSpent = true this.computeCheck() if (update) return await this.updateChatCard() @@ -1108,9 +1108,9 @@ export class CoC7Check { if (luckAmount) { this.actor.spendLuck(luckAmount) this.successLevel = this.difficulty - this.increaseSuccess.forEach(s => { + for (const s of this.increaseSuccess) { s.luckToSpend = s.luckToSpend - luckAmount - }) + } this.luckSpent = true this.isSuccess = true this.totalLuckSpent = !parseInt(this.totalLuckSpent) diff --git a/module/coc7.js b/module/coc7.js index 799a9659..b7311b9d 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -256,9 +256,9 @@ Hooks.on('ready', async () => { // } const tableChoice = { none: 'SETTINGS.LetKeeperDecide' } - game.tables.forEach(t => { + for (const t of game.tables) { tableChoice[t.data._id] = t.data.name - }) + } game.settings.register('CoC7', 'boutOfMadnessSummaryTable', { name: 'SETTINGS.BoutOfMadnessSummaryTable', diff --git a/module/dice.js b/module/dice.js index 96e2b85b..2751e1e9 100644 --- a/module/dice.js +++ b/module/dice.js @@ -31,14 +31,14 @@ export class CoC7Dice { } if (rollMode) result.rollMode = rollMode if (hideDice) result.hideDice = hideDice - roll.dice.forEach(d => { + for (const d of roll.dice) { if (d instanceof CONFIG.Dice.terms.t) { result.tens.results.push(d.total) } else { result.unit.total = d.total === 10 ? 0 : d.total result.unit.results.push(result.unit.total) } - }) + } if (modif < 0) { result.tens.total = result.unit.total === 0 && result.tens.results.includes(0) diff --git a/module/items/book/data.js b/module/items/book/data.js index a3f6680e..5098a869 100644 --- a/module/items/book/data.js +++ b/module/items/book/data.js @@ -37,9 +37,9 @@ export class CoC7Book extends CoC7Item { const collection = this.data.data.spells ? duplicate(this.data.data.spells) : [] - spells.forEach(spell => { + for (const spell of spells) { collection.push(spell) - }) + } return await this.update({ 'data.spells': collection }) } diff --git a/module/items/item.js b/module/items/item.js index 2bae3f59..496aecab 100644 --- a/module/items/item.js +++ b/module/items/item.js @@ -544,6 +544,30 @@ export class CoC7Item extends Item { return skillProperties } + static async calculateBase (actor, data) { + if (data.type !== 'skill') return null + if (String(data.data.base).includes('@')) { + const parsed = {} + for (const [key, value] of Object.entries(COC7.formula.actorsheet)) { + if (key.startsWith('@') && value.startsWith('this.actor.')) { + parsed[key.substring(1)] = getProperty(actor, value.substring(11)) + } + } + let value + try { + value = Math.floor( + new Roll(data.data.base, parsed).evaluate({ + maximize: true + }).total + ) + } catch (err) { + value = 0 + } + return value + } + return (!isNaN(parseInt(data.data.base)) ? parseInt(data.data.base) : null) + } + get _base () { if (this.type !== 'skill') return [null, false] if (typeof this.data.data.base !== 'string') { diff --git a/module/items/sheets/archetype.js b/module/items/sheets/archetype.js index dd06d09e..401432c7 100644 --- a/module/items/sheets/archetype.js +++ b/module/items/sheets/archetype.js @@ -67,7 +67,7 @@ export class CoC7ArchetypeSheet extends ItemSheet { } else { const div = $(`
${chatData.value}
`) const props = $('
') - // chatData.properties.forEach(p => props.append(`${p}`)); + // for (const p of chatData.properties) { props.append(`${p}`) } div.append(props) li.append(div.hide()) div.slideDown(200) @@ -147,7 +147,7 @@ export class CoC7ArchetypeSheet extends ItemSheet { } data.skillListEmpty = data.data.skills.length === 0 - data.data.skills.forEach(skill => { + for (const skill of data.data.skills) { // For each skill if it's a spec and spac name not included in the name add it if ( skill.data.specialization && @@ -155,7 +155,7 @@ export class CoC7ArchetypeSheet extends ItemSheet { ) { skill.displayName = `${skill.data.specialization} (${skill.name})` } else skill.displayName = skill.name - }) + } data.data.skills.sort((a, b) => { return a.displayName.localeCompare(b.displayName) diff --git a/module/items/sheets/chase.js b/module/items/sheets/chase.js index 58331c89..960cf0c4 100644 --- a/module/items/sheets/chase.js +++ b/module/items/sheets/chase.js @@ -56,9 +56,9 @@ export class CoC7ChaseSheet extends ItemSheet { /*****************/ data.participants = [] - this.participants.forEach(p => { + for (const p of this.participants) { data.participants.push(new _participant(p)) - }) + } data.preys = data.participants .filter(p => !p.isChaser && p.isValid) @@ -690,18 +690,18 @@ export class _participant { } if (this.hasActor) { check.options = [] - ;['con'].forEach(c => { + for (const c of ['con']) { const characterisitc = this.actor.getCharacteristic(c) if (characterisitc?.value) check.options.push(characterisitc.label) - }) + } - this.actor.driveSkills.forEach(s => { + for (const s of this.actor.driveSkills) { check.options.push(s.name) - }) + } - this.actor.pilotSkills.forEach(s => { + for (const s of this.actor.pilotSkills) { check.options.push(s.name) - }) + } check.hasOptions = !!check.options.length if (this.data.speedCheck?.id) { diff --git a/module/items/sheets/occupation.js b/module/items/sheets/occupation.js index 8e82abac..7f3328b0 100644 --- a/module/items/sheets/occupation.js +++ b/module/items/sheets/occupation.js @@ -133,7 +133,7 @@ export class CoC7OccupationSheet extends ItemSheet { } else { const div = $(`
${chatData.value}
`) const props = $('
') - // chatData.properties.forEach(p => props.append(`${p}`)); + // for (const p of chatData.properties) { props.append(`${p}`) } div.append(props) li.append(div.hide()) div.slideDown(200) @@ -231,7 +231,7 @@ export class CoC7OccupationSheet extends ItemSheet { } data.skillListEmpty = data.data.skills.length === 0 - data.data.skills.forEach(skill => { + for (const skill of data.data.skills) { // For each skill if it's a spec and spac name not included in the name add it if ( skill.data.specialization && @@ -239,7 +239,7 @@ export class CoC7OccupationSheet extends ItemSheet { ) { skill.displayName = `${skill.data.specialization} (${skill.name})` } else skill.displayName = skill.name - }) + } data.data.skills.sort((a, b) => { return a.displayName.localeCompare(b.displayName) @@ -248,7 +248,7 @@ export class CoC7OccupationSheet extends ItemSheet { for (let index = 0; index < data.data.groups.length; index++) { data.data.groups[index].isEmpty = data.data.groups[index].skills.length === 0 - data.data.groups[index].skills.forEach(skill => { + for (const skill of data.data.groups[index].skills) { // For each skill of each sub group if it's a spec and spac name not included in the name add it if ( skill.data.specialization && @@ -256,7 +256,7 @@ export class CoC7OccupationSheet extends ItemSheet { ) { skill.displayName = `${skill.data.specialization} (${skill.name})` } else skill.displayName = skill.name - }) + } data.data.groups[index].skills.sort((a, b) => { return a.displayName.localeCompare(b.displayName) diff --git a/module/items/sheets/setup.js b/module/items/sheets/setup.js index 2f3273a5..1eda6242 100644 --- a/module/items/sheets/setup.js +++ b/module/items/sheets/setup.js @@ -95,7 +95,7 @@ export class CoC7SetupSheet extends ItemSheet { } else { const div = $(`
${chatData.value}
`) const props = $('
') - // chatData.properties.forEach(p => props.append(`${p}`)); + // for (const p of chatData.properties) { props.append(`${p}`) } div.append(props) li.append(div.hide()) div.slideDown(200) @@ -177,14 +177,14 @@ export class CoC7SetupSheet extends ItemSheet { data.otherItems = data.data.items.filter(it => it.type !== 'skill') data.skillListEmpty = data.skills.length === 0 - data.skills.forEach(skill => { + for (const skill of data.skills) { if ( skill.data.specialization && !skill.name.includes(skill.data.specialization) ) { skill.displayName = `${skill.data.specialization} (${skill.name})` } else skill.displayName = skill.name - }) + } data.skills.sort((a, b) => { return a.displayName.localeCompare(b.displayName) diff --git a/module/utilities.js b/module/utilities.js index 3f50e4b8..622006d6 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -56,16 +56,16 @@ export class CoC7Utilities { const thresholdStr = escaped.match(/[^(]+(?=\))/) if (thresholdStr && thresholdStr.length) { threshold = Number(thresholdStr[0]) - thresholdStr.forEach(match => { + for (const match of thresholdStr) { escaped = escaped.replace(`(${match})`, '') - }) + } } const difficultyStr = escaped.match(/[^[]+(?=\])/) if (difficultyStr && difficultyStr.length) { difficulty = CoC7Utilities.convertDifficulty(difficultyStr[0]) - difficultyStr.forEach(match => { + for (const match of difficultyStr) { escaped = escaped.replace(`[${match}]`, '') - }) + } } if (escaped.includes('?')) { ask = true @@ -433,84 +433,86 @@ export class CoC7Utilities { static async startRest () { const actors = game.actors.filter(actor => actor.hasPlayerOwner) let chatContent = `${game.i18n.localize('CoC7.dreaming')}...
` - actors.forEach(actor => { - let quickHealer = false - actor.data.items.forEach(item => { - if (item.type === 'talent') { - if (item.name === `${game.i18n.localize('CoC7.quickHealer')}`) { - quickHealer = true + for (const actor of actors) { + if (['character', 'npc', 'creature'].includes(actor.type)) { + let quickHealer = false + for (const item of actor.data.items) { + if (item.type === 'talent') { + if (item.name === `${game.i18n.localize('CoC7.quickHealer')}`) { + quickHealer = true + } } } - }) - const isCriticalWounds = actor.data.data.status.criticalWounds.value - const dailySanityLoss = actor.data.data.attribs.san.dailyLoss - const hpValue = actor.data.data.attribs.hp.value - const hpMax = actor.data.data.attribs.hp.max - const oneFifthSanity = - ' / ' + Math.floor(actor.data.data.attribs.san.value / 5) - const mpValue = actor.data.data.attribs.mp.value - const mpMax = actor.data.data.attribs.mp.max - chatContent = chatContent + `
${actor.name}. ` - if (isCriticalWounds === false && hpValue < hpMax) { - if (game.settings.get('CoC7', 'pulpRules') && quickHealer === true) { + const isCriticalWounds = actor.data.data.status.criticalWounds.value + const dailySanityLoss = actor.data.data.attribs.san.dailyLoss + const hpValue = actor.data.data.attribs.hp.value + const hpMax = actor.data.data.attribs.hp.max + const oneFifthSanity = + ' / ' + Math.floor(actor.data.data.attribs.san.value / 5) + const mpValue = actor.data.data.attribs.mp.value + const mpMax = actor.data.data.attribs.mp.max + chatContent = chatContent + `
${actor.name}. ` + if (isCriticalWounds === false && hpValue < hpMax) { + if (game.settings.get('CoC7', 'pulpRules') && quickHealer === true) { + chatContent = + chatContent + + `${game.i18n.format( + 'CoC7.pulpHealthRecovered', + { number: 3 } + )}. ` + actor.update({ + 'data.attribs.hp.value': actor.data.data.attribs.hp.value + 3 + }) + } else if (game.settings.get('CoC7', 'pulpRules')) { + chatContent = + chatContent + + `${game.i18n.format( + 'CoC7.pulpHealthRecovered', + { number: 2 } + )}. ` + actor.update({ + 'data.attribs.hp.value': actor.data.data.attribs.hp.value + 2 + }) + } else { + chatContent = + chatContent + + `${game.i18n.localize( + 'CoC7.healthRecovered' + )}. ` + actor.update({ + 'data.attribs.hp.value': actor.data.data.attribs.hp.value + 1 + }) + } + } else if (isCriticalWounds === true && hpValue < hpMax) { chatContent = chatContent + - `${game.i18n.format( - 'CoC7.pulpHealthRecovered', - { number: 3 } + `${game.i18n.localize( + 'CoC7.hasCriticalWounds' )}. ` - actor.update({ - 'data.attribs.hp.value': actor.data.data.attribs.hp.value + 3 - }) - } else if (game.settings.get('CoC7', 'pulpRules')) { + } + if (dailySanityLoss > 0) { chatContent = chatContent + - `${game.i18n.format( - 'CoC7.pulpHealthRecovered', - { number: 2 } - )}. ` + `${game.i18n.localize( + 'CoC7.dailySanLossRestarted' + )}.` actor.update({ - 'data.attribs.hp.value': actor.data.data.attribs.hp.value + 2 + 'data.attribs.san.dailyLoss': 0, + 'data.attribs.san.oneFifthSanity': oneFifthSanity }) - } else { + } + if (mpValue < mpMax) { chatContent = chatContent + - `${game.i18n.localize( - 'CoC7.healthRecovered' - )}. ` + `${game.i18n.format( + 'CoC7.magicPointsRecovered' + )}: 7.` actor.update({ - 'data.attribs.hp.value': actor.data.data.attribs.hp.value + 1 + 'data.attribs.mp.value': actor.data.data.attribs.mp.value + 7 }) } - } else if (isCriticalWounds === true && hpValue < hpMax) { - chatContent = - chatContent + - `${game.i18n.localize( - 'CoC7.hasCriticalWounds' - )}. ` - } - if (dailySanityLoss > 0) { - chatContent = - chatContent + - `${game.i18n.localize( - 'CoC7.dailySanLossRestarted' - )}.` - actor.update({ - 'data.attribs.san.dailyLoss': 0, - 'data.attribs.san.oneFifthSanity': oneFifthSanity - }) - } - if (mpValue < mpMax) { - chatContent = - chatContent + - `${game.i18n.format( - 'CoC7.magicPointsRecovered' - )}: 7.` - actor.update({ - 'data.attribs.mp.value': actor.data.data.attribs.mp.value + 7 - }) } - }) + } const chatData = { user: game.user.id, speaker: ChatMessage.getSpeaker(), @@ -560,9 +562,9 @@ export class CoC7Utilities { const actors = [] if (game.user.isGM && canvas.tokens.controlled.length) { - canvas.tokens.controlled.forEach(token => { + for (const token of canvas.tokens.controlled) { actors.push(token.actor.tokenKey) - }) + } } else if (game.user.character) { actors.push(game.user.character.tokenKey) } @@ -593,19 +595,19 @@ export class CoC7Utilities { static updateCharSheets () { if (game.user.isGM) { - game.actors.contents.forEach(a => { + for (const a of game.actors.contents) { if (a?.data?.type === 'character' && a?.sheet && a?.sheet?.rendered) { a.update({ 'data.flags.locked': true }) a.render(false) } - }) + } } else { - game.actors.contents.forEach(a => { + for (const a of game.actors.contents) { if (a.isOwner) { a.update({ 'data.flags.locked': true }) a.render(false) } - }) + } } } From b48f0d8daa10a5a9e551b1681181e06726f12a5b Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 18 Sep 2021 09:35:32 +0100 Subject: [PATCH 082/726] Add hook to actor lock Fix Actor Importer created folder translation key --- module/actors/sheets/base.js | 3 ++- module/apps/actor-importer.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 5f3831de..940fe706 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -1,4 +1,4 @@ -/* global $, ActorSheet, ChatMessage, CONST, Dialog, game, getProperty, mergeObject, Roll, TextEditor, ui */ +/* global $, ActorSheet, ChatMessage, CONST, Dialog, game, getProperty, Hooks, mergeObject, Roll, TextEditor, ui */ import { RollDialog } from '../../apps/roll-dialog.js' import { CoC7Check } from '../../check.js' @@ -1099,6 +1099,7 @@ export class CoC7ActorSheet extends ActorSheet { event.preventDefault() const isLocked = this.actor.locked this.actor.locked = !isLocked + Hooks.call('actorLockClickedCoC7', [!isLocked]) } async _onFlagClicked (event) { diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index 664b9a2b..28711e0b 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -324,7 +324,7 @@ export class CoC7ActorImporter { parent: null }) ui.notifications.info( - game.i18n.localize('COC7.CreatedImportedCharactersFolder') + game.i18n.localize('CoC7.CreatedImportedCharactersFolder') ) } return importedCharactersFolder From a661e26e6d0e6747dc8bfa37a29624ba02d9195f Mon Sep 17 00:00:00 2001 From: Castanho Date: Sat, 18 Sep 2021 11:56:29 -0300 Subject: [PATCH 083/726] Fix case on zh-TW.json file path --- system.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system.json b/system.json index 096094a2..941f0100 100644 --- a/system.json +++ b/system.json @@ -94,7 +94,7 @@ { "lang": "zh-tw", "name": "正體中文", - "path": "lang/zh-tw.json" + "path": "lang/zh-TW.json" }, { "lang": "sv", From e7c980eff9bbc9c28df210528713a4e09e04e707 Mon Sep 17 00:00:00 2001 From: Rangertheman <81484515+Rangertheman@users.noreply.github.com> Date: Sun, 19 Sep 2021 11:37:13 +0200 Subject: [PATCH 084/726] Update sv.json --- lang/sv.json | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lang/sv.json b/lang/sv.json index b23407ba..cebcb23c 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -4,6 +4,7 @@ "I18N.MAINTAINERS": "@Rangertheman#4927", "CoC7.Entities.Character": "Utredare", + "CoC7.Entities.Container": "Behållare", "CoC7.Entities.Creature": "Varelse", "CoC7.Entities.Npc": "Spelledarperson", "CoC7.Entities.Vehicle": "Fordon", @@ -91,6 +92,7 @@ "CoC7.Spells": "Besvärjelser", "CoC7.Spell": "Besvärjelse", "CoC7.Spells&Notes": "Besvärjelser & anteckningar", + "CoC7.Weapons": "Vapen", "CoC7.Effects": "Effekter", "CoC7.Cost": "Kostnad", "CoC7.Source": "Källa", @@ -118,6 +120,7 @@ "CoC7.Icon": "Ikon", "CoC7.Check": "Kontrollera", "CoC7.ItemWeapon": "Föremål (Weapon)", + "CoC7.AttacksPerRound": "Anfall per runda", "CoC7.CopyToClipboard": "Kopiera till urklipp", "CoC7.WhisperToSelection": "Viska till den valda markören", @@ -401,6 +404,13 @@ "CoC7.AddItem": "Lägg till föremål", "CoC7.EditItem": "Redigera föremål", "CoC7.DeleteItem": "Ta bort föremål", + "CoC7.TradeItem": "Överför/lagra föremål", + + "CoC7.NewBookName": "ny bok", + "CoC7.AddBook": "Lägg till bok", + "CoC7.NewSpellName": "ny besvärjelse", + "CoC7.AddSpell": "Lägg till besvärjelse", + "CoC7.AddWeapon": "Lägg till vapen", "CoC7.NewWeaponName": "nytt vapen", "CoC7.EditWeapon": "Redigera vapen", @@ -709,6 +719,13 @@ "CoC7.Maximize": "Maximera", "CoC7.Summarize": "Summera", + "CoC7.UnableToInteractWithChatCard": "Du kan inte interagera med det här medelandet. Om du behöver ändra något, vänligen be din Väktare välja det alternativet åt dig", + "CoC7.UnableToCopyToClipboard": "Kan inte kopiera till Urklippshanteraren, förmodligen på grund av säkerhetsinställningarna i din webbläsare.", + "CoC7.WarningCharacterSheetV1Depreciated": "Den här layouten är inte längre i bruk och fungerar kanske inte som den ska. Den kommer att tas bort i samband med updateringen till FoundryVTT v9. Vänligen be din Väktare att ändra karaktärsbladtypen till CoC7.CoC7CharacterSheetV2", + + "CoC7.MessageTitleSelectUserToGiveTo": "Ge föremål till en annan karaktär", + "CoC7.MessageSelectUserToGiveTo": "Vilken karaktär vill du ge det här föremålet till?", + "SETTINGS.TitleRules": "Regler", "SETTINGS.TitleInitiative": "Initiativinställningar", "SETTINGS.TitleRoll": "Tärningsslagsinställningar", @@ -725,6 +742,7 @@ "SETTINGS.DefaultDifficultyHint": "Du kan välja svårighetsgrad för slagen. Väljer du 'okänd' vet spelarna inte om vilken svårighetsgraden är innan de slår.", "SETTINGS.CheckDifficultyRegular": "Förvald svårighetsgrad", "SETTINGS.CheckDifficultyUnknown": "Okänd svårighetsgrad", + "SETTINGS.showIconsOnly": "Visa enbart ikoner i färdighetslistan, när det sammanfattade rollformuläret används.", "SETTINGS.UseToken": "Använd markörbilden", "SETTINGS.UseTokenHint": "Använd markörbild istället för porträtt på chattkortet", "SETTINGS.DisplayActorOnCard": "Visa karaktären på kortet", @@ -809,5 +827,8 @@ "SETTINGS.OneBlockBackStory": "Bakgrundshistoria i ett block", "SETTINGS.OneBlockBackStoryHint": "Ändrar så att bakgrundshistorian är ett block, men du kan fortfarande formatera/lägga till länkar.", "SETTINGS.EnableStatusIcons": "Aktivera statusikoner", - "SETTINGS.EnableStatusIconsHint": "Ange om statusikoner för strid och vansinne ska visas på markören." + "SETTINGS.EnableStatusIconsHint": "Ange om statusikoner för strid och vansinne ska visas på markören.", + "SETTINGS.ShowExperimentalFeatures": "Visa experimentella funktioner", + "SETTINGS.ShowExperimentalFeaturesHint": "Om du använder de här funktionerna kan din spelvärld komma att bli oanvändbar vid framtida versionsuppdateringar. De är endast för testning och ska INTE användas i dina spelvärldar", + "CoC7.ExperimentalFeaturesWarning": "Den här funktionen är under utveckling och rekommenderas inte för användning i dina spelvärldar." } From 2d5edd23f58355e45d5630db396f10ea9aa23c50 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 19 Sep 2021 13:00:29 +0100 Subject: [PATCH 085/726] Optionally include elevation in range combat distances Show warning message if unable to calculate distance Update ranged calculation from actor sheet to scene token, if there is only one copy of the actor's token in the scene use that token in the range calculation --- lang/en.json | 5 ++++- module/chat/helper.js | 19 ++++++++++++++++++- module/scripts/register-settings.js | 8 ++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/lang/en.json b/lang/en.json index 4bf2619c..ff6ae944 100644 --- a/lang/en.json +++ b/lang/en.json @@ -717,6 +717,7 @@ "CoC7.MessageTitleSelectUserToGiveTo": "Give item to another character", "CoC7.MessageSelectUserToGiveTo": "Which character would you like to give this item to?", + "CoC7.MessageDistanceCalculationFailure": "Unable to calculate distance between tokens, please use the token character sheet.", "SETTINGS.TitleRules": "Rules", "SETTINGS.TitleInitiative": "Initiative Settings", @@ -822,5 +823,7 @@ "SETTINGS.EnableStatusIconsHint": "Set if combat and sanity effects icons are shown in tokens.", "SETTINGS.ShowExperimentalFeatures": "Show Experimental Features", "SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds", - "CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world." + "CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.", + "SETTINGS.CheckElevation": "Include elevation in distance", + "SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations" } diff --git a/module/chat/helper.js b/module/chat/helper.js index e8cadf81..b4b14871 100644 --- a/module/chat/helper.js +++ b/module/chat/helper.js @@ -1,4 +1,4 @@ -/* global canvas, ChatMessage, CONST, duplicate, game, Ray, Token */ +/* global canvas, ChatMessage, CONST, duplicate, game, Ray, Token, ui */ import { CoC7Check } from '../check.js' @@ -253,6 +253,17 @@ export class chatHelper { static getDistance (startToken, endToken) { // startToken.updateSource(); // canvas.sight.initializeTokens(); + if (typeof endToken.center === 'undefined' && typeof endToken.data.document?.id !== 'undefined') { + if (startToken.scene?.id || false) { + const scene = game.scenes.get(startToken.scene.id) + if (typeof scene?.tokens !== 'undefined') { + const tokens = scene?.tokens.filter(token => token.actor.id === endToken.data.document.id).map(token => token.object) + if (tokens.length === 1) { + endToken = tokens[0] + } + } + } + } let distance = { gridUnit: 0, value: 0, @@ -274,6 +285,12 @@ export class chatHelper { })[0], unit: canvas.scene.data.gridUnits } + if (game.settings.get('CoC7', 'distanceElevation')) { + const elevation = Math.abs((startToken.data.elevation || 0) - (endToken.data.elevation || 0)) + distance.value = Math.sqrt(distance.value * distance.value + elevation * elevation) + } + } else { + ui.notifications.warn(game.i18n.localize('CoC7.MessageDistanceCalculationFailure')) } return distance } diff --git a/module/scripts/register-settings.js b/module/scripts/register-settings.js index dfe86fcf..bb2f7240 100644 --- a/module/scripts/register-settings.js +++ b/module/scripts/register-settings.js @@ -177,6 +177,14 @@ export function registerSettings () { default: false, type: Boolean }) + game.settings.register('CoC7', 'distanceElevation', { + name: 'SETTINGS.CheckElevation', + hint: 'SETTINGS.CheckElevationHint', + scope: 'world', + config: true, + default: true, + type: Boolean + }) /** * Sheet settings From 8dbe2ee8219a41274bc83671f980575ab1c4c990 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 19 Sep 2021 12:06:54 +0000 Subject: [PATCH 086/726] Updated translations list --- .github/TRANSLATIONS.md | 51 ++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 294fa5ad..521467f9 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,11 +4,11 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **331** | **107** | **124** | **19** | **19** | **126** | **19** | **19** | **17** | **2** | +| **Remaining**: | **334** | **110** | **127** | **22** | **22** | **129** | **22** | **22** | **3** | **5** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -20,7 +20,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | | [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -74,7 +74,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | @@ -87,7 +87,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -151,11 +151,12 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | @@ -169,8 +170,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | @@ -226,16 +227,16 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -300,6 +301,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | @@ -319,8 +322,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | @@ -336,7 +339,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ##### CoC7.ActorImporter @@ -922,6 +925,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.MessageCheckRequestedWait": "{check} roll requested by your Keeper.
Wait before clicking!
",` +##### CoC7.MessageDistanceCalculationFailure + +`"CoC7.MessageDistanceCalculationFailure": "Unable to calculate distance between tokens, please use the token character sheet.",` + ##### CoC7.MessageSelectSingleUserForTarget `"CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.",` @@ -1518,6 +1525,14 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"SETTINGS.BoutOfMadnessSummaryTable": "Bout of madness (Summary) table",` +##### SETTINGS.CheckElevation + +`"SETTINGS.CheckElevation": "Include elevation in distance",` + +##### SETTINGS.CheckElevationHint + +`"SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations",` + ##### SETTINGS.CreationModeOnly `"SETTINGS.CreationModeOnly": "in creation mode only",` From badb9e05e2a5aea41823b23b8aef38e0ec8382b8 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 19 Sep 2021 16:38:22 +0100 Subject: [PATCH 087/726] Add hook toggleCharCreation and renderCoC7SceneMenu --- module/menu.js | 4 +++- module/utilities.js | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/module/menu.js b/module/menu.js index b10f038c..fd6ce11c 100644 --- a/module/menu.js +++ b/module/menu.js @@ -1,4 +1,4 @@ -/* global $, canvas, duplicate, game, renderTemplate, ui */ +/* global $, canvas, duplicate, game, Hooks, renderTemplate, ui */ import { CoC7Chat } from './chat.js' import { CoC7Utilities } from './utilities.js' @@ -141,6 +141,8 @@ export class CoC7Menu { return s }) + Hooks.call('renderCoC7SceneMenu', controls[0].css.indexOf('active') !== -1) + // Return data for rendering return { active: isActive, diff --git a/module/utilities.js b/module/utilities.js index 622006d6..bf448b41 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -1,4 +1,4 @@ -/* global canvas, ChatMessage, CONST, game, getDocumentClass, Macro, Roll, ui */ +/* global canvas, ChatMessage, CONST, game, getDocumentClass, Hooks, Macro, Roll, ui */ import { CoC7Check } from './check.js' import { CoC7Item } from './items/item.js' @@ -428,6 +428,7 @@ export class CoC7Utilities { type: 'updateChar' }) CoC7Utilities.updateCharSheets() + Hooks.call('toggleCharCreation', !isCharCreation) } static async startRest () { From 123df46bdc11dfd1dc017316c44bc8cae81115b9 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 19 Sep 2021 20:50:36 +0100 Subject: [PATCH 088/726] Fix NPC/Creature notes resize Experimental Features error message downgraded to a warning --- module/actors/sheets/npc-sheet.js | 30 ++++++++++++++++++++++------- module/actors/sheets/vehicle.js | 4 +++- module/items/sheets/chase.js | 4 +++- templates/actors/storage-sheet.html | 2 +- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/module/actors/sheets/npc-sheet.js b/module/actors/sheets/npc-sheet.js index 2c8c7b65..83c5e60d 100644 --- a/module/actors/sheets/npc-sheet.js +++ b/module/actors/sheets/npc-sheet.js @@ -28,13 +28,29 @@ export class CoC7NPCSheet extends CoC7ActorSheet { data.isCreature = false - data.showInventoryItems = Object.prototype.hasOwnProperty.call(data.itemsByType, 'item') || !data.data.flags.locked - data.showInventoryBooks = Object.prototype.hasOwnProperty.call(data.itemsByType, 'book') || !data.data.flags.locked - data.showInventorySpells = Object.prototype.hasOwnProperty.call(data.itemsByType, 'spell') || !data.data.flags.locked - data.showInventoryTalents = Object.prototype.hasOwnProperty.call(data.itemsByType, 'talent') || !data.data.flags.locked - data.showInventoryStatuses = Object.prototype.hasOwnProperty.call(data.itemsByType, 'status') || !data.data.flags.locked + data.showInventoryItems = + Object.prototype.hasOwnProperty.call(data.itemsByType, 'item') || + !data.data.flags.locked + data.showInventoryBooks = + Object.prototype.hasOwnProperty.call(data.itemsByType, 'book') || + !data.data.flags.locked + data.showInventorySpells = + Object.prototype.hasOwnProperty.call(data.itemsByType, 'spell') || + !data.data.flags.locked + data.showInventoryTalents = + Object.prototype.hasOwnProperty.call(data.itemsByType, 'talent') || + !data.data.flags.locked + data.showInventoryStatuses = + Object.prototype.hasOwnProperty.call(data.itemsByType, 'status') || + !data.data.flags.locked data.showInventoryWeapons = false - data.hasInventory = data.showInventoryItems || data.showInventoryBooks || data.showInventorySpells || data.showInventoryTalents || data.showInventoryStatuses || data.showInventoryWeapons + data.hasInventory = + data.showInventoryItems || + data.showInventoryBooks || + data.showInventorySpells || + data.showInventoryTalents || + data.showInventoryStatuses || + data.showInventoryWeapons return data } @@ -143,7 +159,7 @@ export class CoC7NPCSheet extends CoC7ActorSheet { } static forceAuto (app, html) { - const cell = html.find('.description.pannel.expanded') + const cell = html.find('.pannel.expanded.resizededitor') if (cell.length) { cell.height( Math.max(200, (html.height() - cell.position().top - 8) / cell.length) + diff --git a/module/actors/sheets/vehicle.js b/module/actors/sheets/vehicle.js index a7709b6f..970a9f0a 100644 --- a/module/actors/sheets/vehicle.js +++ b/module/actors/sheets/vehicle.js @@ -22,7 +22,9 @@ export class CoC7VehicleSheet extends CoC7ActorSheet { } async getData () { - ui.notifications.error(game.i18n.localize('CoC7.ExperimentalFeaturesWarning')) + ui.notifications.warn( + game.i18n.localize('CoC7.ExperimentalFeaturesWarning') + ) const data = await super.getData() data.properties = [] diff --git a/module/items/sheets/chase.js b/module/items/sheets/chase.js index 960cf0c4..7c3e45e4 100644 --- a/module/items/sheets/chase.js +++ b/module/items/sheets/chase.js @@ -47,7 +47,9 @@ export class CoC7ChaseSheet extends ItemSheet { /** @override */ getData (options = {}) { - ui.notifications.error(game.i18n.localize('CoC7.ExperimentalFeaturesWarning')) + ui.notifications.warn( + game.i18n.localize('CoC7.ExperimentalFeaturesWarning') + ) const data = super.getData(options) /** MODIF: 0.8.x **/ diff --git a/templates/actors/storage-sheet.html b/templates/actors/storage-sheet.html index 21cbbd4a..67795b94 100644 --- a/templates/actors/storage-sheet.html +++ b/templates/actors/storage-sheet.html @@ -28,7 +28,7 @@

{{/if}}
-
+
{{> "systems/CoC7/templates/actors/parts/actor-inventory-items.html"}}
From 7f06e10395a48bcf9658f2841d159c7930b9c984 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 19 Sep 2021 20:54:27 +0100 Subject: [PATCH 089/726] Update skill sheet so item drag message is shown for empty items not empty skills --- module/items/sheets/setup.js | 1 + templates/items/setup.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/module/items/sheets/setup.js b/module/items/sheets/setup.js index 1eda6242..0da261f4 100644 --- a/module/items/sheets/setup.js +++ b/module/items/sheets/setup.js @@ -177,6 +177,7 @@ export class CoC7SetupSheet extends ItemSheet { data.otherItems = data.data.items.filter(it => it.type !== 'skill') data.skillListEmpty = data.skills.length === 0 + data.itemsListEmpty = data.otherItems.length === 0 for (const skill of data.skills) { if ( skill.data.specialization && diff --git a/templates/items/setup.html b/templates/items/setup.html index 916b6c49..6beb0385 100644 --- a/templates/items/setup.html +++ b/templates/items/setup.html @@ -88,7 +88,7 @@

{{ localize "CoC7.Items" }}

- {{#if skillListEmpty}} + {{#if itemsListEmpty}}

{{ localize "CoC7.EmptyItemList" }}

{{/if}} From ec7e76cc53dde8f37dcf5cb9a6b360695ecd735b Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 19 Sep 2021 21:22:59 +0100 Subject: [PATCH 090/726] Add empty skill and inventory message to character sheets Add empty inventory message to container sheet Don't generate a skill for weapons in container --- lang/en.json | 2 + module/actors/actor.js | 60 ++++++++++--------- module/actors/sheets/character.js | 43 ++++++++++--- module/actors/sheets/container.js | 49 +++++++++++---- .../actors/parts/actor-inventory-items.html | 3 + templates/actors/parts/actor-skills-v2.html | 3 + templates/actors/parts/actor-skills.html | 7 ++- 7 files changed, 116 insertions(+), 51 deletions(-) diff --git a/lang/en.json b/lang/en.json index ff6ae944..0111633a 100644 --- a/lang/en.json +++ b/lang/en.json @@ -420,6 +420,7 @@ "CoC7.WeaponSkill": "Skill", "CoC7.WeaponSkillAlt": "Alt-skill", "CoC7.Inventory": "Inventory", + "CoC7.InventoryIsCurrentlyEmpty": "Inventory is currently empty", "CoC7.CharacterDevelopment": "Development", "CoC7.OccupationSkill": "Occupation Skill", "CoC7.ArchetypeSkill": "Archetype Skill", @@ -593,6 +594,7 @@ "CoC7.Chosen": "Chosen", "CoC7.EmptySkillList": "Add a skill by dropping it here.", "CoC7.EmptyItemList": "Add an item by dropping it here.", + "CoC7.EmptyCharacterSkillList": "Add a setup, occupation, or skill by dropping it here.", "CoC7.PersonalSpeciality": "Number of personal or era specialty", "CoC7.AdditionalSkills": "Additional Skills", "CoC7.SkillSelectionWindow": "Select optional skills", diff --git a/module/actors/actor.js b/module/actors/actor.js index 72b335ee..74d040c0 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -888,35 +888,37 @@ export class CoCActor extends Actor { break case 'weapon': { - const mainSkill = data.data?.skill?.main?.name - if (mainSkill) { - let skill = this.getSkillsByName(mainSkill)[0] - if (!skill) { - const name = mainSkill.match(/\(([^)]+)\)/) - ? mainSkill.match(/\(([^)]+)\)/)[1] - : mainSkill - skill = await this.createWeaponSkill( - name, - !!data.data.properties?.rngd - ) - } - if (skill) data.data.skill.main.id = skill.id - } // TODO : Else : selectionner le skill dans la liste ou en créer un nouveau. - - const secondSkill = data.data?.skill?.alternativ?.name - if (secondSkill) { - let skill = this.getSkillsByName(secondSkill)[0] - if (!skill) { - const name = mainSkill.match(/\(([^)]+)\)/) - ? mainSkill.match(/\(([^)]+)\)/)[1] - : mainSkill - skill = await this.createWeaponSkill( - name, - !!data.data.properties?.rngd - ) - } - if (skill) data.data.skill.alternativ.id = skill.id - } // TODO : Else : selectionner le skill dans la liste ou en créer un nouveau. + if (this.data.type !== 'container') { + const mainSkill = data.data?.skill?.main?.name + if (mainSkill) { + let skill = this.getSkillsByName(mainSkill)[0] + if (!skill) { + const name = mainSkill.match(/\(([^)]+)\)/) + ? mainSkill.match(/\(([^)]+)\)/)[1] + : mainSkill + skill = await this.createWeaponSkill( + name, + !!data.data.properties?.rngd + ) + } + if (skill) data.data.skill.main.id = skill.id + } // TODO : Else : selectionner le skill dans la liste ou en créer un nouveau. + + const secondSkill = data.data?.skill?.alternativ?.name + if (secondSkill) { + let skill = this.getSkillsByName(secondSkill)[0] + if (!skill) { + const name = mainSkill.match(/\(([^)]+)\)/) + ? mainSkill.match(/\(([^)]+)\)/)[1] + : mainSkill + skill = await this.createWeaponSkill( + name, + !!data.data.properties?.rngd + ) + } + if (skill) data.data.skill.alternativ.id = skill.id + } // TODO : Else : selectionner le skill dans la liste ou en créer un nouveau. + } allCreated = await super.createEmbeddedDocuments( embeddedName, diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index ef0e7837..1d357408 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -136,9 +136,11 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { } data.skillList.push(skill) } - data.skillsByValue = [...data.skills].sort((a, b) => { - return a.data.value - b.data.value - }).reverse() + data.skillsByValue = [...data.skills] + .sort((a, b) => { + return a.data.value - b.data.value + }) + .reverse() data.topSkills = [...data.skillsByValue].slice(0, 14) data.topWeapons = [...data.meleeWpn, ...data.rangeWpn] .sort((a, b) => { @@ -157,11 +159,32 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { } } - data.showInventoryItems = Object.prototype.hasOwnProperty.call(data.itemsByType, 'item') || !data.data.flags.locked - data.showInventoryBooks = Object.prototype.hasOwnProperty.call(data.itemsByType, 'book') || !data.data.flags.locked - data.showInventorySpells = Object.prototype.hasOwnProperty.call(data.itemsByType, 'spell') || !data.data.flags.locked - data.showInventoryTalents = Object.prototype.hasOwnProperty.call(data.itemsByType, 'talent') || !data.data.flags.locked - data.showInventoryStatuses = Object.prototype.hasOwnProperty.call(data.itemsByType, 'status') || !data.data.flags.locked + data.skillListEmpty = data.skills.length === 0 + + data.showInventoryItems = + Object.prototype.hasOwnProperty.call(data.itemsByType, 'item') || + !data.data.flags.locked + data.showInventoryBooks = + Object.prototype.hasOwnProperty.call(data.itemsByType, 'book') || + !data.data.flags.locked + data.showInventorySpells = + Object.prototype.hasOwnProperty.call(data.itemsByType, 'spell') || + !data.data.flags.locked + data.showInventoryTalents = + Object.prototype.hasOwnProperty.call(data.itemsByType, 'talent') || + !data.data.flags.locked + data.showInventoryStatuses = + Object.prototype.hasOwnProperty.call(data.itemsByType, 'status') || + !data.data.flags.locked + + data.hasInventory = + data.showInventoryItems || + data.showInventoryBooks || + data.showInventorySpells || + data.showInventoryTalents || + data.showInventoryStatuses || + data.showInventoryWeapons + return data } @@ -212,7 +235,9 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { } async toggleSkillListMode (event) { - this.skillListMode === 'alphabetical' ? this.skillListMode = 'value' : this.skillListMode = 'alphabetical' + this.skillListMode === 'alphabetical' + ? (this.skillListMode = 'value') + : (this.skillListMode = 'alphabetical') return await this.render(true) } diff --git a/module/actors/sheets/container.js b/module/actors/sheets/container.js index 0d170ea3..1ed90ab2 100644 --- a/module/actors/sheets/container.js +++ b/module/actors/sheets/container.js @@ -27,14 +27,15 @@ export class CoC7ContainerSheet extends ActorSheet { if (data.documentName !== 'Item') return [] const folder = game.folders.get(data.id) if (!folder) return [] - const items = folder.contents.filter(item => ['book', 'item', 'spell', 'weapon'].includes(item.type)).map(item => item.toJSON()) + const items = folder.contents + .filter(item => ['book', 'item', 'spell', 'weapon'].includes(item.type)) + .map(item => item.toJSON()) if (items.length > 0) { await this.actor.createEmbeddedDocuments('Item', items) } } - onCloseSheet () { - } + onCloseSheet () {} async getData () { const data = await super.getData() @@ -45,7 +46,12 @@ export class CoC7ContainerSheet extends ActorSheet { sheetData.itemsByType = {} if (data.items) { for (const item of data.items) { - if (!Object.prototype.hasOwnProperty.call(sheetData.itemsByType, item.type)) { + if ( + !Object.prototype.hasOwnProperty.call( + sheetData.itemsByType, + item.type + ) + ) { sheetData.itemsByType[item.type] = [] } sheetData.itemsByType[item.type].push(item) @@ -61,11 +67,29 @@ export class CoC7ContainerSheet extends ActorSheet { game.settings.get('CoC7', 'playerUnlockSheetMode') === 'always' || game.user.isGM - sheetData.showInventoryItems = Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'item') || !sheetData.data.flags.locked - sheetData.showInventoryBooks = Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'book') || !sheetData.data.flags.locked - sheetData.showInventorySpells = Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'spell') || !sheetData.data.flags.locked - sheetData.showInventoryTalents = Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'talent') || !sheetData.data.flags.locked - sheetData.showInventoryWeapons = Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'weapon') || !sheetData.data.flags.locked + sheetData.showInventoryItems = + Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'item') || + !sheetData.data.flags.locked + sheetData.showInventoryBooks = + Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'book') || + !sheetData.data.flags.locked + sheetData.showInventorySpells = + Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'spell') || + !sheetData.data.flags.locked + sheetData.showInventoryTalents = + Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'talent') || + !sheetData.data.flags.locked + sheetData.showInventoryWeapons = + Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'weapon') || + !sheetData.data.flags.locked + + sheetData.hasInventory = + sheetData.showInventoryItems || + sheetData.showInventoryBooks || + sheetData.showInventorySpells || + sheetData.showInventoryTalents || + sheetData.showInventoryStatuses || + sheetData.showInventoryWeapons return sheetData } @@ -153,7 +177,8 @@ export class CoC7ContainerSheet extends ActorSheet { }) content = content + '

' await Dialog.prompt({ @@ -221,6 +246,8 @@ export class CoC7ContainerSheet extends ActorSheet { _onInventoryHeader (event) { event.preventDefault() - $(event.currentTarget).siblings('li').slideToggle(200) + $(event.currentTarget) + .siblings('li') + .slideToggle(200) } } diff --git a/templates/actors/parts/actor-inventory-items.html b/templates/actors/parts/actor-inventory-items.html index 87c9fe5b..c5107e52 100644 --- a/templates/actors/parts/actor-inventory-items.html +++ b/templates/actors/parts/actor-inventory-items.html @@ -1,3 +1,6 @@ +{{#unless hasInventory}} +

{{localize 'CoC7.InventoryIsCurrentlyEmpty'}}

+{{/unless}}
  1. {{#if showInventoryItems}} diff --git a/templates/actors/parts/actor-skills-v2.html b/templates/actors/parts/actor-skills-v2.html index 438a64ac..eec1aad7 100644 --- a/templates/actors/parts/actor-skills-v2.html +++ b/templates/actors/parts/actor-skills-v2.html @@ -4,6 +4,9 @@
{{/unless}} +{{#if skillListEmpty}} +

{{localize 'CoC7.EmptyCharacterSkillList'}}

+{{/if}}
    {{#if skillListModeValue}} {{#each skillsByValue as |skill|}} diff --git a/templates/actors/parts/actor-skills.html b/templates/actors/parts/actor-skills.html index d00024f0..2b212d6b 100644 --- a/templates/actors/parts/actor-skills.html +++ b/templates/actors/parts/actor-skills.html @@ -1,4 +1,7 @@ -
      +{{#if skillListEmpty}} +

      {{localize 'CoC7.EmptyCharacterSkillList'}}

      +{{/if}} +
        {{#each skills as |skill id|}}
      1. @@ -15,7 +18,7 @@

        {{#if skill.data.properties.special}}{{skill.dat {{/if}} - +
        {{#if ../data.flags.locked}} {{#if skill.data.properties.noxpgain}} From 229c6cc64e68200e7dc97be12fcb6b0274f50c3f Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 19 Sep 2021 20:34:09 +0000 Subject: [PATCH 091/726] Updated translations list --- .github/TRANSLATIONS.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 521467f9..27383eb5 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,7 +4,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **334** | **110** | **127** | **22** | **22** | **129** | **22** | **22** | **3** | **5** | +| **Remaining**: | **336** | **112** | **129** | **24** | **24** | **131** | **24** | **24** | **5** | **7** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | @@ -66,6 +66,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -118,6 +119,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -585,6 +587,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.DyingCheck": "Check if you'll die immediately",` +##### CoC7.EmptyCharacterSkillList + +`"CoC7.EmptyCharacterSkillList": "Add a setup, occupation, or skill by dropping it here.",` + ##### CoC7.EmptyItemList `"CoC7.EmptyItemList": "Add an item by dropping it here.",` @@ -793,6 +799,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.IntCheck": "Intelligence check",` +##### CoC7.InventoryIsCurrentlyEmpty + +`"CoC7.InventoryIsCurrentlyEmpty": "Inventory is currently empty",` + ##### CoC7.InvestigatorManiaGained `"CoC7.InvestigatorManiaGained": "The investigator gain a mania",` From e1aa7e56ceeb289f9ef6c3e958a7c0f0b30a58a8 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 19 Sep 2021 21:46:13 +0100 Subject: [PATCH 092/726] If book type is Other and you drag a skill onto it add a development row for that skill name Hide drag spells message, if there are spells --- module/items/book/sheet.js | 29 ++++++++++++++++++++--------- templates/items/book/main.html | 4 +++- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/module/items/book/sheet.js b/module/items/book/sheet.js index 0b4c371c..250e1614 100644 --- a/module/items/book/sheet.js +++ b/module/items/book/sheet.js @@ -32,6 +32,9 @@ export class CoC7BookSheet extends ItemSheet { data.exhausted = (await this.item.checkExhaustion()) !== false data.studyCompleted = this.item.data.data.study.progress === this.item.data.data.study.necessary + + data.spellListEmpty = data.data.spells.length === 0 + return data } @@ -116,8 +119,12 @@ export class CoC7BookSheet extends ItemSheet { const spells = [] for (const item of dataList) { - if (!item || !(item.data.type === 'spell')) continue - spells.push(item.data) + if (!item || !['skill', 'spell'].includes(item.data.type)) continue + if (item.data.type === 'spell') { + spells.push(item.data) + } else if (item.data.type === 'skill' && this.item.data.data.type.other) { + this.modifyOthersGains(null, 'add', { name: item.name }) + } } await this.item.addSpells(spells) } @@ -143,13 +150,17 @@ export class CoC7BookSheet extends ItemSheet { * @param {string} mode 'add' || 'change' || 'remove' * @returns {Promise} update to Item document */ - async modifyOthersGains (event, mode) { + async modifyOthersGains (event, mode, options = {}) { /** No need to check if user is GM because only they can see details tab */ - event.preventDefault() - const element = $(event.currentTarget) - /** @see data-index property on template */ - const index = element.parents('tr').data('index') - /** Always has to be @type {Array} */ + let index = null + let element = null + if (event) { + event.preventDefault() + element = $(event.currentTarget) + /** @see data-index property on template */ + index = element.parents('tr').data('index') + /** Always has to be @type {Array} */ + } const skills = this.item.data.data.gains.others ? duplicate(this.item.data.data.gains.others) : [] @@ -158,7 +169,7 @@ export class CoC7BookSheet extends ItemSheet { /** User clicked on plus icon to add a new skill on other gains table */ skills.push({ /** new skill */ - name: game.i18n.localize('CoC7.NewSkillName'), + name: options.name || game.i18n.localize('CoC7.NewSkillName'), /** development by default, value can also be 1d6 or 1d10 */ value: 'development' }) diff --git a/templates/items/book/main.html b/templates/items/book/main.html index aadd6e4c..7e047d4e 100644 --- a/templates/items/book/main.html +++ b/templates/items/book/main.html @@ -155,7 +155,9 @@
        - + {{#if spellListEmpty}} + + {{/if}}

        ' ) + systemTab + .find('input[name=CoC7\\.overrideGameArtwrok]') + .closest('div.form-group') + .before( + '

        ' + + game.i18n.localize('SETTINGS.TitleGameArtwork') + + '

        ' + ) systemTab .find('input[name=CoC7\\.displayPlayerNameOnSheet]') .closest('div.form-group') diff --git a/module/hooks/index.js b/module/hooks/index.js index ede2faff..91a22842 100644 --- a/module/hooks/index.js +++ b/module/hooks/index.js @@ -4,6 +4,7 @@ import * as RenderActorSheet from './render-actor-sheet.js' import * as RenderChatMessage from './render-chat-message.js' import * as RenderDialog from './render-dialog.js' import * as RenderItemSheet from './render-item-sheet.js' +import * as RenderPause from './render-pause.js' export const CoC7Hooks = { listen () { @@ -13,5 +14,6 @@ export const CoC7Hooks = { RenderChatMessage.listen() RenderDialog.listen() RenderItemSheet.listen() + RenderPause.listen() } } diff --git a/module/hooks/render-pause.js b/module/hooks/render-pause.js new file mode 100644 index 00000000..6d00344d --- /dev/null +++ b/module/hooks/render-pause.js @@ -0,0 +1,17 @@ +/* global Hooks */ + +export function listen () { + Hooks.on('renderPause', async (data, html, options) => { + if (game.settings.get('CoC7', 'overrideGameArtwrok')) { + if (game.settings.get('CoC7', 'artPauseImage').toLowerCase() === 'null') { + html.find('img').remove() + } if ('' != game.settings.get('CoC7', 'artPauseImage')){ + html.find('img').attr( 'src', game.settings.get('CoC7', 'artPauseImage')) + } + + if( "" != game.settings.get('CoC7', 'artPauseText')){ + html.find('h3').html(game.settings.get('CoC7', 'artPauseText')) + } + } + }) +} diff --git a/module/scripts/register-settings.js b/module/scripts/register-settings.js index 00e7b8f9..c4e35a7f 100644 --- a/module/scripts/register-settings.js +++ b/module/scripts/register-settings.js @@ -186,6 +186,36 @@ export function registerSettings () { type: Boolean }) + /** + * Game Artwork Settings + */ + game.settings.register('CoC7', 'overrideGameArtwrok', { + name: 'SETTINGS.OverrideGameArtwrok', + hint: 'SETTINGS.OverrideGameArtwrokHint', + scope: 'world', + config: true, + default: false, + type: Boolean + }) + if (game.settings.get('CoC7', 'overrideGameArtwrok')) { + game.settings.register('CoC7', 'artPauseImage', { + name: 'SETTINGS.ArtPauseImage', + hint: 'SETTINGS.ArtPauseImageHint', + scope: 'world', + config: true, + default: 'systems/CoC7/assets/icons/time-trap.svg', + type: String + }) + game.settings.register('CoC7', 'artPauseText', { + name: 'SETTINGS.ArtPauseText', + name: 'SETTINGS.ArtPauseTextHint', + scope: 'world', + config: true, + default: 'The Blind Idiot God is dreaming...', + type: String + }) + } + /** * Sheet settings */ From 28836d27bf144ee7e988d6332ab1971b55315bcf Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 7 Oct 2021 00:10:51 +0000 Subject: [PATCH 180/726] Updated translations list --- .github/TRANSLATIONS.md | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index c76cd908..ccd8228e 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,7 +4,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **359** | **135** | **152** | **23** | **23** | **23** | **47** | **23** | **17** | **29** | +| **Remaining**: | **366** | **142** | **159** | **30** | **30** | **30** | **54** | **30** | **24** | **36** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | @@ -301,6 +301,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -341,6 +345,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideGameArtwrok](#settingsoverridegameartwrok) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.OverrideGameArtwrokHint](#settingsoverridegameartwrokhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -353,6 +359,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -1549,6 +1556,22 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"SETTINGS.AlwaysEditable": "always",` +##### SETTINGS.ArtPauseImage + +`"SETTINGS.ArtPauseImage": "Pause image",` + +##### SETTINGS.ArtPauseImageHint + +`"SETTINGS.ArtPauseImageHint": ". Type 'null' to remove image",` + +##### SETTINGS.ArtPauseText + +`"SETTINGS.ArtPauseText": "Pause text",` + +##### SETTINGS.ArtPauseTextHint + +`"SETTINGS.ArtPauseTextHint": "Leave blank for default",` + ##### SETTINGS.ArtWorkOtherSheetBackground `"SETTINGS.ArtWorkOtherSheetBackground": "Other sheet background",` @@ -1563,7 +1586,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry ##### SETTINGS.ArtWorkSheetBackgroundHint -`"SETTINGS.ArtWorkSheetBackgroundHint": "type 'null' to remove background",` +`"SETTINGS.ArtWorkSheetBackgroundHint": "type 'null' to remove background, blank for default",` ##### SETTINGS.ArtWorkSheetBackgroundType @@ -1709,6 +1732,14 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"SETTINGS.OpposedRollTieBreakerHint": "In case of a tie during opposed roll, winner is determined by highest rolled value, not higher skill.",` +##### SETTINGS.OverrideGameArtwrok + +`"SETTINGS.OverrideGameArtwrok": "Override game artwrok",` + +##### SETTINGS.OverrideGameArtwrokHint + +`"SETTINGS.OverrideGameArtwrokHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default",` + ##### SETTINGS.OverrideSheetArtwork `"SETTINGS.OverrideSheetArtwork": "Override Sheet Artwork",` @@ -1757,6 +1788,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"SETTINGS.TitleDiceSoNice": "Dice So Nice Settings",` +##### SETTINGS.TitleGameArtwork + +`"SETTINGS.TitleGameArtwork": "Game Artwrok Settings",` + ##### SETTINGS.TitleInitiative `"SETTINGS.TitleInitiative": "Initiative Settings",` From 314128ba07b0e3563040d9d2f5c7190c0aef92b9 Mon Sep 17 00:00:00 2001 From: castanhocorreia Date: Wed, 6 Oct 2021 21:19:30 -0300 Subject: [PATCH 181/726] Fix typo on artwork --- lang/en.json | 6 +++--- module/coc7.js | 10 +++++----- module/hooks/render-pause.js | 8 ++++---- module/scripts/register-settings.js | 10 +++++----- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/lang/en.json b/lang/en.json index aa73f278..63598b1c 100644 --- a/lang/en.json +++ b/lang/en.json @@ -751,7 +751,7 @@ "SETTINGS.TitleChatCards": "Chat Cards Settings", "SETTINGS.TitleScene": "Scene Settings", "SETTINGS.TitleSheet": "Sheet Settings", - "SETTINGS.TitleGameArtwork": "Game Artwrok Settings", + "SETTINGS.TitleGameArtwork": "Game Artwork Settings", "SETTINGS.TitleWeapon": "Weapon Settings", "SETTINGS.TitleDiceSoNice": "Dice So Nice Settings", "SETTINGS.TitleDeveloperDebug": "Developer And Debug Settings", @@ -798,8 +798,8 @@ "SETTINGS.TenDieBonusHint": "When using DsN, colorset to use for ten bonus dice. (leave blank to use player default)", "SETTINGS.TenDiePenalty": "[DsN] Ten penalty dice colorset", "SETTINGS.TenDiePenaltyHint": "When using DsN, colorset to use for penalty bonus dice. (leave blank to use player default)", - "SETTINGS.OverrideGameArtwrok": "Override game artwrok", - "SETTINGS.OverrideGameArtwrokHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default", + "SETTINGS.OverrideGameArtwork": "Override game Artwork", + "SETTINGS.OverrideGameArtworkHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default", "SETTINGS.ArtPauseImage": "Pause image", "SETTINGS.ArtPauseImageHint": ". Type 'null' to remove image", "SETTINGS.ArtPauseText": "Pause text", diff --git a/module/coc7.js b/module/coc7.js index 8754a69a..6a2c321a 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -65,7 +65,7 @@ Hooks.on('renderSettingsConfig', (app, html, options) => { '

' ) systemTab - .find('input[name=CoC7\\.overrideGameArtwrok]') + .find('input[name=CoC7\\.overrideGameArtwork]') .closest('div.form-group') .before( '

' + @@ -333,14 +333,14 @@ Hooks.on('ready', async () => { game.settings.get('CoC7', 'boutOfMadnessSummaryTable') === 'none' ? null : game.tables.get( - game.settings.get('CoC7', 'boutOfMadnessSummaryTable') - ), + game.settings.get('CoC7', 'boutOfMadnessSummaryTable') + ), boutOfMadness_RealTime: game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') === 'none' ? null : game.tables.get( - game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') - ) + game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') + ) // maniasIndex: ge.settings.get('CoC7', 'boutOfMadnessPhobiasIndex'), // phobiasIndex: game.settings.get('CoC7', 'boutOfMadnessManiasIndex'), // phobias: ('none' == game.settings.get('CoC7', 'samplePhobiasTable'))?null:game.tables.get(game.settings.get('CoC7', 'samplePhobiasTable')), diff --git a/module/hooks/render-pause.js b/module/hooks/render-pause.js index 6d00344d..5b850caa 100644 --- a/module/hooks/render-pause.js +++ b/module/hooks/render-pause.js @@ -2,14 +2,14 @@ export function listen () { Hooks.on('renderPause', async (data, html, options) => { - if (game.settings.get('CoC7', 'overrideGameArtwrok')) { + if (game.settings.get('CoC7', 'overrideGameArtwork')) { if (game.settings.get('CoC7', 'artPauseImage').toLowerCase() === 'null') { html.find('img').remove() - } if ('' != game.settings.get('CoC7', 'artPauseImage')){ - html.find('img').attr( 'src', game.settings.get('CoC7', 'artPauseImage')) + } if (game.settings.get('CoC7', 'artPauseImage') != '') { + html.find('img').attr('src', game.settings.get('CoC7', 'artPauseImage')) } - if( "" != game.settings.get('CoC7', 'artPauseText')){ + if ('' != game.settings.get('CoC7', 'artPauseText')) { html.find('h3').html(game.settings.get('CoC7', 'artPauseText')) } } diff --git a/module/scripts/register-settings.js b/module/scripts/register-settings.js index c4e35a7f..ab8f8011 100644 --- a/module/scripts/register-settings.js +++ b/module/scripts/register-settings.js @@ -189,15 +189,15 @@ export function registerSettings () { /** * Game Artwork Settings */ - game.settings.register('CoC7', 'overrideGameArtwrok', { - name: 'SETTINGS.OverrideGameArtwrok', - hint: 'SETTINGS.OverrideGameArtwrokHint', + game.settings.register('CoC7', 'overrideGameArtwork', { + name: 'SETTINGS.OverrideGameArtwork', + hint: 'SETTINGS.OverrideGameArtworkHint', scope: 'world', config: true, default: false, type: Boolean }) - if (game.settings.get('CoC7', 'overrideGameArtwrok')) { + if (game.settings.get('CoC7', 'overrideGameArtwork')) { game.settings.register('CoC7', 'artPauseImage', { name: 'SETTINGS.ArtPauseImage', hint: 'SETTINGS.ArtPauseImageHint', @@ -208,7 +208,7 @@ export function registerSettings () { }) game.settings.register('CoC7', 'artPauseText', { name: 'SETTINGS.ArtPauseText', - name: 'SETTINGS.ArtPauseTextHint', + hint: 'SETTINGS.ArtPauseTextHint', scope: 'world', config: true, default: 'The Blind Idiot God is dreaming...', From 79d3fbceb999da61f7f476f24318f4986ee4d6de Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 7 Oct 2021 00:20:51 +0000 Subject: [PATCH 182/726] Updated translations list --- .github/TRANSLATIONS.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index ccd8228e..9a37c8e6 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -345,8 +345,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideGameArtwrok](#settingsoverridegameartwrok) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.OverrideGameArtwrokHint](#settingsoverridegameartwrokhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -1732,13 +1732,13 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"SETTINGS.OpposedRollTieBreakerHint": "In case of a tie during opposed roll, winner is determined by highest rolled value, not higher skill.",` -##### SETTINGS.OverrideGameArtwrok +##### SETTINGS.OverrideGameArtwork -`"SETTINGS.OverrideGameArtwrok": "Override game artwrok",` +`"SETTINGS.OverrideGameArtwork": "Override game Artwork",` -##### SETTINGS.OverrideGameArtwrokHint +##### SETTINGS.OverrideGameArtworkHint -`"SETTINGS.OverrideGameArtwrokHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default",` +`"SETTINGS.OverrideGameArtworkHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default",` ##### SETTINGS.OverrideSheetArtwork @@ -1790,7 +1790,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry ##### SETTINGS.TitleGameArtwork -`"SETTINGS.TitleGameArtwork": "Game Artwrok Settings",` +`"SETTINGS.TitleGameArtwork": "Game Artwork Settings",` ##### SETTINGS.TitleInitiative From 8a55e56daa9aae2b079ce911c1eab5cfbf124c67 Mon Sep 17 00:00:00 2001 From: castanhocorreia Date: Wed, 6 Oct 2021 21:23:23 -0300 Subject: [PATCH 183/726] Update changelog with new features --- .github/CHANGELOG.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index b01ac20f..f3968b1f 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -2,13 +2,15 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. +- Add options to change pause icon and text on settings. - Add several tooltips to the character sheet (Skill, DB, Sanity, etc). - Complete refactor of Spell system. - Fix "The key ? does not exist in the EmbeddedCollection Collection" dragging an English setup onto a translated Actor. - Fix background integrity on Book sheet. - Fix bug on Archetype Item properties. -- Fix summarized sheet colors; -- Fix rounding for max Hit Points on Pulp; +- Fix DsN 3D dices not rolling sometimes. +- Fix summarized sheet colors. +- Fix rounding for max Hit Points on Pulp. - Now Actor die instantly when damage is equal or higher than its max hp. - Now Actor Importer support Traditional Chinese, thanks to @zeteticl. - Now double click on Item in inventory list open its sheet. @@ -17,8 +19,8 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV and @sn - Update updater to check module compendiums for Actor and Item when modules version module numbers are new or changed. - Update to French localization, thanks to @vonv. - Update to Japanese localization, thanks to `@Asami#8627`. -- Update to Portuguese localization; -- Update to Spanish localization, thanks to @lozalojo; +- Update to Portuguese localization. +- Update to Spanish localization, thanks to @lozalojo. - Update to Swedish localization, thanks to @Rangertheman. - Update to Taiwanese localization, thanks to @zeteticl. From 6d212c00fcbbaa49e61d3b245a8a15a2001183fc Mon Sep 17 00:00:00 2001 From: Piotr Krygier Date: Thu, 7 Oct 2021 09:54:58 +0200 Subject: [PATCH 184/726] Update Polish translation --- lang/pl.json | 69 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 8 deletions(-) diff --git a/lang/pl.json b/lang/pl.json index 8cec2ab0..1a8f06dc 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -2,6 +2,7 @@ "CoC7.title": "Call of Cthulhu 7h Edycja (Unofficial)", "CoC7.Entities.Character": "Postać", + "CoC7.Entities.Container": "Pojemnik", "CoC7.Entities.Creature": "Potwór", "CoC7.Entities.Npc": "BN", "CoC7.Entities.Vehicle": "Pojazd", @@ -89,6 +90,7 @@ "CoC7.Spells": "Czary", "CoC7.Spell": "Czar", "CoC7.Spells&Notes": "Czary i Notatki", + "CoC7.Weapons": "Bronie", "CoC7.Effects": "Efekt", "CoC7.Cost": "Cena", "CoC7.Source": "Źródło", @@ -116,6 +118,15 @@ "CoC7.Icon": "Ikona", "CoC7.Check": "Test", "CoC7.ItemWeapon": "Przedmiot (Broń)", + "CoC7.AttacksPerRound": "Ataki na rundę", + + "CoC7.Cast": "Rzuć", + "CoC7.SanityCost": "Koszt Poczytalności", + "CoC7.PowerCost": "Koszt Mocy", + "CoC7.HitPointsCost": "Koszt PW", + "CoC7.MagicPointsCost": "Koszt Punktów Magii", + "CoC7.OtherCosts": "Inne koszty", + "CoC7.CastingSpell": "Rzucam {spell}.", "CoC7.CopyToClipboard": "Kopiuj do schowka", "CoC7.WhisperToSelection": "Szepnij do wybranych tokenów", @@ -400,6 +411,17 @@ "CoC7.AddItem": "Dodaj przedmiot", "CoC7.EditItem": "Edytuj przedmiot", "CoC7.DeleteItem": "Kasuj przedmiot", + "CoC7.TradeItem": "Przekarz / Przechowaj Przedmiot", + "CoC7.SortBySkillName": "Sortuj po nazwie", + "CoC7.SortBySkillValue": "Sortuj po wartości", + "CoC7.UncommonSkillsShow": "Pokaż rzadkie umiejętności", + "CoC7.UncommonSkillsHide": "Ukryj rzadkie umiejętności", + + "CoC7.NewBookName": "nowa księga", + "CoC7.AddBook": "Dodaj księgę", + "CoC7.NewSpellName": "nowe zaklęcie", + "CoC7.AddSpell": "Dodaj zaklęcie", + "CoC7.AddWeapon": "Dodaj broń", "CoC7.NewWeaponName": "Nowa broń", "CoC7.EditWeapon": "Edytuj broń", @@ -410,6 +432,7 @@ "CoC7.WeaponSkill": "Umiejętność", "CoC7.WeaponSkillAlt": "umiejętności alternatywne", "CoC7.Inventory": "Ekwipunek", + "CoC7.InventoryIsCurrentlyEmpty": "Ekwipunek jest pusty.", "CoC7.CharacterDevelopment": "Rozwój", "CoC7.OccupationSkill": "Umiejętności Zawodowe", "CoC7.ArchetypeSkill": "Umiejętności Archetypowe", @@ -433,18 +456,18 @@ "CoC7.LinkItemModif": " {name} ({modifier})", "CoC7.LinkItemDiffModif": "[{difficulty}] {name} ({modifier})", - "CoC7.ManualCreditValues": "Manual Credit Values", + "CoC7.ManualCreditValues": "Ręczne Ustawienie Majątku", "CoC7.MonetarySymbol": "Symbol:", "CoC7.MonetaryFactor": "Czynnik:", - "CoC7.AutoCreditValues": "Toggle Automatic calculation", + "CoC7.AutoCreditValues": "Przełącz Automatyczne Obliczanie", "CoC7.MonetarySpendingLevel": "Poziom wydatków :", "CoC7.MonetaryCash": "Gotówka :", "CoC7.MonetarySpent": "Wydana :", "CoC7.MonetaryAssets": "Dobytek :", "CoC7.MonetaryAssetsDetails": "Szczegółowy Dobytek", - "CoC7.PossessionsNotes": "Notes :", - "CoC7.PossessionsNotesHolder": "Notes", + "CoC7.PossessionsNotes": "Notatki :", + "CoC7.PossessionsNotesHolder": "Notatki", "CoC7.BackgroundNewSection": "Dodaj nową Rubrykę", "CoC7.BackgroundSectionNameHolder": "Wprowadź nazwę rubryki", @@ -583,6 +606,7 @@ "CoC7.Chosen": "Wybrany", "CoC7.EmptySkillList": "Dodaj umiejętność, upuszczając ją tutaj.", "CoC7.EmptyItemList": "Dodaj przedmiot, upuszczająć go tutaj.", + "CoC7.EmptyCharacterSkillList": "Dodaj ustawienie, zawód lub umiejętność przeciągając je tutaj.", "CoC7.PersonalSpeciality": "Number of personal or era specialty", "CoC7.AdditionalSkills": "Dowolna Umiejętność", "CoC7.SkillSelectionWindow": "Wybierz opcjonalne umiejętności", @@ -591,7 +615,7 @@ "CoC7.ResetOccupationHint": "Postać {name} obencnie posaida zawód. Zresetować go?", "CoC7.ResetArchetype": "Zresetuj Archetyp", "CoC7.ResetArchetypeHint": "Gracz {name} ma już archetyp. Czy chcesz go zresetować?", - "CoC7.CreditOutOfRange": "Credit rating should be between {min} and {max}", + "CoC7.CreditOutOfRange": "Wartość Majętności musi być między {min} a {max}", "CoC7.BioSections": "Sekcja biograficzne", "CoC7.BioSectionName": "Nazwa sekcji biografii", "CoC7.SpendPoints": "Przydziel punkty cechą", @@ -635,7 +659,7 @@ "CoC7.WarnTooManyTarget": "Zaznaczono za dużo celów. Zachowano zaznaczenie ostatniego celu", "CoC7.startRest": "Rozpocznij odpoczynek", - "CoC7.dreaming": "Badacze śnią...", + "CoC7.dreaming": "Badacze śpią...", "CoC7.healthRecovered": "Odzyskano 1 Punkt Wytrzymałości", "CoC7.pulpHealthRecovered": "Odzyskano {number} Punktów Wytrzymałości", "CoC7.dailySanLossRestarted": "Zrestartowano licznik dziennego spadku PP", @@ -656,7 +680,6 @@ "CoC7.MessageTargetCheckRequested": "Strażnik rząda testu {check} od {name}.", "CoC7.MessageTitleSelectSingleUserForTarget": "Która postać może zareagować na atak", "CoC7.MessageSelectSingleUserForTarget": "Ten token jest kontrolowany przez wielu Graczy. Wybierz Gracza, który zareaguje na ten atak.", - "CoC7.MessageSelectedTargetIsNotControlled": "Token {name} nie może zareagować na atak, ponieważ nie jest kontrolowany przez żadnego gracza.", "CoC7.MessageBoutOfMadnessTableNotFound": "Nie znaleziono wyniku z tablicy niepoczytalności. Upewnij się, że wszystkie tablice niepoczytalności zostały stworzone", "CoC7.MessageBoutOfMadnessItemNotFound": "Nie znaleziono wyniku z tablicy niepoczytalności. Upewnij się, że wszystkie statusy niepoczytalności zostały stworzone", @@ -680,6 +703,7 @@ "CoC7.English": "Angielski", "CoC7.Spanish": "Hiszpański", "CoC7.French": "Francuski", + "CoC7.TraditionalChinese": "Chiński Tradycyjny", "CoC7.SelectSourceLanguage": "Wybierz źródło języka tekstu", "CoC7.ImportedUnnamedCharacter": "Zaimportowano nienazwaną postać", "CoC7.CreatedImportedCharactersFolder": "Stworzono 'Imported Characters' folder'", @@ -693,12 +717,34 @@ "CoC7.Migrate.Title": "Wymagana aktualizacja", "CoC7.Migrate.Message": "

Twój świat wymaga aktualizacji do wersji {version}.

Utwórz kopię zapasową przed aktualizacją.

Jeśli nie dokonasz aktualizacji, system nie będzie działał prawidłowo.

Świat może zostać zrestartowany po zakończeniu.

", + "CoC7.Migrate.WithModulesMessage": "

Twój świat lub moduły mogą wymagać aktualizacji, aby używać wersji {version}.

Utwórz kopię zapasową świata i folderów z modułami wylistowanymi poniżej przed rozpoczęciem aktualizacji.

Jeśli nie zaktualizujesz świata, system nie będzie działał prawidłowo.

Następujące moduły posiadają aktorów i przedmioty, więc również zostaną sprawdzone.

{modules}

Świat może zostać ponownie uruchomiony po aktualizacji.

", "CoC7.Migrate.GMRequired": "

Twój świat wymaga aktualizacji do wersji {version}.

Poczekaj aż Strażnik dokona aktualizacji, a następnie wciśnij (F5), by odświeżyć grę.

", "CoC7.Migrate.RestartRequired": "

Twój świat zostanie teraz zrestartowany, by wdrożyć zmiany

", "CoC7.Migrate.ButtonUpdate": "Aktualizuj", "CoC7.Migrate.ButtonSkip": "Pomiń", "CoC7.Migrate.ButtonOkay": "Ok", + "CoC7.Maximize": "Maksymalizuj", + "CoC7.Summarize": "Podsumuj", + + "CoC7.UnableToInteractWithChatCard": "Nie możesz zmienić tego elementu. Jeśli chcesz wprowadzić zmiany, poproś Strażnika, żeby ustawił za Ciebie opcje", + "CoC7.UnableToCopyToClipboard": "Nie udało się skopiować do schowka. Najprawdopodobniej jest to wina ustawień bezpieczeństwa przeglądarki.", + "CoC7.WarningCharacterSheetV1Depreciated": "Ten układ jest przestarzały i może nie działać prawidłowo. Zostanie usunięty w FoundryVTT v9, poproś Strażnika o zmianę ustawień karty na CoC7.CoC7CharacterSheetV2", + + "CoC7.MessageTitleSelectUserToGiveTo": "Przekaż przedmiot innej postaci", + "CoC7.MessageSelectUserToGiveTo": "Komu chciałbyś przekazać przedmiot?", + "CoC7.MessageDistanceCalculationFailure": "Nie udało się ustalić odległości między tokenami. Użyj karty postaci dostępnej z dwukrotnego kliknięcia na tokenie.", + + "CoC7.ToolTipSkill": "
  1. Lewy PM test z opcjami
  2. Shift + Lewy PM Natychmiastowy test z normalną trudnością
  1. Prawy PM Test przeciwstawny z opcjami
  2. Shift + Prawy PM Natychmiastowy test przeciwstawny
  1. Alt/Option + Prawy PM Test łączony z opcjami
", + "CoC7.ToolTipKeeperSkill": "
  1. CTRL + Lewy PM Stwórz odnośnik do testu
  2. {other}
", + "CoC7.ToolTipKeeperStandbySkill": "
  • Lewy PM Zarządaj testu od {name}
  • ", + "CoC7.ToolTipDB": "
    1. Lewy PM Natychmiastowy test z normalną trudnością
    ", + "CoC7.ToolTipKeeperSanity": "
  • CTRL + Alt/Option Stwórz odnośnik do testu poczytalności
  • ", + "CoC7.ToolTipAutoToggle": "
    1. Lewy PM Przełącz automatyczne obliczenia / ręczne wpisy
    2. ", + "CoC7.ToolTipSkillFlagToggle": "
      1. Dwukrotne kliknięcie Przełącz flagę
      2. ", + "CoC7.ToolTipSkillFlagged": "Oznaczone do rozwoju", + "CoC7.ToolTipSkillUnflagged": "Nie oznaczone do rozwoju", + "SETTINGS.TitleRules": "Zasady", "SETTINGS.TitleInitiative": "Początkowe ustawienia", "SETTINGS.TitleRoll": "Ustawienia rzutów", @@ -715,6 +761,7 @@ "SETTINGS.DefaultDifficultyHint": "Możesz wybrać domyślną trudność testów. Nieznana będzie wykonywać rzuty bez informowania graczy o trudności.", "SETTINGS.CheckDifficultyRegular": "Domyślna trudność", "SETTINGS.CheckDifficultyUnknown": "Nieznana trudność", + "SETTINGS.showIconsOnly": "Na skróconej wersji karty, pokaż tylko ikony na liście umiejętności.", "SETTINGS.UseToken": "Użyj obrazka tokena", "SETTINGS.UseTokenHint": "Użyj obrazka tokena zamiast portretów w kartach czatu", "SETTINGS.DisplayActorOnCard": "Pokaż postać w karcie czatu", @@ -799,5 +846,11 @@ "SETTINGS.OneBlockBackStory": "Historia postaci w jednym bloku", "SETTINGS.OneBlockBackStoryHint": "Zmienia obiekt historii postaci w jeden blok, ale możesz go formwatować i dodawać odnośniki.", "SETTINGS.EnableStatusIcons": "Włącz ikony statusów", - "SETTINGS.EnableStatusIconsHint": "Ustaw czy chcesz, żeby statusy walki i poczytalności były widoczne na tokenach." + "SETTINGS.EnableStatusIconsHint": "Ustaw czy chcesz, żeby statusy walki i poczytalności były widoczne na tokenach.", + "SETTINGS.ShowExperimentalFeatures": "Pokaż Funckjonalności Eksperymentalne", + "SETTINGS.ShowExperimentalFeaturesHint": "Twój świat może przestać działać w kolejnej wersji systemu, jeśli będziesz używać tych funkcji. Tylko do testów, NIE UŻYWAJ tych funkcjonalności w normalnej rozgrywce", + "CoC7.ExperimentalFeaturesWarning": "Ta funkcjonalność jest nadal w fazie rozwoju, nie jest zalecane używanie jej w normalnej rozgrywce.", + "SETTINGS.CheckElevation": "Uwzględnij wysokość w obliczaniu odległości", + "SETTINGS.CheckElevationHint": "Uzwględnij wysokość w obliczaniu odległości w walce dystansowej", + "CoC7.toolTipDelay": "Opóźnienie w milisekundach między najechaniem myszką na umiejętność, a wyświetleniem okienka podpowiedzi. Ustaw '0' dla braku opóźnienia." } From 6cf08b6f4666b5b8218e34bc3f6508478020feae Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 7 Oct 2021 08:05:27 +0000 Subject: [PATCH 185/726] Updated translations list --- .github/TRANSLATIONS.md | 96 ++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 9a37c8e6..90c86e84 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,11 +4,11 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **366** | **142** | **159** | **30** | **30** | **30** | **54** | **30** | **24** | **36** | +| **Remaining**: | **366** | **142** | **159** | **30** | **30** | **30** | **7** | **30** | **24** | **36** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -20,7 +20,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | | [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -35,8 +35,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | +| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | | [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -68,7 +68,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | | [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -77,7 +77,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -90,7 +90,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -103,7 +103,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | | [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -122,7 +122,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | | [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -146,23 +146,23 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | | [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | | [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -170,15 +170,15 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | | [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -187,7 +187,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | | [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -197,7 +197,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | | [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -217,7 +217,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | | [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -225,42 +225,42 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | +| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | | [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | +| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | +| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | +| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | +| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | +| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | +| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | +| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | +| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | | [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | +| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | | [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -292,7 +292,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | | [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -329,8 +329,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | | [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -352,8 +352,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -370,7 +370,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ##### CoC7.ActorImporter From 390ec8643b56a50a963a95afd56135b3a34a0d90 Mon Sep 17 00:00:00 2001 From: castanho Date: Thu, 7 Oct 2021 05:07:27 -0300 Subject: [PATCH 186/726] Update changelog with new credits --- .github/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index f3968b1f..69f9340a 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -19,6 +19,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV and @sn - Update updater to check module compendiums for Actor and Item when modules version module numbers are new or changed. - Update to French localization, thanks to @vonv. - Update to Japanese localization, thanks to `@Asami#8627`. +- Update to Polish localization, thanks to @everyonecancode; - Update to Portuguese localization. - Update to Spanish localization, thanks to @lozalojo. - Update to Swedish localization, thanks to @Rangertheman. From d8cea3ff178a4cd627bc8b0939cf883f0cbdd6d0 Mon Sep 17 00:00:00 2001 From: castanho Date: Thu, 7 Oct 2021 05:25:51 -0300 Subject: [PATCH 187/726] Update pt-BR.json with missing keys --- lang/pt-BR.json | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/lang/pt-BR.json b/lang/pt-BR.json index c89c8588..a0986168 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -124,6 +124,14 @@ "CoC7.ItemWeapon": "Item (Arma)", "CoC7.AttacksPerRound": "Ataques por Turno", + "CoC7.Cast": "Conjurar", + "CoC7.SanityCost": "Custo em Sanidade", + "CoC7.PowerCost": "Custo em Poder", + "CoC7.HitPointsCost": "Custo em Vida", + "CoC7.MagicPointsCost": "Custo em Magia", + "CoC7.OtherCosts": "Outros Custos", + "CoC7.CastingSpell": "Conjurando {spell}.", + "CoC7.CopyToClipboard": "Copiar para Área de Transferência", "CoC7.WhisperToSelection": "Sussurrar aos Tokens Selecionados", "CoC7.WhisperTo": "Sussurrar para:", @@ -408,6 +416,10 @@ "CoC7.EditItem": "Editar Item", "CoC7.DeleteItem": "Deletar Item", "CoC7.TradeItem": "Repassar Item", + "CoC7.SortBySkillName": "Ordenar perícias por nome", + "CoC7.SortBySkillValue": "Ordenar perícias por pontos", + "CoC7.UncommonSkillsShow": "Mostrar perícias incomuns", + "CoC7.UncommonSkillsHide": "Ocultar perícias incomuns", "CoC7.NewBookName": "novo livro", "CoC7.AddBook": "Adicionar Livro", @@ -694,10 +706,12 @@ "CoC7.English": "Inglês", "CoC7.Spanish": "Espanhol", "CoC7.French": "Francês", + "CoC7.TraditionalChinese": "Chinês Tradicional", "CoC7.SelectSourceLanguage": "Selecione o idioma de fonte.", "CoC7.Migrate.Title": "Atualização Necessária!", "CoC7.Migrate.Message": "

        Seu Mundo precisa ser atualizado para a rodar a versão {version}.

        Por favor, faça um backup da pasta de seu Mundo antes de prosseguir.

        Se você não atualizar seu Mundo, o sistema não funcionará devidamente.

        Reinicie o Mundo quando o processo for concluído.

        ", + "CoC7.Migrate.WithModulesMessage": "

        Seu Mundo ou módulos podem requerer uma atualização para rodar a versão {version}.

        Por favor, faça um backup da pasta de seu Mundo e das pastas dos módulos abaixo antes de prosseguir.

        Se você não atualizar seu Mundo, o sistema não funcionará devidamente.

        Os seguintes módulos contém Atores ou Items.

        {modules}

        O mundo precisará ser reiniciado quando a atualização terminar.

        ", "CoC7.Migrate.GMRequired": "

        Seu Mundo precisa ser atualizado para rodar a versão {version}.

        Por favor aguarde que o Guardião faça as atualizações necessárias e então atualize a página com F5.

        ", "CoC7.Migrate.RestartRequired": "

        Seu Mundo será reiniciado para que as atualizações sejam aplicadas

        ", "CoC7.Migrate.ButtonUpdate": "Atualizar", @@ -724,11 +738,22 @@ "CoC7.MessageSelectUserToGiveTo": "Qual personagem gostaria de repassar este item?", "CoC7.MessageDistanceCalculationFailure": "Não é possível calcular distância entre tokens, por favor, use a ficha de personagem.", + "CoC7.ToolTipSkill": "
        1. Clique Esquerdo Teste com Opções
        2. Shift + Clique Esquerdo Teste Regular Imediato
        1. Clique Direito Teste Resistido com Opções
        2. Shift + Clique Direito Teste Resistido Imediato
        1. Alt/Option + Clique Direito Teste Combinado com Opções
        ", + "CoC7.ToolTipKeeperSkill": "
        1. CTRL + Clique Esquerdo Criar Link
        2. {other}
        ", + "CoC7.ToolTipKeeperStandbySkill": "
      3. Clique Esquerdo Requisitar um teste para {name}
      4. ", + "CoC7.ToolTipDB": "
        1. Clique Esquerdo Teste Regular Imediato
        ", + "CoC7.ToolTipKeeperSanity": "
      5. CTRL + Alt/Option Criar um Link de Teste de Sanidade
      6. ", + "CoC7.ToolTipAutoToggle": "
        1. Clique Esquerdo Alternar Cálculo Automático
        2. ", + "CoC7.ToolTipSkillFlagToggle": "
          1. Dois Cliques Alternar Status de Desenvolvimento
          2. ", + "CoC7.ToolTipSkillFlagged": "Marcada para Desenvolvimento", + "CoC7.ToolTipSkillUnflagged": "Desmarcada para Desenvolvimento", + "SETTINGS.TitleRules": "Regras", "SETTINGS.TitleInitiative": "Iniciativa", "SETTINGS.TitleRoll": "Rolagens", "SETTINGS.TitleChatCards": "Cartões", "SETTINGS.TitleScene": "Cenas", + "SETTINGS.TitleGameArtwork": "Arte", "SETTINGS.TitleSheet": "Fichas", "SETTINGS.TitleWeapon": "Armas", "SETTINGS.TitleDiceSoNice": "Dice So Nice", @@ -775,6 +800,12 @@ "SETTINGS.TenDieBonusHint": "Quando usar DsN, escolha a cor do dado de bônus de dezenas. (deixe vazio para usar o padrão do jogador)", "SETTINGS.TenDiePenalty": "[DsN] Cor de Dado de Penalidade de Dezenas", "SETTINGS.TenDiePenaltyHint": "Quando usar DsN, escolha a cor do dado de penalidade de dezenas. (deixe vazio para usar o padrão do jogador)", + "SETTINGS.OverrideGameArtwork": "Substituir Arte do Jogo", + "SETTINGS.OverrideGameArtworkHint": "!!NECESSÁRIO REINICIAR!! Dá acesso às configurações avançadas do jogo. Deixe vazio para padrão", + "SETTINGS.ArtPauseImage": "Imagem do Ícone de Pause", + "SETTINGS.ArtPauseImageHint": ". digite 'null' para remover a imagem.", + "SETTINGS.ArtPauseText": "Texto do Ícone de Pause", + "SETTINGS.ArtPauseTextHint": "Deixe em branco para manter o padrão.", "SETTINGS.OverrideSheetArtwork": "Substituir Arte da Ficha", "SETTINGS.OverrideSheetArtworkHint": "!!NECESSÁRIO REINICIAR!! Dá acesso às configurações avançadas da ficha. Deixe vazio para padrão", "SETTINGS.ArtWorkSheetBackground": "Plano de Fundo da Ficha", @@ -830,5 +861,6 @@ "CoC7.ExperimentalFeaturesWarning": "Esse recurso está em desenvolvimento. Seu uso não é recomendado.", "SETTINGS.CheckElevation": "Incluir elevação em distância.", "SETTINGS.CheckElevationHint": "Usar cálculos de elevação em combates à distância.", - "SETTINGS.showIconsOnly": "Na versão resumida da ficha, mostra apenas os ícones das perícias." + "SETTINGS.showIconsOnly": "Na versão resumida da ficha, mostra apenas os ícones das perícias.", + "CoC7.toolTipDelay": "Atraso em milissegundos antes das dicas aparecerem, 0 para nunca." } From 28af46a9d68aa46cef619b66d82318860e97ecc7 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 7 Oct 2021 08:26:37 +0000 Subject: [PATCH 188/726] Updated translations list --- .github/TRANSLATIONS.md | 740 ++++++++++++++++++++-------------------- 1 file changed, 371 insertions(+), 369 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 90c86e84..46d8b9d3 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,375 +2,377 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -| Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **366** | **142** | **159** | **30** | **30** | **30** | **7** | **30** | **24** | **36** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +The **pt-BR** translation is currently up to date + +| Key | cn | cs | de | es | fr | ja | pl | sv | zh-TW | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **366** | **142** | **159** | **30** | **30** | **30** | **7** | **24** | **36** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ##### CoC7.ActorImporter From 83abdd220849eee1a7f8c9c7c5235dc88a1be836 Mon Sep 17 00:00:00 2001 From: castanho Date: Thu, 7 Oct 2021 05:32:44 -0300 Subject: [PATCH 189/726] Update pt-BR.json fixing typos --- lang/pt-BR.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lang/pt-BR.json b/lang/pt-BR.json index a0986168..b3b94c8c 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -768,7 +768,7 @@ "SETTINGS.UseToken": "Usar Imagem do Token", "SETTINGS.UseTokenHint": "Usar imagem do token ao invés de retratos na Área de Mensagens", "SETTINGS.DisplayActorOnCard": "Mostrar Ator na Área de Mensagens", - "SETTINGS.DisplayActorOnCardHint": "Motrar o retrato/miniatura na Área de Mensagens", + "SETTINGS.DisplayActorOnCardHint": "Mostrar o retrato/miniatura na Área de Mensagens", "SETTINGS.InitiativeRule": "Selecione Regra de Iniciativa", "SETTINGS.InitiativeRuleHint": "Você pode selecionar a regra básica de iniciativa (usar valor de DES) ou a regra opcional (jogar dados e desempatar por DES)", "SETTINGS.InitiativeRuleBasic": "Básica", @@ -789,7 +789,7 @@ "SETTINGS.RestrictGridSpaces": "Restringir Medidas para Espaços do Mapa", "SETTINGS.RestrictGridSpacesHint": "Para combate a distância, se habilitado, a distância será medida em espaços do mapa; se não, a distância 'real' (euclidiana) será usada.", "SETTINGS.StatusPlayerEditable": "Jogador Pode Modificar Estado", - "SETTINGS.StatusPlayerEditableHint": "Deixa o jogador modificar seu status (prostrado, inconsciente, morrendo, etc) e resetar sua perca diária de Sanidade", + "SETTINGS.StatusPlayerEditableHint": "Deixa o jogador modificar seu status (prostrado, inconsciente, morrendo, etc) e reiniciar sua perca diária de Sanidade", "SETTINGS.SyncDice3D": "[DsN] Sincronizar Dados", "SETTINGS.SyncDice3DHint": "Quando usar DsN (Dice so Nice), sincronize entre jogadores", "SETTINGS.UnitDieColorset": "[DsN] Cor do Dado de Unidade", From 848cbc55ac56b1e6ac5bd2a0dd5f26cf2b3b47cb Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Thu, 7 Oct 2021 21:12:10 +0200 Subject: [PATCH 190/726] Track initialization --- module/items/sheets/chase.js | 266 ++++++++++++++++++++++++++++++++--- styles/sheets/chase.less | 79 ++++++++--- template.json | 3 + templates/items/chase.html | 199 +++++++++++++++----------- 4 files changed, 420 insertions(+), 127 deletions(-) diff --git a/module/items/sheets/chase.js b/module/items/sheets/chase.js index 1a0751a8..fdcda971 100644 --- a/module/items/sheets/chase.js +++ b/module/items/sheets/chase.js @@ -154,7 +154,73 @@ export class CoC7ChaseSheet extends ItemSheet { 0 === this.item.data.data.locations.list.length ) return undefined - const locations = this.item.data.data.locations.list + const init = this.getInitTrack() + let locationsIndexStart, initIndexStart, locationsLength + if (0 >= init.length) locationsIndexStart = 0 + else if (this.item.data.data.startingIndex >= init.length) + locationsIndexStart = 0 + else locationsIndexStart = init.length - this.item.data.data.startingIndex + + if (this.item.data.data.startingIndex <= 0) initIndexStart = 0 + else if (this.item.data.data.startingIndex <= init.length) + initIndexStart = 0 + else initIndexStart = this.item.data.data.startingIndex - init.length + + if (0 == locationsIndexStart) + locationsLength = this.item.data.data.locations.list.length + else + locationsLength = + this.item.data.data.locations.list.length + locationsIndexStart + + if (0 != init.length) { + if (this.item.data.data.startingIndex < 0) { + for ( + let index = 0; + index < Math.abs(this.item.data.data.startingIndex); + index++ + ) { + init.push({ + uuid: this.generateNewUuid(), + init: true, + participants: [] + }) + } + } + } + + const locations = [] + + for (let index = 0; index < locationsLength; index++) { + let location = {} + const participants = [] + if ( + index >= locationsIndexStart && + index - locationsIndexStart < this.item.data.data.locations.list.length + ) { + location = this.item.data.data.locations.list[ + index - locationsIndexStart + ] + location.init = false + location.participants?.forEach(p => { + if (null != p) participants.push(p) + }) + } + if (index >= initIndexStart && index - initIndexStart < init.length) { + mergeObject(location, init[index - initIndexStart], { + overwrite: false + }) + + init[index - initIndexStart].participants?.forEach(p => { + if (null != p) participants.push(p) + }) + + location.participants = participants + } + location.first = false + location.end = false + locations.push(location) + } + locations[0].first = true for (let index = 0; index < locations.length; index++) { @@ -162,11 +228,26 @@ export class CoC7ChaseSheet extends ItemSheet { const location = locations[index] if (!location.name) classes.push('empty') if (location.active) classes.push('active') + if (location.init) classes.push('init') location.cssClasses = classes.join(' ') } if (locations.length > 1) locations[locations.length - 1].last = true + locations.forEach(l => { + if (l.participants) { + for (let i = 0; i < l.participants.length; i++) { + const uuid = l.participants[i] + const p = this.item.data.data.participants.find(p => uuid == p.uuid) + if (undefined != p) { + l.participants[i] = new _participant(p) + } else { + l.participants[i] = null + } + } + } + }) + return locations } @@ -176,18 +257,18 @@ export class CoC7ChaseSheet extends ItemSheet { } get previousLocation () { - if( !this.locations) return undefined - const activeIndex = this.locations.findIndex( l => l.active) - if( -1 == activeIndex) return undefined - if( 0 == activeIndex) return undefined + if (!this.locations) return undefined + const activeIndex = this.locations.findIndex(l => l.active) + if (-1 == activeIndex) return undefined + if (0 == activeIndex) return undefined return this.locations[activeIndex - 1] } get nextLocation () { - if( !this.locations) return undefined - const activeIndex = this.locations.findIndex( l => l.active) - if( -1 == activeIndex) return undefined - if( activeIndex == this.locations.length - 1) return undefined + if (!this.locations) return undefined + const activeIndex = this.locations.findIndex(l => l.active) + if (-1 == activeIndex) return undefined + if (activeIndex == this.locations.length - 1) return undefined return this.locations[activeIndex + 1] } @@ -195,10 +276,109 @@ export class CoC7ChaseSheet extends ItemSheet { return this.participants.every(e => e.hasValidMov) } - get initTrack () { + async cutToTheChase () { if (this.allHaveValidMov) { + //TODO : Check for speed roll ?? + + //Calculate movement actions const participants = this.participants - } else return undefined + const minMov = this.findMinMov(participants) + participants.forEach(p => { + p.data.movementAction = 1 + (p.adjustedMov - minMov) + }) + await this.updateParticipants(participants) + } + } + + getInitTrack () { + //Get preys and check for escaped + const preys = this.item.data.data.includeEscaped + ? this.preys + : this.preys?.filter(p => !p.data.escaped) + //Get chasers + const chasers = this.chasers + + //If no prey or no chasser + // if (0 == chasers.length) { + // ui.notifications.warn('No chasers') + // return undefined + // } + // if (0 == preys.length) { + // ui.notifications.warn('No preys') + // return undefined + // } + + //Build starting track + const track = [] + + const chasersMinMov = this.findMinMov(chasers) + const chasersMaxMov = this.findMaxMov(chasers) + const preysMinMov = this.findMinMov(preys) + const preysMaxMov = this.findMaxMov(preys) + + if (-1 != chasersMinMov && -1 != chasersMaxMov) { + // Add chasers to the track. + for (let mov = chasersMinMov; mov <= chasersMaxMov; mov++) { + //Find all with that mov + const location = { + uuid: this.generateNewUuid(), + init: true, + participants: [] + } + const locationParticipantsList = chasers + .filter(p => mov == p.adjustedMov) + .sort((a, b) => a.dex - b.dex) + locationParticipantsList.forEach(p => + location.participants.push(p.uuid) + ) + track.push(location) + } + + // Add space between chasers and preys. + for (let index = 0; index < this.item.data.data.startingRange; index++) { + track.push({ + uuid: this.generateNewUuid(), + init: true, + participants: [] + }) + } + } + + if (-1 != preysMinMov && -1 != preysMaxMov) { + // Add preys to the track. + for (let mov = preysMinMov; mov <= preysMaxMov; mov++) { + //Find all with that mov + const location = { + uuid: this.generateNewUuid(), + init: true, + participants: [] + } + const locationParticipantsList = preys + .filter(p => mov == p.adjustedMov) + .sort((a, b) => a.dex - b.dex) + locationParticipantsList.forEach(p => + location.participants.push(p.uuid) + ) + track.push(location) + } + } + + return track + } + + generateNewUuid () { + let unique = false + let uuid + while (!unique) { + uuid = foundry.utils.randomID(16) + unique = + 0 === + this.item.data.data.participants.filter(p => p.uuid == uuid).length && + 0 === + this.item.data.data.locations.list.filter(p => p.uuid == uuid).length + } + + return uuid } /** @override */ @@ -246,7 +426,7 @@ export class CoC7ChaseSheet extends ItemSheet { html.find('.name-container').click(this._onLocationClick.bind(this)) - html.find( '.obstacle_type').click(this._onObstacleTypeClick.bind(this)) + html.find('.obstacle_type').click(this._onObstacleTypeClick.bind(this)) const participantDragDrop = new DragDrop({ dropSelector: '.participant', @@ -373,21 +553,51 @@ export class CoC7ChaseSheet extends ItemSheet { await this.item.update({ 'data.locations.list': updatedList }) } - async _onObstacleTypeClick( event) { + async updateParticipants (list) { + const participantsData = this.item.data.data.participants + ? duplicate(this.item.data.data.participants) + : [] + list.forEach(p => { + let data + if (p.constructor.name == '_participant') { + data = p.data + } else data = p + const index = this.findIndex(participantsData, data.uuid) + if (-1 === index) { + participantsData.push(data) + ui.notifications.warn('Participant data missing') + } else { + participantsData[index] = data + } + }) + await this.item.update({ 'data.participants': participantsData }) + return + } + + async _onObstacleTypeClick (event) { const target = event.currentTarget const locationElement = target.closest('.location') const uuid = locationElement.dataset.uuid const locations = duplicate(this.item.data.data.locations.list) const locationIndex = this.findIndex(locations, uuid) - if( !locations[ locationIndex].obstacleDetails) locations[ locationIndex].obstacleDetails = {} - if( target.classList.contains( 'barrier')){ - locations[ locationIndex].obstacleDetails.barrier = !locations[ locationIndex].obstacleDetails.barrier - locations[ locationIndex].obstacleDetails.hazard = !locations[ locationIndex].obstacleDetails.barrier - } else if( target.classList.contains( 'hazard')){ - locations[ locationIndex].obstacleDetails.hazard = !locations[ locationIndex].obstacleDetails.hazard - locations[ locationIndex].obstacleDetails.barrier = !locations[ locationIndex].obstacleDetails.hazard + if (!locations[locationIndex].obstacleDetails) + locations[locationIndex].obstacleDetails = {} + if (target.classList.contains('barrier')) { + locations[locationIndex].obstacleDetails.barrier = !locations[ + locationIndex + ].obstacleDetails.barrier + locations[locationIndex].obstacleDetails.hazard = !locations[ + locationIndex + ].obstacleDetails.barrier + } else if (target.classList.contains('hazard')) { + locations[locationIndex].obstacleDetails.hazard = !locations[ + locationIndex + ].obstacleDetails.hazard + locations[locationIndex].obstacleDetails.barrier = !locations[ + locationIndex + ].obstacleDetails.hazard } - await this.updateLocationsList(locations) + await this.updateLocationsList(locations) } async _onLocationClick (event) { @@ -398,8 +608,10 @@ export class CoC7ChaseSheet extends ItemSheet { const locationElement = target.closest('.location') const uuid = locationElement.dataset.uuid const locationIndex = this.findIndex(locations, uuid) - if (!active) locations[locationIndex].active = true - await this.updateLocationsList(locations) + if (-1 != locationIndex) { + if (!active) locations[locationIndex].active = true + await this.updateLocationsList(locations) + } } async _onButtonClick (event) { @@ -428,6 +640,10 @@ export class CoC7ChaseSheet extends ItemSheet { await this.updateLocationsList([]) break + case 'cut2chase': + await this.cutToTheChase() + break + default: break } @@ -911,6 +1127,10 @@ export class _participant { this.data.fastest = x } + set movementAction (x) { + this.data.movementAction = x + } + get cssClass () { const cssClasses = [] if (this.isChaser) cssClasses.push('chaser') diff --git a/styles/sheets/chase.less b/styles/sheets/chase.less index 7436bada..1b451970 100644 --- a/styles/sheets/chase.less +++ b/styles/sheets/chase.less @@ -1,10 +1,14 @@ .sheetV2.item.chase { - .flex-content{ + .flex-content { flex: 0 0 content; } - form{ - .container{ + .flex-auto { + flex: 0 0 auto; + } + + form { + .container { &.expanded { // display: flex; // flex-direction: column; @@ -15,14 +19,14 @@ .sheet-header { flex: 0 0 12rem; height: 100%; - .sheet-portrait{ + .sheet-portrait { height: auto; } - .active-location{ + .active-location { height: 100%; padding-top: 0.5rem; - .location-name{ + .location-name { flex: 0 0 auto; text-align: center; } @@ -30,10 +34,18 @@ } .sheet-body { - flex:auto; + flex: auto; + + // .tab.active { + // display: block; + // } - .tab.active { - display: block; + .tab { + .tab-pannel { + display: flex; + flex-direction: column; + height: 100%; + } } .tab.setup { @@ -70,19 +82,31 @@ // background-attachment: local; // background-image: linear-gradient(to right, red , blue); + .flexrow { + flex-wrap: nowrap; + flex: 0 0 auto; + } + .location { display: flex; flex-direction: column; flex-wrap: nowrap; - - .flexrow { - flex-wrap: nowrap; - flex: 0 0 content; - } + flex: 0 0 auto; .people { flex: 1; min-height: 2rem; + .spacer { + flex: 0 0 1.5rem; + } + .list { + flex: 1; + display: flex; + justify-content: center; + .participant { + width: 2rem; + } + } } // &:first-child{ @@ -115,7 +139,9 @@ width: 1rem; } - .warning{ + .warning { + flex: 0 0 content; + height: 2rem; font-size: 1.5rem; display: flex; align-items: center; @@ -124,7 +150,8 @@ .name-container { font-size: 1rem; - line-height: 2rem; + line-height: 1.75rem; + white-space: nowrap; &:hover { cursor: pointer; } @@ -133,15 +160,29 @@ color: black; flex: 0 0 auto; padding: 0 0.3rem; - min-height: 2rem; + height: 2rem; &.empty { padding: 0; width: 2rem; background-color: slategray; + &.init { + border: 0.125rem solid slategrey; + background-color: white; + &:hover { + cursor: auto; + } + } } &.active { border: 0.125rem solid red; } + &.init { + border: 0.125rem solid slategrey; + color: rgba(0, 0, 0, 0); + &:hover { + cursor: auto; + } + } } } } @@ -161,9 +202,9 @@ .participant { flex: 1; display: grid; - grid-template-columns: 2rem 2rem 0.5rem 5fr 2.5rem 2.5rem 4fr 2rem 3rem 1.25rem 2rem 1rem; + grid-template-columns: 2rem 2rem 0.5rem 5fr 2.5rem 2.5rem 4fr 2rem 3rem 1.25rem 2rem 1rem 1rem; grid-template-rows: 2rem; - grid-template-areas: 'p-side p-icon p-expand p-name p-init p-movement p-speed-check p-score p-roll p-adjust p-modified-mov p-control'; + grid-template-areas: 'p-side p-icon p-expand p-name p-init p-movement p-speed-check p-score p-roll p-adjust p-modified-mov p-control p-movement-action'; align-items: center; margin-bottom: 2px; diff --git a/template.json b/template.json index 2011f8ea..1198770b 100644 --- a/template.json +++ b/template.json @@ -616,6 +616,9 @@ }, "includeEscapees": false, "includeLatecomers": false, + "startingRange": 2, + "startingIndex": 0, + "started": false, "participants": [] } } diff --git a/templates/items/chase.html b/templates/items/chase.html index 0c38b1be..a7ae7da3 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -60,10 +60,26 @@
            {{#each locations as |location i|}}
            +
            + {{#unless location.first}} + {{#if location.obstacle}} +
            + {{/if}} + {{/unless}} +
            + {{#each location.participants as |p|}} + {{#if p}} +
            + +
            + {{/if}} + {{/each}} +
            +
            {{#unless location.first}} {{#if location.obstacle}} -
            +
            {{#if location.obstacleDetails.barrier}} @@ -74,10 +90,8 @@
            {{/if}} {{/unless}} - - -
            +
            {{#if location.first}}
            {{else}} @@ -124,98 +138,113 @@ +
            + + +
            +
            + + +
            + {{#if locations}}
            {{localize 'CoC7.Reset'}}
            +
            {{localize 'CoC7.cut2chase'}}
            {{/if}}
            -
            - {{#each participants as |p i|}} -
            -
            - {{#if p.isChaser}} - - {{else}} - - {{/if}} -
            -
            - -
            -
            -
            - {{#if p.isActor}} - {{p.name}} - {{else}} - - {{/if}} -
            -
            - -
            -
            - -
            -
            - - {{#each p.speedCheck.options as |o|}} - - {{/each}} - - -
            -
            - {{#if p.speedCheck.refSet}} - {{p.speedCheck.score}} - {{else}} - - {{/if}} -
            -
            - {{#if p.speedCheck.rolled}} - {{{p.speedCheck.inlineRoll}}} - {{else}} - - {{/if}} -
            -
            - {{#if p.speedCheck.rolled}} - {{#if p.speedCheck.hasModifier}} - +
            +
            + {{#each participants as |p i|}} +
            +
            + {{#if p.isChaser}} + {{else}} - + {{/if}} - {{/if}} -
            -
            - {{p.adjustedMov}} -
            -
            - {{#if p.speedCheck.rolled}} - - {{else}} - - {{/if}} -
            -
            - {{#if p.hasDriver}} -
            -
            -
            -
            -
            {{p.driver.name}}
            -
            - +
            + +
            +
            +
            + {{#if p.isActor}} + {{p.name}} + {{else}} + + {{/if}} +
            +
            + +
            +
            + +
            +
            + + {{#each p.speedCheck.options as |o|}} + + {{/each}} + + +
            +
            + {{#if p.speedCheck.refSet}} + {{p.speedCheck.score}} + {{else}} + + {{/if}} +
            +
            + {{#if p.speedCheck.rolled}} + {{{p.speedCheck.inlineRoll}}} + {{else}} + + {{/if}} +
            +
            + {{#if p.speedCheck.rolled}} + {{#if p.speedCheck.hasModifier}} + + {{else}} + + {{/if}} + {{/if}} +
            +
            + {{p.adjustedMov}} +
            +
            + {{#if p.speedCheck.rolled}} + + {{else}} + + {{/if}} +
            +
            + {{p.data.movementAction}}
            - {{/if}} - {{/each}} -
            -
            -
            - + {{#if p.hasDriver}} +
            +
            +
            + +
            +
            {{p.driver.name}}
            +
            + +
            +
            + {{/if}} + {{/each}} +
            +
            +
            + +
            From 0fe057d823f29225541de217c51691e33c77b77e Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 9 Oct 2021 11:45:35 +0100 Subject: [PATCH 191/726] Dialog checks that language exists Fixes to zh-TW regular expressions Change references to npc back to creature in convert7E function Move checks to disable auto attributes to a separate function for numeric values npm run format --- module/apps/actor-importer-dialog.js | 10 +- module/apps/actor-importer-regexp.js | 338 +++++++++++++++++++----- module/apps/actor-importer.js | 368 ++++++++++++++++++++------- 3 files changed, 558 insertions(+), 158 deletions(-) diff --git a/module/apps/actor-importer-dialog.js b/module/apps/actor-importer-dialog.js index 7a73f72c..897a33a3 100644 --- a/module/apps/actor-importer-dialog.js +++ b/module/apps/actor-importer-dialog.js @@ -36,9 +36,11 @@ export class CoC7ActorImporterDialog extends Dialog { if (CONFIG.debug.CoC7Importer) { console.debug('entity type:', inputs.entity) } - inputs.lang = $('#coc-entity-lang') - .val() - .trim() + inputs.lang = CoC7ActorImporterRegExp.checkLanguage( + $('#coc-entity-lang') + .val() + .trim() + ) inputs.source = $('#source') .val() .trim() @@ -98,7 +100,7 @@ export class CoC7ActorImporterDialog extends Dialog { */ static async create (data = {}) { data.languages = CoC7ActorImporterRegExp.getTranslations() - data.language = CoC7ActorImporterRegExp.getLanguage() + data.language = CoC7ActorImporterRegExp.checkLanguage(null) const html = await renderTemplate( 'systems/CoC7/templates/apps/actor-importer.html', data diff --git a/module/apps/actor-importer-regexp.js b/module/apps/actor-importer-regexp.js index 4582d9f0..de01c93e 100644 --- a/module/apps/actor-importer-regexp.js +++ b/module/apps/actor-importer-regexp.js @@ -1,7 +1,11 @@ /* global game */ import { CoC7Utilities } from '../utilities.js' -const nameCharacters = '\\u3000\\u3400-\\u4DBF\\u4E00-\\u9FFF\\w\\(\\)\\-\\/&"\'' + CoC7Utilities.quoteRegExp('áéíóàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃĀÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆ朓”') +const nameCharacters = + '\\u3000\\u3400-\\u4DBF\\u4E00-\\u9FFF\\w\\(\\)\\-\\/&"\'' + + CoC7Utilities.quoteRegExp( + 'áéíóàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃĀÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆ朓”' + ) const keys = { en: { @@ -30,7 +34,8 @@ const keys = { // Language dependant spells section starts with sectionSpells: '\n(?:' + 'spells' + ')[:\n]', // Language dependant example character - example: 'Example Character, age 27\nSTR 75 CON 60 SIZ 80 DEX 70 APP 60 INT 80\nPOW 50 EDU 85 SAN 55 HP 14 DB: 1D4\nBuild: 1 Move: 7 MP: 10 Luck: 40 Armor: 1\nAttacks per round: 3 SAN loss: 1d4/1d8\nCombat\nBite 50% (25/10), damage 1D6\nBrawl 30% (15/6), damage 1D3\nDerringer 40% (20/8), damage 1D8+1\nDodge 50% (25/10)\nSkills\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLanguages: English 80%, Eklo 5%.\nSpells: Summon NPC, Dispel NPC.' + example: + 'Example Character, age 27\nSTR 75 CON 60 SIZ 80 DEX 70 APP 60 INT 80\nPOW 50 EDU 85 SAN 55 HP 14 DB: 1D4\nBuild: 1 Move: 7 MP: 10 Luck: 40 Armor: 1\nAttacks per round: 3 SAN loss: 1d4/1d8\nCombat\nBite 50% (25/10), damage 1D6\nBrawl 30% (15/6), damage 1D3\nDerringer 40% (20/8), damage 1D8+1\nDodge 50% (25/10)\nSkills\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLanguages: English 80%, Eklo 5%.\nSpells: Summon NPC, Dispel NPC.' }, fr: { description: 'CoC7.French', @@ -45,7 +50,8 @@ const keys = { sectionSkills: '\n(?:' + 'Compétences' + '(?:\\s*\\([^\\)]+\\))?)[:\n]', sectionLangauges: '\n(?:' + 'Langue' + ')[:\n]', sectionSpells: '\n(?:' + 'Sortilèges|Sorts' + ')[:\n]', - example: 'Example Character, 27 ans\nFOR 75 CON 60 TAI 80 DEX 70 APP 60 INT 80\nPOU 50 ÉDU 85 SAN 55 PV 14 BD: 1D4\nCarrure: 1 Mvt: 7 PM: 10 Chance: 40 Armure: 1\nAttaques par round 3 Perte de SAN: 1d4/1d8\nAttaques\nBite 50% (25/10), dommage 1D6\nBrawl 30% (15/6), dommage 1D3\nDerringer 40% (20/8), dommage 1D8+1\nEsquiver 50% (25/10)\nCompétences\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLangue: English 80%, Eklo 5%.\nSortilèges: Summon NPC, Dispel NPC.' + example: + 'Example Character, 27 ans\nFOR 75 CON 60 TAI 80 DEX 70 APP 60 INT 80\nPOU 50 ÉDU 85 SAN 55 PV 14 BD: 1D4\nCarrure: 1 Mvt: 7 PM: 10 Chance: 40 Armure: 1\nAttaques par round 3 Perte de SAN: 1d4/1d8\nAttaques\nBite 50% (25/10), dommage 1D6\nBrawl 30% (15/6), dommage 1D3\nDerringer 40% (20/8), dommage 1D8+1\nEsquiver 50% (25/10)\nCompétences\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLangue: English 80%, Eklo 5%.\nSortilèges: Summon NPC, Dispel NPC.' }, es: { description: 'CoC7.Spanish', @@ -60,7 +66,8 @@ const keys = { sectionSkills: '\n(?:' + 'Habilidades' + '(?:\\s*\\([^\\)]+\\))?)[:\n]', sectionLangauges: '\n(?:' + 'Idiomas|Lenguajes|Lenguas' + ')[:\n]', sectionSpells: '\n(?:' + 'Conjuros' + ')[:\n]', - example: 'Example Character, 27 años\nFUE 75 CON 60 TAM 80 DES 70 APA 60 INT 80\nPOD 50 EDU 85 COR 55 PV 14 BD: 1D4\nCorpulencia: 1 Movimiento: 7 PM: 10 Suerte: 40 Armadura: 1\nNúmero de Ataques 3 Pérdida de cordura: 1d4/1d8\nCombate\nBite 50% (25/10), daño 1D6\nBrawl 30% (15/6), daño 1D3\nDerringer 40% (20/8), daño 1D8+1\nEsquivar 50% (25/10)\nHabilidades\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nIdiomas: English 80%, Eklo 5%.\nConjuros: Summon NPC, Dispel NPC.' + example: + 'Example Character, 27 años\nFUE 75 CON 60 TAM 80 DES 70 APA 60 INT 80\nPOD 50 EDU 85 COR 55 PV 14 BD: 1D4\nCorpulencia: 1 Movimiento: 7 PM: 10 Suerte: 40 Armadura: 1\nNúmero de Ataques 3 Pérdida de cordura: 1d4/1d8\nCombate\nBite 50% (25/10), daño 1D6\nBrawl 30% (15/6), daño 1D3\nDerringer 40% (20/8), daño 1D8+1\nEsquivar 50% (25/10)\nHabilidades\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nIdiomas: English 80%, Eklo 5%.\nConjuros: Summon NPC, Dispel NPC.' }, 'zh-TW': { description: 'CoC7.TraditionalChinese', @@ -75,17 +82,20 @@ const keys = { fulldb: '(' + 'Damage Bonus|DB|傷害加值' + ')', halfdb: '(' + '½|half' + ')', // Language dependant combat section starts with - sectionCombats: '\n(?:' + 'combat|fighting attacks|戰鬥技能|戰鬥列表|武器' + ')[:\n]', + sectionCombats: + '\n(?:' + 'combat|fighting attacks|戰鬥技能|戰鬥列表|武器' + ')[:\n]', // If we have to add a combat header what will trigger sectionCombats newCombatHeader: '\n' + 'Combat' + '\n', // Language dependant skills section starts with - sectionSkills: '\n(?:' + '(?:Skills|技能列表)' + '(?:\\s*\\([^\\)]+\\))?)[:\n]', + sectionSkills: + '\n(?:' + '(?:Skills|技能列表)' + '(?:\\s*\\([^\\)]+\\))?)[:\n]', // Language dependant languages section starts with sectionLangauges: '\n(?:' + 'Languages|語言' + ')[:\n]', // Language dependant spells section starts with - sectionSpells: '\n(?:' + 'spells|咒文列表' + ')[:\n]', + sectionSpells: '\n(?:' + 'spells|咒文列表|咒文' + ')[:\n]', // Language dependant example character - example: '示範角色, 年齡 27\n力量 75 體質 60 體型 80 敏捷 70 外貎 60 智力 80\n意志 50 教育 85 SAN 55 HP 14 DB: 1D4\n體格: 1 Move: 7 MP: 10 幸運: 40 護甲: 1\n攻擊次數: 3 理智喪失: 1d4/1d8\n戰鬥列表\n咬 50% (25/10), 傷害 1D6\n空手 30% (15/6), 傷害 1D3\n手槍 40% (20/8), 傷害 1D8+1\n閃避 50% (25/10)\n技能列表\n動物馴養 55%, 取悅 30%, 急救 25%, 潛行 20%,\n聆聽 50%, 藥學 45%, 精神分析 25%, 心理學 75%,\n科學 (司法科學) 90%, 科學 (密碼學) 35%, \n偵查 35%, 喬裝 10%\n語言: 粵語 80%, 讀唇 5%.\n咒文: 召喚 NPC, 指揮 NPC.' + example: + '示範角色, 年齡 27\n力量 75 體質 60 體型 80 敏捷 70 外貎 60 智力 80\n意志 50 教育 85 SAN 55 HP 14 DB: 1D4\n體格: 1 Move: 7 MP: 10 幸運: 40 護甲: 1\n攻擊次數: 3 理智喪失: 1d4/1d8\n戰鬥列表\n咬 50% (25/10), 傷害 1D6\n空手 30% (15/6), 傷害 1D3\n手槍 40% (20/8), 傷害 1D8+1\n閃避 50% (25/10)\n技能列表\n動物馴養 55%, 取悅 30%, 急救 25%, 潛行 20%,\n聆聽 50%, 藥學 45%, 精神分析 25%, 心理學 75%,\n科學 (司法科學) 90%, 科學 (密碼學) 35%, \n偵查 35%, 喬裝 10%\n語言: 粵語 80%, 讀唇 5%.\n咒文: 召喚 NPC, 指揮 NPC.' } } @@ -105,27 +115,77 @@ const translations = { san: '(?\\d+|-)[,\\s\n]*', hp: '(?\\d+|-)[,\\s\n]*', mp: '(?\\d+|-)[,\\s\n]*', - db: '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + keys.en.dbNone + ')[,\\s\n]*', + db: + '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + + keys.en.dbNone + + ')[,\\s\n]*', build: '(?[+-]?\\d+)[,\\s\n]*', - armor: '(?' + keys.en.armorNone + '|\\d+)[,\\s\n]*', + armor: + '(?' + + keys.en.armorNone + + '|\\d+)[,\\s\n]*', mov: '(?\\d+)[,\\s\n]*', lck: '(?\\d+|-)[,\\s\n]*', - attacksPerRound: '(?' + keys.en.attacksPerRoundNone + '|\\d+(?!d))[,\\s\n]*', - sanLoss: '(?' + keys.en.sanLossNone + '|\\dD?[+\\d]*\\/\\dD?[+\\d]*)[,\\s\n]*', - weapon: '(^|\\n)(?[.\\t ' + nameCharacters + ']+)(\\**,?\\s+|\\*)(?:\\(|(?\\d+)%,?(?:\\s*\\(\\d+\\/\\d+\\)\\s*,?)?)?(\\s*' + 'damage' + ')?\\s+(?(:?(:?\\d+d)?\\d+(\\s*/\\s*|\\s*[+-]\\s*(?:' + keys.en.fulldb + '|' + keys.en.halfdb + ')\\s*|\\s*[+-]\\s*(:?\\d+d)?\\d+)*)+)\\)?', - weaponDodge: '(?' + 'Dodge' + '):?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', - handgun: '(?' + ' Gun|Revolver|Pistol|Handgun|Derringer|Beretta|Luger|Desert Eagle| \\.38' + ')', - rifle: '(?' + 'Rifle|Shotgun|Carbine|Gauge |Lee-Enfield|Elephant' + ')', + attacksPerRound: + '(?' + + keys.en.attacksPerRoundNone + + '|\\d+(?!d))[,\\s\n]*', + sanLoss: + '(?' + + keys.en.sanLossNone + + '|\\dD?[+\\d]*\\/\\dD?[+\\d]*)[,\\s\n]*', + weapon: + '(^|\\n)(?[.\\t ' + + nameCharacters + + ']+)(\\**,?\\s+|\\*)(?:\\(|(?\\d+)%,?(?:\\s*\\(\\d+\\/\\d+\\)\\s*,?)?)?(\\s*' + + 'damage' + + ')?\\s+(?(:?(:?\\d+d)?\\d+(\\s*/\\s*|\\s*[+-]\\s*(?:' + + keys.en.fulldb + + '|' + + keys.en.halfdb + + ')\\s*|\\s*[+-]\\s*(:?\\d+d)?\\d+)*)+)\\)?', + weaponDodge: + '(?' + + 'Dodge' + + '):?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', + handgun: + '(?' + + ' Gun|Revolver|Pistol|Handgun|Derringer|Beretta|Luger|Desert Eagle| \\.38' + + ')', + rifle: + '(?' + 'Rifle|Shotgun|Carbine|Gauge |Lee-Enfield|Elephant' + ')', smb: '(?' + 'Submachine Gun|Thompson' + ')', machineGun: '(?' + 'Browning|Vickers' + ')', launched: '(?' + 'Molotov|Grenade|Dynamite' + ')', // Language dependant a skill should not be "The player has" / "but they regenerate" required for "A Cold Fire Within" - skill: '^(?[:\\*.\\s' + nameCharacters + ']+(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,]?\\s*', + skill: + '^(?[:\\*.\\s' + + nameCharacters + + ']+(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,]?\\s*', // Language dependant likely first words for a combat section if there is no heading guessStartCombat: '(^|(?[\\.\\s' + nameCharacters + ']+)[,\\s\n]+', - sections: '(' + keys.en.sectionCombats + '|' + keys.en.sectionSkills + '|' + keys.en.sectionLangauges + '|' + keys.en.sectionSpells + ')' + sections: + '(' + + keys.en.sectionCombats + + '|' + + keys.en.sectionSkills + + '|' + + keys.en.sectionLangauges + + '|' + + keys.en.sectionSpells + + ')' }, fr: { age: '(?\\d+)\\s*' + 'ans' + '(?![a-z])[,\\s]*', @@ -138,27 +198,81 @@ const translations = { dex: '(?\\d+|-)[,\\s\n]*', app: '(?\\d+|-)[,\\s\n]*', edu: '(?\\d+|-)[,\\s\n]*', - san: '(?\\d+|-)[,\\s\n]*', + san: + '(?\\d+|-)[,\\s\n]*', hp: '(?\\d+|-)[,\\s\n]*', - mp: '(?\\d+|-)[,\\s\n]*', - db: '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + keys.fr.dbNone + ')[,\\s\n]*', + mp: + '(?\\d+|-)[,\\s\n]*', + db: + '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + + keys.fr.dbNone + + ')[,\\s\n]*', build: '(?[+-]?\\d+)[,\\s\n]*', - armor: '(?' + keys.fr.armorNone + '|\\d+)[,\\s\n]*', - mov: '(?\\d+)[,\\s\n]*', + armor: + '(?' + + keys.fr.armorNone + + '|\\d+)[,\\s\n]*', + mov: + '(?\\d+)[,\\s\n]*', lck: '(?\\d+|-)[,\\s\n]*', - attacksPerRound: '(?' + keys.fr.attacksPerRoundNone + '|\\d+(?!d))[,\\s\n]*', - sanLoss: '(?' + keys.fr.sanLossNone + '|\\dD?[+\\d]*\\/\\dD?[+\\d]*)[,\\s\n]*', - weapon: '(^|\\n)(?[.\\t ' + nameCharacters + ']+)(\\**,?\\s+|\\*)(?:\\(|(?\\d+)%,?(?:\\s*\\(\\d+\\/\\d+\\)\\s*,?)?)?(\\s*(?:' + 'dommage|dégâts' + '))?\\s+(?(:?(:?\\d+d)?\\d+(\\s*/\\s*|\\s*[+-]\\s*(?:' + keys.fr.fulldb + '|half' + ')\\s*|\\s*[+-]\\s*(:?\\d+d)?\\d+)*)+)\\)?', - weaponDodge: '(?' + 'Esquiver' + '):?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', - handgun: '(?' + 'Revolver|Pistolet|Derringer|Beretta|Luger|Desert Eagle| \\.38' + ')', + attacksPerRound: + '(?' + + keys.fr.attacksPerRoundNone + + '|\\d+(?!d))[,\\s\n]*', + sanLoss: + '(?' + + keys.fr.sanLossNone + + '|\\dD?[+\\d]*\\/\\dD?[+\\d]*)[,\\s\n]*', + weapon: + '(^|\\n)(?[.\\t ' + + nameCharacters + + ']+)(\\**,?\\s+|\\*)(?:\\(|(?\\d+)%,?(?:\\s*\\(\\d+\\/\\d+\\)\\s*,?)?)?(\\s*(?:' + + 'dommage|dégâts' + + '))?\\s+(?(:?(:?\\d+d)?\\d+(\\s*/\\s*|\\s*[+-]\\s*(?:' + + keys.fr.fulldb + + '|half' + + ')\\s*|\\s*[+-]\\s*(:?\\d+d)?\\d+)*)+)\\)?', + weaponDodge: + '(?' + + 'Esquiver' + + '):?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', + handgun: + '(?' + + 'Revolver|Pistolet|Derringer|Beretta|Luger|Desert Eagle| \\.38' + + ')', rifle: '(?' + 'Carabine|Lee-Enfield|Fusil' + ')', smb: '(?' + 'SMG|Thompson' + ')', machineGun: '(?' + 'Browning|Vickers|Mitrailleuse' + ')', launched: '(?' + 'Molotov|Grenade|Dynamite' + ')', - skill: '^(?[:\\*.\\s' + nameCharacters + ']+(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,]?\\s*', - guessStartCombat: '(^|(?[:\\*.\\s' + + nameCharacters + + ']+(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,]?\\s*', + guessStartCombat: + '(^|(?[\\.\\s' + nameCharacters + ']+)[,\\s\n]+', - sections: '(' + keys.fr.sectionCombats + '|' + keys.fr.sectionSkills + '|' + keys.fr.sectionLangauges + '|' + keys.fr.sectionSpells + ')' + sections: + '(' + + keys.fr.sectionCombats + + '|' + + keys.fr.sectionSkills + + '|' + + keys.fr.sectionLangauges + + '|' + + keys.fr.sectionSpells + + ')' }, es: { age: '(?\\d+)\\s*' + 'a[ñÑ]os' + '(?![a-z])[,\\s]*', @@ -172,26 +286,83 @@ const translations = { app: '(?\\d+|-)[,\\s\n]*', edu: '(?\\d+|-)[,\\s\n]*', san: '(?\\d+|-)[,\\s\n]*', - hp: '(?\\d+|-)[,\\s\n]*', - mp: '(?\\d+|-)[,\\s\n]*', - db: '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + keys.es.dbNone + ')[,\\s\n]*', + hp: + '(?\\d+|-)[,\\s\n]*', + mp: + '(?\\d+|-)[,\\s\n]*', + db: + '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + + keys.es.dbNone + + ')[,\\s\n]*', build: '(?[+-]?\\d+)[,\\s\n]*', - armor: '(?' + keys.es.armorNone + '|\\d+)[,\\s\n]*', + armor: + '(?' + + keys.es.armorNone + + '|\\d+)[,\\s\n]*', mov: '(?\\d+)[,\\s\n]*', lck: '(?\\d+|-)[,\\s\n]*', - attacksPerRound: '(?' + keys.es.attacksPerRoundNone + '|\\d+(?!d))[,\\s\n]*', - sanLoss: '(?' + keys.es.sanLossNone + '|\\dD?[+\\d]*\\/\\dD?[+\\d]*)[,\\s\n]*', - weapon: '(^|\\n)(?[.\\t ' + nameCharacters + ']+)(\\**,?\\s+|\\*)(?:\\(|(?\\d+)%,?(?:\\s*\\(\\d+\\/\\d+\\)\\s*,?)?)?(\\s*' + 'daño' + ')?\\s+(?(:?(:?\\d+d)?\\d+(\\s*/\\s*|\\s*[+-]\\s*(?:' + keys.es.fulldb + ')\\s*|\\s*[+-]\\s*(:?\\d+d)?\\d+)*)+)\\)?', - weaponDodge: '(?' + 'Esquivar' + '):?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', - handgun: '(?' + 'Revolver|Pistola|Derringer|Beretta|Luger|Desert Eagle| \\.38' + ')', - rifle: '(?' + 'Rifle|Carabina|Lee-Enfield|Caza Elefantes|Fusil|Escopeta|Galga|Recortada' + ')', + attacksPerRound: + '(?' + + keys.es.attacksPerRoundNone + + '|\\d+(?!d))[,\\s\n]*', + sanLoss: + '(?' + + keys.es.sanLossNone + + '|\\dD?[+\\d]*\\/\\dD?[+\\d]*)[,\\s\n]*', + weapon: + '(^|\\n)(?[.\\t ' + + nameCharacters + + ']+)(\\**,?\\s+|\\*)(?:\\(|(?\\d+)%,?(?:\\s*\\(\\d+\\/\\d+\\)\\s*,?)?)?(\\s*' + + 'daño' + + ')?\\s+(?(:?(:?\\d+d)?\\d+(\\s*/\\s*|\\s*[+-]\\s*(?:' + + keys.es.fulldb + + ')\\s*|\\s*[+-]\\s*(:?\\d+d)?\\d+)*)+)\\)?', + weaponDodge: + '(?' + + 'Esquivar' + + '):?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', + handgun: + '(?' + + 'Revolver|Pistola|Derringer|Beretta|Luger|Desert Eagle| \\.38' + + ')', + rifle: + '(?' + + 'Rifle|Carabina|Lee-Enfield|Caza Elefantes|Fusil|Escopeta|Galga|Recortada' + + ')', smb: '(?' + 'Subfusil|Thompson' + ')', machineGun: '(?' + 'Browning|Vickers|Ametralladora' + ')', launched: '(?' + 'Molotov|Granada|Dinamita' + ')', - skill: '^(?[:\\*.\\s' + nameCharacters + ']+(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,]?\\s*', - guessStartCombat: '(^|(?[:\\*.\\s' + + nameCharacters + + ']+(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,]?\\s*', + guessStartCombat: + '(^|(?[\\.\\s' + nameCharacters + ']+)[,\\s\n]+', - sections: '(' + keys.es.sectionCombats + '|' + keys.es.sectionSkills + '|' + keys.es.sectionLangauges + '|' + keys.es.sectionSpells + ')' + sections: + '(' + + keys.es.sectionCombats + + '|' + + keys.es.sectionSkills + + '|' + + keys.es.sectionLangauges + + '|' + + keys.es.sectionSpells + + ')' }, 'zh-TW': { // Language dependant RegExs @@ -206,34 +377,85 @@ const translations = { app: '(?\\d+|-)[,\\s\n]*', edu: '(?\\d+|-)[,\\s\n]*', san: '(?\\d+|-)[,\\s\n]*', - hp: '(?\\d+|-)[,\\s\n]*', + hp: + '(?\\d+|-)[,\\s\n]*', mp: '(?\\d+|-)[,\\s\n]*', - db: '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + keys['zh-TW'].dbNone + ')[,\\s\n]*', - build: '(?[+-]?\\d+)[,\\s\n]*', - armor: '(?' + keys['zh-TW'].armorNone + '|\\d+)[,\\s\n]*', + db: + '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + + keys['zh-TW'].dbNone + + ')[,\\s\n]*', + build: '(?[+-]?\\d+)[,\\s\n]*', + armor: + '(?' + + keys['zh-TW'].armorNone + + '|\\d+)[,\\s\n]*', mov: '(?\\d+)[,\\s\n]*', - lck: '(?\\d+|-)[,\\s\n]*', - attacksPerRound: '(?' + keys['zh-TW'].attacksPerRoundNone + '|\\d+(?!d))[,\\s\n]*', - sanLoss: '(?' + keys['zh-TW'].sanLossNone + '|\\dD?[+\\d]*\\/\\dD?[+\\d]*)[,\\s\n]*', - weapon: '(^|\\n)(?[.\\t ' + nameCharacters + ']+)(\\**,?\\s+|\\*)(?:\\(|(?\\d+)%,?(?:\\s*\\(\\d+\\/\\d+\\)\\s*,?)?)?(\\s*' + 'damage|傷害' + ')?\\s+(?(:?(:?\\d+d)?\\d+(\\s*/\\s*|\\s*[+-]\\s*(?:' + keys['zh-TW'].fulldb + ')\\s*|\\s*[+-]\\s*(:?\\d+d)?\\d+)*)+)\\)?', - weaponDodge: '(?' + 'Dodge|閃避|閃躲' + '):?\\s+\\(?(?\\d+)\\)?\\s*%?(?:\\s*\\(\\d+\\/\\d+\\))?', - handgun: '(?' + ' 遂發槍|\\.22短口自動手槍|\\.25短口手槍(單管)|\\.32或7\\.65mm左輪手槍|\\.32或7\\.65mm自動手槍|\\.357 Magnum左輪手槍|\\.38或9mm左輪手槍|\\.38自動手槍|貝雷塔M9|格洛克17|9mm自動手槍|魯格P08|\\.41左輪手槍|\\.44馬格南左輪手槍|\\.45左輪手槍|\\.45自動手槍|沙漠之鷹|Gun|Revolver|Pistol|Handgun|Derringer|Beretta|Luger|Desert Eagle| \\.38' + ')', - rifle: '(?' + '步槍|卡賓槍|半自動步槍|獵象槍|Rifle|Shotgun|Carbine|Gauge |Lee\\-Enfield|Elephant' + ')', + lck: '(?\\d+|-)[,\\s\n]*', + attacksPerRound: + '(?' + + keys['zh-TW'].attacksPerRoundNone + + '|\\d+(?!d))[,\\s\n]*', + sanLoss: + '(?' + + keys['zh-TW'].sanLossNone + + '|\\dD?[+\\d]*\\/\\dD?[+\\d]*)[,\\s\n]*', + weapon: + '(^|\\n)(?[.\\t ' + + nameCharacters + + ']+)(\\**,?\\s+|\\*)(?:\\(|(?\\d+)%,?(?:\\s*\\(\\d+\\/\\d+\\)\\s*,?)?)?(\\s*(?:' + + 'damage|傷害' + + '))?\\s+(?(:?(:?\\d+d)?\\d+(\\s*/\\s*|\\s*[+-]\\s*(?:' + + keys['zh-TW'].fulldb + + ')\\s*|\\s*[+-]\\s*(:?\\d+d)?\\d+)*)+)\\)?', + weaponDodge: + '(?' + + 'Dodge|閃避|閃躲' + + '):?\\s+\\(?(?\\d+)\\)?\\s*%?(?:\\s*\\(\\d+\\/\\d+\\))?', + handgun: + '(?' + + ' 遂發槍|\\.22短口自動手槍|\\.25短口手槍(單管)|\\.32或7\\.65mm左輪手槍|\\.32或7\\.65mm自動手槍|\\.357 Magnum左輪手槍|\\.38或9mm左輪手槍|\\.38自動手槍|貝雷塔M9|格洛克17|9mm自動手槍|魯格P08|\\.41左輪手槍|\\.44馬格南左輪手槍|\\.45左輪手槍|\\.45自動手槍|沙漠之鷹|Gun|Revolver|Pistol|Handgun|Derringer|Beretta|Luger|Desert Eagle| \\.38' + + ')', + rifle: + '(?' + + '步槍|卡賓槍|半自動步槍|獵象槍|Rifle|Shotgun|Carbine|Gauge |Lee-Enfield|Elephant' + + ')', smb: '(?' + 'Submachine Gun|Thompson|衝鋒槍' + ')', machineGun: '(?' + 'Browning|Vickers|機槍' + ')', launched: '(?' + 'Molotov|Grenade|Dynamite爆炸物|手榴彈|重武器' + ')', // Language dependant a skill should not be "The player has" / "but they regenerate" required for "A Cold Fire Within" - skill: '^(?[:\\*.\\s' + nameCharacters + ']+(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,]?\\s*', + skill: + '^(?[:\\*.\\s' + + nameCharacters + + ']+(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,]?\\s*', // Language dependant likely first words for a combat section if there is no heading guessStartCombat: '(^|(?[\\.\\s' + nameCharacters + ']+)[,\\s\n]+', - sections: '(' + keys['zh-TW'].sectionCombats + '|' + keys['zh-TW'].sectionSkills + '|' + keys['zh-TW'].sectionLangauges + '|' + keys['zh-TW'].sectionSpells + ')' + sections: + '(' + + keys['zh-TW'].sectionCombats + + '|' + + keys['zh-TW'].sectionSkills + + '|' + + keys['zh-TW'].sectionLangauges + + '|' + + keys['zh-TW'].sectionSpells + + ')' } } export class CoC7ActorImporterRegExp { - static getLanguage (lang = null) { + static checkLanguage (lang = null) { if (!lang) { lang = game.i18n.lang } diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index 48f9c2cd..a2fa6844 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -54,7 +54,12 @@ export class CoC7ActorImporter { if (s.trim().length === 0) { return '' } - s = s.trim().split('\n').map(text => text.trim().replace(/^[,.\s]+$/, '')).filter(text => text).join('

            ') + s = s + .trim() + .split('\n') + .map(text => text.trim().replace(/^[,.\s]+$/, '')) + .filter(text => text) + .join('

            ') if (s.length === 0) { return '' } @@ -72,7 +77,16 @@ export class CoC7ActorImporter { * - requiredGroup If not false require specified key in RegExp groups * @returns {False}/{JSON groups '' is matched string} */ - check (regExKey, { removeFromText = true, saveKeys = true, type = CoC7ActorImporter.asString, text = false, requiredGroup = false } = {}) { + check ( + regExKey, + { + removeFromText = true, + saveKeys = true, + type = CoC7ActorImporter.asString, + text = false, + requiredGroup = false + } = {} + ) { let output = false let regExp = false if (typeof this.regEx[regExKey] !== 'undefined') { @@ -86,7 +100,11 @@ export class CoC7ActorImporter { } const check = regExp.exec(text) let value = null - if (check !== null && (requiredGroup === false || typeof (check.groups || {})[requiredGroup] !== 'undefined')) { + if ( + check !== null && + (requiredGroup === false || + typeof (check.groups || {})[requiredGroup] !== 'undefined') + ) { output = check.groups || {} if (removeFromText) { this.text = this.text.replace(check[0].trim(), '\n').trim() @@ -130,7 +148,9 @@ export class CoC7ActorImporter { do { maxLoops-- text = text.trim() - if ((dodge = this.check('weaponDodge', { saveKeys: false, text: text }))) { + if ( + (dodge = this.check('weaponDodge', { saveKeys: false, text: text })) + ) { text = text.replace(dodge['-source'], '\n') if (typeof this.parsed.skills === 'undefined') { this.parsed.skills = [] @@ -140,12 +160,47 @@ export class CoC7ActorImporter { value: Number(dodge.percentage), push: false }) - } else if ((weapon = this.check('weapon', { saveKeys: false, text: text, requiredGroup: (lastPercent === false ? 'percentage' : false) }))) { + } else if ( + (weapon = this.check('weapon', { + saveKeys: false, + text: text, + requiredGroup: lastPercent === false ? 'percentage' : false + })) + ) { text = text.replace(weapon['-source'], '\n') const name = this.cleanString(weapon.name || '') const damage = this.cleanString(weapon.damage || '') - const isRanged = !!(this.check('handgun', { text: name, removeFromText: false, saveKeys: false }) || this.check('rifle', { text: name, removeFromText: false, saveKeys: false }) || this.check('smb', { text: name, removeFromText: false, saveKeys: false }) || this.check('machineGun', { text: name, removeFromText: false, saveKeys: false }) || this.check('launched', { text: name, removeFromText: false, saveKeys: false })) - if (weapon.percentage !== null && typeof weapon.percentage !== 'undefined') { + const isRanged = !!( + this.check('handgun', { + text: name, + removeFromText: false, + saveKeys: false + }) || + this.check('rifle', { + text: name, + removeFromText: false, + saveKeys: false + }) || + this.check('smb', { + text: name, + removeFromText: false, + saveKeys: false + }) || + this.check('machineGun', { + text: name, + removeFromText: false, + saveKeys: false + }) || + this.check('launched', { + text: name, + removeFromText: false, + saveKeys: false + }) + ) + if ( + weapon.percentage !== null && + typeof weapon.percentage !== 'undefined' + ) { lastPercent = Number(weapon.percentage) } else { lastPercent = true @@ -155,8 +210,22 @@ export class CoC7ActorImporter { let ahdb = false let addb = false for (let i = 0, im = damages.length; i < im; i++) { - const fullDB = this.getRegEx('\\s*[+-]?\\s*(' + this.keys.fulldb + ')\\s*[-+]?\\s*(' + this.parsed.db.replace(/^[-+]/, '') + ')?').exec(damages[i]) - const halfDB = this.getRegEx('\\s*[+-]?\\s*(' + this.keys.halfdb + ')\\s*(' + this.keys.fulldb + ')?[-+]?\\s*(' + this.parsed.db.replace(/^[-+]/, '') + ')?').exec(damages[i]) + const fullDB = this.getRegEx( + '\\s*[+-]?\\s*(' + + this.keys.fulldb + + ')\\s*[-+]?\\s*(' + + this.parsed.db.replace(/^[-+]/, '') + + ')?' + ).exec(damages[i]) + const halfDB = this.getRegEx( + '\\s*[+-]?\\s*(' + + this.keys.halfdb + + ')\\s*(' + + this.keys.fulldb + + ')?[-+]?\\s*(' + + this.parsed.db.replace(/^[-+]/, '') + + ')?' + ).exec(damages[i]) if (fullDB) { damages[i] = damages[i].replace(fullDB[0], '') addb = true @@ -175,23 +244,23 @@ export class CoC7ActorImporter { properties: {}, range: { normal: { - value: (isShotgun ? 10 : 0), + value: isShotgun ? 10 : 0, damage: damages[0] }, long: { - value: (isShotgun ? 20 : 0), - damage: (isShotgun ? damages[1] : '') + value: isShotgun ? 20 : 0, + damage: isShotgun ? damages[1] : '' }, extreme: { - value: (isShotgun ? 50 : 0), - damage: (isShotgun ? damages[2] : '') + value: isShotgun ? 50 : 0, + damage: isShotgun ? damages[2] : '' } } } } // Set some of the properties data.data.properties.shotgun = isShotgun - data.data.properties.rngd = (isRanged || isShotgun) + data.data.properties.rngd = isRanged || isShotgun data.data.properties.melee = !data.data.properties.rngd data.data.properties.ahdb = ahdb data.data.properties.addb = addb @@ -206,7 +275,9 @@ export class CoC7ActorImporter { } } while (maxLoops > 0 && (!!weapon || !!dodge || !!text)) if (maxLoops === 0) { - ui.notifications.warn('Unexpected weapons text, please raise a bug report with the text you are attempting to import') + ui.notifications.warn( + 'Unexpected weapons text, please raise a bug report with the text you are attempting to import' + ) console.debug('Unexpected weapons:', text) } } @@ -242,7 +313,9 @@ export class CoC7ActorImporter { } } while (maxLoops > 0 && skill) if (maxLoops === 0) { - ui.notifications.warn('Unexpected skills text, please raise a bug report with the text you are attempting to import') + ui.notifications.warn( + 'Unexpected skills text, please raise a bug report with the text you are attempting to import' + ) console.debug('Unexpected skills:', text) } } @@ -277,11 +350,16 @@ export class CoC7ActorImporter { */ async parseCharacter (text) { // Replace "En Dash" and "Em Dash" dashes with - and "Right Single Quotation Mark" with ' - this.text = String(text).trim().replace(/\u2013|\u2014/g, '-').replace(/\u2019/g, "'") + this.text = String(text) + .trim() + .replace(/\u2013|\u2014/g, '-') + .replace(/\u2019/g, "'") // Earliest character that has been used, to work out the header let min = this.text.length // STR, if berfore than previous min update it - let check = this.check('str', { type: CoC7ActorImporter.asNumber })['-index'] + let check = this.check('str', { type: CoC7ActorImporter.asNumber })[ + '-index' + ] if (!isNaN(check)) { min = Math.min(min, check) } @@ -355,9 +433,12 @@ export class CoC7ActorImporter { header = header.replace(check['-source'], '\n') } // Get occupation from header - if (!(this.check('occupation', { text: header })) && header.trim() !== '') { + if (!this.check('occupation', { text: header }) && header.trim() !== '') { // If occupation is not found but there is a header set the occupation to the remaining header - this.parsed.occupation = header.replace(/([\n\r]+)/g, ' ').trim().replace(/,$/, '') + this.parsed.occupation = header + .replace(/([\n\r]+)/g, ' ') + .trim() + .replace(/,$/, '') this.text = this.text.replace(header.trim(), '\n') } } else { @@ -365,21 +446,32 @@ export class CoC7ActorImporter { this.parsed.name = game.i18n.localize('CoC7.ImportedUnnamedCharacter') } // If there is an occupation but no age check if the occupation starts number split age and occupation - if (typeof this.parsed.occupation !== 'undefined' && typeof this.parsed.age === 'undefined') { - const occupationAge = this.parsed.occupation.match(/^(?\d+),(?.+)$/) + if ( + typeof this.parsed.occupation !== 'undefined' && + typeof this.parsed.age === 'undefined' + ) { + const occupationAge = this.parsed.occupation.match( + /^(?\d+),(?.+)$/ + ) if (occupationAge) { this.parsed.age = occupationAge.groups.age this.parsed.occupation = occupationAge.groups.occupation.trim() } } // Get damage bonus, if not found or none set to 0 - if (!this.check('db') || this.parsed.db.toLowerCase() === this.keys.dbNone.toLowerCase()) { + if ( + !this.check('db') || + this.parsed.db.toLowerCase() === this.keys.dbNone.toLowerCase() + ) { this.parsed.db = '0' } // Get build this.check('build') // Get armor, if not found or none set to 0 - if (!this.check('armor') || this.parsed.armor.toLowerCase() === this.keys.armorNone.toLowerCase()) { + if ( + !this.check('armor') || + this.parsed.armor.toLowerCase() === this.keys.armorNone.toLowerCase() + ) { this.parsed.armor = '0' } // Get movement @@ -389,7 +481,11 @@ export class CoC7ActorImporter { // Get sanity loss this.check('sanLoss') // Get attacks per round, if not found or none set to 0 - if (this.check('attacksPerRound') && this.parsed.attacksPerRound.toLowerCase() === this.keys.attacksPerRoundNone.toLowerCase()) { + if ( + this.check('attacksPerRound') && + this.parsed.attacksPerRound.toLowerCase() === + this.keys.attacksPerRoundNone.toLowerCase() + ) { this.parsed.attacksPerRound = '0' } // Check if there is a combat section @@ -397,10 +493,17 @@ export class CoC7ActorImporter { let sections = this.getRegEx('(' + this.keys.sectionCombats + ')', 'i') if (this.text.match(sections) === null) { // If there is no combat section guess where it starts - sections = this.check('guessStartCombat', { saveKeys: false, removeFromText: false }) + sections = this.check('guessStartCombat', { + saveKeys: false, + removeFromText: false + }) if (sections) { // Add a header to the start of the combat section - this.text = [this.text.slice(0, sections['-index']), this.keys.newCombatHeader, this.text.slice(sections['-index'])].join('') + this.text = [ + this.text.slice(0, sections['-index']), + this.keys.newCombatHeader, + this.text.slice(sections['-index']) + ].join('') } } // Split the sections Combat, Skills, Languages, and Spells @@ -408,24 +511,52 @@ export class CoC7ActorImporter { sections = this.text.split(regExpSections) if (sections !== null) { for (let i = 0, im = sections.length; i < im; i++) { - if (sections[i].match(this.getRegEx('(' + this.keys.sectionCombats + ')', 'i')) !== null && typeof sections[i + 1] !== 'undefined') { + if ( + sections[i].match( + this.getRegEx('(' + this.keys.sectionCombats + ')', 'i') + ) !== null && + typeof sections[i + 1] !== 'undefined' + ) { // If section is combat - this.text = ('\n' + this.text + '\n').replace(sections[i], '\n').trim() + this.text = ('\n' + this.text + '\n') + .replace(sections[i], '\n') + .trim() this.processCombat(sections[i + 1]) i++ - } else if (sections[i].match(this.getRegEx('(' + this.keys.sectionSkills + ')', 'i')) !== null && typeof sections[i + 1] !== 'undefined') { + } else if ( + sections[i].match( + this.getRegEx('(' + this.keys.sectionSkills + ')', 'i') + ) !== null && + typeof sections[i + 1] !== 'undefined' + ) { // If section is skills - this.text = ('\n' + this.text + '\n').replace(sections[i], '\n').trim() + this.text = ('\n' + this.text + '\n') + .replace(sections[i], '\n') + .trim() this.processSkills(sections[i + 1]) i++ - } else if (sections[i].match(this.getRegEx('(' + this.keys.sectionLangauges + ')', 'i')) !== null && typeof sections[i + 1] !== 'undefined') { + } else if ( + sections[i].match( + this.getRegEx('(' + this.keys.sectionLangauges + ')', 'i') + ) !== null && + typeof sections[i + 1] !== 'undefined' + ) { // If section is languages - this.text = ('\n' + this.text + '\n').replace(sections[i], '\n').trim() + this.text = ('\n' + this.text + '\n') + .replace(sections[i], '\n') + .trim() this.processSkills(sections[i + 1], 'languages') i++ - } else if (sections[i].match(this.getRegEx('(' + this.keys.sectionSpells + ')', 'i')) !== null && typeof sections[i + 1] !== 'undefined') { + } else if ( + sections[i].match( + this.getRegEx('(' + this.keys.sectionSpells + ')', 'i') + ) !== null && + typeof sections[i + 1] !== 'undefined' + ) { // If section is spells - this.text = ('\n' + this.text + '\n').replace(sections[i], '\n').trim() + this.text = ('\n' + this.text + '\n') + .replace(sections[i], '\n') + .trim() this.processSpells(sections[i + 1]) i++ } @@ -436,6 +567,20 @@ export class CoC7ActorImporter { return this.parsed } + disableAttribAuto (key, attribValue, check, updateData) { + const value = Math.max(0, Number(attribValue)) + if (value !== Number(check)) { + updateData[`data.attribs.${key}.auto`] = false + updateData[`data.attribs.${key}.value`] = value + if (key === 'build') { + updateData[`data.attribs.${key}.current`] = value + } else { + updateData[`data.attribs.${key}.max`] = value + } + } + return updateData + } + /** * Create an entity (`npc` or `creature`) from the object with the already parsed entity data * @param {Object} characterData object with the data extracted from the character @@ -454,32 +599,42 @@ export class CoC7ActorImporter { data: characterData.actor } const npc = await Actor.create(actorData) - await npc.createEmbeddedDocuments('Item', characterData.items, { renderSheet: false }) + await npc.createEmbeddedDocuments('Item', characterData.items, { + renderSheet: false + }) const updateData = {} let value = 0 if (typeof characterData.actor.attribs.hp?.value !== 'undefined') { - value = Math.max(0, Number(characterData.actor.attribs.hp.value)) - if (value !== Number(npc.hpMax)) { - updateData['data.attribs.hp.auto'] = false - updateData['data.attribs.hp.value'] = value - updateData['data.attribs.hp.max'] = value - } + this.disableAttribAuto( + 'hp', + characterData.actor.attribs.hp.value, + npc.hpMax, + updateData + ) } if (typeof characterData.actor.attribs.mp?.value !== 'undefined') { - value = Math.max(0, Number(characterData.actor.attribs.mp.value)) - if (value !== Number(npc.mpMax)) { - updateData['data.attribs.mp.auto'] = false - updateData['data.attribs.mp.value'] = value - updateData['data.attribs.mp.max'] = value - } + this.disableAttribAuto( + 'mp', + characterData.actor.attribs.mp.value, + npc.mpMax, + updateData + ) } if (typeof characterData.actor.attribs.mov?.value !== 'undefined') { - value = Math.max(0, Number(characterData.actor.attribs.mov.value)) - if (value !== Number(npc.mov)) { - updateData['data.attribs.mov.auto'] = false - updateData['data.attribs.mov.value'] = value - updateData['data.attribs.mov.max'] = value - } + this.disableAttribAuto( + 'mov', + characterData.actor.attribs.mov.value, + npc.mov, + updateData + ) + } + if (typeof characterData.actor.attribs.build?.value !== 'undefined') { + this.disableAttribAuto( + 'build', + characterData.actor.attribs.build.value, + npc.build, + updateData + ) } if (typeof characterData.actor.attribs.db?.value !== 'undefined') { value = String(characterData.actor.attribs.db.value).replace(/^\+\s*/, '') @@ -488,14 +643,6 @@ export class CoC7ActorImporter { updateData['data.attribs.db.value'] = value } } - if (typeof characterData.actor.attribs.build?.value !== 'undefined') { - value = Number(characterData.actor.attribs.build.value) - if (value !== Number(npc.build)) { - updateData['data.attribs.build.auto'] = false - updateData['data.attribs.build.current'] = value - updateData['data.attribs.build.value'] = value - } - } if (Object.keys(updateData).length > 0) { if (CONFIG.debug.CoC7Importer) { console.debug('updateData:', updateData) @@ -506,9 +653,19 @@ export class CoC7ActorImporter { let lastWeaponSkill = null for (const pair of this.weaponSkills) { if (pair[0] !== false) { - lastWeaponSkill = npc.items.filter(i => i.name === pair[0].name && i.type === 'skill' && Number(i.data.data.value) === Number(pair[0].data.value)) + lastWeaponSkill = npc.items.filter( + i => + i.name === pair[0].name && + i.type === 'skill' && + Number(i.data.data.value) === Number(pair[0].data.value) + ) } - const weapon = npc.items.filter(i => i.name === pair[1].name && i.type === 'weapon' && i.data.data.range.normal.damage === pair[1].data.range.normal.damage) + const weapon = npc.items.filter( + i => + i.name === pair[1].name && + i.type === 'weapon' && + i.data.data.range.normal.damage === pair[1].data.range.normal.damage + ) if (lastWeaponSkill[0] && weapon[0]) { updateItemData.push({ _id: weapon[0].id, @@ -536,11 +693,11 @@ export class CoC7ActorImporter { folderName = 'Imported characters' } let importedCharactersFolder = game.folders.find( - entry => - entry.data.name === folderName && entry.data.type === 'Actor' + entry => entry.data.name === folderName && entry.data.type === 'Actor' ) if ( - importedCharactersFolder === null || typeof importedCharactersFolder === 'undefined' + importedCharactersFolder === null || + typeof importedCharactersFolder === 'undefined' ) { // Create the folder importedCharactersFolder = await Folder.create({ @@ -638,7 +795,10 @@ export class CoC7ActorImporter { switch (this.itemLocations.substr(o, 1)) { case 'i': existing = game.items.find( - item => item.data.type === type && item.data.name.toLowerCase() === name && (combat === null || item.data.properties.combat === combat) + item => + item.data.type === type && + item.data.name.toLowerCase() === name && + (combat === null || item.data.properties.combat === combat) ) if (existing) { return existing @@ -648,10 +808,21 @@ export class CoC7ActorImporter { case 'm': case 's': for (const pack of game.packs) { - if (pack.metadata.entity === 'Item' && ((this.itemLocations[o] === 'w' && pack.metadata.package === 'world') || (this.itemLocations[o] === 'S' && pack.metadata.package === 'CoC7') || (this.itemLocations[o] === 's' && !['world', 'CoC7'].includes(pack.metadata.package)))) { + if ( + pack.metadata.entity === 'Item' && + ((this.itemLocations[o] === 'w' && + pack.metadata.package === 'world') || + (this.itemLocations[o] === 'S' && + pack.metadata.package === 'CoC7') || + (this.itemLocations[o] === 's' && + !['world', 'CoC7'].includes(pack.metadata.package))) + ) { const documents = await pack.getDocuments() existing = documents.find( - item => item.data.type === type && item.data.name.toLowerCase() === name && (combat === null || item.data.properties.combat === combat) + item => + item.data.type === type && + item.data.name.toLowerCase() === name && + (combat === null || item.data.properties.combat === combat) ) if (existing) { return existing @@ -681,10 +852,7 @@ export class CoC7ActorImporter { } attack.data.skill.id = null items.push(attack) - this.weaponSkills.push([ - skill, - attack - ]) + this.weaponSkills.push([skill, attack]) } } // Skills @@ -716,7 +884,12 @@ export class CoC7ActorImporter { cloned.data.base = skill.value items.push(duplicate(cloned)) } else { - items.push(CoCActor.emptySkill(skill.name, skill.value, { img: CoC7Item.iconLanguage, specialization: 'Language' })) + items.push( + CoCActor.emptySkill(skill.name, skill.value, { + img: CoC7Item.iconLanguage, + specialization: 'Language' + }) + ) } } } @@ -809,7 +982,10 @@ export class CoC7ActorImporter { newSkill.data.base = weapon.data?.skill?.id newSkill.data.value = weapon.data?.skill?.id if (CONFIG.debug.CoC7Importer) { - console.debug(`Weapon skill not found for ${weapon.name}, creating a new one`, newSkill) + console.debug( + `Weapon skill not found for ${weapon.name}, creating a new one`, + newSkill + ) } return newSkill } @@ -850,7 +1026,7 @@ export class CoC7ActorImporter { if (CONFIG.debug.CoC7Importer) { console.debug('createActor:', inputs) } - const lang = CoC7ActorImporterRegExp.getLanguage(inputs.lang) + const lang = CoC7ActorImporterRegExp.checkLanguage(inputs.lang) this.keys = CoC7ActorImporterRegExp.getKeys(lang) this.regEx = CoC7ActorImporterRegExp.getRegularExpressions(lang) this.itemLocations = inputs.source @@ -886,35 +1062,35 @@ export class CoC7ActorImporter { * @param {Object} the entity object as obtained from `parseCharacter` * @return the same object but with updated characteristics for 7 edition */ - async convert7E (npc) { + async convert7E (creature) { if (CONFIG.debug.CoC7Importer) { - console.debug('Converting npc', npc) + console.debug('Converting npc', creature) } for (const key of ['str', 'con', 'siz', 'dex', 'app', 'int', 'pow']) { - if (typeof npc[key] !== 'undefined') { - npc[key] *= 5 + if (typeof creature[key] !== 'undefined') { + creature[key] *= 5 } } - if (typeof npc.edu !== 'undefined') { - if (npc.edu <= 18) { - npc.edu *= 5 - } else if (npc.edu <= 26) { - npc.edu = npc.edu + 90 - 18 + if (typeof creature.edu !== 'undefined') { + if (creature.edu <= 18) { + creature.edu *= 5 + } else if (creature.edu <= 26) { + creature.edu = creature.edu + 90 - 18 } else { - // npc.edu >=28 - npc.edu = 99 + // creature.edu >=28 + creature.edu = 99 } } - if (typeof npc.db !== 'undefined') { - if (npc.db === '-1d4') { - npc.db = -1 - } else if (npc.db === '-1d6') { - npc.db = -2 + if (typeof creature.db !== 'undefined') { + if (creature.db === '-1d4') { + creature.db = -1 + } else if (creature.db === '-1d6') { + creature.db = -2 } } if (CONFIG.debug.CoC7Importer) { - console.debug('convert7E: ', npc) + console.debug('convert7E: ', creature) } - return npc + return creature } } From b978d077cb46b716033ec29cd83e9d1c6f6d8227 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 9 Oct 2021 18:12:42 +0100 Subject: [PATCH 192/726] Show actual token image in combined and opposed roll chat cards if wildcard Update getActorImgFromKey to not return wildcard image HandlebarJS Helper rollActorImg to call getActorImgFromKey --- module/chat/helper.js | 5 +++-- module/hooks/init.js | 3 ++- module/scripts/handlebars-helper.js | 10 ++++++++++ templates/chat/cards/combined-roll.html | 14 +++++++------- templates/chat/cards/opposed-roll.html | 12 ++++++------ 5 files changed, 28 insertions(+), 16 deletions(-) create mode 100644 module/scripts/handlebars-helper.js diff --git a/module/chat/helper.js b/module/chat/helper.js index e7d1fc1c..19448976 100644 --- a/module/chat/helper.js +++ b/module/chat/helper.js @@ -240,12 +240,13 @@ export class chatHelper { if (game.settings.get('CoC7', 'useToken')) { // Try to find a token. const token = chatHelper.getTokenFromKey(actorKey) - if (token) return token.data.img + if (token && token.data.img.indexOf('*') === -1) return token.data.img } const actor = chatHelper.getActorFromKey(actorKey) // REFACTORING (2) if (game.settings.get('CoC7', 'useToken')) { // if no token found for that actor return the prototype token image. - if (actor.data.token) return actor.data.token.img + if (actor.data.token && actor.data.token.img.indexOf('*') === -1) + return actor.data.token.img } return actor.data.img } diff --git a/module/hooks/init.js b/module/hooks/init.js index c96a71bd..555f708e 100644 --- a/module/hooks/init.js +++ b/module/hooks/init.js @@ -1,9 +1,9 @@ /* global Hooks */ - import { configureDocuments } from '../scripts/configure-documents.js' import { preloadHandlebarsTemplates } from '../scripts/load-templates.js' import { registerSettings } from '../scripts/register-settings.js' import { registerSheets } from '../scripts/register-sheets.js' +import { handlebarsHelper } from '../scripts/handlebars-helper.js' export function listen () { Hooks.once('init', async () => { @@ -11,5 +11,6 @@ export function listen () { preloadHandlebarsTemplates() registerSettings() registerSheets() + handlebarsHelper() }) } diff --git a/module/scripts/handlebars-helper.js b/module/scripts/handlebars-helper.js new file mode 100644 index 00000000..8e73d8e8 --- /dev/null +++ b/module/scripts/handlebars-helper.js @@ -0,0 +1,10 @@ +/* global Handlebars */ +import { chatHelper } from '../chat/helper.js' + +export const handlebarsHelper = function () { + Handlebars.registerHelper('rollActorImg', function (actorKey) { + const img = chatHelper.getActorImgFromKey(actorKey) + if (img) return img + return '../icons/svg/mystery-man-black.svg' + }) +} diff --git a/templates/chat/cards/combined-roll.html b/templates/chat/cards/combined-roll.html index 2b9c290d..c359254e 100644 --- a/templates/chat/cards/combined-roll.html +++ b/templates/chat/cards/combined-roll.html @@ -2,19 +2,19 @@ {{#unless closed}}

            {{localize 'CoC7.Any'}} {{localize 'CoC7.All'}}
            {{/unless}}
              {{#each rolls as |r id| }}
            1. - +
              @@ -46,7 +46,7 @@ {{#if success}}

              {{localize 'CoC7.Success'}}

              {{/if}} - + {{#if failure}}

              {{localize 'CoC7.Failure'}}

              {{/if}} @@ -56,4 +56,4 @@

              {{localize 'CoC7.Failure'}}

              {{/unless}} -
              \ No newline at end of file +
              diff --git a/templates/chat/cards/opposed-roll.html b/templates/chat/cards/opposed-roll.html index 25f64656..3f95da6a 100644 --- a/templates/chat/cards/opposed-roll.html +++ b/templates/chat/cards/opposed-roll.html @@ -20,12 +20,12 @@ {{#if needsTieBreaker}}
              {{localize 'CoC7.AdvantageAttacker'}} {{localize 'CoC7.AdvantageDefender'}}
              @@ -48,7 +48,7 @@ {{#each rolls as |r id| }}
            2. - +
              @@ -111,4 +111,4 @@
              {{/if}} {{/unless}} -
              \ No newline at end of file +
              From f5a42a177b3d987113fe4aff14f83508b0de59e9 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Sun, 10 Oct 2021 13:07:24 +0200 Subject: [PATCH 193/726] Cut 2 Chase --- module/items/sheets/chase.js | 234 +++++++++++++++++++++++++---------- styles/sheets/chase.less | 8 +- template.json | 1 + templates/items/chase.html | 15 ++- 4 files changed, 188 insertions(+), 70 deletions(-) diff --git a/module/items/sheets/chase.js b/module/items/sheets/chase.js index fdcda971..5016c375 100644 --- a/module/items/sheets/chase.js +++ b/module/items/sheets/chase.js @@ -9,6 +9,12 @@ export class CoC7ChaseSheet extends ItemSheet { // super( ...args); // } + static get flags () { + return { + started: 'started' + } + } + /** * Extend and override the default options used by the Simple Item Sheet * @returns {Object} @@ -103,6 +109,7 @@ export class CoC7ChaseSheet extends ItemSheet { data.activeLocation = this.activeLocation data.previousLocation = this.previousLocation data.nextLocation = this.nextLocation + data.started = this.started return data } @@ -154,71 +161,76 @@ export class CoC7ChaseSheet extends ItemSheet { 0 === this.item.data.data.locations.list.length ) return undefined - const init = this.getInitTrack() - let locationsIndexStart, initIndexStart, locationsLength - if (0 >= init.length) locationsIndexStart = 0 - else if (this.item.data.data.startingIndex >= init.length) - locationsIndexStart = 0 - else locationsIndexStart = init.length - this.item.data.data.startingIndex - - if (this.item.data.data.startingIndex <= 0) initIndexStart = 0 - else if (this.item.data.data.startingIndex <= init.length) - initIndexStart = 0 - else initIndexStart = this.item.data.data.startingIndex - init.length - - if (0 == locationsIndexStart) - locationsLength = this.item.data.data.locations.list.length - else - locationsLength = - this.item.data.data.locations.list.length + locationsIndexStart - - if (0 != init.length) { - if (this.item.data.data.startingIndex < 0) { - for ( - let index = 0; - index < Math.abs(this.item.data.data.startingIndex); - index++ - ) { - init.push({ - uuid: this.generateNewUuid(), - init: true, - participants: [] - }) + + const locations = [] // !!!!!!! locations vs init locations !!! + + + if (!this.started) { + const init = this.getInitTrack() + let locationsIndexStart, initIndexStart, locationsLength + if (0 >= init.length) locationsIndexStart = 0 + else if (this.item.data.data.startingIndex >= init.length) + locationsIndexStart = 0 + else locationsIndexStart = init.length - this.item.data.data.startingIndex + + if (this.item.data.data.startingIndex <= 0) initIndexStart = 0 + else if (this.item.data.data.startingIndex <= init.length) + initIndexStart = 0 + else initIndexStart = this.item.data.data.startingIndex - init.length + + if (0 == locationsIndexStart) + locationsLength = this.item.data.data.locations.list.length + else + locationsLength = + this.item.data.data.locations.list.length + locationsIndexStart + + if (0 != init.length) { + if (this.item.data.data.startingIndex < 0) { + for ( + let index = 0; + index < Math.abs(this.item.data.data.startingIndex); + index++ + ) { + init.push({ + uuid: this.generateNewUuid(), + init: true, + participants: [] + }) + } } } - } - const locations = [] - - for (let index = 0; index < locationsLength; index++) { - let location = {} - const participants = [] - if ( - index >= locationsIndexStart && - index - locationsIndexStart < this.item.data.data.locations.list.length - ) { - location = this.item.data.data.locations.list[ - index - locationsIndexStart - ] - location.init = false - location.participants?.forEach(p => { - if (null != p) participants.push(p) - }) - } - if (index >= initIndexStart && index - initIndexStart < init.length) { - mergeObject(location, init[index - initIndexStart], { - overwrite: false - }) + for (let index = 0; index < locationsLength; index++) { + let location = {} + const participants = [] + if ( + index >= locationsIndexStart && + index - locationsIndexStart < + this.item.data.data.locations.list.length + ) { + location = this.item.data.data.locations.list[ + index - locationsIndexStart + ] + location.init = false + location.participants?.forEach(p => { + if (null != p) participants.push(p) + }) + } + if (index >= initIndexStart && index - initIndexStart < init.length) { + mergeObject(location, init[index - initIndexStart], { + overwrite: false + }) - init[index - initIndexStart].participants?.forEach(p => { - if (null != p) participants.push(p) - }) + init[index - initIndexStart].participants?.forEach(p => { + if (null != p) participants.push(p) + }) - location.participants = participants + location.participants = participants + } + location.first = false + location.end = false + locations.push(location) } - location.first = false - location.end = false - locations.push(location) } locations[0].first = true @@ -228,7 +240,7 @@ export class CoC7ChaseSheet extends ItemSheet { const location = locations[index] if (!location.name) classes.push('empty') if (location.active) classes.push('active') - if (location.init) classes.push('init') + if (location.init && !this.started) classes.push('init') location.cssClasses = classes.join(' ') } @@ -276,7 +288,19 @@ export class CoC7ChaseSheet extends ItemSheet { return this.participants.every(e => e.hasValidMov) } + get allHaveSpeedRoll () { + return this.participants.every(p => p.speedCheck?.rolled) + } + + get started () { + return this.item.getFlag('CoC7', CoC7ChaseSheet.flags.started) + } + async cutToTheChase () { + if (!this.allHaveSpeedRoll) { + ui.notifications.warn('Speed roll missing') + return + } if (this.allHaveValidMov) { //TODO : Check for speed roll ?? @@ -287,6 +311,8 @@ export class CoC7ChaseSheet extends ItemSheet { p.data.movementAction = 1 + (p.adjustedMov - minMov) }) await this.updateParticipants(participants) + await this.updateLocationsList(this.locations) + await this.item.setFlag('CoC7', CoC7ChaseSheet.flags.started, true) } } @@ -439,6 +465,25 @@ export class CoC7ChaseSheet extends ItemSheet { callbacks: { drop: this._onAddParticipant.bind(this) } }) newParticipantDragDrop.bind(html[0]) + + const chaseParticipantDragpDrop = new DragDrop({ + dragSelector: '.chase-participant', + dropSelector: '.chase-location', + permissions: { + dragstart: this._canChaseParticipantDragStart.bind(this), + drop: this._canChaseParticipantDragDrop.bind(this) + }, + callbacks: { + dragstart: this._onChaseParticipantDragStart.bind(this), + drop: this._onChaseParticipantDragDrop.bind(this), + dragover: this._onDragEnter.bind(this) + } + }) + chaseParticipantDragpDrop.bind(html[0]) + + html + .find('.chase-location') + .on('dragleave', event => this._onDragLeave(event)) } /* -------------------------------------------- */ @@ -637,11 +682,39 @@ export class CoC7ChaseSheet extends ItemSheet { break case 'reset': - await this.updateLocationsList([]) + Dialog.confirm({ + title: `${game.i18n.localize('CoC7.ConfirmResetChase')}`, + content: `

              ${game.i18n.localize('CoC7.ConfirmResetChaseHint')}

              `, + yes: async () => { + await this.updateLocationsList([]) + await this.item.unsetFlag('CoC7', CoC7ChaseSheet.flags.started) + } + }) break case 'cut2chase': - await this.cutToTheChase() + Dialog.confirm({ + title: `${game.i18n.localize('CoC7.ConfirmCut2Chase')}`, + content: `

              ${game.i18n.localize('CoC7.ConfirmCut2ChaseHint')}

              `, + yes: () => this.cutToTheChase() + }) + break + + case 'restart': + Dialog.confirm({ + title: `${game.i18n.localize('CoC7.ConfirmRestartChase')}`, + content: `

              ${game.i18n.localize( + 'CoC7.ConfirmRestartChaseHint' + )}

              `, + yes: async () => { + const locations = this.locations.filter(l => !l.init) + for (let i = 0; i < locations.length; i++) { + if (locations[i].participants) locations[i].participants = [] + } + await this.updateLocationsList(locations) + await this.item.unsetFlag('CoC7', CoC7ChaseSheet.flags.started) + } + }) break default: @@ -649,6 +722,39 @@ export class CoC7ChaseSheet extends ItemSheet { } } + _canChaseParticipantDragStart (selector) { + if (game.user.isGM) return true + return false + } + + _canChaseParticipantDragDrop (selector) { + if (game.user.isGM) return true + return false + } + + async _onChaseParticipantDragStart (dragEvent) { + ui.notifications.info('DragStart') + } + + async _onChaseParticipantDragDrop (dragEvent) { + ui.notifications.info('Dropped') + this._onDragLeave(dragEvent) + } + + _onDragOver (dragEvent) { + this._onDragEnter(dragEvent) + } + + _onDragEnter (dragEvent) { + const target = dragEvent.currentTarget + target.classList.add('drag-over') + } + + _onDragLeave (dragEvent) { + const target = dragEvent.currentTarget + target.classList.remove('drag-over') + } + async _onDropParticipant (event) { const target = event.currentTarget const uuid = target.dataset?.uuid @@ -722,12 +828,12 @@ export class CoC7ChaseSheet extends ItemSheet { await this.item.update({ 'data.participants': participants }) } - async _onDragEnterParticipant (event) { + _onDragEnterParticipant (event) { const target = event.currentTarget target.classList.add('drag-over') } - async _onDragLeaveParticipant (event) { + _onDragLeaveParticipant (event) { const target = event.currentTarget target.classList.remove('drag-over') } diff --git a/styles/sheets/chase.less b/styles/sheets/chase.less index 1b451970..301e0d80 100644 --- a/styles/sheets/chase.less +++ b/styles/sheets/chase.less @@ -87,12 +87,16 @@ flex: 0 0 auto; } - .location { + .chase-location { display: flex; flex-direction: column; flex-wrap: nowrap; flex: 0 0 auto; + &.drag-over { + background: rgba(0, 0, 0, 0.1); + } + .people { flex: 1; min-height: 2rem; @@ -103,7 +107,7 @@ flex: 1; display: flex; justify-content: center; - .participant { + .chase-participant { width: 2rem; } } diff --git a/template.json b/template.json index 1198770b..dad86b63 100644 --- a/template.json +++ b/template.json @@ -619,6 +619,7 @@ "startingRange": 2, "startingIndex": 0, "started": false, + "vehicule": false, "participants": [] } } diff --git a/templates/items/chase.html b/templates/items/chase.html index a7ae7da3..2a9f821b 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -59,7 +59,7 @@
              {{#each locations as |location i|}} -
              +
              {{#unless location.first}} {{#if location.obstacle}} @@ -69,7 +69,7 @@
              {{#each location.participants as |p|}} {{#if p}} -
              +
              {{/if}} @@ -138,6 +138,9 @@ +
              @@ -148,8 +151,12 @@
              {{#if locations}} -
              {{localize 'CoC7.Reset'}}
              -
              {{localize 'CoC7.cut2chase'}}
              + {{#if started}} +
              {{localize 'CoC7.Restart'}}
              + {{else}} +
              {{localize 'CoC7.Reset'}}
              +
              {{localize 'CoC7.cut2chase'}}
              + {{/if}} {{/if}}
              From 702b2edf3f6c0a3d1900d3a1cde1134d7dd421ed Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:03:51 +0100 Subject: [PATCH 194/726] If armour value is null dealDamage does nothing --- module/actors/actor.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index c897e7a5..3853603e 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -3397,9 +3397,10 @@ export class CoCActor extends Actor { async dealDamage (amount, options = {}) { const armorData = this.data.data.attribs.armor.value const grossDamage = parseInt(amount) - let armorValue + let armorValue = 0 if (!options.ignoreArmor) { - if (CoC7Utilities.isFormula(armorData)) { + if (armorData === null) { + } else if (CoC7Utilities.isFormula(armorData)) { armorValue = (await new Roll(armorData).roll({ async: true })).total } else if (!isNaN(Number(armorData))) { armorValue = Number(armorData) @@ -3407,7 +3408,6 @@ export class CoCActor extends Actor { ui.notifications.warn( `Unable to process armor value: ${armorData}. Ignoring armor.` ) - armorValue = 0 } } const netDamage = grossDamage - armorValue @@ -3416,8 +3416,9 @@ export class CoCActor extends Actor { if (netDamage >= this.hpMax) { await this.fallDead() } else { - if (netDamage >= Math.floor(this.hpMax / 2)) + if (netDamage >= Math.floor(this.hpMax / 2)) { await this.inflictMajorWound() + } if (this.hp === 0) { if (!this.getStatus(COC7.status.unconscious)) { await this.fallUnconscious() From 243434e60dc7aebaf78d2356b9ed15eed4e3d2fa Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:13:57 +0100 Subject: [PATCH 195/726] Translate non targetted melee resolution messages --- lang/en.json | 1 + module/chat/combat/melee-resolution.js | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/lang/en.json b/lang/en.json index 63598b1c..cfab964d 100644 --- a/lang/en.json +++ b/lang/en.json @@ -235,6 +235,7 @@ "CoC7.TitleSurprised": "Add 1 bonus dice for surprised target", "CoC7.TitleAutoSuccess": "Attack automatically hit", "CoC7.WinnerRollDamage": "{name} won. Roll damage.", + "CoC7.InitiatorMissed": "{name} missed.", "CoC7.NoWinner": "Both side failed.", "CoC7.DodgeSuccess": "{name} dodged!", "CoC7.ManeuverSuccess": "{name} maneuver was successful.", diff --git a/module/chat/combat/melee-resolution.js b/module/chat/combat/melee-resolution.js index 6e7b8466..9063de9f 100644 --- a/module/chat/combat/melee-resolution.js +++ b/module/chat/combat/melee-resolution.js @@ -186,16 +186,18 @@ export class CoC7MeleeResoltion { default: break } + } else if (this.initiator.roll.successLevel > 0) { + this.resultString = game.i18n.format('CoC7.WinnerRollDamage', { + name: this.initiator.name + }) + this.winner = this.initiator + this.rollDamage = true } else { - if (this.initiator.roll.successLevel > 0) { - this.resultString = `${this.initiator.name} won. Roll damage` - this.winner = this.initiator - this.rollDamage = true - } else { - this.resultString = `${this.initiator.name} missed.` - this.winner = this.initiator - this.rollDamage = false - } + this.resultString = game.i18n.format('CoC7.InitiatorMissed', { + name: this.initiator.name + }) + this.winner = this.initiator + this.rollDamage = false } if (this.winner) { From 73b69907fe5245c759a4d774a3a4c63505113bed Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:15:25 +0100 Subject: [PATCH 196/726] Add no response to melee combat responses --- lang/en.json | 1 + module/chat.js | 7 + module/chat/combat/melee-resolution.js | 20 ++ module/chat/combat/melee-target.js | 36 ++- module/config.js | 3 +- styles/system/main.less | 2 +- templates/chat/cards/damage.html | 206 ++++++------ templates/chat/combat/melee-resolution.html | 75 +++-- templates/chat/combat/melee-target.html | 328 ++++++++++---------- 9 files changed, 371 insertions(+), 307 deletions(-) diff --git a/lang/en.json b/lang/en.json index cfab964d..9a8d270e 100644 --- a/lang/en.json +++ b/lang/en.json @@ -224,6 +224,7 @@ "CoC7.FightBack": "Fighting Back", "CoC7.Dodge": "Dodging", "CoC7.Maneuver": "Maneuvering", + "CoC7.NoResponse": "No Response", "CoC7.OutNumbered": "Outnumbered", "CoC7.combatCard.surprised": "Surprised", "CoC7.combatCard.autoSuccess": "Auto. Success", diff --git a/module/chat.js b/module/chat.js index 1daa07b7..b845d200 100644 --- a/module/chat.js +++ b/module/chat.js @@ -910,6 +910,13 @@ export class CoC7Chat { await initiator.publishCheckResult() break } + + case 'melee-target-no-response': { + const target = CoC7MeleeTarget.getFromCard(card) + await target.publishNoReponseResult() + break + } + case 'melee-target-roll': { const target = CoC7MeleeTarget.getFromCard(card) const check = await target.performSkillCheck( diff --git a/module/chat/combat/melee-resolution.js b/module/chat/combat/melee-resolution.js index 9063de9f..57440fe5 100644 --- a/module/chat/combat/melee-resolution.js +++ b/module/chat/combat/melee-resolution.js @@ -78,6 +78,26 @@ export class CoC7MeleeResoltion { async resolve () { if (this.target) { switch (this.target.action) { + case 'noResponse': + if (this.initiator.roll.successLevel > 0) { + this.resultString = game.i18n.format('CoC7.WinnerRollDamage', { + name: this.initiator.name + }) + this.action = 'roll-melee-damage' + this.rollDamage = true + } else { + this.resultString = game.i18n.format('CoC7.InitiatorMissed', { + name: this.initiator.name + }) + this.winner = this.initiator + this.rollDamage = false + } + this.winner = this.initiator + this.winnerImg = this.initiator.weapon.img + this.winnerTitle = this.initiator.weapon.name + this.looser = this.target + break + case 'dodge': if ( this.initiator.roll.successLevel <= 0 && diff --git a/module/chat/combat/melee-target.js b/module/chat/combat/melee-target.js index f4507280..967ec0f5 100644 --- a/module/chat/combat/melee-target.js +++ b/module/chat/combat/melee-target.js @@ -26,16 +26,23 @@ export class CoC7MeleeTarget extends ChatCardActor { this.skillId = null this.itemId = null this.dodging = false + this.notResponding = false this.fightingBack = false this.maneuvering = false } get actionSelected () { - return this.dodging || this.fightingBack || this.maneuvering + return ( + this.dodging || + this.notResponding || + this.fightingBack || + this.maneuvering + ) } get action () { if (this.dodging) return 'dodge' + if (this.notResponding) return 'noResponse' if (this.fightingBack) return 'fightBack' if (this.maneuvering) return 'maneuver' return null @@ -248,14 +255,25 @@ export class CoC7MeleeTarget extends ChatCardActor { switch (event.currentTarget.dataset.action) { case 'dodge': target.dodging = true + target.notResponding = false target.fightingBack = false target.maneuvering = false target.skillId = event.currentTarget.dataset.skillId target.itemId = null break + case 'noResponse': + target.dodging = false + target.notResponding = true + target.fightingBack = false + target.maneuvering = false + target.skillId = null + target.itemId = null + break + case 'fightBack': target.dodging = false + target.notResponding = false target.fightingBack = true target.maneuvering = false target.skillId = event.currentTarget.dataset.skillId @@ -264,6 +282,7 @@ export class CoC7MeleeTarget extends ChatCardActor { case 'maneuver': target.dodging = false + target.notResponding = false target.fightingBack = false target.maneuvering = true target.skillId = event.currentTarget.dataset.skillId @@ -306,6 +325,21 @@ export class CoC7MeleeTarget extends ChatCardActor { return check } + async publishNoReponseResult () { + this.rolled = true + this.resolved = true + this.notResponding = true + const resolutionCard = new CoC7MeleeResoltion( + this.parentMessageId, + this.messageId + ) + + const resolutionMessage = await resolutionCard.preCreateMessage() + + this.resolutionCard = resolutionMessage.id + await this.updateChatCard() + } + async publishCheckResult (check = null) { if (!check && !this.check) return null diff --git a/module/config.js b/module/config.js index 85139ff4..d32dc3f6 100644 --- a/module/config.js +++ b/module/config.js @@ -155,7 +155,8 @@ COC7.firearmSpecializationName = 'CoC7.FirearmSpecializationName' COC7.combatCards = { fightBack: 'CoC7.FightBack', dodge: 'CoC7.Dodge', - maneuver: 'CoC7.Maneuver' + maneuver: 'CoC7.Maneuver', + noResponse: 'CoC7.NoResponse' } // COC7.dodge = { diff --git a/styles/system/main.less b/styles/system/main.less index 6c5a236e..eb6c6561 100644 --- a/styles/system/main.less +++ b/styles/system/main.less @@ -585,7 +585,7 @@ visibility: hidden; position: absolute; background-color: #f1f1f1; - min-width: 100px; + min-width: 126px; overflow: auto; box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); z-index: 1; diff --git a/templates/chat/cards/damage.html b/templates/chat/cards/damage.html index b6ea7102..d4606c08 100644 --- a/templates/chat/cards/damage.html +++ b/templates/chat/cards/damage.html @@ -1,119 +1,119 @@
              -
              -
              - {{#if displayActorOnCard}} - - {{/if}} - -

              {{item.name}}

              - -
              +
              +
              + {{#if displayActorOnCard}} + + {{/if}} + +

              {{item.name}}

              + +
              -
              - {{{weapon.data.data.description.value}}} -
              +
              + {{{weapon.data.data.description.value}}} +
              -
              - {{#if hardrolled}} - {{#if critical}} - {{localize 'CoC7.Critical'}} - {{#if impale}} - {{localize 'CoC7.Impale'}} - {{/if}} - {{/if}} - {{else}} - {{localize 'CoC7.Critical'}} - {{#if critical}} - {{localize 'CoC7.Impale'}} - {{/if}} - {{/if}} - {{#if damageInflicted}} - {{#if ignoreArmor}} - Armor Ignored - {{else}} - {{CoC7.Armor}}: {{armor}} - {{CoC7.Armor}}: {{armor}} - {{/if}} - {{else}} -
              -
              - - {{#if ignoreArmor}} - - {{else}} - - {{/if}} - - {{#unless ignoreArmor}} - - - - - {{#if isArmorForula}} - - - - {{/if}} - {{/unless}} -
              -
              - {{#unless ignoreArmor}} - - {{armor}} - {{/unless}} -
              -
              - {{/if}} +
              + {{#if hardrolled}} + {{#if critical}} + {{localize 'CoC7.Critical'}} + {{#if impale}} + {{localize 'CoC7.Impale'}} + {{/if}} + {{/if}} + {{else}} + {{localize 'CoC7.Critical'}} + {{#if critical}} + {{localize 'CoC7.Impale'}} + {{/if}} + {{/if}} + {{#if damageInflicted}} + {{#if ignoreArmor}} + Armor Ignored + {{else if (and (ne armor '') (ne armor null))}} + {{localize 'CoC7.Armor'}}: {{armor}} + {{localize 'CoC7.Armor'}}: {{armor}} + {{/if}} + {{else}} +
              +
              + + {{#if ignoreArmor}} + + {{else}} + + {{/if}} + + {{#unless ignoreArmor}} + +
              + +
              + {{#if isArmorForula}} + + + + {{/if}} + {{/unless}} +
              +
              + {{#unless ignoreArmor}} + + {{armor}} + {{/unless}} +
              + {{/if}} +
              -
              +
              - {{#if rolled}} - {{!--
              Damage roll: {{{_htmlInlineRoll}}}
              --}} - {{{_htmlRoll}}} - {{#if targetKey}} - {{#if damageInflicted}} -
              {{ localize 'CoC7.DamageInflicted'}} : {{totalDamageString}}
              - {{else}} -
              - -
              - {{/if}} - {{else}} -
              {{ localize 'CoC7.TotalDamage' }} : {{totalDamageString}} -
              - - - -
              + {{#if rolled}} + {{!--
              Damage roll: {{{_htmlInlineRoll}}}
              --}} + {{{_htmlRoll}}} + {{#if targetKey}} + {{#if damageInflicted}} +
              {{ localize 'CoC7.DamageInflicted'}} : {{totalDamageString}}
              + {{else}} +
              +
              - {{/if}} + {{/if}} {{else}} +
              {{ localize 'CoC7.TotalDamage' }} : {{totalDamageString}} +
              + + + +
              +
              + {{/if}} + {{else}}
              - +
              - {{/if}} + {{/if}} - - - + {{localize 'CoC7.AdvantageAttacker'}} +
              + --}}
              diff --git a/templates/chat/combat/melee-resolution.html b/templates/chat/combat/melee-resolution.html index 1d2b78f4..78946858 100644 --- a/templates/chat/combat/melee-resolution.html +++ b/templates/chat/combat/melee-resolution.html @@ -9,49 +9,48 @@ data-looser-key="{{looser.actorKey}}" data-resolved="{{resolved}}" data-is-blind="false" -> + > -
              +
              {{#if winner}} -
              - {{#if displayActorOnCard}} - - {{/if}} - -

              {{winnerTitle}}

              - {{#if looser}} - - {{/if}} -
              +
              + {{#if displayActorOnCard}} + + {{/if}} + +

              {{winnerTitle}}

              + {{#if looser}} + + {{/if}} +
              {{else}} -
              -

              {{resultString}}

              -
              +
              +

              {{resultString}}

              +
              {{/if}} -
              +
              -{{#if rollDamage}} -
              - {{#if looser}} + {{#if rollDamage}} +
              + {{#if looser}}

              {{looser.name}} {{ localize 'CoC7.meleeCombatDamageTakes' }} {{winner.weapon.data.data.range.normal.damage}}{{#if winner.weapon.data.data.properties.addb}}+DB{{/if}}{{#if winner.weapon.data.data.properties.ahdb}}+DB/2{{/if}} {{ localize 'CoC7.meleeCombatDamageFrom' }} {{winner.weapon.name}}

              - {{else}} + {{else}}

              {{winner.name}} {{ localize 'CoC7.meleeCombatDamageDeals' }} {{winner.weapon.data.data.range.normal.damage}}{{#if winner.weapon.data.data.properties.addb}}+DB{{/if}}{{#if winner.weapon.data.data.properties.ahdb}}+DB/2{{/if}} {{ localize 'CoC7.meleeCombatDamageWith' }} {{winner.weapon.name}}

              - {{/if}} -
              -
              - + {{/if}} +
              +
              + +
              + {{else}} +
              +

              {{resultString}}

              +
              + {{/if}}
              -{{else}} -
              -

              {{resultString}}

              -
              -{{/if}} - -
              \ No newline at end of file diff --git a/templates/chat/combat/melee-target.html b/templates/chat/combat/melee-target.html index f702c7be..4c3c6ddb 100644 --- a/templates/chat/combat/melee-target.html +++ b/templates/chat/combat/melee-target.html @@ -12,104 +12,108 @@ data-skill-id="{{skillId}}" data-item-id="{{itemId}}" data-dodging="{{dodging}}" + data-not-responding="{{notResponding}}" data-fighting-back="{{fightingBack}}" data-maneuvering="{{maneuvering}}" data-resolution-card="{{resolutionCard}}" data-is-blind="false" > -
              -
              - {{#if displayActorOnCard}} - - {{/if}} - {{#if dodging}} - -

              {{actor.dodgeSkill.name}}

              - {{else}} - {{#if fightingBack}} - -

              {{weapon.name}}

              - {{else}} - {{#if maneuvering}} - -

              {{skill.data.name}}

              - {{else}} -

              ...

              - {{/if}} - {{/if}} - {{/if}} - -
              +
              +
              + {{#if displayActorOnCard}} + + {{/if}} + {{#if dodging}} + +

              {{actor.dodgeSkill.name}}

              + {{else if notResponding}} +

              {{localize 'CoC7.NoResponse'}}

              + {{else if fightingBack}} + +

              {{weapon.name}}

              + {{else if maneuvering}} + +

              {{skill.data.name}}

              + {{else}} +

              ...

              + {{/if}} + +
              -
              - {{#if dodging}} - {{{actor.dodgeSkill.data.data.description.value}}} - {{/if}} - {{#if fightingBack}} - {{{weapon.data.data.description.value}}} - {{/if}} - {{#if maneuvering}} - {{{skill.data.data.description.value}}} - {{/if}} - {{#if rolled}} -
              - {{#if dodging}}{{localize 'CoC7.Dodge'}}{{/if}} - {{#if fightingBack}}{{localize 'CoC7.FightBack'}}{{/if}} - {{#if maneuvering}}{{localize 'CoC7.Maneuver'}}{{/if}} - {{#if advantage}}{{localize 'CoC7.Advantage'}}{{/if}} - {{#if disadvantage}}{{localize 'CoC7.Disadvantage'}}{{/if}} -
              - {{/if}} -
              + {{#unless notResponding}} +
              + {{#if dodging}} + {{{actor.dodgeSkill.data.data.description.value}}} + {{else if fightingBack}} + {{{weapon.data.data.description.value}}} + {{else if maneuvering}} + {{{skill.data.data.description.value}}} + {{/if}} + {{#if rolled}} +
              + {{#if dodging}}{{localize 'CoC7.Dodge'}}{{/if}} + {{#if fightingBack}}{{localize 'CoC7.FightBack'}}{{/if}} + {{#if maneuvering}}{{localize 'CoC7.Maneuver'}}{{/if}} + {{#if advantage}}{{localize 'CoC7.Advantage'}}{{/if}} + {{#if disadvantage}}{{localize 'CoC7.Disadvantage'}}{{/if}} +
              + {{/if}} +
              + {{/unless}} - {{#unless rolled}} -
              - + {{localize 'CoC7.Advantage'}} - {{localize 'CoC7.Disadvantage'}} -
              - {{/unless}} +
              + {{/unless}} - + - {{#unless rolled}} + {{#unless rolled}}
              - {{localize 'CoC7.Dodge'}} -
              - {{localize 'CoC7.FightBack'}} - + {{localize 'CoC7.Dodge'}} + {{localize 'CoC7.NoResponse'}} +
              +
              +
              + {{localize 'CoC7.FightBack'}} + -
              - {{localize 'CoC7.Maneuver'}} - +
              +
              + {{localize 'CoC7.Maneuver'}} + +
              - {{/unless}} + {{/unless}} - {{#if rolled}} + {{#if (and rolled notResponding)}} + {{else if rolled}}
              data-characteristic={{roll.characteristic}} data-is-blind="false" > -
              - - - {{else}} - {{#if actionSelected}} -
              - {{#unless fightingBack}} - +
              + {{#unless check.isSuccess}} + {{#if check.canBePushed}} + {{#unless check.pushing}} + + {{/unless}} + {{/if}} + {{#if check.hasEnoughLuck}} + {{#unless check.pushing}} + + {{/unless}} + {{/if}} {{/unless}} - {{#if fightingBack}} - - {{/if}} + + {{#unless check.pushing}} + {{#if check.canIncreaseSuccess}} + {{#each check.increaseSuccess as |level|}} + + {{/each}} + {{/if}} + {{/unless}} +
              +
              - {{/if}} - {{/if}} -
              \ No newline at end of file +
              + {{check.dices.total}} {{check.resultType}} +
              + {{#if check.hasMalfunction}}

              {{check.malfunctionTxt}}

              {{/if}} +
              +
              + {{else if actionSelected}} +
              + {{#if fightingBack}} + + {{else if notResponding}} + + {{else}} + + {{/if}} +
              + {{/if}} +
              From 281243696b5e30d261d14836a76315c2807ef615 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:38:22 +0100 Subject: [PATCH 197/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 69f9340a..cfe52076 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -8,6 +8,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV and @sn - Fix "The key ? does not exist in the EmbeddedCollection Collection" dragging an English setup onto a translated Actor. - Fix background integrity on Book sheet. - Fix bug on Archetype Item properties. +- Fix Combined / Opposed Roll using the incorrect image path for wildcard tokens. - Fix DsN 3D dices not rolling sometimes. - Fix summarized sheet colors. - Fix rounding for max Hit Points on Pulp. From 75d512b36d8181eda905687aaa75b4780eb07b85 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 11 Oct 2021 08:00:51 +0000 Subject: [PATCH 198/726] Updated translations list --- .github/TRANSLATIONS.md | 750 ++++++++++++++++++++-------------------- 1 file changed, 379 insertions(+), 371 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 46d8b9d3..54007ae4 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,377 +2,377 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The **pt-BR** translation is currently up to date - -| Key | cn | cs | de | es | fr | ja | pl | sv | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **366** | **142** | **159** | **30** | **30** | **30** | **7** | **24** | **36** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **368** | **144** | **161** | **32** | **32** | **32** | **9** | **2** | **26** | **38** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ##### CoC7.ActorImporter @@ -830,6 +830,10 @@ The **pt-BR** translation is currently up to date `"CoC7.InitialReadingNeeded": "{actor} needs to perform an Initial Reading on {book} to be able to advance through Full Study progress.",` +##### CoC7.InitiatorMissed + +`"CoC7.InitiatorMissed": "{name} missed.",` + ##### CoC7.InsanityName `"CoC7.InsanityName": "Insanity",` @@ -1074,6 +1078,10 @@ The **pt-BR** translation is currently up to date `"CoC7.NoConvert": "No Convert",` +##### CoC7.NoResponse + +`"CoC7.NoResponse": "No Response",` + ##### CoC7.NoTargetSelected `"CoC7.NoTargetSelected": "You have not selected a target for your {weapon} check. Do you want to proceed anyway?",` From af3392991a05599a18463735a1ac990c3ed618fb Mon Sep 17 00:00:00 2001 From: castanho Date: Mon, 11 Oct 2021 05:10:09 -0300 Subject: [PATCH 199/726] Update changelog --- .github/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index cfe52076..d22d9337 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -15,6 +15,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV and @sn - Now Actor die instantly when damage is equal or higher than its max hp. - Now Actor Importer support Traditional Chinese, thanks to @zeteticl. - Now double click on Item in inventory list open its sheet. +- Now the defender has an option to do nothing in combat flow. - Now there is an option to show or not show uncommon skills on Character sheet. - Several improvements on the Actor Importer app; - Update updater to check module compendiums for Actor and Item when modules version module numbers are new or changed. From 415b5c13f8b909d5b5ef49fd72ddf96ad92b17fb Mon Sep 17 00:00:00 2001 From: castanho Date: Mon, 11 Oct 2021 15:28:48 -0300 Subject: [PATCH 200/726] Add Pulp Luck recovery rules Resolve #870 --- module/actors/actor.js | 84 +++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 51 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index 3853603e..0a1e5c25 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -237,15 +237,15 @@ export class CoCActor extends Actor { } let boutDurationText = this.isInABoutOfMadness ? boutRealTime - ? `${duration} ${game.i18n.localize('CoC7.rounds')}` - : `${duration} ${game.i18n.localize('CoC7.hours')}` + ? `${duration} ${game.i18n.localize('CoC7.rounds')}` + : `${duration} ${game.i18n.localize('CoC7.hours')}` : null const insanityDurationText = insaneDuration ? this.isInsane - ? indefiniteInstanity - ? null - : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` - : null + ? indefiniteInstanity + ? null + : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` + : null : null if (this.isInsane && !insanityDurationText && !indefiniteInstanity) { indefiniteInstanity = true @@ -272,8 +272,8 @@ export class CoCActor extends Actor { durationText: insanityDurationText || '', hint: this.isInsane ? indefiniteInstanity - ? game.i18n.localize('CoC7.IndefiniteInsanity') - : `${game.i18n.localize( + ? game.i18n.localize('CoC7.IndefiniteInsanity') + : `${game.i18n.localize( 'CoC7.TemporaryInsanity' )} ${insanityDurationText || ''}` : game.i18n.localize('CoC7.NotInsane') @@ -2950,59 +2950,41 @@ export class CoCActor extends Actor { } async developLuck (fastForward = false) { - const luck = this.data.data.attribs.lck - const upgradeRoll = new Roll('1D100') + const currentLuck = this.data.data.attribs.lck.value + if (!currentLuck) await this.update({ 'data.attribs.lck.value': 0 }) + const pulpRulesActivated = game.settings.get('CoC7', 'pulpRules') + const upgradeRoll = (await new Roll('1D100').roll({ async: true })).total + const equalOrLessCurrentLuck = upgradeRoll <= currentLuck + let augmentRoll = '0' + if (pulpRulesActivated) { + equalOrLessCurrentLuck ? augmentRoll = '2D10+5' : augmentRoll = '1D10+5' + } else if (equalOrLessCurrentLuck) { + augmentRoll = '1D10' + } + const augmentValue = (await new Roll(augmentRoll).roll({ async: true })).total + await this.update({ + 'data.attribs.lck.value': this.data.data.attribs.lck.value + augmentValue + }) const title = game.i18n.localize('CoC7.RollLuck4Dev') let message = '

              ' - await upgradeRoll.roll({ async: true }) - if (!fastForward) await CoC7Dice.showRollDice3d(upgradeRoll) - if (upgradeRoll.total > luck.value) { - const augmentRoll = new Roll('1D10') - await augmentRoll.roll({ async: true }) - if (!fastForward) await CoC7Dice.showRollDice3d(augmentRoll) - if (luck.value + augmentRoll.total <= 99) { - await this.update({ - 'data.attribs.lck.value': - this.data.data.attribs.lck.value + augmentRoll.total - }) - message += `${game.i18n.format( - 'CoC7.LuckIncreased', - { - die: upgradeRoll.total, - score: luck.value, - augment: augmentRoll.total - } - )}` - } else { - let correctedValue - for (let i = 1; i <= 10; i++) { - if (luck.value + augmentRoll.total - i <= 99) { - correctedValue = augmentRoll.total - i - break - } + if (pulpRulesActivated || equalOrLessCurrentLuck) { + message += `${game.i18n.format( + 'CoC7.LuckIncreased', + { + die: upgradeRoll, + score: currentLuck, + augment: augmentValue } - await this.update({ - 'data.attribs.lck.value': - this.data.data.attribs.lck.value + correctedValue - }) - message += `${game.i18n.format( - 'CoC7.LuckIncreased', - { - die: upgradeRoll.total, - score: luck.value, - augment: correctedValue - } - )}` - } + )}` } else { message += `${game.i18n.format( 'CoC7.LuckNotIncreased', - { die: upgradeRoll.total, score: luck.value } + { die: upgradeRoll, score: currentLuck } )}` } if (!fastForward) { message += '

              ' - const speaker = { actor: this.actor } + const speaker = { actor: this } await chatHelper.createMessage(title, message, { speaker: speaker }) } } From 1e43bdf83b8898a522fc94a43553f46e60c8aede Mon Sep 17 00:00:00 2001 From: castanho Date: Mon, 11 Oct 2021 15:31:07 -0300 Subject: [PATCH 201/726] Run format and update changelog --- .github/CHANGELOG.md | 1 + module/actors/actor.js | 23 +++++++++++++---------- module/chat/cards/san-check.js | 6 +++--- module/check.js | 4 ++-- module/coc7.js | 8 ++++---- module/hooks/render-pause.js | 3 ++- module/items/spell/data.js | 3 ++- 7 files changed, 27 insertions(+), 21 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index d22d9337..f8a8c694 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -3,6 +3,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. - Add options to change pause icon and text on settings. +- Add Pulp Luck recovery rules. - Add several tooltips to the character sheet (Skill, DB, Sanity, etc). - Complete refactor of Spell system. - Fix "The key ? does not exist in the EmbeddedCollection Collection" dragging an English setup onto a translated Actor. diff --git a/module/actors/actor.js b/module/actors/actor.js index 0a1e5c25..9f1ba0a7 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -237,15 +237,15 @@ export class CoCActor extends Actor { } let boutDurationText = this.isInABoutOfMadness ? boutRealTime - ? `${duration} ${game.i18n.localize('CoC7.rounds')}` - : `${duration} ${game.i18n.localize('CoC7.hours')}` + ? `${duration} ${game.i18n.localize('CoC7.rounds')}` + : `${duration} ${game.i18n.localize('CoC7.hours')}` : null const insanityDurationText = insaneDuration ? this.isInsane - ? indefiniteInstanity - ? null - : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` - : null + ? indefiniteInstanity + ? null + : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` + : null : null if (this.isInsane && !insanityDurationText && !indefiniteInstanity) { indefiniteInstanity = true @@ -272,8 +272,8 @@ export class CoCActor extends Actor { durationText: insanityDurationText || '', hint: this.isInsane ? indefiniteInstanity - ? game.i18n.localize('CoC7.IndefiniteInsanity') - : `${game.i18n.localize( + ? game.i18n.localize('CoC7.IndefiniteInsanity') + : `${game.i18n.localize( 'CoC7.TemporaryInsanity' )} ${insanityDurationText || ''}` : game.i18n.localize('CoC7.NotInsane') @@ -2957,11 +2957,14 @@ export class CoCActor extends Actor { const equalOrLessCurrentLuck = upgradeRoll <= currentLuck let augmentRoll = '0' if (pulpRulesActivated) { - equalOrLessCurrentLuck ? augmentRoll = '2D10+5' : augmentRoll = '1D10+5' + equalOrLessCurrentLuck + ? (augmentRoll = '2D10+5') + : (augmentRoll = '1D10+5') } else if (equalOrLessCurrentLuck) { augmentRoll = '1D10' } - const augmentValue = (await new Roll(augmentRoll).roll({ async: true })).total + const augmentValue = (await new Roll(augmentRoll).roll({ async: true })) + .total await this.update({ 'data.attribs.lck.value': this.data.data.attribs.lck.value + augmentValue }) diff --git a/module/chat/cards/san-check.js b/module/chat/cards/san-check.js index 20ca9d5d..b55fc5f8 100644 --- a/module/chat/cards/san-check.js +++ b/module/chat/cards/san-check.js @@ -290,7 +290,7 @@ export class SanCheckCard extends ChatCardActor { this.sanCheck.difficulty = this.options.sanDifficulty || CoC7Check.difficultyLevel.regular this.sanCheck.diceModifier = this.options.sanModifier || 0 - await this.sanCheck._perform( {forceDSN: true}) + await this.sanCheck._perform({ forceDSN: true }) this.state.sanRolled = true this.state.involuntaryActionPerformed = this.sanCheck.passed this.state.sanLossRolled = true @@ -305,7 +305,7 @@ export class SanCheckCard extends ChatCardActor { this.sanCheck.difficulty = this.options.sanDifficulty || CoC7Check.difficultyLevel.regular this.sanCheck.diceModifier = this.options.sanModifier || 0 - await this.sanCheck._perform( {forceDSN: true}) + await this.sanCheck._perform({ forceDSN: true }) this.state.sanRolled = true this.state.involuntaryActionPerformed = this.sanCheck.passed if (!this.isActorLoosingSan) { @@ -429,7 +429,7 @@ export class SanCheckCard extends ChatCardActor { this.intCheck.difficulty = this.options.intDifficulty || CoC7Check.difficultyLevel.regular this.intCheck.diceModifier = this.options.intModifier || 0 - await this.intCheck._perform( {forceDSN: true}) + await this.intCheck._perform({ forceDSN: true }) this.state.intRolled = true if (this.intCheck.passed || this.state.alreadyInsane) { this.state.insanity = true diff --git a/module/check.js b/module/check.js index e2032d05..22a88288 100644 --- a/module/check.js +++ b/module/check.js @@ -718,8 +718,8 @@ export class CoC7Check { (await CoC7Dice.roll(this.diceModifier, this.rollMode, this.isBlind)) if (!options.silent) AudioHelper.play({ src: CONFIG.sounds.dice }) - if( options.forceDSN){ - await CoC7Dice.showRollDice3d( this.dice.roll) + if (options.forceDSN) { + await CoC7Dice.showRollDice3d(this.dice.roll) } this.dices = { diff --git a/module/coc7.js b/module/coc7.js index 6a2c321a..b262a8f8 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -333,14 +333,14 @@ Hooks.on('ready', async () => { game.settings.get('CoC7', 'boutOfMadnessSummaryTable') === 'none' ? null : game.tables.get( - game.settings.get('CoC7', 'boutOfMadnessSummaryTable') - ), + game.settings.get('CoC7', 'boutOfMadnessSummaryTable') + ), boutOfMadness_RealTime: game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') === 'none' ? null : game.tables.get( - game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') - ) + game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') + ) // maniasIndex: ge.settings.get('CoC7', 'boutOfMadnessPhobiasIndex'), // phobiasIndex: game.settings.get('CoC7', 'boutOfMadnessManiasIndex'), // phobias: ('none' == game.settings.get('CoC7', 'samplePhobiasTable'))?null:game.tables.get(game.settings.get('CoC7', 'samplePhobiasTable')), diff --git a/module/hooks/render-pause.js b/module/hooks/render-pause.js index 5b850caa..bdf5133d 100644 --- a/module/hooks/render-pause.js +++ b/module/hooks/render-pause.js @@ -5,7 +5,8 @@ export function listen () { if (game.settings.get('CoC7', 'overrideGameArtwork')) { if (game.settings.get('CoC7', 'artPauseImage').toLowerCase() === 'null') { html.find('img').remove() - } if (game.settings.get('CoC7', 'artPauseImage') != '') { + } + if (game.settings.get('CoC7', 'artPauseImage') != '') { html.find('img').attr('src', game.settings.get('CoC7', 'artPauseImage')) } diff --git a/module/items/spell/data.js b/module/items/spell/data.js index 8970be5c..7107d747 100644 --- a/module/items/spell/data.js +++ b/module/items/spell/data.js @@ -46,7 +46,8 @@ export class CoC7Spell extends CoC7Item { break case 'power': this.actor.update({ - 'data.characteristics.pow.value': actorData.characteristics.pow.value - loss + 'data.characteristics.pow.value': + actorData.characteristics.pow.value - loss }) } } From 2bf43df06975ed502c5ba97e160aa57da1ebf54c Mon Sep 17 00:00:00 2001 From: castanho Date: Mon, 11 Oct 2021 15:35:26 -0300 Subject: [PATCH 202/726] Improve develop Luck logic --- module/actors/actor.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index 9f1ba0a7..84a9c1ab 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -2955,7 +2955,7 @@ export class CoCActor extends Actor { const pulpRulesActivated = game.settings.get('CoC7', 'pulpRules') const upgradeRoll = (await new Roll('1D100').roll({ async: true })).total const equalOrLessCurrentLuck = upgradeRoll <= currentLuck - let augmentRoll = '0' + let augmentRoll if (pulpRulesActivated) { equalOrLessCurrentLuck ? (augmentRoll = '2D10+5') @@ -2963,14 +2963,15 @@ export class CoCActor extends Actor { } else if (equalOrLessCurrentLuck) { augmentRoll = '1D10' } - const augmentValue = (await new Roll(augmentRoll).roll({ async: true })) - .total - await this.update({ - 'data.attribs.lck.value': this.data.data.attribs.lck.value + augmentValue - }) const title = game.i18n.localize('CoC7.RollLuck4Dev') let message = '

              ' if (pulpRulesActivated || equalOrLessCurrentLuck) { + const augmentValue = (await new Roll(augmentRoll).roll({ async: true })) + .total + await this.update({ + 'data.attribs.lck.value': + this.data.data.attribs.lck.value + augmentValue + }) message += `${game.i18n.format( 'CoC7.LuckIncreased', { From 29a2b87accc1a1530554bc4821ac82644514a2f0 Mon Sep 17 00:00:00 2001 From: castanho Date: Mon, 11 Oct 2021 16:36:13 -0300 Subject: [PATCH 203/726] Fix augment roll formula --- module/actors/actor.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index 84a9c1ab..173fdb9d 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -237,15 +237,15 @@ export class CoCActor extends Actor { } let boutDurationText = this.isInABoutOfMadness ? boutRealTime - ? `${duration} ${game.i18n.localize('CoC7.rounds')}` - : `${duration} ${game.i18n.localize('CoC7.hours')}` + ? `${duration} ${game.i18n.localize('CoC7.rounds')}` + : `${duration} ${game.i18n.localize('CoC7.hours')}` : null const insanityDurationText = insaneDuration ? this.isInsane - ? indefiniteInstanity - ? null - : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` - : null + ? indefiniteInstanity + ? null + : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` + : null : null if (this.isInsane && !insanityDurationText && !indefiniteInstanity) { indefiniteInstanity = true @@ -272,8 +272,8 @@ export class CoCActor extends Actor { durationText: insanityDurationText || '', hint: this.isInsane ? indefiniteInstanity - ? game.i18n.localize('CoC7.IndefiniteInsanity') - : `${game.i18n.localize( + ? game.i18n.localize('CoC7.IndefiniteInsanity') + : `${game.i18n.localize( 'CoC7.TemporaryInsanity' )} ${insanityDurationText || ''}` : game.i18n.localize('CoC7.NotInsane') @@ -2958,7 +2958,7 @@ export class CoCActor extends Actor { let augmentRoll if (pulpRulesActivated) { equalOrLessCurrentLuck - ? (augmentRoll = '2D10+5') + ? (augmentRoll = '2D10+10') : (augmentRoll = '1D10+5') } else if (equalOrLessCurrentLuck) { augmentRoll = '1D10' From a4258240132b3f968dc78205a082c40fb3880d01 Mon Sep 17 00:00:00 2001 From: castanho Date: Mon, 11 Oct 2021 16:36:36 -0300 Subject: [PATCH 204/726] Fix augment roll formula --- module/actors/actor.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index 173fdb9d..cb92d2ad 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -237,15 +237,15 @@ export class CoCActor extends Actor { } let boutDurationText = this.isInABoutOfMadness ? boutRealTime - ? `${duration} ${game.i18n.localize('CoC7.rounds')}` - : `${duration} ${game.i18n.localize('CoC7.hours')}` + ? `${duration} ${game.i18n.localize('CoC7.rounds')}` + : `${duration} ${game.i18n.localize('CoC7.hours')}` : null const insanityDurationText = insaneDuration ? this.isInsane - ? indefiniteInstanity - ? null - : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` - : null + ? indefiniteInstanity + ? null + : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` + : null : null if (this.isInsane && !insanityDurationText && !indefiniteInstanity) { indefiniteInstanity = true @@ -272,8 +272,8 @@ export class CoCActor extends Actor { durationText: insanityDurationText || '', hint: this.isInsane ? indefiniteInstanity - ? game.i18n.localize('CoC7.IndefiniteInsanity') - : `${game.i18n.localize( + ? game.i18n.localize('CoC7.IndefiniteInsanity') + : `${game.i18n.localize( 'CoC7.TemporaryInsanity' )} ${insanityDurationText || ''}` : game.i18n.localize('CoC7.NotInsane') From a5defcfd9774957acda01ad360c6625dabd64f0a Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 11 Oct 2021 21:57:06 +0100 Subject: [PATCH 205/726] Update actor-importer-dialog.js --- module/apps/actor-importer-dialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/apps/actor-importer-dialog.js b/module/apps/actor-importer-dialog.js index 897a33a3..5b6214b7 100644 --- a/module/apps/actor-importer-dialog.js +++ b/module/apps/actor-importer-dialog.js @@ -134,7 +134,7 @@ export class CoC7ActorImporterDialog extends Dialog { } Hooks.once('ready', () => { - if (game.modules.get('CoC7-importer-tests')?.active) { + if (game.modules.get('CoC7-Importer-Tests')?.active) { window.CoC7ActorImporter = CoC7ActorImporter } }) From 0cd58f02317fe381703144d5060932e20d51148a Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Tue, 12 Oct 2021 19:46:55 +0200 Subject: [PATCH 206/726] Save and set scroll to active pos, actor drag/drop --- lang/en.json | 1 + module/coc7.js | 17 +- module/items/item.js | 18 +- module/items/sheets/chase.js | 498 +++++++++++++++++++++++++++-------- styles/sheets/chase.less | 14 +- templates/items/chase.html | 51 ++-- 6 files changed, 466 insertions(+), 133 deletions(-) diff --git a/lang/en.json b/lang/en.json index 471758a5..b7ddb984 100644 --- a/lang/en.json +++ b/lang/en.json @@ -365,6 +365,7 @@ "CoC7.DodgeSkillName": "Dodge", "CoC7.CthulhuMythosName": "Cthulhu Mythos", "CoC7.CreditRatingSkillName": "Credit Rating", + "CoC7.DriveAutoSkillName": "Drive Auto", "CoC7.FightingSpecializationName": "Fighting", "CoC7.FirearmSpecializationName": "Firearms", "CoC7.DriveSpecializationName": "Drive", diff --git a/module/coc7.js b/module/coc7.js index 949cb795..3b1cf7c1 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -18,6 +18,7 @@ import { CoC7CompendiumDirectory } from './compendium-directory.js' import { CoC7Hooks } from './hooks/index.js' import * as DiceBot from './dicebot.js' import '../styles/system/index.less' +import { CoC7ChaseSheet } from './items/sheets/chase.js' Hooks.on('renderSettingsConfig', (app, html, options) => { const systemTab = $(app.form).find('.tab[data-tab=system]') @@ -215,6 +216,8 @@ Hooks.on('ready', async () => { configureTinyMCE() + game.CoC7.skillList = await game.packs.get('CoC7.skills')?.getContent() + game.socket.on('system.CoC7', async data => { if (data.type === 'updateChar') CoC7Utilities.updateCharSheets() @@ -337,6 +340,16 @@ Hooks.on('ready', async () => { // Hooks.on('preCreateActor', (createData) => CoCActor.initToken( createData)); +Hooks.on( + 'renderCoC7ChaseSheet', + /**async*/ (app, html, data) => + /**await*/ CoC7ChaseSheet.setScroll(app, html, data) +) + +Hooks.on('closeCoC7ChaseSheet', (app, html) => + CoC7ChaseSheet.onClose(app, html) +) + // Called on closing a character sheet to lock it on getting it to display values Hooks.on('closeActorSheet', characterSheet => characterSheet.onCloseSheet()) Hooks.on('renderCoC7CreatureSheet', (app, html, data) => @@ -407,7 +420,6 @@ function activateGlobalListener () { * Configuration of TinyMCE editor */ function configureTinyMCE () { - // Add on drop event to tinyMCE to hendle the links drop tinyMCE.PluginManager.add('CoC7_Editor_OnDrop', function (editor) { editor.on('drop', event => CoC7Parser.onEditorDrop(event, editor)) @@ -422,7 +434,8 @@ function configureTinyMCE () { // CONFIG.TinyMCE.plugins = `CoC7_Editor_OnInit CoC7_Editor_OnDrop ${CONFIG.TinyMCE.plugins}` CONFIG.TinyMCE.plugins = `CoC7_Editor_OnDrop ${CONFIG.TinyMCE.plugins}` - if (game.user.isGM) { // Define css and menu for keeper only blocks + if (game.user.isGM) { + // Define css and menu for keeper only blocks CONFIG.TinyMCE.content_css.push('/systems/CoC7/assets/mce.css') CONFIG.TinyMCE.style_formats.push({ title: 'CoC7', diff --git a/module/items/item.js b/module/items/item.js index 320a6887..136e63d7 100644 --- a/module/items/item.js +++ b/module/items/item.js @@ -247,6 +247,12 @@ export class CoC7Item extends Item { return `${this.data.data.specialization} (${this.data.name})` } + get fullName () { + if (this.data.data.properties.special) + return `${this.data.data.specialization} (${this.data.name})` + return this.name + } + get sName () { if (this.type !== 'skill' || !this.data.data?.properties?.special) { return super.name @@ -546,7 +552,8 @@ export class CoC7Item extends Item { get _base () { if (this.type !== 'skill') return [null, false] - if (typeof this.data.data.base !== 'string') return [this.data.data.base, false] + if (typeof this.data.data.base !== 'string') + return [this.data.data.base, false] if (this.data.data.base.includes('@')) { const parsed = {} for (const [key, value] of Object.entries(COC7.formula.actorsheet)) { @@ -567,9 +574,12 @@ export class CoC7Item extends Item { return [value, true] } - return [!isNaN(parseInt(this.data.data.base)) - ? parseInt(this.data.data.base) - : null, false] + return [ + !isNaN(parseInt(this.data.data.base)) + ? parseInt(this.data.data.base) + : null, + false + ] } async asyncBase () { diff --git a/module/items/sheets/chase.js b/module/items/sheets/chase.js index 5016c375..f93cd05b 100644 --- a/module/items/sheets/chase.js +++ b/module/items/sheets/chase.js @@ -1,5 +1,6 @@ /* global DragDrop, duplicate, expandObject, flattenObject, FormDataExtended, game, getType, ItemSheet, mergeObject */ +import { CoCActor } from '../../actors/actor.js' import { CoC7Chat } from '../../chat.js' import { chatHelper } from '../../chat/helper.js' import { CoC7Check } from '../../check.js' @@ -51,9 +52,16 @@ export class CoC7ChaseSheet extends ItemSheet { return 'coc7ChaseSheet' } + // /** @override */ + // async render(force, options) { + // return super.render(force, options); + // } + /** @override */ - getData (options = {}) { + getData (options) { const data = super.getData(options) + // if( this.started) options.tabs[0].initial = 'setup' + if (this.started) this._tabs[0].active = 'setup' /** MODIF: 0.8.x **/ const itemData = data.data @@ -110,6 +118,7 @@ export class CoC7ChaseSheet extends ItemSheet { data.previousLocation = this.previousLocation data.nextLocation = this.nextLocation data.started = this.started + data.dataListCheckOptions = this.allSkillsAndCharacteristics return data } @@ -125,6 +134,43 @@ export class CoC7ChaseSheet extends ItemSheet { // return this.item.data.data.participants } + get allSkillsAndCharacteristics () { + const list = [] + CoCActor.getCharacteristicDefinition().forEach(c => + list.push( + `${game.i18n.localize('CoC7.Characteristics')} (${c.shortName})` + ) + ) + list.push( + `${game.i18n.localize('CoC7.Attribute')} (${game.i18n.localize( + 'CoC7.Luck' + )})` + ) + list.push( + `${game.i18n.localize('CoC7.Attribute')} (${game.i18n.localize( + 'CoC7.SAN' + )})` + ) + + game.CoC7.skillList?.forEach(s => { + if ( + !list.includes(s.fullName) && + !s.fullName + .toLowerCase() + .includes(`(${game.i18n.localize('CoC7.AnySpecName')})`.toLowerCase()) + ) + list.push(s.fullName) + }) // TODO: Remove ?? + this.participants.forEach(p => { + if (p.actor) { + p.actor.skills.forEach(s => { + if (!list.includes(s.fullName)) list.push(s.fullName) + }) + } + }) + return list.sort(Intl.Collator().compare) + } + get preys () { return ( this.participants @@ -155,84 +201,8 @@ export class CoC7ChaseSheet extends ItemSheet { ).adjustedMov } - get locations () { - if ( - !this.item.data.data.locations.list || - 0 === this.item.data.data.locations.list.length - ) - return undefined - - const locations = [] // !!!!!!! locations vs init locations !!! - - - if (!this.started) { - const init = this.getInitTrack() - let locationsIndexStart, initIndexStart, locationsLength - if (0 >= init.length) locationsIndexStart = 0 - else if (this.item.data.data.startingIndex >= init.length) - locationsIndexStart = 0 - else locationsIndexStart = init.length - this.item.data.data.startingIndex - - if (this.item.data.data.startingIndex <= 0) initIndexStart = 0 - else if (this.item.data.data.startingIndex <= init.length) - initIndexStart = 0 - else initIndexStart = this.item.data.data.startingIndex - init.length - - if (0 == locationsIndexStart) - locationsLength = this.item.data.data.locations.list.length - else - locationsLength = - this.item.data.data.locations.list.length + locationsIndexStart - - if (0 != init.length) { - if (this.item.data.data.startingIndex < 0) { - for ( - let index = 0; - index < Math.abs(this.item.data.data.startingIndex); - index++ - ) { - init.push({ - uuid: this.generateNewUuid(), - init: true, - participants: [] - }) - } - } - } - - for (let index = 0; index < locationsLength; index++) { - let location = {} - const participants = [] - if ( - index >= locationsIndexStart && - index - locationsIndexStart < - this.item.data.data.locations.list.length - ) { - location = this.item.data.data.locations.list[ - index - locationsIndexStart - ] - location.init = false - location.participants?.forEach(p => { - if (null != p) participants.push(p) - }) - } - if (index >= initIndexStart && index - initIndexStart < init.length) { - mergeObject(location, init[index - initIndexStart], { - overwrite: false - }) - - init[index - initIndexStart].participants?.forEach(p => { - if (null != p) participants.push(p) - }) - - location.participants = participants - } - location.first = false - location.end = false - locations.push(location) - } - } - + processLocations (locations) { + if (!locations?.length) return locations[0].first = true for (let index = 0; index < locations.length; index++) { @@ -247,18 +217,117 @@ export class CoC7ChaseSheet extends ItemSheet { if (locations.length > 1) locations[locations.length - 1].last = true locations.forEach(l => { - if (l.participants) { + if (l.participants && l.participants.length) { + // ui.notifications.error(`Length : ${l.participants.length}`) + for (let i = 0; i < l.participants.length; i++) { - const uuid = l.participants[i] - const p = this.item.data.data.participants.find(p => uuid == p.uuid) + const elem = l.participants[i] // Init track = only uuid, update location list change for uuid + + // ui.notifications.error(`Type : ${typeof elem}`) + let p + if (typeof elem === 'string' || elem instanceof String) { + p = this.item.data.data.participants.find(p => elem == p.uuid) //Retrieve participant data from list. + } else if (elem.constructor.name == '_participant') { + p = undefined // participant is already processed. + ui.notifications.warn('Participant was already processed.') + } else p = undefined + if (undefined != p) { - l.participants[i] = new _participant(p) + l.participants[i] = new _participant(p) // replace uuid with _participant } else { - l.participants[i] = null + // participants.push( null) + console.error( + 'Undefined paticipant while processing participants array' + ) } } + l.participants.sort(sortByRoleAndDex) // TODO : test if sorting works } }) + } + + get locations () { + const locations = this.started + ? this.item.data.data.locations.list + ? duplicate(this.item.data.data.locations.list) + : [] + : this.initTrack + this.processLocations(locations) + return locations + } + + get initTrack () { + if ( + !this.item.data.data.locations.list || + 0 === this.item.data.data.locations.list.length + ) + return undefined + + const locations = [] // !!!!!!! locations vs init locations !!! + + const init = this.startingLine + let locationsIndexStart, initIndexStart, locationsLength + if (0 >= init.length) locationsIndexStart = 0 + else if (this.item.data.data.startingIndex >= init.length) + locationsIndexStart = 0 + else locationsIndexStart = init.length - this.item.data.data.startingIndex + + if (this.item.data.data.startingIndex <= 0) initIndexStart = 0 + else if (this.item.data.data.startingIndex <= init.length) + initIndexStart = 0 + else initIndexStart = this.item.data.data.startingIndex - init.length + + if (0 == locationsIndexStart) + locationsLength = this.item.data.data.locations.list.length + else + locationsLength = + this.item.data.data.locations.list.length + locationsIndexStart + + if (0 != init.length) { + if (this.item.data.data.startingIndex < 0) { + for ( + let index = 0; + index < Math.abs(this.item.data.data.startingIndex); + index++ + ) { + init.push({ + uuid: this.generateNewUuid(), + init: true, + participants: [] + }) + } + } + } + + const chaseLocations = duplicate(this.item.data.data.locations) + for (let index = 0; index < locationsLength; index++) { + let location = {} + const participants = [] + if ( + index >= locationsIndexStart && + index - locationsIndexStart < chaseLocations.list.length + ) { + location = duplicate(chaseLocations.list[index - locationsIndexStart]) + location.init = false + location.participants?.forEach(p => { + if (null != p) participants.push(p) + }) + } + if (index >= initIndexStart && index - initIndexStart < init.length) { + mergeObject(location, init[index - initIndexStart], { + overwrite: false + }) + + init[index - initIndexStart].participants?.forEach(p => { + if (null != p) participants.push(p) + }) + + location.participants = participants + } + location.first = false + location.end = false + locations.push(location) + } return locations } @@ -316,7 +385,7 @@ export class CoC7ChaseSheet extends ItemSheet { } } - getInitTrack () { + get startingLine () { //Get preys and check for escaped const preys = this.item.data.data.includeEscaped ? this.preys @@ -411,6 +480,8 @@ export class CoC7ChaseSheet extends ItemSheet { activateListeners (html) { super.activateListeners(html) + // html.find('.track').ready(async html => await this._onSheetReady(html)) + html.on('dblclick', '.open-actor', CoC7Chat._onOpenActor.bind(this)) html @@ -452,7 +523,9 @@ export class CoC7ChaseSheet extends ItemSheet { html.find('.name-container').click(this._onLocationClick.bind(this)) - html.find('.obstacle_type').click(this._onObstacleTypeClick.bind(this)) + html.find('.obstacle-type').click(this._onObstacleTypeClick.bind(this)) + html.find('.obstacle-toggle').click(this._onObstacleToggleClick.bind(this)) + html.find('.toggle').click(this._onToggle.bind(this)) const participantDragDrop = new DragDrop({ dropSelector: '.participant', @@ -466,24 +539,26 @@ export class CoC7ChaseSheet extends ItemSheet { }) newParticipantDragDrop.bind(html[0]) - const chaseParticipantDragpDrop = new DragDrop({ - dragSelector: '.chase-participant', - dropSelector: '.chase-location', - permissions: { - dragstart: this._canChaseParticipantDragStart.bind(this), - drop: this._canChaseParticipantDragDrop.bind(this) - }, - callbacks: { - dragstart: this._onChaseParticipantDragStart.bind(this), - drop: this._onChaseParticipantDragDrop.bind(this), - dragover: this._onDragEnter.bind(this) - } - }) - chaseParticipantDragpDrop.bind(html[0]) + if (this.started) { + const chaseParticipantDragpDrop = new DragDrop({ + dragSelector: '.chase-participant', + dropSelector: '.chase-location', + permissions: { + dragstart: this._canChaseParticipantDragStart.bind(this), + drop: this._canChaseParticipantDragDrop.bind(this) + }, + callbacks: { + dragstart: this._onChaseParticipantDragStart.bind(this), + drop: this._onChaseParticipantDragDrop.bind(this), + dragover: this._onDragEnter.bind(this) + } + }) + chaseParticipantDragpDrop.bind(html[0]) - html - .find('.chase-location') - .on('dragleave', event => this._onDragLeave(event)) + html + .find('.chase-location') + .on('dragleave', event => this._onDragLeave(event)) + } } /* -------------------------------------------- */ @@ -498,6 +573,14 @@ export class CoC7ChaseSheet extends ItemSheet { if (updateData) data = mergeObject(data, updateData) else data = expandObject(data) + //Check that starting position is not outside of chase range. + if ( + this.item.data.data.locations?.list?.length && + data.data.startingIndex > this.item.data.data.locations.list.length + ) { + data.data.startingIndex = this.item.data.data.locations.list.length + } + if (data.data.participants) { const participants = duplicate(this.item.data.data.participants) // Handle participants array @@ -574,6 +657,72 @@ export class CoC7ChaseSheet extends ItemSheet { super._updateObject(event, formData) } + static /**async */ setScroll (app, html, data) { + const track = html.find('.track') + if (!track.length) return + const element = $(track).find('.active') + if (!element.length) return + + const originalPosition = data.data.trackScrollPosition + + const elementleft = element[0].offsetLeft + const divWidth = track[0].clientWidth + let elementCenterRelativeLeft = elementleft - divWidth / 2 + if (elementCenterRelativeLeft < 0) elementCenterRelativeLeft = 0 + + const trackElement = track[0] + + if (-1 != originalPosition) { + trackElement.scrollTo({ + top: 0, + left: originalPosition, + behavior: 'instant' + }) + } + + trackElement.scrollTo({ + top: 0, + left: elementCenterRelativeLeft, + behavior: 'smooth' + }) + + // await app.item.update({ 'data.trackScrollPosition': elementCenterRelativeLeft }) + } + + static onClose (app, html) { + app.item.update({ 'data.trackScrollPosition': -1 }) + } + + // async _onSheetReady (html) { + // const track = html.find('.track') + // const element = $(track).find('.active') + + // const elementleft = element[0].offsetLeft + // const divWidth = track[0].clientWidth + // let elementCenterRelativeLeft = elementleft - divWidth / 2 + // if (elementCenterRelativeLeft < 0) elementCenterRelativeLeft = 0 + + // const scrollPosition = this.item.data.data.trackScrollPosition + // if (!track.length) return + // if (!scrollPosition) return + // const trackElement = track[0] + // trackElement.scrollTo({ + // top: 0, + // left: elementCenterRelativeLeft, + // behavior: 'instant' + // }) + + // //TODO : couldd use parent.offsetTop et child.offsetTop to center the active element + + // // const active = html.find('.name-container.active') + // // if( active){ + // // const element = active[0] + // // element.scrollIntoView({behavior: "smooth", block: "end", inline: "center"}) + // // element.scrollIntoView(false) + // // } + // // }) + // } + findParticipantIndex (uuid) { return this.item.data.data.participants.findIndex(p => p.uuid == uuid) } @@ -594,6 +743,13 @@ export class CoC7ChaseSheet extends ItemSheet { delete l.cssClasses delete l.first delete l.last + delete l.end + if (l.participants && l.participants.length) { + for (let i = 0; i < l.participants.length; i++) { + if (l.participants[i].data?.uuid) + l.participants[i] = l.participants[i].data.uuid + } + } }) await this.item.update({ 'data.locations.list': updatedList }) } @@ -619,9 +775,51 @@ export class CoC7ChaseSheet extends ItemSheet { return } + async _onToggle (event) { + const target = event.currentTarget + // const locationElement = target.closest('.location.obstacle') + // const uuid = locationElement.dataset.uuid + // const locations = duplicate(this.item.data.data.locations.list) + // const locationIndex = this.findIndex(locations, uuid) + const toggle = target.getAttribute('toggle') + const data = expandObject({ + [toggle]: !target.classList.contains('switched-on') + }) + if (data.locations) { + const locations = duplicate(this.item.data.data.locations.list) + for (const [key, value] of Object.entries(data.locations)) { + const locationIndex = locations.findIndex(l => l.uuid == key) + if (-1 == locationIndex) + ui.notifications.error('Locations table corrupted') + else { + const originalLocation = locations[locationIndex] + const cleaned = clean(value) + mergeObject(originalLocation, cleaned) + locations[locationIndex] = originalLocation + } + } + await this.updateLocationsList(locations) + } + } + + async _onObstacleToggleClick (event) { + const target = event.currentTarget + const locationElement = target.closest('.location.obstacle') + const uuid = locationElement.dataset.uuid + const locations = duplicate(this.item.data.data.locations.list) + const locationIndex = this.findIndex(locations, uuid) + locations[locationIndex].obstacle = !locations[locationIndex].obstacle + if (!locations[locationIndex].obstacleDetails) { + locations[locationIndex].obstacleDetails = { + barrier: true + } + } + await this.updateLocationsList(locations) + } + async _onObstacleTypeClick (event) { const target = event.currentTarget - const locationElement = target.closest('.location') + const locationElement = target.closest('.location.obstacle') const uuid = locationElement.dataset.uuid const locations = duplicate(this.item.data.data.locations.list) const locationIndex = this.findIndex(locations, uuid) @@ -647,10 +845,12 @@ export class CoC7ChaseSheet extends ItemSheet { async _onLocationClick (event) { const target = event.currentTarget + const track = target.closest('.track') + await this.item.update({ 'data.trackScrollPosition': track.scrollLeft }) const active = target.classList.contains('active') const locations = duplicate(this.item.data.data.locations.list) locations.forEach(l => (l.active = false)) - const locationElement = target.closest('.location') + const locationElement = target.closest('.chase-location') const uuid = locationElement.dataset.uuid const locationIndex = this.findIndex(locations, uuid) if (-1 != locationIndex) { @@ -733,12 +933,23 @@ export class CoC7ChaseSheet extends ItemSheet { } async _onChaseParticipantDragStart (dragEvent) { - ui.notifications.info('DragStart') + const target = dragEvent.currentTarget + const dragData = { uuid: target.dataset.uuid } + dragEvent.dataTransfer.setData('text/plain', JSON.stringify(dragData)) } async _onChaseParticipantDragDrop (dragEvent) { ui.notifications.info('Dropped') this._onDragLeave(dragEvent) + + const target = dragEvent.currentTarget + const locationUuid = target.dataset.uuid + const dataString = dragEvent.dataTransfer.getData('text/plain') + const data = JSON.parse(dataString) + ui.notifications.info( + `dragged particpant ${data.uuid} onto location ${locationUuid}` + ) + await this.moveParticipant(data.uuid, locationUuid) } _onDragOver (dragEvent) { @@ -752,13 +963,12 @@ export class CoC7ChaseSheet extends ItemSheet { _onDragLeave (dragEvent) { const target = dragEvent.currentTarget - target.classList.remove('drag-over') + target.classList?.remove('drag-over') } async _onDropParticipant (event) { const target = event.currentTarget const uuid = target.dataset?.uuid - if (!index) return const dataString = event.dataTransfer.getData('text/plain') const data = JSON.parse(dataString) await this.alterParticipant(data, uuid) @@ -930,6 +1140,11 @@ export class CoC7ChaseSheet extends ItemSheet { break } + //TODO:Check for speed check, if none add speedcheck + //speedCheck = { + // id: 'str' + // type: 'characteristic' + // } const participants = this.item.data.data.participants ? duplicate(this.item.data.data.participants) : [] @@ -989,6 +1204,26 @@ export class CoC7ChaseSheet extends ItemSheet { break } + //TODO:Check for speed check, if none add speedcheck con non vehicule, drive auto for vehicule + //speedCheck = { + // id: 'con' + // type: 'characteristic' + // } + + if (!participant.speedCheck) { + if (!this.item.data.data.vehicule) { + participant.speedCheck = { + id: 'con', + type: 'characteristic', + name: game.i18n.localize('CHARAC.Constitution') + } + } else { + participant.speedCheck = { + type: 'item', + name: game.i18n.localize('CoC7.DriveAutoSkillName') + } + } + } const participants = this.item.data.data.participants ? duplicate(this.item.data.data.participants) : [] @@ -1024,6 +1259,53 @@ export class CoC7ChaseSheet extends ItemSheet { game.socket.emit('system.CoC7', data) } } + + async moveParticipant (participantUuid, locationUuid) { + const locations = duplicate(this.item.data.data.locations.list) + + //Find destination location. + const destination = locations.find(l => locationUuid == l.uuid) + if (!destination) { + console.error( + `Failed to move ${participantUuid}. Location ${locationUuid} unknown` + ) + return + } + + //Find origin location + const origin = locations.find(l => + l.participants?.includes(participantUuid) + ) + // if (l.participants) { + // if (-1 != l.participants.findIndex(p => participantUuid == p.uuid || p == participantUuid)) + // return true + // } + // return false + // }) + if (!origin) { + console.error(`Failed to find ${participantUuid} in locations`) + return + } + + if (!destination.participants) destination.participants = [] + destination.participants.push(participantUuid) + // destination.participants.sort(sortByRoleAndDex) + + const oldParticipantsList = origin.participants.filter( + p => participantUuid != p + ) + origin.participants = oldParticipantsList + + await this.updateLocationsList(locations) + } +} + +export function sortByRoleAndDex (a, b) { + //Put chasers first + if (b.chaser && !a.chaser) return 1 + if (a.chaser && !b.chaser) return -1 + //If sametype sort by dex + return a.dex - b.dex } export function clean (obj) { diff --git a/styles/sheets/chase.less b/styles/sheets/chase.less index 301e0d80..ab1ed89d 100644 --- a/styles/sheets/chase.less +++ b/styles/sheets/chase.less @@ -1,6 +1,11 @@ .sheetV2.item.chase { .flex-content { - flex: 0 0 content; + flex: 0; + } + + .form-group { + flex-wrap: nowrap; + height: 19.5px; } .flex-auto { @@ -17,7 +22,7 @@ } .sheet-header { - flex: 0 0 12rem; + flex: 0 0 14rem; height: 100%; .sheet-portrait { height: auto; @@ -25,7 +30,7 @@ .active-location { height: 100%; - padding-top: 0.5rem; + padding: 0.5rem; .location-name { flex: 0 0 auto; text-align: center; @@ -144,7 +149,7 @@ } .warning { - flex: 0 0 content; + flex: 0; height: 2rem; font-size: 1.5rem; display: flex; @@ -178,6 +183,7 @@ } } &.active { + // scroll-snap-stop: always; border: 0.125rem solid red; } &.init { diff --git a/templates/items/chase.html b/templates/items/chase.html index 2a9f821b..2cd040fb 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -1,44 +1,63 @@

              + {{#unless started}}
              + {{/unless}}
              {{#if activeLocation}} + + {{#each dataListCheckOptions as |o|}} + + {{/each}} +
              -
              +
              {{#unless activeLocation.first}} - +
              {{ localize "CoC7.Obstacle"}}
              {{/unless}} {{#if activeLocation.obstacle}} -
              -
              barrier
              -
              hazard
              +
              +
              barrier
              +
              hazard
              +
              + + + +
              +
              {{ localize "CoC7.Damage"}}
              + {{#if activeLocation.obstacleDetails.hasDamage}} + + {{/if}} +
              +
              +
              {{ localize "CoC7.ActionCost"}}
              + {{#if activeLocation.obstacleDetails.hasActionCost}} + + {{/if}}
              - {{/if}}
              {{#unless activeLocation.last}} - +
              {{ localize "CoC7.Obstacle"}}
              {{/unless}} {{#if nextLocation.obstacle}} -
              -
              barrier
              -
              hazard
              +
              +
              barrier
              +
              hazard
              + {{/if}}
              @@ -80,7 +99,7 @@ {{#unless location.first}} {{#if location.obstacle}}
              -
              +
              {{#if location.obstacleDetails.barrier}} {{else}} @@ -132,6 +151,7 @@
              -->
              + {{#unless started}} @@ -149,6 +169,7 @@
              + {{/unless}} {{#if locations}} {{#if started}} From e4f706e20b00cbf729abc53dac2571f294202982 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 12 Oct 2021 18:36:02 +0000 Subject: [PATCH 207/726] Updated translations list --- .github/TRANSLATIONS.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 54007ae4..c5ccfd99 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,7 +4,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **368** | **144** | **161** | **32** | **32** | **32** | **9** | **2** | **26** | **38** | +| **Remaining**: | **369** | **145** | **162** | **33** | **33** | **33** | **10** | **3** | **27** | **39** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -66,6 +66,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | @@ -618,6 +619,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.DragSpell": "Drag spells here to insert them into the book...",` +##### CoC7.DriveAutoSkillName + +`"CoC7.DriveAutoSkillName": "Drive Auto",` + ##### CoC7.DriveSpecializationName `"CoC7.DriveSpecializationName": "Drive",` From 7d3c5e4ba4f0d603669420374b573bbc10a4c639 Mon Sep 17 00:00:00 2001 From: castanho Date: Wed, 13 Oct 2021 10:22:27 -0300 Subject: [PATCH 208/726] Add description and losses details on chat message for spell cast --- module/items/spell/data.js | 18 +++++++++++++++++- templates/items/spell/chat.html | 9 +++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 templates/items/spell/chat.html diff --git a/module/items/spell/data.js b/module/items/spell/data.js index 7107d747..f333d4e7 100644 --- a/module/items/spell/data.js +++ b/module/items/spell/data.js @@ -18,13 +18,24 @@ export class CoC7Spell extends CoC7Item { return ui.notifications.error(game.i18n.localize('CoC7.NotOwned')) } const costs = this.data.data.costs + const losses = [] for (const [key, value] of Object.entries(costs)) { if (!value || Number(value) === 0) continue - await this.resolveLosses(key, value) + losses.push(await this.resolveLosses(key, value)) } + const template = 'systems/CoC7/templates/items/spell/chat.html' + const description = this.data.data.description.value + const html = await renderTemplate(template, { description, losses }) + return await ChatMessage.create({ + user: game.user.id, + speaker: ChatMessage.getSpeaker({ actor: this.actor }), + flavor: this.name, + content: html + }) } async resolveLosses (characteristic, value) { + let characteristicName let loss if (CoC7Utilities.isFormula(value)) { loss = (await new Roll(value).roll({ async: true })).total @@ -34,22 +45,27 @@ export class CoC7Spell extends CoC7Item { const actorData = this.actor.data.data switch (characteristic) { case 'hitPoints': + characteristicName = game.i18n.localize('CoC7.HitPoints') this.actor.dealDamage(loss) break case 'sanity': + characteristicName = game.i18n.localize('CoC7.SanityPoints') this.grantSanityLoss(loss) break case 'magicPoints': + characteristicName = game.i18n.localize('CoC7.MagicPoints') this.actor.update({ 'data.attribs.mp.value': actorData.attribs.mp.value - loss }) break case 'power': + characteristicName = game.i18n.localize('CHARAC.Power') this.actor.update({ 'data.characteristics.pow.value': actorData.characteristics.pow.value - loss }) } + return { characteristicName, loss } } /** Bypass the Sanity check and just roll the damage */ diff --git a/templates/items/spell/chat.html b/templates/items/spell/chat.html new file mode 100644 index 00000000..a910546a --- /dev/null +++ b/templates/items/spell/chat.html @@ -0,0 +1,9 @@ + +
                + {{#each losses as |loss key|}} +
              • {{loss.characteristicName}}: -{{loss.loss}} {{localize "CoC7.Points"}}
              • + {{/each}} +
              +
              + {{{description}}} + From bf561f16d6ebdecfd28c38e9ad5c9661fe0cc07f Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 13 Oct 2021 20:07:14 +0100 Subject: [PATCH 209/726] Add text header to actor-importer-regexp.js to explain keys and translations Default importer to location Items / World / Modules / System --- module/apps/actor-importer-regexp.js | 171 ++++++++++++++++----------- templates/apps/actor-importer.html | 4 +- 2 files changed, 101 insertions(+), 74 deletions(-) diff --git a/module/apps/actor-importer-regexp.js b/module/apps/actor-importer-regexp.js index de01c93e..c3af8b4c 100644 --- a/module/apps/actor-importer-regexp.js +++ b/module/apps/actor-importer-regexp.js @@ -1,6 +1,58 @@ /* global game */ import { CoC7Utilities } from '../utilities.js' - +/** + * nameCharacters list of characters that can be part of a [] for character, skill, or weapon names used in bracket expression. + * + * "keys..description" lang key to show in the language selection dialog box. + * "keys..dbNone" Regular expression to indicate no Damage Bonus e.g. DB: "dbNone". + * "keys..armorNone" Regular expression to indicate no Armour Bonus e.g. Armor: "armorNone". + * "keys..attacksPerRoundNone" Regular expression to indicate no attacks e.g. Attacks Per Round: "attacksPerRoundNone". + * "keys..sanLossNone" Regular expression to indicate no sanity loss e.g. SAN loss: "sanLossNone". + * "keys..fulldb" Regular expression to indicate damage bonus in attributes and weapon damage e.g. DB: "fulldb" / Weapon 50% (25/10), damage 1D6 + "fulldb". + * "keys..halfdb" Regular expression to indicate half damage bonus in weapon damage e.g. Weapon 50% (25/10), damage 1D6 + "halfdb". + * "keys..sectionCombats" Regular expression to indicate the start of the combat / weapon section of text. + * "keys..newCombatHeader" If there is no combat / weapon section, add this section were it probably is, this needs to matched by "keys..sectionCombats". + * "keys..sectionSkills" Regular expression to indicate the start of the skills section of text. + * "keys..sectionLangauges" Regular expression to indicate the start of the languages section of text. + * "keys..sectionSpells" Regular expression to indicate the start of the spells section of text. + * "keys..handgun" Regular expression to match NPC combat section weapon name is a handgun type. + * "keys..rifle" Regular expression to match NPC combat section weapon name is a rifle type. + * "keys..smb" Regular expression to match NPC combat section weapon name is a submachine gun type. + * "keys..machineGun" Regular expression to match NPC combat section weapon name is a machine gun type. + * "keys..launched" Regular expression to match NPC combat section weapon name is a launched type. + * "keys..example" String that should show as a placeholder example. + * + * "translations..age" Regular expression to match NPC age, named capturing group . + * "translations..occupation" Regular expression to match NPC occupation, named capturing group . + * "translations..str" Regular expression to match NPC strength characteristic, named capturing group . + * "translations..con" Regular expression to match NPC constitution characteristic, named capturing group . + * "translations..siz" Regular expression to match NPC size characteristic, named capturing group . + * "translations..int" Regular expression to match NPC intelligence characteristic, named capturing group . + * "translations..pow" Regular expression to match NPC power characteristic, named capturing group . + * "translations..dex" Regular expression to match NPC dexterity characteristic, named capturing group . + * "translations..app" Regular expression to match NPC appearance characteristic, named capturing group . + * "translations..edu" Regular expression to match NPC education characteristic, named capturing group . + * "translations..san" Regular expression to match NPC sanity points attribute, named capturing group . + * "translations..hp" Regular expression to match NPC hit points attribute, named capturing group . + * "translations..mp" Regular expression to match NPC magic points attribute, named capturing group . + * "translations..db" Regular expression to match NPC damage bonus attribute, named capturing group if matching "keys..dbNone" then 0. + * "translations..build" Regular expression to match NPC build attribute, named capturing group . + * "translations..armor" Regular expression to match NPC damage bonus attribute, named capturing group if matching "keys..armorNone" then 0. + * "translations..mov" Regular expression to match NPC movement rate attribute, named capturing group . + * "translations..lck" Regular expression to match NPC luck attribute, named capturing group . + * "translations..attacksPerRound" Regular expression to match NPC attacks per round, named capturing group if matching "keys..attacksPerRoundNone" then 0. + * "translations..sanLoss" Regular expression to match NPC san loss min/max, named capturing group if matching "keys..sanLossNone" then none. + * "translations..weapon" Regular expression to match NPC combat section, named capturing group weapon , optional , and . Damage can contain "keys..fulldb" and "keys..halfdb". + * "translations..weaponDodge" Regular expression to match NPC combat section dodge skill, named capturing group and . + * "translations..skill" Regular expression to match NPC skill section skill name, named capturing group and . + * "translations..guessStartCombat" Regular expression if there is no combat section find these are likely to be the first weapon name, "keys..newCombatHeader" is then added before it to get the groups + * + * These should not be edited as they should work as is + * "translations..name" Regular expression to match NPC name, named capturing group . + * "translations..sections" Regular expression to split text into combat, skill, language, and spells section + * + * If there is new functionality check for in the translations "NEW KEY - TRANSLATION REQUIRED" + */ const nameCharacters = '\\u3000\\u3400-\\u4DBF\\u4E00-\\u9FFF\\w\\(\\)\\-\\/&"\'' + CoC7Utilities.quoteRegExp( @@ -9,31 +61,27 @@ const nameCharacters = const keys = { en: { - // Language Key for this language description: 'CoC7.English', - // Language dependant word for 0 damage bonus dbNone: 'none', - // Language dependant word for 0 armour armorNone: 'none', - // Language dependant word for 0 attacks per round attacksPerRoundNone: 'none', - // Language dependant word for 0 sanity loss sanLossNone: 'none', - // Language dependant damage bonus words fulldb: '(' + 'Damage Bonus|DB' + ')', - // Language dependant half damage bonus words halfdb: '(' + '½|half' + ')', - // Language dependant combat section starts with sectionCombats: '\n(?:' + 'combat|fighting attacks' + ')[:\n]', - // If we have to add a combat header what will trigger sectionCombats newCombatHeader: '\n' + 'Combat' + '\n', - // Language dependant skills section starts with sectionSkills: '\n(?:' + 'skills' + '(?:\\s*\\([^\\)]+\\))?)[:\n]', - // Language dependant languages section starts with sectionLangauges: '\n(?:' + 'languages' + ')[:\n]', - // Language dependant spells section starts with sectionSpells: '\n(?:' + 'spells' + ')[:\n]', - // Language dependant example character + handgun: + '(?' + + ' Gun|Revolver|Pistol|Handgun|Derringer|Beretta|Luger|Desert Eagle| \\.38' + + ')', + rifle: + '(?' + 'Rifle|Shotgun|Carbine|Gauge |Lee-Enfield|Elephant' + ')', + smb: '(?' + 'Submachine Gun|Thompson' + ')', + machineGun: '(?' + 'Browning|Vickers' + ')', + launched: '(?' + 'Molotov|Grenade|Dynamite' + ')', example: 'Example Character, age 27\nSTR 75 CON 60 SIZ 80 DEX 70 APP 60 INT 80\nPOW 50 EDU 85 SAN 55 HP 14 DB: 1D4\nBuild: 1 Move: 7 MP: 10 Luck: 40 Armor: 1\nAttacks per round: 3 SAN loss: 1d4/1d8\nCombat\nBite 50% (25/10), damage 1D6\nBrawl 30% (15/6), damage 1D3\nDerringer 40% (20/8), damage 1D8+1\nDodge 50% (25/10)\nSkills\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLanguages: English 80%, Eklo 5%.\nSpells: Summon NPC, Dispel NPC.' }, @@ -44,12 +92,21 @@ const keys = { attacksPerRoundNone: 'Acune', sanLossNone: 'Acune', fulldb: '(' + 'BD|Bonus aux dommages|Impact|Imp' + ')', + /* NEW KEY - TRANSLATION REQUIRED */ halfdb: '(' + '½|half' + ')', sectionCombats: '\n(?:' + 'Combat|Armes|Attaques' + ')[:\n]', newCombatHeader: '\n' + 'Combat' + '\n', sectionSkills: '\n(?:' + 'Compétences' + '(?:\\s*\\([^\\)]+\\))?)[:\n]', sectionLangauges: '\n(?:' + 'Langue' + ')[:\n]', sectionSpells: '\n(?:' + 'Sortilèges|Sorts' + ')[:\n]', + handgun: + '(?' + + 'Revolver|Pistolet|Derringer|Beretta|Luger|Desert Eagle| \\.38' + + ')', + rifle: '(?' + 'Carabine|Lee-Enfield|Fusil' + ')', + smb: '(?' + 'SMG|Thompson' + ')', + machineGun: '(?' + 'Browning|Vickers|Mitrailleuse' + ')', + launched: '(?' + 'Molotov|Grenade|Dynamite' + ')', example: 'Example Character, 27 ans\nFOR 75 CON 60 TAI 80 DEX 70 APP 60 INT 80\nPOU 50 ÉDU 85 SAN 55 PV 14 BD: 1D4\nCarrure: 1 Mvt: 7 PM: 10 Chance: 40 Armure: 1\nAttaques par round 3 Perte de SAN: 1d4/1d8\nAttaques\nBite 50% (25/10), dommage 1D6\nBrawl 30% (15/6), dommage 1D3\nDerringer 40% (20/8), dommage 1D8+1\nEsquiver 50% (25/10)\nCompétences\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLangue: English 80%, Eklo 5%.\nSortilèges: Summon NPC, Dispel NPC.' }, @@ -60,40 +117,54 @@ const keys = { attacksPerRoundNone: 'ninguno', sanLossNone: 'no', fulldb: '(' + 'BD|bd|bonificación de daño' + ')', + /* NEW KEY - TRANSLATION REQUIRED */ halfdb: '(' + '½|half' + ')', sectionCombats: '\n(?:' + 'Combate|Armas' + ')[:\n]', newCombatHeader: '\n' + 'Combate' + '\n', sectionSkills: '\n(?:' + 'Habilidades' + '(?:\\s*\\([^\\)]+\\))?)[:\n]', sectionLangauges: '\n(?:' + 'Idiomas|Lenguajes|Lenguas' + ')[:\n]', sectionSpells: '\n(?:' + 'Conjuros' + ')[:\n]', + handgun: + '(?' + + 'Revolver|Pistola|Derringer|Beretta|Luger|Desert Eagle| \\.38' + + ')', + rifle: + '(?' + + 'Rifle|Carabina|Lee-Enfield|Caza Elefantes|Fusil|Escopeta|Galga|Recortada' + + ')', + smb: '(?' + 'Subfusil|Thompson' + ')', + machineGun: '(?' + 'Browning|Vickers|Ametralladora' + ')', + launched: '(?' + 'Molotov|Granada|Dinamita' + ')', example: 'Example Character, 27 años\nFUE 75 CON 60 TAM 80 DES 70 APA 60 INT 80\nPOD 50 EDU 85 COR 55 PV 14 BD: 1D4\nCorpulencia: 1 Movimiento: 7 PM: 10 Suerte: 40 Armadura: 1\nNúmero de Ataques 3 Pérdida de cordura: 1d4/1d8\nCombate\nBite 50% (25/10), daño 1D6\nBrawl 30% (15/6), daño 1D3\nDerringer 40% (20/8), daño 1D8+1\nEsquivar 50% (25/10)\nHabilidades\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nIdiomas: English 80%, Eklo 5%.\nConjuros: Summon NPC, Dispel NPC.' }, 'zh-TW': { description: 'CoC7.TraditionalChinese', dbNone: 'none', - // Language dependant word for 0 armour armorNone: 'none', - // Language dependant word for 0 attacks per round attacksPerRoundNone: 'none', - // Language dependant word for 0 sanity loss sanLossNone: 'none', - // Language dependant damage bonus words fulldb: '(' + 'Damage Bonus|DB|傷害加值' + ')', + /* NEW KEY - TRANSLATION REQUIRED */ halfdb: '(' + '½|half' + ')', - // Language dependant combat section starts with sectionCombats: '\n(?:' + 'combat|fighting attacks|戰鬥技能|戰鬥列表|武器' + ')[:\n]', - // If we have to add a combat header what will trigger sectionCombats newCombatHeader: '\n' + 'Combat' + '\n', - // Language dependant skills section starts with sectionSkills: '\n(?:' + '(?:Skills|技能列表)' + '(?:\\s*\\([^\\)]+\\))?)[:\n]', - // Language dependant languages section starts with sectionLangauges: '\n(?:' + 'Languages|語言' + ')[:\n]', - // Language dependant spells section starts with sectionSpells: '\n(?:' + 'spells|咒文列表|咒文' + ')[:\n]', - // Language dependant example character + handgun: + '(?' + + ' 遂發槍|\\.22短口自動手槍|\\.25短口手槍(單管)|\\.32或7\\.65mm左輪手槍|\\.32或7\\.65mm自動手槍|\\.357 Magnum左輪手槍|\\.38或9mm左輪手槍|\\.38自動手槍|貝雷塔M9|格洛克17|9mm自動手槍|魯格P08|\\.41左輪手槍|\\.44馬格南左輪手槍|\\.45左輪手槍|\\.45自動手槍|沙漠之鷹|Gun|Revolver|Pistol|Handgun|Derringer|Beretta|Luger|Desert Eagle| \\.38' + + ')', + rifle: + '(?' + + '步槍|卡賓槍|半自動步槍|獵象槍|Rifle|Shotgun|Carbine|Gauge |Lee-Enfield|Elephant' + + ')', + smb: '(?' + 'Submachine Gun|Thompson|衝鋒槍' + ')', + machineGun: '(?' + 'Browning|Vickers|機槍' + ')', + launched: '(?' + 'Molotov|Grenade|Dynamite爆炸物|手榴彈|重武器' + ')', example: '示範角色, 年齡 27\n力量 75 體質 60 體型 80 敏捷 70 外貎 60 智力 80\n意志 50 教育 85 SAN 55 HP 14 DB: 1D4\n體格: 1 Move: 7 MP: 10 幸運: 40 護甲: 1\n攻擊次數: 3 理智喪失: 1d4/1d8\n戰鬥列表\n咬 50% (25/10), 傷害 1D6\n空手 30% (15/6), 傷害 1D3\n手槍 40% (20/8), 傷害 1D8+1\n閃避 50% (25/10)\n技能列表\n動物馴養 55%, 取悅 30%, 急救 25%, 潛行 20%,\n聆聽 50%, 藥學 45%, 精神分析 25%, 心理學 75%,\n科學 (司法科學) 90%, 科學 (密碼學) 35%, \n偵查 35%, 喬裝 10%\n語言: 粵語 80%, 讀唇 5%.\n咒文: 召喚 NPC, 指揮 NPC.' } @@ -101,7 +172,6 @@ const keys = { const translations = { en: { - // Language dependant RegExs age: '(?\\d+)[,\\s]*', occupation: '[,\\s]*' + 'Occupation' + ':?\\s+(?.+)[,\\s\n]*', str: '(?\\d+|-)[,\\s\n]*', @@ -156,25 +226,14 @@ const translations = { '(?' + 'Dodge' + '):?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', - handgun: - '(?' + - ' Gun|Revolver|Pistol|Handgun|Derringer|Beretta|Luger|Desert Eagle| \\.38' + - ')', - rifle: - '(?' + 'Rifle|Shotgun|Carbine|Gauge |Lee-Enfield|Elephant' + ')', - smb: '(?' + 'Submachine Gun|Thompson' + ')', - machineGun: '(?' + 'Browning|Vickers' + ')', - launched: '(?' + 'Molotov|Grenade|Dynamite' + ')', - // Language dependant a skill should not be "The player has" / "but they regenerate" required for "A Cold Fire Within" + // Skill should not be named "The player has" / "but they regenerate" required for "A Cold Fire Within" skill: '^(?[:\\*.\\s' + nameCharacters + ']+(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,]?\\s*', - // Language dependant likely first words for a combat section if there is no heading guessStartCombat: '(^|(?[\\.\\s' + nameCharacters + ']+)[,\\s\n]+', sections: '(' + @@ -189,6 +248,7 @@ const translations = { }, fr: { age: '(?\\d+)\\s*' + 'ans' + '(?![a-z])[,\\s]*', + /* NEW KEY - TRANSLATION REQUIRED */ occupation: '[,\\s]*' + 'Occupation' + ':?\\s+(?.+)[,\\s\n]*', str: '(?\\d+|-)[,\\s\n]*', con: '(?\\d+|-)[,\\s\n]*', @@ -246,14 +306,6 @@ const translations = { '(?' + 'Esquiver' + '):?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', - handgun: - '(?' + - 'Revolver|Pistolet|Derringer|Beretta|Luger|Desert Eagle| \\.38' + - ')', - rifle: '(?' + 'Carabine|Lee-Enfield|Fusil' + ')', - smb: '(?' + 'SMG|Thompson' + ')', - machineGun: '(?' + 'Browning|Vickers|Mitrailleuse' + ')', - launched: '(?' + 'Molotov|Grenade|Dynamite' + ')', skill: '^(?[:\\*.\\s' + nameCharacters + @@ -276,7 +328,7 @@ const translations = { }, es: { age: '(?\\d+)\\s*' + 'a[ñÑ]os' + '(?![a-z])[,\\s]*', - occupation: '[,\\s]*' + 'Occupation' + ':?\\s+(?.+)[,\\s\n]*', + occupation: '[,\\s]*' + 'Ocupación' + ':?\\s+(?.+)[,\\s\n]*', str: '(?\\d+|-)[,\\s\n]*', con: '(?\\d+|-)[,\\s\n]*', siz: '(?\\d+|-)[,\\s\n]*', @@ -333,17 +385,6 @@ const translations = { '(?' + 'Esquivar' + '):?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', - handgun: - '(?' + - 'Revolver|Pistola|Derringer|Beretta|Luger|Desert Eagle| \\.38' + - ')', - rifle: - '(?' + - 'Rifle|Carabina|Lee-Enfield|Caza Elefantes|Fusil|Escopeta|Galga|Recortada' + - ')', - smb: '(?' + 'Subfusil|Thompson' + ')', - machineGun: '(?' + 'Browning|Vickers|Ametralladora' + ')', - launched: '(?' + 'Molotov|Granada|Dinamita' + ')', skill: '^(?[:\\*.\\s' + nameCharacters + @@ -365,8 +406,8 @@ const translations = { ')' }, 'zh-TW': { - // Language dependant RegExs age: '(?\\d+)[,\\s]*', + /* NEW KEY - TRANSLATION REQUIRED */ occupation: '[,\\s]*' + 'Occupation' + ':?\\s+(?.+)[,\\s\n]*', str: '(?\\d+|-)[,\\s\n]*', con: '(?\\d+|-)[,\\s\n]*', @@ -419,27 +460,13 @@ const translations = { '(?' + 'Dodge|閃避|閃躲' + '):?\\s+\\(?(?\\d+)\\)?\\s*%?(?:\\s*\\(\\d+\\/\\d+\\))?', - handgun: - '(?' + - ' 遂發槍|\\.22短口自動手槍|\\.25短口手槍(單管)|\\.32或7\\.65mm左輪手槍|\\.32或7\\.65mm自動手槍|\\.357 Magnum左輪手槍|\\.38或9mm左輪手槍|\\.38自動手槍|貝雷塔M9|格洛克17|9mm自動手槍|魯格P08|\\.41左輪手槍|\\.44馬格南左輪手槍|\\.45左輪手槍|\\.45自動手槍|沙漠之鷹|Gun|Revolver|Pistol|Handgun|Derringer|Beretta|Luger|Desert Eagle| \\.38' + - ')', - rifle: - '(?' + - '步槍|卡賓槍|半自動步槍|獵象槍|Rifle|Shotgun|Carbine|Gauge |Lee-Enfield|Elephant' + - ')', - smb: '(?' + 'Submachine Gun|Thompson|衝鋒槍' + ')', - machineGun: '(?' + 'Browning|Vickers|機槍' + ')', - launched: '(?' + 'Molotov|Grenade|Dynamite爆炸物|手榴彈|重武器' + ')', - // Language dependant a skill should not be "The player has" / "but they regenerate" required for "A Cold Fire Within" skill: '^(?[:\\*.\\s' + nameCharacters + ']+(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,]?\\s*', - // Language dependant likely first words for a combat section if there is no heading guessStartCombat: '(^|(?[\\.\\s' + nameCharacters + ']+)[,\\s\n]+', sections: '(' + diff --git a/templates/apps/actor-importer.html b/templates/apps/actor-importer.html index 64ca2816..148d0217 100644 --- a/templates/apps/actor-importer.html +++ b/templates/apps/actor-importer.html @@ -28,8 +28,8 @@

              {{localize 'CoC7.ActorImporter'}}

              From 96357199828bed74244ec14235291c532d916ec9 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 13 Oct 2021 20:19:40 +0100 Subject: [PATCH 210/726] Update text in actor importer regexp comments --- module/apps/actor-importer-regexp.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/module/apps/actor-importer-regexp.js b/module/apps/actor-importer-regexp.js index c3af8b4c..fc2f01a6 100644 --- a/module/apps/actor-importer-regexp.js +++ b/module/apps/actor-importer-regexp.js @@ -51,7 +51,7 @@ import { CoC7Utilities } from '../utilities.js' * "translations..name" Regular expression to match NPC name, named capturing group . * "translations..sections" Regular expression to split text into combat, skill, language, and spells section * - * If there is new functionality check for in the translations "NEW KEY - TRANSLATION REQUIRED" + * If there is new functionality check for this string in the translations / keys for your language "NEW KEY BELOW - TRANSLATION REQUIRED" */ const nameCharacters = '\\u3000\\u3400-\\u4DBF\\u4E00-\\u9FFF\\w\\(\\)\\-\\/&"\'' + @@ -92,7 +92,7 @@ const keys = { attacksPerRoundNone: 'Acune', sanLossNone: 'Acune', fulldb: '(' + 'BD|Bonus aux dommages|Impact|Imp' + ')', - /* NEW KEY - TRANSLATION REQUIRED */ + /* NEW KEY BELOW - TRANSLATION REQUIRED */ halfdb: '(' + '½|half' + ')', sectionCombats: '\n(?:' + 'Combat|Armes|Attaques' + ')[:\n]', newCombatHeader: '\n' + 'Combat' + '\n', @@ -117,7 +117,7 @@ const keys = { attacksPerRoundNone: 'ninguno', sanLossNone: 'no', fulldb: '(' + 'BD|bd|bonificación de daño' + ')', - /* NEW KEY - TRANSLATION REQUIRED */ + /* NEW KEY BELOW - TRANSLATION REQUIRED */ halfdb: '(' + '½|half' + ')', sectionCombats: '\n(?:' + 'Combate|Armas' + ')[:\n]', newCombatHeader: '\n' + 'Combate' + '\n', @@ -145,7 +145,7 @@ const keys = { attacksPerRoundNone: 'none', sanLossNone: 'none', fulldb: '(' + 'Damage Bonus|DB|傷害加值' + ')', - /* NEW KEY - TRANSLATION REQUIRED */ + /* NEW KEY BELOW - TRANSLATION REQUIRED */ halfdb: '(' + '½|half' + ')', sectionCombats: '\n(?:' + 'combat|fighting attacks|戰鬥技能|戰鬥列表|武器' + ')[:\n]', @@ -248,7 +248,7 @@ const translations = { }, fr: { age: '(?\\d+)\\s*' + 'ans' + '(?![a-z])[,\\s]*', - /* NEW KEY - TRANSLATION REQUIRED */ + /* NEW KEY BELOW - TRANSLATION REQUIRED */ occupation: '[,\\s]*' + 'Occupation' + ':?\\s+(?.+)[,\\s\n]*', str: '(?\\d+|-)[,\\s\n]*', con: '(?\\d+|-)[,\\s\n]*', @@ -407,7 +407,7 @@ const translations = { }, 'zh-TW': { age: '(?\\d+)[,\\s]*', - /* NEW KEY - TRANSLATION REQUIRED */ + /* NEW KEY BELOW - TRANSLATION REQUIRED */ occupation: '[,\\s]*' + 'Occupation' + ':?\\s+(?.+)[,\\s\n]*', str: '(?\\d+|-)[,\\s\n]*', con: '(?\\d+|-)[,\\s\n]*', From b7625a90b0fae845f631884147c592c00fd1a5c4 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 13 Oct 2021 22:25:40 +0100 Subject: [PATCH 211/726] Update Spanish actor importer keys If the occupation includes a full stop only include up to that --- module/apps/actor-importer-regexp.js | 5 ++--- module/apps/actor-importer.js | 9 +++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/module/apps/actor-importer-regexp.js b/module/apps/actor-importer-regexp.js index fc2f01a6..241f44aa 100644 --- a/module/apps/actor-importer-regexp.js +++ b/module/apps/actor-importer-regexp.js @@ -117,13 +117,12 @@ const keys = { attacksPerRoundNone: 'ninguno', sanLossNone: 'no', fulldb: '(' + 'BD|bd|bonificación de daño' + ')', - /* NEW KEY BELOW - TRANSLATION REQUIRED */ - halfdb: '(' + '½|half' + ')', + halfdb: '(' + '½|medio daño|mitad|daño a la mitad' + ')', sectionCombats: '\n(?:' + 'Combate|Armas' + ')[:\n]', newCombatHeader: '\n' + 'Combate' + '\n', sectionSkills: '\n(?:' + 'Habilidades' + '(?:\\s*\\([^\\)]+\\))?)[:\n]', sectionLangauges: '\n(?:' + 'Idiomas|Lenguajes|Lenguas' + ')[:\n]', - sectionSpells: '\n(?:' + 'Conjuros' + ')[:\n]', + sectionSpells: '\n(?:' + 'Conjuros|Hechizos' + ')[:\n]', handgun: '(?' + 'Revolver|Pistola|Derringer|Beretta|Luger|Desert Eagle| \\.38' + diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index a2fa6844..88188660 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -435,11 +435,16 @@ export class CoC7ActorImporter { // Get occupation from header if (!this.check('occupation', { text: header }) && header.trim() !== '') { // If occupation is not found but there is a header set the occupation to the remaining header - this.parsed.occupation = header + let occupation = header + if (header.indexOf('.') > -1) { + // If there is a full stop just use the first part of the header as the occupation + occupation = header.substr(0, header.indexOf('.') + 1) + } + this.parsed.occupation = occupation .replace(/([\n\r]+)/g, ' ') .trim() .replace(/,$/, '') - this.text = this.text.replace(header.trim(), '\n') + this.text = this.text.replace(occupation.trim(), '\n') } } else { // There is no header set default NPC name From 181609431c438cc63ff13e76745165613688c80b Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 13 Oct 2021 22:16:30 +0000 Subject: [PATCH 212/726] Updated translations list --- .github/TRANSLATIONS.md | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index c5ccfd99..76ccc72e 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,7 +4,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **369** | **145** | **162** | **33** | **33** | **33** | **10** | **3** | **27** | **39** | +| **Remaining**: | **375** | **151** | **168** | **39** | **39** | **39** | **16** | **9** | **33** | **45** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -116,6 +116,12 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -557,7 +563,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry ##### CoC7.CreatedImportedCharactersFolder -`"CoC7.CreatedImportedCharactersFolder": "Created 'Imported Characters' folder'",` +`"CoC7.CreatedImportedCharactersFolder": "Created 'Imported Characters' folder",` ##### CoC7.Creature @@ -819,6 +825,30 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.Import": "Import",` +##### CoC7.ImportActorItemsItem + +`"CoC7.ImportActorItemsItem": "Items",` + +##### CoC7.ImportActorItemsItemWorldModuleSystem + +`"CoC7.ImportActorItemsItemWorldModuleSystem": "Items / World / Modules / System",` + +##### CoC7.ImportActorItemsNone + +`"CoC7.ImportActorItemsNone": "None",` + +##### CoC7.ImportActorItemsWorldModuleItemSystem + +`"CoC7.ImportActorItemsWorldModuleItemSystem": "World / Modules / Items / System",` + +##### CoC7.ImportSkillItemLocations + +`"CoC7.ImportSkillItemLocations": "Look for skills/spells/weapons in",` + +##### CoC7.ImportedCharactersFolder + +`"CoC7.ImportedCharactersFolder": "Imported characters",` + ##### CoC7.ImportedUnnamedCharacter `"CoC7.ImportedUnnamedCharacter": "Imported unnamed character",` From 74e285380b8d904b1fb760ba1f4d53fb024d6220 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Fri, 15 Oct 2021 00:14:34 +0100 Subject: [PATCH 213/726] fix v9 warning --- module/coc7.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/coc7.js b/module/coc7.js index 9725c768..88a28a36 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -229,7 +229,7 @@ Hooks.on('ready', async () => { configureTinyMCE() - game.CoC7.skillList = await game.packs.get('CoC7.skills')?.getContent() + game.CoC7.skillList = await game.packs.get('CoC7.skills')?.getDocuments() game.socket.on('system.CoC7', async data => { if (data.type === 'updateChar') CoC7Utilities.updateCharSheets() From 527792f79bed1116718a9f09507564d02f134ac1 Mon Sep 17 00:00:00 2001 From: castanho Date: Fri, 15 Oct 2021 01:14:58 -0300 Subject: [PATCH 214/726] Attempt to migrate spell data --- module/updater.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/module/updater.js b/module/updater.js index 86067643..1c897f33 100644 --- a/module/updater.js +++ b/module/updater.js @@ -238,6 +238,7 @@ export class Updater { Updater._migrateItemArtwork(item, updateData) Updater._migrateItemBookAutomated(item, updateData) Updater._migrateItemKeeperNotes(item, updateData) + Updater._migrateItemSpellAutomated(item, updateData) return updateData } @@ -362,6 +363,21 @@ export class Updater { return updateData } + static _migrateItemSpellAutomated (item, updateData) { + if (item.type === 'spell') { + updateData['data.castingTime'] = item.data.castingTime || '' + updateData['data.costs.hitPoints'] = item.data.cost.hp || 0 + updateData['data.costs.magicPoints'] = item.data.cost.mp || 0 + updateData['data.costs.sanity'] = item.data.cost.san || 0 + updateData['data.costs.power'] = item.data.cost.pow || 0 + updateData['data.costs.others'] = '' + + updateData['data.-=cost'] = null + updateData['data.description.-=unidentified'] = null + updateData['data.description.-=notes'] = null + } + } + /** * Book automation was increased in 0.6.5 * From c063876520ee0cee750e1100c97ad808638f2bbb Mon Sep 17 00:00:00 2001 From: HavlockV Date: Fri, 15 Oct 2021 11:46:50 +0300 Subject: [PATCH 215/726] EEC lib init --- lib/chatcardlib/LICENSE.md | 21 ++++++++++++++ lib/chatcardlib/src/chatcardlib.js | 44 ++++++++++++++++++++++++++++++ system.json | 3 +- 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 lib/chatcardlib/LICENSE.md create mode 100644 lib/chatcardlib/src/chatcardlib.js diff --git a/lib/chatcardlib/LICENSE.md b/lib/chatcardlib/LICENSE.md new file mode 100644 index 00000000..e99048b2 --- /dev/null +++ b/lib/chatcardlib/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Bruno BIDET + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/lib/chatcardlib/src/chatcardlib.js b/lib/chatcardlib/src/chatcardlib.js new file mode 100644 index 00000000..90fee609 --- /dev/null +++ b/lib/chatcardlib/src/chatcardlib.js @@ -0,0 +1,44 @@ +Hooks.once('socketlib.ready', initECCSocket) + +Hooks.on('renderChatMessage' , (app, html, data) => renderMessageHook) + +function initECCSocket(){ + game.enhancedChatCardsSocket = socketlib.registerSystem(game.system.id) //Socket is attached to current system + + return +} + +async function renderMessageHook( app, html, data){ + //check for special tags (gm-only) + const gmOnly = html.find('.ecc .gm-only') + for (const zone of gmOnly) { + if (!game.user.isGM) { + zone.style.display = 'none' + } + } + return +} + + +export class EnhancedChatCard { + static get defaultOptions () { + return { + classes: ['enhanced-chat-card'], + exclude: ['_actor', '_skill', '_item', '_message', '_htmlRoll'], + excludeStartWith: '_' + } + } + + get data () { + return JSON.parse(this.dataString) + } + + get dataString () { + return JSON.stringify(this, (key, value) => { + if (value === null) return undefined + if (this.options.exclude?.includes(key)) return undefined + if (key.startsWith(this.options.excludeStartWith)) return undefined + return value + }) + } +} \ No newline at end of file diff --git a/system.json b/system.json index 8e4bcfc6..71966a6c 100644 --- a/system.json +++ b/system.json @@ -9,7 +9,8 @@ "esmodules": [ "lib/socketlib/src/libwrapper_shim.js", "lib/socketlib/src/socketlib.js", - "bundle.js" + "bundle.js", + "lib/chatcardlib/src/chatcardlib.js" ], "templateVersion": 1, "styles": ["lib/game-icons/game-icons.css", "coc7g.css"], From d5a7a3a25a79ebea0f225b47f1a95c7064d09ad4 Mon Sep 17 00:00:00 2001 From: HavlockV Date: Fri, 15 Oct 2021 16:35:19 +0300 Subject: [PATCH 216/726] test card created, bind done --- lib/chatcardlib/LICENSE.md | 2 +- lib/chatcardlib/src/chatcardlib.js | 344 +++++++++++++++++++++-- module/actors/sheets/base.js | 41 +-- module/chat/cards/damage.js | 6 +- module/chat/cards/test.js | 13 + module/chat/interactive-chat-card.js | 1 + module/coc7.js | 10 +- templates/actors/character-sheet-v2.html | 2 +- templates/chat/cards/test.html | 3 + 9 files changed, 367 insertions(+), 55 deletions(-) create mode 100644 module/chat/cards/test.js create mode 100644 templates/chat/cards/test.html diff --git a/lib/chatcardlib/LICENSE.md b/lib/chatcardlib/LICENSE.md index e99048b2..35ac75c1 100644 --- a/lib/chatcardlib/LICENSE.md +++ b/lib/chatcardlib/LICENSE.md @@ -1,4 +1,4 @@ -MIT License +*MIT License Copyright (c) 2021 Bruno BIDET diff --git a/lib/chatcardlib/src/chatcardlib.js b/lib/chatcardlib/src/chatcardlib.js index 90fee609..099d4fad 100644 --- a/lib/chatcardlib/src/chatcardlib.js +++ b/lib/chatcardlib/src/chatcardlib.js @@ -1,44 +1,328 @@ +const ECC_CLASS = 'enhanced-chat-card' + Hooks.once('socketlib.ready', initECCSocket) -Hooks.on('renderChatMessage' , (app, html, data) => renderMessageHook) +Hooks.on('renderChatMessage' , (app, html, data) => EnhancedChatCard.bindListeners(html)) function initECCSocket(){ - game.enhancedChatCardsSocket = socketlib.registerSystem(game.system.id) //Socket is attached to current system - - return + EnhancedChatCardLib.socket = socketlib.registerSystem(game.system.id) //Socket is attached to current system + Hooks.callAll("eec.ready"); } -async function renderMessageHook( app, html, data){ - //check for special tags (gm-only) - const gmOnly = html.find('.ecc .gm-only') - for (const zone of gmOnly) { - if (!game.user.isGM) { - zone.style.display = 'none' - } +class EnhancedChatCardLib { + constructor(){ + this.types = new Map() + this.socket = null + } + + static set socket(x){ + if(!game.enhancedChatCardsLib) game.enhancedChatCardsLib = new EnhancedChatCardLib() + game.enhancedChatCardsLib.socket = x + } + + static get types(){ + if(!game.enhancedChatCardsLib) game.enhancedChatCardsLib = new EnhancedChatCardLib() + return game.enhancedChatCardsLib.types + } + + register (cardConstructor){ + if ( !this.types.get( cardConstructor.name)){ + this.types.set( cardConstructor.name, cardConstructor) } - return -} + } + // registerCard( cardClass){ + // const cardClassName = cardClass.name + // if( !this.types.get( cardClassName)){ + // this.types.set( cardClassName, cardClass) + // } + // } +} export class EnhancedChatCard { - static get defaultOptions () { - return { - classes: ['enhanced-chat-card'], - exclude: ['_actor', '_skill', '_item', '_message', '_htmlRoll'], - excludeStartWith: '_' - } - } + static register( cardConstructor){ + EnhancedChatCardLib.register( cardConstructor) + } + + constructor (options = {}) { + this._options = options + } + + get options () { + return mergeObject(this.constructor.defaultOptions, this._options) + } + + get template () { + return this.options.template + } + + get cssClasses () { + return this.options.classes + } + + async toMessage (optionnalChatData = {}) { + //Map eec card type if not registered already + // this.registerEECClass() + + //Publish by current user by default unless options.GMchatCard + const html = await renderTemplate(this.template, this) + const htmlCardElement = $(html)[0] + if(this.options.attachObject) htmlCardElement.dataset.object = escape(this.objectDataString) + htmlCardElement.dataset.eccClass = this.constructor.name + htmlCardElement.classList.add(...this.cssClasses) + + const chatData = foundry.utils.mergeObject( + { + user: game.user.id, + flavor: game.i18n.localize(this.options.title), + content: htmlCardElement.outerHTML + }, + optionnalChatData + ) + + if ( ["gmroll", "blindroll"].includes(this.rollMode) ) chatData.whisper = ChatMessage.getWhisperRecipients("GM"); + if ( this.rollMode === "selfroll" ) chatData.whisper = [game.user.id]; + if ( this.rollMode === "blindroll" ) chatData.blind = true; + + ChatMessage.create(chatData).then(msg => { + return msg + }) + } + + async updateChatCard (options = {}) { + if (options.compute) this.compute() + if (!this.messageId) { + this.toMessage() + } else { + const html = await renderTemplate(this.template, this) + const htmlCardElement = $.parseHTML(html)[0] + + // Attach the sanCheckCard object to the message. + htmlCardElement.dataset.object = escape(this.objectDataString) + htmlCardElement.dataset.cardClass = this.constructor.name + htmlCardElement.classList.add(...this.cssClasses) + + // Update the message. + const chatMessage = game.messages.get(this.messageId) + + const msg = await chatMessage.update({ + content: htmlCardElement.outerHTML + }) + await ui.chat.updateMessage(msg, false) + return msg + } + } + + activateListeners (html) { + html.on( + 'click', + `.${ECC_CLASS} .ic-radio-switch`, + this._onToggle.bind(this) + ) + html.on('click', `.${ECC_CLASS} .ic-switch`, this._onToggle.bind(this)) + html.on('click', `.${ECC_CLASS} .submit`, this._onSubmit.bind(this)) + html.on('focusout', 'input', this._onSubmit.bind(this)) + html.on('click', `.${ECC_CLASS} button`, this._onButton.bind(this)) + html.on('keydown', 'form', this._onKey.bind(this)) + } + + static async bindListeners (html) { + const htmlMessageElement = html[0] + const htmlCardElement = htmlMessageElement.querySelector(`.${ECC_CLASS}`) + if (!htmlCardElement) return + if (!htmlCardElement.dataset.eccClass) return + const cardClass = EnhancedChatCardLib.types.get( htmlCardElement.dataset.eccClass) + if ( !cardClass) { + console.error(`Unknown chat card type: ${htmlCardElement.dataset.eccClass}`) + return + } - get data () { - return JSON.parse(this.dataString) + const card = await EnhancedChatCard.fromHTMLCardElement(htmlCardElement) + const typedCard = Object.assign( + new cardClass(), + card + ) + typedCard.assignObject() + typedCard.activateListeners(html) + } + + + /** + * Override to reassign object type + * @returns + */ + assignObject () {} + + /** + * + * @param {*} event will check for an action (data-action) + * if a method with that name exist it will be triggered. + */ + _onButton (event) { + const button = event.currentTarget + // button.style.display = 'none' //Avoid multiple push + const action = button.dataset.action + if (this[action]) this[action]({ event: event, update: true }) + } + + /** + * + * @param {*} event + * @returns false if key is enter to avoid global submission + */ + _onKey (event) { + if (event.key === 'Enter') this._onSubmit(event) + return event.key !== 'Enter' + } + + _onSubmit (event) { + event.preventDefault() + + const target = event.currentTarget + const card = target.closest('.interactive-card') + if (!card) return + const updates = this._update(card) + if (updates) this.updateChatCard() + } + + _update (card) { + const forms = card.querySelectorAll('form') + let updates = false + for (let i = 0; i < forms.length; i++) { + const form = forms[i] + const fd = new FormDataExtended(form) + let data = fd.toObject() + data = diffObject(this, expandObject(data)) + for (const [key, value] of Object.entries(data)) { + this[key] = value + updates = true } - - get dataString () { - return JSON.stringify(this, (key, value) => { - if (value === null) return undefined - if (this.options.exclude?.includes(key)) return undefined - if (key.startsWith(this.options.excludeStartWith)) return undefined - return value - }) + } + return updates + } + + get message () { + if (this._message) return this._message + if (this._messageId) return game.message.get(this._messageId) + return undefined + } + + set message (x) { + this._message = x + } + + get messageId () { + if (this._messageId) return this._messageId + if (this._message) return this._message.id + return undefined + } + + set messageId (x) { + this._messageId = x + } + + static get defaultOptions () { + return { + attachObject: true, + classes: [ECC_CLASS], + exclude: [], + excludeStartWith: '_' + } + } + + get objectData () { + return JSON.parse(this.objectDataString) + } + + get objectDataString () { + return JSON.stringify(this, (key, value) => { + if (value === null) return undefined + if (this.options.exclude?.includes(key)) return undefined + if (key.startsWith(this.options.excludeStartWith)) return undefined + return value + }) + } + + get rollMode () { + if (!this._rollMode) this._rollMode = game.settings.get('core', 'rollMode') + return this._rollMode + } + + set rollMode (x) { + if (x === false) this._rollMode = game.settings.get('core', 'rollMode') + this._rollMode = x + } + + static async fromMessageId (messageId) { + const message = game.messages.get(messageId) + if (!message) return undefined + const card = await this.fromMessage(message) + card.messageId = messageId + return card + } + + static async fromMessage (message) { + const cardElement = $(message.data.content)[0] + if (!cardElement) return undefined + const card = await this.fromHTMLCardElement(cardElement) + card.message = message + return card + } + + static async fromHTMLCardElement (card) { + const cardData = JSON.parse(unescape(card.dataset.object)) + if (!cardData.messageId) { + const message = card.closest('.message') + cardData.messageId = message?.dataset?.messageId + } + return await this.fromData(cardData) + } + + static async fromData (data) { + const card = Object.assign(new this(), data) + await card.assignObject() + return card + } + setFlag (flagName) { + if (!flagName && !($.type(flagName) === 'string')) return + this[flagName] = true + } + + unsetFlag (flagName) { + if (!flagName && !($.type(flagName) === 'string')) return + this[flagName] = false + } + + toggleFlag (flagName) { + this[flagName] = !this[flagName] + } + + async _onToggle (event) { + event.preventDefault() + + const target = event.currentTarget + if ('action' in target.dataset) return this._onButton(event) + if ( + target && + target.classList.contains('gm-select-only') && + !game.user.isGM + ) { + return + } + const flag = target.dataset.flag + if (!flag) return + const toggle = target.closest('.ic-radio') + if (!toggle) { + this.toggleFlag(flag) + } else { + const buttons = toggle.querySelectorAll('.ic-radio-switch') + for (const b of buttons) { + this.unsetFlag(b.dataset.flag) } + this.setFlag(flag) + } + const card = target.closest('.interactive-card') + if (card) this._update(card) + this.updateChatCard() + } } \ No newline at end of file diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 345b05eb..3aee4a99 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -15,6 +15,7 @@ import { OpposedCheckCard } from '../../chat/cards/opposed-roll.js' import { CombinedCheckCard } from '../../chat/cards/combined-roll.js' import { DamageCard } from '../../chat/cards/damage.js' import { CoC7LinkCreationDialog } from '../../apps/link-creation-dialog.js' +import { testCard } from '../../chat/cards/test.js' /** * Extend the basic ActorSheet with some very simple modifications @@ -881,25 +882,27 @@ export class CoC7ActorSheet extends ActorSheet { .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) html.find('.test-trigger').click(async event => { - await OpposedCheckCard.dispatch({ - type: OpposedCheckCard.defaultConfig.type, - combat: false, - action: 'new', - roll: { - characteristic: 'str', - actor: this.actor.actorKey - } - }) - - await OpposedCheckCard.dispatch({ - type: OpposedCheckCard.defaultConfig.type, - combat: false, - action: 'new', - roll: { - characteristic: 'con' + const test = new testCard() + test.toMessage() + // await OpposedCheckCard.dispatch({ + // type: OpposedCheckCard.defaultConfig.type, + // combat: false, + // action: 'new', + // roll: { + // characteristic: 'str', + // actor: this.actor.actorKey + // } + // }) + + // await OpposedCheckCard.dispatch({ + // type: OpposedCheckCard.defaultConfig.type, + // combat: false, + // action: 'new', + // roll: { + // characteristic: 'con' // actor: this.actor.actorKey - } - }) + // } + // }) // const val = getProperty( this.actor, 'data.data.attribs.san.value'); // this.actor.enterBoutOfMadness( true, 10); @@ -919,7 +922,7 @@ export class CoC7ActorSheet extends ActorSheet { // await setProperty( this.actor, 'data.data.encounteredCreatures', []); // await this.actor.update( {['data.encounteredCreatures'] : []}); - if (event.shiftKey) ui.notifications.info('Shift cliecked') + // if (event.shiftKey) ui.notifications.info('Shift cliecked') // SanCheckCard.create( this.actor.actorKey, {min:'1D10',max:'1D12'}, {fastForward:event.shiftKey}); }) html diff --git a/module/chat/cards/damage.js b/module/chat/cards/damage.js index 9f20627b..30ceb058 100644 --- a/module/chat/cards/damage.js +++ b/module/chat/cards/damage.js @@ -21,9 +21,9 @@ export class DamageCard extends InteractiveChatCard { }) } - activateListeners (html) { - super.activateListeners(html) - } + // activateListeners (html) { + // super.activateListeners(html) + // } async assignObject () { if (this.damageRoll && this.damageRoll.constructor.name === 'Object') { diff --git a/module/chat/cards/test.js b/module/chat/cards/test.js new file mode 100644 index 00000000..0085cca0 --- /dev/null +++ b/module/chat/cards/test.js @@ -0,0 +1,13 @@ +import { EnhancedChatCard } from "../../../lib/chatcardlib/src/chatcardlib.js"; + +export class testCard extends EnhancedChatCard{ + /** + * Extend and override the default options + * @returns {Object} + */ + static get defaultOptions () { + return mergeObject(super.defaultOptions, { + template: 'systems/CoC7/templates/chat/cards/test.html' + }) + } +} \ No newline at end of file diff --git a/module/chat/interactive-chat-card.js b/module/chat/interactive-chat-card.js index 78475926..abc32fe1 100644 --- a/module/chat/interactive-chat-card.js +++ b/module/chat/interactive-chat-card.js @@ -87,6 +87,7 @@ export class InteractiveChatCard { const htmlMessageElement = html[0] const htmlCardElement = htmlMessageElement.querySelector('.chat-card') if (!htmlCardElement) return + if (!htmlCardElement.dataset.cardClass) return if ( !Object.getOwnPropertyNames(game.CoC7.cards).includes( htmlCardElement.dataset.cardClass diff --git a/module/coc7.js b/module/coc7.js index 88a28a36..3d58a299 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -20,8 +20,9 @@ import { CoC7Hooks } from './hooks/index.js' import * as DiceBot from './dicebot.js' import '../styles/system/index.less' import { CoC7ChaseSheet } from './items/sheets/chase.js' -import { CoC7Socket } from './hooks/socket.js' +import { CoC7Socket, CoC7ChatCards } from './hooks/socket.js' import { DropActorSheetData } from './hooks/drop-actor-sheet-data.js' +import { testCard } from './chat/cards/test.js' Hooks.on('renderSettingsConfig', (app, html, options) => { const systemTab = $(app.form).find('.tab[data-tab=system]') @@ -139,6 +140,12 @@ Hooks.once('init', async function () { } } Combat.prototype.rollInitiative = rollInitiative + + // EnhancedChatCard.register( testCard) +}) + +Hooks.once('eec.ready', () => { + game.enhancedChatCardsLib.register( testCard) }) Hooks.on('renderCombatTracker', (app, html, data) => @@ -151,6 +158,7 @@ CoC7Hooks.listen() Hooks.once('socketlib.ready', CoC7Socket) Hooks.once('setup', function () { + // Localize CONFIG objects once up-front const toLocalize = [ 'spellProperties', diff --git a/templates/actors/character-sheet-v2.html b/templates/actors/character-sheet-v2.html index b0628654..014577bf 100644 --- a/templates/actors/character-sheet-v2.html +++ b/templates/actors/character-sheet-v2.html @@ -163,7 +163,7 @@
              - {{!----}} + {{#if showDevPannel}} {{> "systems/CoC7/templates/actors/parts/development-controls.html"}} {{else}} diff --git a/templates/chat/cards/test.html b/templates/chat/cards/test.html new file mode 100644 index 00000000..872147bf --- /dev/null +++ b/templates/chat/cards/test.html @@ -0,0 +1,3 @@ +
              + Pouet pouet +
              \ No newline at end of file From b8a95a6335fc81524d5e2be886028628021293d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanis=C5=82aw=20Miotk?= Date: Fri, 15 Oct 2021 17:22:34 +0200 Subject: [PATCH 217/726] improving translations and adding new ones --- lang/pl.json | 60 ++++++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/lang/pl.json b/lang/pl.json index 1a8f06dc..5ce685ca 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -1,5 +1,5 @@ { - "CoC7.title": "Call of Cthulhu 7h Edycja (Unofficial)", + "CoC7.title": "Call of Cthulhu 7-ma Edycja (Nieoficjalna)", "CoC7.Entities.Character": "Postać", "CoC7.Entities.Container": "Pojemnik", @@ -139,7 +139,7 @@ "CoC7.CriticalSuccess": "Krytyczny Sukces", "CoC7.Fumble": "Krytyczna Porażka", "CoC7.Failure": "Porażka", - "CoC7.Malfunction": "{itemName} Przsestał Działać", + "CoC7.Malfunction": "{itemName} przestał działać", "CoC7.Dice": "Kość", "CoC7.DiceModifierBonus": "bonus", @@ -155,8 +155,8 @@ "CoC7.PushSkill": "Forsuj", "CoC7.PushingSkill": ": forsuje!", "CoC7.PushedRoll": "(forsowanie rzutu)", - "CoC7.SpendLuck": "Wydaj {luckNeededValue} Szczęście do zaliczenia", - "CoC7.LuckSpent": "{luckAmount} szczęście wydane do zaliczenia", + "CoC7.SpendLuck": "Wydaj {luckNeededValue} szczęścia do zaliczenia", + "CoC7.LuckSpent": "Wydano {luckAmount} szczęścia", "CoC7.LuckSpentAlt": "Szczęście wydane", "CoC7.LuckError": "{actorName} nie ma wystarczająco szczęcia aby zdać test", "CoC7.check.AutoSuccess": "Auto. sukces", @@ -164,7 +164,7 @@ "CoC7.RevealCheck": "Pokaż wynik", "CoC7.RevealSanLoss": "Pokaż utratę PP", "CoC7.check.ForcePass": "Forsuj zdanie", - "CoC7.check.ForceFail": "Forsoawnie nieudane", + "CoC7.check.ForceFail": "Forsowanie nieudane", "CoC7.check.FlagForDevelopment": "Nagroda za doświadczenie", "CoC7.IncreaseSuccessLevel": "Zwiększ sukces", "CoC7.check.DecreaseSuccessLevel": "Zmniejsz sukces", @@ -192,7 +192,7 @@ "CoC7.RollDifficultyHard": "Trudny", "CoC7.RollDifficultyExtreme": "Ekstremalny", "CoC7.RollDifficultyCritical": "Krytyczny", - "CoC7.RollResult.LuckSpendText": "{luckAmount} Szczęscie wydane, {successLevel} sukces", + "CoC7.RollResult.LuckSpendText": "Wydano {luckAmount} szczęścia, {successLevel} sukces", "CoC7.RollDice": "Rzut !", "CoC7.CreateLink": "Stwórz odnośnik", "CoC7.SuccesLevelHint": "{value} poziom sukcesu", @@ -207,7 +207,7 @@ "CoC7.ItemCheckResult": "{item} - {skill} Sprawdz({value}%) - {difficulty} trudnosć", "CoC7.CheckRawValue": "({rawvalue}%) - {difficulty} trudnosć", - "CoC7.ArmorAbsorbsDamage": "Pancerz pochłania całę obrażenia", + "CoC7.ArmorAbsorbsDamage": "Pancerz pochłania wszystkie obrażenia", "CoC7.Critical": "Krytyczne", "CoC7.Impale": "Przebijające", "CoC7.CriticalTitle": "Obrażenia są krytyczne", @@ -256,7 +256,7 @@ "CoC7.rangeCombatCard.BaseRange": "Zasięg podstawowy", "CoC7.rangeCombatCard.LongRange": "Daleki zasięg", "CoC7.rangeCombatCard.ExtremeRange": "Ekstremalny zasięg", - "CoC7.rangeCombatCard.OutOfRange": "Po za zasięgiem", + "CoC7.rangeCombatCard.OutOfRange": "Poza zasięgiem", "CoC7.rangeCombatCard.Cover": "Za osłoną", "CoC7.rangeCombatCard.PointBlankRange": "Strzał z przyłożenia", "CoC7.rangeCombatCard.NormalTarget": "Normalny Cel", @@ -265,7 +265,7 @@ "CoC7.rangeCombatCard.FastMovingTarget": "Szybki cel", "CoC7.rangeCombatCard.InMelee": "Walka w wręcz", "CoC7.rangeCombatCard.aiming": "Celowanie", - "CoC7.rangeCombatDamage": "{name} Otrzymuje {total} punkty obrażenia", + "CoC7.rangeCombatDamage": "{name} Otrzymuje {total} punktów obrażenia", "CoC7.rangeCombatDamageArmor": "{name} dostał {total} obrażeń. ({armor} odparto)", "CoC7.RollDamage": "Rzuć na Obrażenia", "CoC7.BulletsFired": "Wystrzelono kule", @@ -300,7 +300,7 @@ "CoC7.SkillTotalExperience": "Punkty doświadczenia", "CoC7.SkillTotalArchetype": "Punkty archetypów", - "CoC7.SkillTotalOccupation": "Punkty Zawód", + "CoC7.SkillTotalOccupation": "Punkty zawodu", "CoC7.SkillTotalPersonal": "Punkty postaci", "CoC7.CharacteristicsPoints": "Punkty cech", "CoC7.TotalPoints": "Całkowite Punkty", @@ -314,7 +314,7 @@ "CoC7.WeaponDamage": "Obrażenia", "CoC7.Weapon.BlastRadius": "Promień wybuchu", "CoC7.WeaponMalfunction": "Awaria", - "CoC7.WeaponUsesPerRound": "Round(s)/use", + "CoC7.WeaponUsesPerRound": "Użycia na runde", "CoC7.WeaponUsesPerRoundHint": "Ataki na rundę (1/3 : 1 atak na 3 rundy)", "CoC7.WeaponSheet.RoundsPerUse.Info": "Ile rund potrzeba, aby broń była gotowa do strzału", "CoC7.WeaponMax": "Maksymalna liczba użyć / runda", @@ -326,10 +326,10 @@ "CoC7.Armor": "Pancerz", "CoC7.EraNvct": "Invictus", - "CoC7.EraDrka": "Dark Ages", + "CoC7.EraDrka": "Mroczne czasy", "CoC7.EraDdts": "Down Darker Trails", "CoC7.EraGlit": "Cthulhu by Gaslight", - "CoC7.Era1920": "1920s", + "CoC7.Era1920": "1920", "CoC7.EraPulp": "Pulp Cthulhu", "CoC7.EraMdrn": "Współczesny", "CoC7.Eras": "Cthulhu Flavors", @@ -340,8 +340,8 @@ "CoC7.SkillRarity": "Rzadki", "CoC7.SkillPush": "Forsowanie", "CoC7.SkillCombat": "Walka", - "CoC7.SkillFighting": "Walka Wrecz", - "CoC7.SkillFirearm": "Bron Palna", + "CoC7.SkillFighting": "Walka Wręcz", + "CoC7.SkillFirearm": "Broń Palna", "CoC7.WeaponRngd": "Zasięg", "CoC7.WeaponProperyManeuver": "Manewr", @@ -376,8 +376,8 @@ "CoC7.DodgeSkillName": "Uniki", "CoC7.CthulhuMythosName": "Mity Cthulhu", "CoC7.CreditRatingSkillName": "Majętność", - "CoC7.FightingSpecializationName": "Walka Wrecz", - "CoC7.FirearmSpecializationName": "Bron Palna", + "CoC7.FightingSpecializationName": "Walka Wręcz", + "CoC7.FirearmSpecializationName": "Broń Palna", "CoC7.DriveSpecializationName": "Prowadzenie", "CoC7.PilotSpecializationName": "Pilotowanie", "CoC7.AnySpecName": "Każdy", @@ -388,30 +388,30 @@ "CoC7.AddSkill": "Dodaj umiejętność", "CoC7.DevelopemmentPhase": "Faza rozwoju", "CoC7.RecoverLuckPoints": "Odzyskaj Punkty Szczęścia", - "CoC7.SkillCantGainXp": "Umiejętności nie może automatycznie zdobyć doświadczenia", - "CoC7.SkillUnflagForDevelopement": "Odnzacz do rozwoju", + "CoC7.SkillCantGainXp": "Umiejętność nie może automatycznie zdobyć doświadczenia", + "CoC7.SkillUnflagForDevelopement": "Odznacz do rozwoju", "CoC7.SkillFlagForDevelopement": "Oznacz do rozwoju", "CoC7.RollAll4Dev": "Rzucanie wszystkich umiejętności na rozwój", "CoC7.RollLuck4Dev": "Rzut rozwoju szczęścia", - "CoC7.DevRollTitle": "Rzut {item} na rzozwój: {die}/{score}%", - "CoC7.DevSuccessDetails": "{item} upgraded by {augment}%", + "CoC7.DevRollTitle": "Rzut {item} na rozwój: {die}/{score}%", + "CoC7.DevSuccessDetails": "{item} został ulepszony o {augment}%", "CoC7.SanGained": "Odzyskałeś 2d6 ({results} = {sanGained}) Poczytalności po zwiększeniu {skill} do {skillValue}%", - "CoC7.DevFailureDetails": "{item} NOT upgraded", - "CoC7.DevSuccess": "{item} upgraded ({die}/{score}%) by {augment}%", - "CoC7.DevFailure": "{item} NOT upgraded ({die}/{score}%)", + "CoC7.DevFailureDetails": "NIE ulepszono {item}", + "CoC7.DevSuccess": "{item} ulepszony ({die}/{score}%) o {augment}%", + "CoC7.DevFailure": "{item} NIE ulepszony ({die}/{score}%)", "CoC7.LuckIncreased": "Zwiększono Szczęście ({die}/{score}) o {augment} punktów", "CoC7.LuckNotIncreased": "Nie udało się odzyskać szczęścia ({die}/{score})", - "CoC7.DevelopAttribWarn": "Możesz teraz zmieniać niektóry umiejętności w trybie rozwoju/kreacji.", + "CoC7.DevelopAttribWarn": "Nie możesz teraz zmieniać niektórych umiejętności w trybie rozwoju/kreacji.", "CoC7.SkillDetail": "Szczegóły", "CoC7.EditSkill": "Edytuj Umiejętność", - "CoC7.DeleteSkill": "Kasuj Umiejetność", + "CoC7.DeleteSkill": "Kasuj Umiejętność", "CoC7.RangeSkills": "Umiejętność zasięgowa", "CoC7.MeleeSkills": "Umiejętności walki wręcz", "CoC7.NewItemName": "Nowy przedmiot", "CoC7.AddItem": "Dodaj przedmiot", "CoC7.EditItem": "Edytuj przedmiot", "CoC7.DeleteItem": "Kasuj przedmiot", - "CoC7.TradeItem": "Przekarz / Przechowaj Przedmiot", + "CoC7.TradeItem": "Przekaż / Przechowaj Przedmiot", "CoC7.SortBySkillName": "Sortuj po nazwie", "CoC7.SortBySkillValue": "Sortuj po wartości", "CoC7.UncommonSkillsShow": "Pokaż rzadkie umiejętności", @@ -441,7 +441,7 @@ "CoC7.SanRollHint": "Rzuć test poczytalności dla celów", "CoC7.SANCheckTitle": "Utrata PP : {name} ({sanMin}/{sanMax})", "CoC7.NoSkill": "Brak umięjętności", - "CoC7.AddWeapontHint": "

              {actor} nie mam {weapon}.
              Chcesz ją stworzyć ?

              ", + "CoC7.AddWeapontHint": "

              {actor} nie ma {weapon}.
              Chcesz ją stworzyć ?

              ", "CoC7.LinkCheck": " {name} test", "CoC7.LinkCheckDiff": "[{difficulty}] {name} test", @@ -475,7 +475,7 @@ "CoC7.BackgroundSectionMoveUp": "Przenieś do góry", "CoC7.BackgroundSectionMoveDown": "Przenieś na dół", - "CoC7.creatureFightingSkill": "Walka Wrecz", + "CoC7.creatureFightingSkill": "Walka Wręcz", "CoC7.InvoluntaryAction": "Mimowolne działanie", "CoC7.InvoluntaryActionPerfomed": "Wykonano mimowolne działanie", @@ -522,7 +522,7 @@ "CoC7.MythosAlreadyEncountered": "Nagródź Punktami Mitów (+1%)", "CoC7.DisregardMythosGain": "Nie zdobyto Punktów Mitów", "CoC7.MythosGain": "Zdobyto Punkty Mitów", - "CoC7.YouGainedCthulhuMythos": "Twój umysł drży przed nieziemską manifestacją (+{value}% Mitó Cthulhu)", + "CoC7.YouGainedCthulhuMythos": "Twój umysł drży przed nieziemską manifestacją (+{value}% Mitów Cthulhu)", "CoC7.CardResolved": "Karta rozwiązana", "CoC7.SpellCastingTime": "Czas rzucania", From a317c03890b55a6a35eed7a96a2ed1290b1ad6f2 Mon Sep 17 00:00:00 2001 From: HavlockV Date: Fri, 15 Oct 2021 18:32:07 +0300 Subject: [PATCH 218/726] Lib duplicate --- lib/chatcardlib/src/chatcardlib.js | 1 + module/chat/cards/test.js | 8 +++++--- system.json | 4 ++-- templates/chat/cards/test.html | 2 ++ 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/chatcardlib/src/chatcardlib.js b/lib/chatcardlib/src/chatcardlib.js index 099d4fad..a5cd5b01 100644 --- a/lib/chatcardlib/src/chatcardlib.js +++ b/lib/chatcardlib/src/chatcardlib.js @@ -13,6 +13,7 @@ class EnhancedChatCardLib { constructor(){ this.types = new Map() this.socket = null + this.enhancedChatCardClass = EnhancedChatCard } static set socket(x){ diff --git a/module/chat/cards/test.js b/module/chat/cards/test.js index 0085cca0..caed210d 100644 --- a/module/chat/cards/test.js +++ b/module/chat/cards/test.js @@ -1,6 +1,4 @@ -import { EnhancedChatCard } from "../../../lib/chatcardlib/src/chatcardlib.js"; - -export class testCard extends EnhancedChatCard{ +export class testCard extends xxxx{ /** * Extend and override the default options * @returns {Object} @@ -10,4 +8,8 @@ export class testCard extends EnhancedChatCard{ template: 'systems/CoC7/templates/chat/cards/test.html' }) } + + activateListeners (html){ + super.activateListeners(html) + } } \ No newline at end of file diff --git a/system.json b/system.json index 71966a6c..c5531d1a 100644 --- a/system.json +++ b/system.json @@ -7,10 +7,10 @@ "minimumCoreVersion": "0.8.6", "compatibleCoreVersion": "0.8.9", "esmodules": [ + "lib/chatcardlib/src/chatcardlib.js", "lib/socketlib/src/libwrapper_shim.js", "lib/socketlib/src/socketlib.js", - "bundle.js", - "lib/chatcardlib/src/chatcardlib.js" + "bundle.js" ], "templateVersion": 1, "styles": ["lib/game-icons/game-icons.css", "coc7g.css"], diff --git a/templates/chat/cards/test.html b/templates/chat/cards/test.html index 872147bf..ca592e81 100644 --- a/templates/chat/cards/test.html +++ b/templates/chat/cards/test.html @@ -1,3 +1,5 @@
              Pouet pouet + {{localize 'CoC7.Critical'}} +
              \ No newline at end of file From 9b750d18db3ee3eee6215e6a9ee94613cdc9007c Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Fri, 15 Oct 2021 18:03:57 +0200 Subject: [PATCH 219/726] Bug where GM is speaking instead of NPC on checks --- module/check.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/module/check.js b/module/check.js index 22a88288..ca35d9e8 100644 --- a/module/check.js +++ b/module/check.js @@ -1499,13 +1499,14 @@ export class CoC7Check { const speakerData = {} let speaker if (this.actor) { - if (this.actor.isToken) speakerData.token = this.token.document - else if (this.actor.isDummy) { + if (this.actor.isToken) { + speakerData.token = this.token.document + } else if (this.actor.isDummy) { if (this.actor.name) speaker = { alias: this.actor.name } } else { speakerData.actor = this.actor - speaker = ChatMessage.getSpeaker(speakerData) } + speaker = ChatMessage.getSpeaker(speakerData) } else { speaker = ChatMessage.getSpeaker() } From 246a0e7f3a4bb2b5c253ef166c841ff84478d612 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Fri, 15 Oct 2021 18:58:43 +0200 Subject: [PATCH 220/726] Keys for actor importer --- module/apps/actor-importer-regexp.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/module/apps/actor-importer-regexp.js b/module/apps/actor-importer-regexp.js index 241f44aa..4ea0847a 100644 --- a/module/apps/actor-importer-regexp.js +++ b/module/apps/actor-importer-regexp.js @@ -93,12 +93,12 @@ const keys = { sanLossNone: 'Acune', fulldb: '(' + 'BD|Bonus aux dommages|Impact|Imp' + ')', /* NEW KEY BELOW - TRANSLATION REQUIRED */ - halfdb: '(' + '½|half' + ')', + halfdb: '(' + '½|Imp/2' + ')', sectionCombats: '\n(?:' + 'Combat|Armes|Attaques' + ')[:\n]', newCombatHeader: '\n' + 'Combat' + '\n', sectionSkills: '\n(?:' + 'Compétences' + '(?:\\s*\\([^\\)]+\\))?)[:\n]', - sectionLangauges: '\n(?:' + 'Langue' + ')[:\n]', - sectionSpells: '\n(?:' + 'Sortilèges|Sorts' + ')[:\n]', + sectionLangauges: '\n(?:' + 'Langue|Langues' + ')[:\n]', + sectionSpells: '\n(?:' + 'Sortilèges|Sortilèges |Sorts' + ')[:\n]', handgun: '(?' + 'Revolver|Pistolet|Derringer|Beretta|Luger|Desert Eagle| \\.38' + @@ -106,7 +106,7 @@ const keys = { rifle: '(?' + 'Carabine|Lee-Enfield|Fusil' + ')', smb: '(?' + 'SMG|Thompson' + ')', machineGun: '(?' + 'Browning|Vickers|Mitrailleuse' + ')', - launched: '(?' + 'Molotov|Grenade|Dynamite' + ')', + launched: '(?' + 'Boomerang de guerre|Javeline|Pierre|Shuriken|Bâton de dynamite|Cocktail Molotov|Grenade à main|Molotov|Grenade|Dynamite' + ')', example: 'Example Character, 27 ans\nFOR 75 CON 60 TAI 80 DEX 70 APP 60 INT 80\nPOU 50 ÉDU 85 SAN 55 PV 14 BD: 1D4\nCarrure: 1 Mvt: 7 PM: 10 Chance: 40 Armure: 1\nAttaques par round 3 Perte de SAN: 1d4/1d8\nAttaques\nBite 50% (25/10), dommage 1D6\nBrawl 30% (15/6), dommage 1D3\nDerringer 40% (20/8), dommage 1D8+1\nEsquiver 50% (25/10)\nCompétences\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLangue: English 80%, Eklo 5%.\nSortilèges: Summon NPC, Dispel NPC.' }, @@ -271,7 +271,7 @@ const translations = { build: '(?[+-]?\\d+)[,\\s\n]*', armor: '(?' + keys.fr.armorNone + '|\\d+)[,\\s\n]*', From 21e5bddffb95164dbf88debbc71d0258caf370b8 Mon Sep 17 00:00:00 2001 From: Rangertheman <81484515+Rangertheman@users.noreply.github.com> Date: Fri, 15 Oct 2021 22:43:58 +0200 Subject: [PATCH 221/726] Update sv.json --- lang/sv.json | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/lang/sv.json b/lang/sv.json index 995d9f31..61c6681c 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -122,10 +122,13 @@ "CoC7.ItemWeapon": "Föremål (Weapon)", "CoC7.AttacksPerRound": "Anfall per runda", + "CoC7.Cast": "Kasta", "CoC7.SanityCost": "Kostnad Sinneshälsa", "CoC7.PowerCost": "Kostnad Kraft", "CoC7.HitPointsCost": "Kostnad Kroppspoäng", "CoC7.MagicPointsCost": "Kostnad Magipoäng", + "CoC7.OtherCosts": "Annan kostnad", + "CoC7.CastingSpell": "Kastar {spell}.", "CoC7.CopyToClipboard": "Kopiera till urklipp", "CoC7.WhisperToSelection": "Viska till den valda markören", @@ -224,6 +227,7 @@ "CoC7.Dodge": "Duckar", "CoC7.Maneuver": "Manövrerar", "CoC7.OutNumbered": "I underläge", + "CoC7.NoResponse": "Inget gensvar", "CoC7.combatCard.surprised": "Överraskad", "CoC7.combatCard.autoSuccess": "Automatiskt lyckat", "CoC7.Advantage": "Fördel", @@ -234,6 +238,7 @@ "CoC7.TitleSurprised": " Lägg till en bonustärning för att målet är överraskad", "CoC7.TitleAutoSuccess": "Attacken träffar automatiskt", "CoC7.WinnerRollDamage": "{name} vann. Slå för skada.", + "CoC7.InitiatorMissed": "{name} missade.", "CoC7.NoWinner": "Båda sidor misslyckades.", "CoC7.DodgeSuccess": "{name} duckade!", "CoC7.ManeuverSuccess": "{name}s manöver lyckades.", @@ -374,6 +379,7 @@ "CoC7.DodgeSkillName": "Ducka", "CoC7.CthulhuMythosName": "Cthulhumyten", "CoC7.CreditRatingSkillName": "Levnadsstandard", + "CoC7.DriveAutoSkillName": "Köra bil", "CoC7.FightingSpecializationName": "Strid", "CoC7.FirearmSpecializationName": "Skjutvapen", "CoC7.DriveSpecializationName": "Chaufför", @@ -410,6 +416,10 @@ "CoC7.EditItem": "Redigera föremål", "CoC7.DeleteItem": "Ta bort föremål", "CoC7.TradeItem": "Överför/lagra föremål", + "CoC7.SortBySkillName": "Sortera efter fädrighetsnamn", + "CoC7.SortBySkillValue": "Sortera efter färdighetsvärde", + "CoC7.UncommonSkillsShow": "Visa ovanliga färdigheter", + "CoC7.UncommonSkillsHide": "Dölj ovanliga färdigheter", "CoC7.NewBookName": "ny bok", "CoC7.AddBook": "Lägg till bok", @@ -709,6 +719,13 @@ "CoC7.SelectSourceLanguage": "Välj ursprungstextens språk", "CoC7.ImportedUnnamedCharacter": "Importerad icke namngiven karaktär", "CoC7.CreatedImportedCharactersFolder": "Skapade 'Imported Characters'-mapp'", + "CoC7.ImportedCharactersFolder": "Importerade karaktärer", + "CoC7.ImportSkillItemLocations": "Söker efter färdigheter/besvärjelser/vapen i", + "CoC7.ImportActorItemsNone": "Inga", + "CoC7.ImportActorItemsItem": "Föremål", + "CoC7.ImportActorItemsItemWorldModuleSystem": "Föremål / Spelvärldar / Moduler / System", + "CoC7.ImportActorItemsWorldModuleItemSystem": "Spelvärldar / Moduler / Föremål / System", + "CoC7.HowToTranslateTitle": "Så här översätter du?", "CoC7.HowToTranslateWarning": "Installera inga moduler du inte litar på.", "CoC7.HowToTranslateInstallBabele": "Installera/uppdatera Babele-modulen från Foundrys tilläggsmodulhanterare.", @@ -736,6 +753,16 @@ "CoC7.MessageSelectUserToGiveTo": "Vilken karaktär vill du ge det här föremålet till?", "CoC7.MessageDistanceCalculationFailure": "Kan inte beräkna avståndet mellan markörerna. Vänligen använd markörens rollformulär.", + "CoC7.ToolTipSkill": "
              1. Vänsterklicka slå slag med valmöjligheter
              2. Shift + vänsterklick Slå direkt med normal svårighetsgrad
              1. Högerklicka motståndsslag med valmöjligheter
              2. Shift + högerklick Slå motståndsslag direkt
              1. Alt/Option + högerklick Kombinerat färdighetsslag med valmöjligheter
              ", + "CoC7.ToolTipKeeperSkill": "
              1. CTRL + vänsterklick Skapa länk för att slå
              2. {other}
              ", + "CoC7.ToolTipKeeperStandbySkill": "
            3. Vänsterklick Be {name} om ett slag
            4. ", + "CoC7.ToolTipDB": "
              1. Vänsterklick Direkt slag med normal svårighetsgrad
              ", + "CoC7.ToolTipKeeperSanity": "
            5. CTRL + Alt/Option Skapa länk för att slå en sinnesprövning
            6. ", + "CoC7.ToolTipAutoToggle": "
              1. Left click Växla mellan automatisk- och manuell beräkning
              2. ", + "CoC7.ToolTipSkillFlagToggle": "
                1. Dubbelklick Växla statusflagga
                2. ", + "CoC7.ToolTipSkillFlagged": "Flaggad för utveckling", + "CoC7.ToolTipSkillUnflagged": "Inte flaggad för utveckling", + "SETTINGS.TitleRules": "Regler", "SETTINGS.TitleInitiative": "Initiativinställningar", "SETTINGS.TitleRoll": "Tärningsslagsinställningar", @@ -788,6 +815,12 @@ "SETTINGS.TenDieBonusHint": "Färgval för bonustärning när DsN används. (lämna rutan tom för att använda spelarens standardintsällning)", "SETTINGS.TenDiePenalty": "[DsN] TFärgval för strafftärning", "SETTINGS.TenDiePenaltyHint": "Färgval för strafftärning när DsN används. (lämna rutan tom för att använda spelarens standardintsällning)", + "SETTINGS.OverrideGameArtwork": "Skriv över spelets grafik", + "SETTINGS.OverrideGameArtworkHint": "!!OMSTART KRÄVS!! ger åtkomst till avancerade spelinställningar, lämna tomt för standardinställningar", + "SETTINGS.ArtPauseImage": "Pausa bild", + "SETTINGS.ArtPauseImageHint": ". Skriv 'null' för att ta bort bild", + "SETTINGS.ArtPauseText": "Pausa text", + "SETTINGS.ArtPauseTextHint": "Låt fältet vara tomt för att få standardinställningarna", "SETTINGS.OverrideSheetArtwork": "Inställningar för rollformuläret", "SETTINGS.OverrideSheetArtworkHint": "!!OMSTART KRÄVS!! Ger tillgång till rollformulärets avancerade inställningar. Lämna tomt för att behålla standardinställningarna", "SETTINGS.ArtWorkSheetBackground": "Rollformulär, bakgrund", @@ -842,5 +875,6 @@ "SETTINGS.ShowExperimentalFeaturesHint": "Om du använder de här funktionerna kan din spelvärld komma att bli oanvändbar vid framtida versionsuppdateringar. De är endast för testning och ska INTE användas i dina spelvärldar", "CoC7.ExperimentalFeaturesWarning": "Den här funktionen är under utveckling och rekommenderas inte för användning i dina spelvärldar.", "SETTINGS.CheckElevation": "Räkna in höjdskillnad i avstånd", - "SETTINGS.CheckElevationHint": "Använder höjdskillnad vid beräkningar för avståndsstrid" + "SETTINGS.CheckElevationHint": "Använder höjdskillnad vid beräkningar för avståndsstrid", + "CoC7.toolTipDelay": "Fördröjning i millisekunder innan tips visas, ange 0 om du aldrig vill att de ska visas" } From 2bafaf39e7fcf757670397a23caa3a2842da6fde Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Fri, 15 Oct 2021 21:38:43 +0000 Subject: [PATCH 222/726] Updated translations list --- .github/TRANSLATIONS.md | 66 ++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 76ccc72e..7e6b4559 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,7 +4,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **375** | **151** | **168** | **39** | **39** | **39** | **16** | **9** | **33** | **45** | +| **Remaining**: | **375** | **151** | **168** | **39** | **39** | **39** | **16** | **9** | **1** | **45** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -35,8 +35,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | -| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | | [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -66,7 +66,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | | [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | @@ -116,17 +116,17 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | | [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | | [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -188,7 +188,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | | [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -196,7 +196,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | | [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -234,8 +234,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | -| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | | [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -247,22 +247,22 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | -| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | | [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | -| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | | [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -301,7 +301,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | +| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | | [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -310,10 +310,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | | [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -354,8 +354,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | | [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | From 211dda92560460c27ebbe1ea873cadaccebc5d34 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 16 Oct 2021 03:51:58 +0100 Subject: [PATCH 223/726] Updates to Actor Importer Add warning message to actor importer if characters are in 100000-10FFFF range Changes to Actor Importer regular expressions to improve French support Fix detecting 1/2 in weapon damage shotgun vs half DB --- lang/en.json | 1 + module/apps/actor-importer-dialog.js | 9 ++ module/apps/actor-importer-regexp.js | 187 ++++++++++++++------------- module/apps/actor-importer.js | 69 +++++----- styles/interface/app.less | 3 + styles/system/main.less | 3 - templates/apps/actor-importer.html | 2 +- 7 files changed, 145 insertions(+), 129 deletions(-) diff --git a/lang/en.json b/lang/en.json index 04005420..984aac7f 100644 --- a/lang/en.json +++ b/lang/en.json @@ -696,6 +696,7 @@ "CoC7.ActorImporter": "Actor Importer", "CoC7.ActorImporterSummary": "Import an NPC or Creature from description and stats. Just paste the corresponding plain text", "CoC7.PasteTheDataBelow": "Paste the raw text data below", + "CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed", "CoC7.SelectActorType": "Select actor type", "CoC7.NonPlayingCharacter": "Non Playing Character (NPC)", "CoC7.Creature": "Creature", diff --git a/module/apps/actor-importer-dialog.js b/module/apps/actor-importer-dialog.js index 5b6214b7..a3171f65 100644 --- a/module/apps/actor-importer-dialog.js +++ b/module/apps/actor-importer-dialog.js @@ -18,6 +18,15 @@ export class CoC7ActorImporterDialog extends Dialog { ) }) .trigger('change') + html.find('#coc-pasted-character-data').on('keyup', function (e) { + const charactersTooExtended = $(this).val().match(/[\udbc0-\udbfe][\udc00-\udfff]/) + const prompt = $('#coc-prompt') + if (charactersTooExtended) { + prompt.html(game.i18n.localize('CoC7.TextFieldInvalidCharacters')).addClass('error') + } else { + prompt.html(game.i18n.localize('CoC7.PasteTheDataBelow')).removeClass('error') + } + }) } /** diff --git a/module/apps/actor-importer-regexp.js b/module/apps/actor-importer-regexp.js index 4ea0847a..78cd7fd7 100644 --- a/module/apps/actor-importer-regexp.js +++ b/module/apps/actor-importer-regexp.js @@ -56,7 +56,7 @@ import { CoC7Utilities } from '../utilities.js' const nameCharacters = '\\u3000\\u3400-\\u4DBF\\u4E00-\\u9FFF\\w\\(\\)\\-\\/&"\'' + CoC7Utilities.quoteRegExp( - 'áéíóàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃĀÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆ朓”' + 'áéíóàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃĀÑÕäëïöüÿÄËÏÖÜŸàèçÇßØøÅåÆ朓”«»' ) const keys = { @@ -88,17 +88,16 @@ const keys = { fr: { description: 'CoC7.French', dbNone: 'Acune', - armorNone: 'Acune', + armorNone: '(?:Acune|aucune)', attacksPerRoundNone: 'Acune', sanLossNone: 'Acune', fulldb: '(' + 'BD|Bonus aux dommages|Impact|Imp' + ')', - /* NEW KEY BELOW - TRANSLATION REQUIRED */ - halfdb: '(' + '½|Imp/2' + ')', + halfdb: '(' + '½|1/2 Imp|Imp/2' + ')', sectionCombats: '\n(?:' + 'Combat|Armes|Attaques' + ')[:\n]', newCombatHeader: '\n' + 'Combat' + '\n', sectionSkills: '\n(?:' + 'Compétences' + '(?:\\s*\\([^\\)]+\\))?)[:\n]', - sectionLangauges: '\n(?:' + 'Langue|Langues' + ')[:\n]', - sectionSpells: '\n(?:' + 'Sortilèges|Sortilèges |Sorts' + ')[:\n]', + sectionLangauges: '\n(?:' + 'Langues?' + ')\\s*[:\n]', + sectionSpells: '\n(?:' + 'Sortilèges\\s*|Sorts' + ')[:\n]', handgun: '(?' + 'Revolver|Pistolet|Derringer|Beretta|Luger|Desert Eagle| \\.38' + @@ -171,44 +170,44 @@ const keys = { const translations = { en: { - age: '(?\\d+)[,\\s]*', - occupation: '[,\\s]*' + 'Occupation' + ':?\\s+(?.+)[,\\s\n]*', - str: '(?\\d+|-)[,\\s\n]*', - con: '(?\\d+|-)[,\\s\n]*', - siz: '(?\\d+|-)[,\\s\n]*', - int: '(?\\d+|-)[,\\s\n]*', - pow: '(?\\d+|-)[,\\s\n]*', - dex: '(?\\d+|-)[,\\s\n]*', - app: '(?\\d+|-)[,\\s\n]*', - edu: '(?\\d+|-)[,\\s\n]*', - san: '(?\\d+|-)[,\\s\n]*', - hp: '(?\\d+|-)[,\\s\n]*', - mp: '(?\\d+|-)[,\\s\n]*', + age: '(?\\d+)[,\\s]*', + occupation: '[,\\s]*' + 'Occupation' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', + str: '(?\\d+|-)[,\\s\n]*', + con: '(?\\d+|-)[,\\s\n]*', + siz: '(?\\d+|-)[,\\s\n]*', + int: '(?\\d+|-)[,\\s\n]*', + pow: '(?\\d+|-)[,\\s\n]*', + dex: '(?\\d+|-)[,\\s\n]*', + app: '(?\\d+|-)[,\\s\n]*', + edu: '(?\\d+|-)[,\\s\n]*', + san: '(?\\d+|-)[,\\s\n]*', + hp: '(?\\d+|-)[,\\s\n]*', + mp: '(?\\d+|-)[,\\s\n]*', db: '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + + ')(\\s*:)?\\s+(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + keys.en.dbNone + ')[,\\s\n]*', - build: '(?[+-]?\\d+)[,\\s\n]*', + build: '(?[+-]?\\d+)[,\\s\n]*', armor: '(?' + + '(\\s*:)?\\s+(?' + keys.en.armorNone + '|\\d+)[,\\s\n]*', - mov: '(?\\d+)[,\\s\n]*', - lck: '(?\\d+|-)[,\\s\n]*', + mov: '(?\\d+)[,\\s\n]*', + lck: '(?\\d+|-)[,\\s\n]*', attacksPerRound: '(?' + + ')(\\s*:)?\\s+(?' + keys.en.attacksPerRoundNone + '|\\d+(?!d))[,\\s\n]*', sanLoss: '(?' + + ')(\\s*:)?\\s+(?' + keys.en.sanLossNone + '|\\dD?[+\\d]*\\/\\dD?[+\\d]*)[,\\s\n]*', weapon: @@ -224,7 +223,7 @@ const translations = { weaponDodge: '(?' + 'Dodge' + - '):?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', + ')(\\s*:)?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', // Skill should not be named "The player has" / "but they regenerate" required for "A Cold Fire Within" skill: '^(?[:\\*.\\s' + @@ -247,49 +246,48 @@ const translations = { }, fr: { age: '(?\\d+)\\s*' + 'ans' + '(?![a-z])[,\\s]*', - /* NEW KEY BELOW - TRANSLATION REQUIRED */ - occupation: '[,\\s]*' + 'Occupation' + ':?\\s+(?.+)[,\\s\n]*', - str: '(?\\d+|-)[,\\s\n]*', - con: '(?\\d+|-)[,\\s\n]*', - siz: '(?\\d+|-)[,\\s\n]*', - int: '(?\\d+|-)[,\\s\n]*', - pow: '(?\\d+|-)[,\\s\n]*', - dex: '(?\\d+|-)[,\\s\n]*', - app: '(?\\d+|-)[,\\s\n]*', - edu: '(?\\d+|-)[,\\s\n]*', + occupation: '[,\\s]*' + 'Occupation' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', + str: '(?\\d+|-)[,\\s\n]*', + con: '(?\\d+|-)[,\\s\n]*', + siz: '(?\\d+|-)[,\\s\n]*', + int: '(?\\d+|-)[,\\s\n]*', + pow: '(?\\d+|-)[,\\s\n]*', + dex: '(?\\d+|-)[,\\s\n]*', + app: '(?\\d+|-)[,\\s\n]*', + edu: '(?\\d+|-)[,\\s\n]*', san: - '(?\\d+|-)[,\\s\n]*', - hp: '(?\\d+|-)[,\\s\n]*', + '(?\\d+|-)[,\\s\n]*', + hp: '(?\\d+|-)[,\\s\n]*', mp: - '(?\\d+|-)[,\\s\n]*', + '(?\\d+|-)[,\\s\n]*', db: '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + + ')(\\s*:)?\\s+(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + keys.fr.dbNone + ')[,\\s\n]*', - build: '(?[+-]?\\d+)[,\\s\n]*', + build: '(?[+-]?\\d+)[,\\s\n]*', armor: '(?' + + '(\\s*:)?\\s+(?' + keys.fr.armorNone + '|\\d+)[,\\s\n]*', mov: '(?\\d+)[,\\s\n]*', - lck: '(?\\d+|-)[,\\s\n]*', + ')(\\s*:)?\\s*(?\\d+)[,\\s\n]*', + lck: '(?\\d+|-)[,\\s\n]*', attacksPerRound: '(?' + + ')(\\s*:)?\\s+(?' + keys.fr.attacksPerRoundNone + '|\\d+(?!d))[,\\s\n]*', sanLoss: '(?' + + ')(\\s*:)?\\s+(?' + keys.fr.sanLossNone + '|\\dD?[+\\d]*\\/\\dD?[+\\d]*)[,\\s\n]*', weapon: @@ -299,12 +297,13 @@ const translations = { 'dommage|dégâts' + '))?\\s+(?(:?(:?\\d+d)?\\d+(\\s*/\\s*|\\s*[+-]\\s*(?:' + keys.fr.fulldb + - '|half' + + '|' + + keys.fr.halfdb + ')\\s*|\\s*[+-]\\s*(:?\\d+d)?\\d+)*)+)\\)?', weaponDodge: '(?' + - 'Esquiver' + - '):?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', + 'Esquiver?' + + ')(\\s*:)?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', skill: '^(?[:\\*.\\s' + nameCharacters + @@ -312,7 +311,7 @@ const translations = { 'The player has|but they regenerate' + '))\\s+\\(?(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,]?\\s*', guessStartCombat: - '(^|(?[\\.\\s' + nameCharacters + ']+)[,\\s\n]+', sections: '(' + @@ -327,49 +326,49 @@ const translations = { }, es: { age: '(?\\d+)\\s*' + 'a[ñÑ]os' + '(?![a-z])[,\\s]*', - occupation: '[,\\s]*' + 'Ocupación' + ':?\\s+(?.+)[,\\s\n]*', - str: '(?\\d+|-)[,\\s\n]*', - con: '(?\\d+|-)[,\\s\n]*', - siz: '(?\\d+|-)[,\\s\n]*', - int: '(?\\d+|-)[,\\s\n]*', - pow: '(?\\d+|-)[,\\s\n]*', - dex: '(?\\d+|-)[,\\s\n]*', - app: '(?\\d+|-)[,\\s\n]*', - edu: '(?\\d+|-)[,\\s\n]*', - san: '(?\\d+|-)[,\\s\n]*', + occupation: '[,\\s]*' + 'Ocupación' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', + str: '(?\\d+|-)[,\\s\n]*', + con: '(?\\d+|-)[,\\s\n]*', + siz: '(?\\d+|-)[,\\s\n]*', + int: '(?\\d+|-)[,\\s\n]*', + pow: '(?\\d+|-)[,\\s\n]*', + dex: '(?\\d+|-)[,\\s\n]*', + app: '(?\\d+|-)[,\\s\n]*', + edu: '(?\\d+|-)[,\\s\n]*', + san: '(?\\d+|-)[,\\s\n]*', hp: '(?\\d+|-)[,\\s\n]*', + ')(\\s*:)?\\s+(?\\d+|-)[,\\s\n]*', mp: '(?\\d+|-)[,\\s\n]*', + ')(\\s*:)?\\s+(?\\d+|-)[,\\s\n]*', db: '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + + ')(\\s*:)?\\s+(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + keys.es.dbNone + ')[,\\s\n]*', - build: '(?[+-]?\\d+)[,\\s\n]*', + build: '(?[+-]?\\d+)[,\\s\n]*', armor: '(?' + + '(\\s*:)?\\s+(?' + keys.es.armorNone + '|\\d+)[,\\s\n]*', - mov: '(?\\d+)[,\\s\n]*', - lck: '(?\\d+|-)[,\\s\n]*', + mov: '(?\\d+)[,\\s\n]*', + lck: '(?\\d+|-)[,\\s\n]*', attacksPerRound: '(?' + + ')(\\s*:)?\\s+(?' + keys.es.attacksPerRoundNone + '|\\d+(?!d))[,\\s\n]*', sanLoss: '(?' + + ')(\\s*:)?\\s+(?' + keys.es.sanLossNone + '|\\dD?[+\\d]*\\/\\dD?[+\\d]*)[,\\s\n]*', weapon: @@ -379,11 +378,13 @@ const translations = { 'daño' + ')?\\s+(?(:?(:?\\d+d)?\\d+(\\s*/\\s*|\\s*[+-]\\s*(?:' + keys.es.fulldb + + '|' + + keys.es.halfdb + ')\\s*|\\s*[+-]\\s*(:?\\d+d)?\\d+)*)+)\\)?', weaponDodge: '(?' + 'Esquivar' + - '):?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', + ')(\\s*:)?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', skill: '^(?[:\\*.\\s' + nameCharacters + @@ -405,46 +406,46 @@ const translations = { ')' }, 'zh-TW': { - age: '(?\\d+)[,\\s]*', + age: '(?\\d+)[,\\s]*', /* NEW KEY BELOW - TRANSLATION REQUIRED */ - occupation: '[,\\s]*' + 'Occupation' + ':?\\s+(?.+)[,\\s\n]*', - str: '(?\\d+|-)[,\\s\n]*', - con: '(?\\d+|-)[,\\s\n]*', - siz: '(?\\d+|-)[,\\s\n]*', - int: '(?\\d+|-)[,\\s\n]*', - pow: '(?\\d+|-)[,\\s\n]*', - dex: '(?\\d+|-)[,\\s\n]*', - app: '(?\\d+|-)[,\\s\n]*', - edu: '(?\\d+|-)[,\\s\n]*', - san: '(?\\d+|-)[,\\s\n]*', + occupation: '[,\\s]*' + 'Occupation' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', + str: '(?\\d+|-)[,\\s\n]*', + con: '(?\\d+|-)[,\\s\n]*', + siz: '(?\\d+|-)[,\\s\n]*', + int: '(?\\d+|-)[,\\s\n]*', + pow: '(?\\d+|-)[,\\s\n]*', + dex: '(?\\d+|-)[,\\s\n]*', + app: '(?\\d+|-)[,\\s\n]*', + edu: '(?\\d+|-)[,\\s\n]*', + san: '(?\\d+|-)[,\\s\n]*', hp: - '(?\\d+|-)[,\\s\n]*', - mp: '(?\\d+|-)[,\\s\n]*', + '(?\\d+|-)[,\\s\n]*', + mp: '(?\\d+|-)[,\\s\n]*', db: '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + + ')(\\s*:)?\\s*(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + keys['zh-TW'].dbNone + ')[,\\s\n]*', - build: '(?[+-]?\\d+)[,\\s\n]*', + build: '(?[+-]?\\d+)[,\\s\n]*', armor: '(?' + + '(\\s*:)?\\s*(?' + keys['zh-TW'].armorNone + '|\\d+)[,\\s\n]*', - mov: '(?\\d+)[,\\s\n]*', - lck: '(?\\d+|-)[,\\s\n]*', + mov: '(?\\d+)[,\\s\n]*', + lck: '(?\\d+|-)[,\\s\n]*', attacksPerRound: '(?' + + ')(\\s*:)?\\s*(?' + keys['zh-TW'].attacksPerRoundNone + '|\\d+(?!d))[,\\s\n]*', sanLoss: '(?' + + ')(\\s*:)?\\s*(?' + keys['zh-TW'].sanLossNone + '|\\dD?[+\\d]*\\/\\dD?[+\\d]*)[,\\s\n]*', weapon: @@ -454,11 +455,13 @@ const translations = { 'damage|傷害' + '))?\\s+(?(:?(:?\\d+d)?\\d+(\\s*/\\s*|\\s*[+-]\\s*(?:' + keys['zh-TW'].fulldb + + '|' + + keys['zh-TW'].halfdb + ')\\s*|\\s*[+-]\\s*(:?\\d+d)?\\d+)*)+)\\)?', weaponDodge: '(?' + 'Dodge|閃避|閃躲' + - '):?\\s+\\(?(?\\d+)\\)?\\s*%?(?:\\s*\\(\\d+\\/\\d+\\))?', + ')(\\s*:)?\\s+\\(?(?\\d+)\\)?\\s*%?(?:\\s*\\(\\d+\\/\\d+\\))?', skill: '^(?[:\\*.\\s' + nameCharacters + diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index 88188660..44fdd553 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -140,6 +140,9 @@ export class CoC7ActorImporter { if (text.trim().length === 0) { return } + if (CONFIG.debug.CoC7Importer) { + console.log('combat text', text) + } let weapon let dodge let newline @@ -169,7 +172,7 @@ export class CoC7ActorImporter { ) { text = text.replace(weapon['-source'], '\n') const name = this.cleanString(weapon.name || '') - const damage = this.cleanString(weapon.damage || '') + let damage = this.cleanString(weapon.damage || '') const isRanged = !!( this.check('handgun', { text: name, @@ -205,35 +208,38 @@ export class CoC7ActorImporter { } else { lastPercent = true } - const damages = damage.split('/') - const isShotgun = damages.length === 3 + let found let ahdb = false let addb = false - for (let i = 0, im = damages.length; i < im; i++) { - const fullDB = this.getRegEx( - '\\s*[+-]?\\s*(' + - this.keys.fulldb + - ')\\s*[-+]?\\s*(' + - this.parsed.db.replace(/^[-+]/, '') + - ')?' - ).exec(damages[i]) - const halfDB = this.getRegEx( + do { + found = this.getRegEx( '\\s*[+-]?\\s*(' + - this.keys.halfdb + - ')\\s*(' + - this.keys.fulldb + - ')?[-+]?\\s*(' + - this.parsed.db.replace(/^[-+]/, '') + - ')?' - ).exec(damages[i]) - if (fullDB) { - damages[i] = damages[i].replace(fullDB[0], '') - addb = true - } else if (halfDB) { - damages[i] = damages[i].replace(halfDB[0], '') + this.keys.halfdb + + ')\\s*(' + + this.keys.fulldb + + ')?[-+]?\\s*(' + + this.parsed.db.replace(/^[-+]/, '') + + ')?' + ).exec(damage) + if (found) { ahdb = true + damage = damage.replace(found[0], '') + } else { + found = this.getRegEx( + '\\s*[+-]?\\s*(' + + this.keys.fulldb + + ')\\s*[-+]?\\s*(' + + this.parsed.db.replace(/^[-+]/, '') + + ')?' + ).exec(damage) + if (found) { + addb = true + damage = damage.replace(found[0], '') + } } - } + } while (found) + const damages = damage.split('/') + const isShotgun = damages.length === 3 const data = { name: name, type: 'weapon', @@ -352,8 +358,9 @@ export class CoC7ActorImporter { // Replace "En Dash" and "Em Dash" dashes with - and "Right Single Quotation Mark" with ' this.text = String(text) .trim() - .replace(/\u2013|\u2014/g, '-') + .replace(/\u2013|\u2014|\u2212/g, '-') .replace(/\u2019/g, "'") + .replace(/[\udbc0-\udbfe][\udc00-\udfff]/g, '') // Earliest character that has been used, to work out the header let min = this.text.length // STR, if berfore than previous min update it @@ -465,8 +472,7 @@ export class CoC7ActorImporter { } // Get damage bonus, if not found or none set to 0 if ( - !this.check('db') || - this.parsed.db.toLowerCase() === this.keys.dbNone.toLowerCase() + !this.check('db') || this.check('dbNone', { removeFromText: false, saveKeys: false, text: this.parsed.db }) ) { this.parsed.db = '0' } @@ -474,8 +480,7 @@ export class CoC7ActorImporter { this.check('build') // Get armor, if not found or none set to 0 if ( - !this.check('armor') || - this.parsed.armor.toLowerCase() === this.keys.armorNone.toLowerCase() + !this.check('armor') || this.check('armorNone', { removeFromText: false, saveKeys: false, text: this.parsed.armor }) ) { this.parsed.armor = '0' } @@ -487,9 +492,7 @@ export class CoC7ActorImporter { this.check('sanLoss') // Get attacks per round, if not found or none set to 0 if ( - this.check('attacksPerRound') && - this.parsed.attacksPerRound.toLowerCase() === - this.keys.attacksPerRoundNone.toLowerCase() + this.check('attacksPerRound') && this.check('attacksPerRoundNone', { removeFromText: false, saveKeys: false, text: this.parsed.attacksPerRound }) ) { this.parsed.attacksPerRound = '0' } diff --git a/styles/interface/app.less b/styles/interface/app.less index c47977d6..ffe1810f 100644 --- a/styles/interface/app.less +++ b/styles/interface/app.less @@ -8,6 +8,9 @@ font-weight: bold; } } + .error { + color: red; + } button { &.inactive:hover { box-shadow: 0 0 5px grey; diff --git a/styles/system/main.less b/styles/system/main.less index eb6c6561..9504c231 100644 --- a/styles/system/main.less +++ b/styles/system/main.less @@ -711,9 +711,6 @@ height: 16px; } } -.coc7.dialoge.actor-importer { - min-width: 580px; -} .coc7.sheet.creature { min-width: 580px; } diff --git a/templates/apps/actor-importer.html b/templates/apps/actor-importer.html index 148d0217..deafa37e 100644 --- a/templates/apps/actor-importer.html +++ b/templates/apps/actor-importer.html @@ -33,7 +33,7 @@

                  {{localize 'CoC7.ActorImporter'}}

              -
              {{localize 'CoC7.PasteTheDataBelow'}}
              +
              {{localize 'CoC7.PasteTheDataBelow'}}
              From e7ea1bf2aede3bfa323e29c5da57ef1e2d3912d1 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 16 Oct 2021 02:53:59 +0000 Subject: [PATCH 224/726] Updated translations list --- .github/TRANSLATIONS.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 7e6b4559..fc139a2e 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,7 +4,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **375** | **151** | **168** | **39** | **39** | **39** | **16** | **9** | **1** | **45** | +| **Remaining**: | **376** | **152** | **169** | **40** | **40** | **40** | **17** | **10** | **2** | **46** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -246,6 +246,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry | [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | | [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | @@ -1345,6 +1346,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry `"CoC7.TemporaryInsane": "You become temporary insane.",` +##### CoC7.TextFieldInvalidCharacters + +`"CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed",` + ##### CoC7.Tie `"CoC7.Tie": "Tie",` From e88b9a8f0a06692073622d6828179b6ab3313157 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 16 Oct 2021 04:01:36 +0100 Subject: [PATCH 225/726] Update updater.js If item.data.cost exists then the spell needs migrated, otherwise it has already been migrated --- module/updater.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/updater.js b/module/updater.js index 1c897f33..e287fd6e 100644 --- a/module/updater.js +++ b/module/updater.js @@ -364,7 +364,7 @@ export class Updater { } static _migrateItemSpellAutomated (item, updateData) { - if (item.type === 'spell') { + if (item.type === 'spell' && typeof item.data.cost !== 'undefined') { updateData['data.castingTime'] = item.data.castingTime || '' updateData['data.costs.hitPoints'] = item.data.cost.hp || 0 updateData['data.costs.magicPoints'] = item.data.cost.mp || 0 From 864b4c7e197ae4c3cfa490871d4470230f2508ae Mon Sep 17 00:00:00 2001 From: castanho Date: Sat, 16 Oct 2021 01:38:35 -0300 Subject: [PATCH 226/726] Update changelog --- .github/CHANGELOG.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index f8a8c694..9cc0d6cc 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -5,10 +5,14 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV and @sn - Add options to change pause icon and text on settings. - Add Pulp Luck recovery rules. - Add several tooltips to the character sheet (Skill, DB, Sanity, etc). -- Complete refactor of Spell system. +- Initial refactor of Spell system. + - Cast Spell prompts its description and costs results on chat; + - Now Spell costs are discounted when casting; + - Update sheet layout to V2. - Fix "The key ? does not exist in the EmbeddedCollection Collection" dragging an English setup onto a translated Actor. - Fix background integrity on Book sheet. - Fix bug on Archetype Item properties. +- Fix bug where GM is speaking instead of NPC on checks - Fix Combined / Opposed Roll using the incorrect image path for wildcard tokens. - Fix DsN 3D dices not rolling sometimes. - Fix summarized sheet colors. @@ -22,7 +26,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV and @sn - Update updater to check module compendiums for Actor and Item when modules version module numbers are new or changed. - Update to French localization, thanks to @vonv. - Update to Japanese localization, thanks to `@Asami#8627`. -- Update to Polish localization, thanks to @everyonecancode; +- Update to Polish localization, thanks to @everyonecancode and @zakonfeniksa. - Update to Portuguese localization. - Update to Spanish localization, thanks to @lozalojo. - Update to Swedish localization, thanks to @Rangertheman. From af866854279023d4a694bf1732975278cb5b5a7a Mon Sep 17 00:00:00 2001 From: castanho Date: Sat, 16 Oct 2021 01:45:21 -0300 Subject: [PATCH 227/726] Update pt-BR.json --- lang/pt-BR.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lang/pt-BR.json b/lang/pt-BR.json index b3b94c8c..08ee3100 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -228,6 +228,7 @@ "CoC7.FightBack": "Contra-Ataque", "CoC7.Dodge": "Esquivar", "CoC7.Maneuver": "Manobra", + "CoC7.NoResponse": "Não Agir", "CoC7.OutNumbered": "Desvantagem Numérica", "CoC7.combatCard.surprised": "Surpreso", "CoC7.combatCard.autoSuccess": "Sucesso Automático", @@ -239,6 +240,7 @@ "CoC7.TitleSurprised": "Adicionar 1 Dado de Bônus por alvo Surpreso", "CoC7.TitleAutoSuccess": "Ataque automaticamente acerta", "CoC7.WinnerRollDamage": "{name} ganhou. Jogue o dano.", + "CoC7.InitiatorMissed": "{name} não encontrado.", "CoC7.NoWinner": "Ambos falharam.", "CoC7.DodgeSuccess": "{name} esquivou!", "CoC7.ManeuverSuccess": "A manobra de {name} teve sucesso.", @@ -380,6 +382,7 @@ "CoC7.DodgeSkillName": "Esquivar", "CoC7.CthulhuMythosName": "Mythos de Cthulhu", "CoC7.CreditRatingSkillName": "Nível de Crédito", + "CoC7.DriveAutoSkillName": "Dirigir Automóveis", "CoC7.FightingSpecializationName": "Lutar", "CoC7.FirearmSpecializationName": "Armas de Fogo", "CoC7.DriveSpecializationName": "Dirigir", @@ -696,6 +699,7 @@ "CoC7.ActorImporter": "Importar Ator", "CoC7.ActorImporterSummary": "Importe um PNJ ou Criatura a partir da descrição de informações. Apenas cole o texto correspondente.", "CoC7.PasteTheDataBelow": "Cole as informações abaixo.", + "CoC7.TextFieldInvalidCharacters": "Há caracteres inválidos no texto, por favor corrija-os ou serão removidos.", "CoC7.SelectActorType": "Selecione o Tipo de Ator", "CoC7.NonPlayingCharacter": "Personagens não-Jogadores (PNJ)", "CoC7.Creature": "Criatura", @@ -708,6 +712,12 @@ "CoC7.French": "Francês", "CoC7.TraditionalChinese": "Chinês Tradicional", "CoC7.SelectSourceLanguage": "Selecione o idioma de fonte.", + "CoC7.ImportedCharactersFolder": "Personagens importados", + "CoC7.ImportSkillItemLocations": "Buscando por perícias/feitiços/armas em", + "CoC7.ImportActorItemsNone": "Nenhum", + "CoC7.ImportActorItemsItem": "Itens", + "CoC7.ImportActorItemsItemWorldModuleSystem": "Itens / Mundo / Módulos / Sistema", + "CoC7.ImportActorItemsWorldModuleItemSystem": "Mundo / Módulos / Itens / Sistema", "CoC7.Migrate.Title": "Atualização Necessária!", "CoC7.Migrate.Message": "

              Seu Mundo precisa ser atualizado para a rodar a versão {version}.

              Por favor, faça um backup da pasta de seu Mundo antes de prosseguir.

              Se você não atualizar seu Mundo, o sistema não funcionará devidamente.

              Reinicie o Mundo quando o processo for concluído.

              ", From cf30beeadb0174b12b124663fbcc1fd1f9ecf1b3 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 16 Oct 2021 04:46:09 +0000 Subject: [PATCH 228/726] Updated translations list --- .github/TRANSLATIONS.md | 760 ++++++++++++++++++++-------------------- 1 file changed, 381 insertions(+), 379 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index fc139a2e..0d8bb6c8 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,385 +2,387 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -| Key | cn | cs | de | es | fr | ja | pl | pt-BR | sv | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **376** | **152** | **169** | **40** | **40** | **40** | **17** | **10** | **2** | **46** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +The **pt-BR** translation is currently up to date + +| Key | cn | cs | de | es | fr | ja | pl | sv | zh-TW | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **376** | **152** | **169** | **40** | **40** | **40** | **17** | **2** | **46** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ##### CoC7.ActorImporter From 23711d79edc82540e271dc861f93aef8e1dcfd13 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Sat, 16 Oct 2021 10:04:11 +0200 Subject: [PATCH 229/726] Init 1 call --- module/chat/cards/test.js | 13 +-- module/coc7.js | 6 +- {lib => module/common}/chatcardlib/LICENSE.md | 4 +- module/common/chatcardlib/init.js | 3 + .../common}/chatcardlib/src/chatcardlib.js | 96 ++++++++++--------- system.json | 1 - templates/chat/cards/test.html | 4 +- 7 files changed, 67 insertions(+), 60 deletions(-) rename {lib => module/common}/chatcardlib/LICENSE.md (95%) create mode 100644 module/common/chatcardlib/init.js rename {lib => module/common}/chatcardlib/src/chatcardlib.js (79%) diff --git a/module/chat/cards/test.js b/module/chat/cards/test.js index caed210d..544e5597 100644 --- a/module/chat/cards/test.js +++ b/module/chat/cards/test.js @@ -1,5 +1,6 @@ -export class testCard extends xxxx{ - /** +import { EnhancedChatCard } from '../../common/chatcardlib/src/chatcardlib.js' +export class testCard extends EnhancedChatCard { + /** * Extend and override the default options * @returns {Object} */ @@ -9,7 +10,7 @@ export class testCard extends xxxx{ }) } - activateListeners (html){ - super.activateListeners(html) - } -} \ No newline at end of file + // activateListeners (html) { + // super.activateListeners(html) + // } +} diff --git a/module/coc7.js b/module/coc7.js index 3d58a299..9313f01f 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -23,6 +23,7 @@ import { CoC7ChaseSheet } from './items/sheets/chase.js' import { CoC7Socket, CoC7ChatCards } from './hooks/socket.js' import { DropActorSheetData } from './hooks/drop-actor-sheet-data.js' import { testCard } from './chat/cards/test.js' +import { initEEC } from './common/chatcardlib/src/chatcardlib.js' Hooks.on('renderSettingsConfig', (app, html, options) => { const systemTab = $(app.form).find('.tab[data-tab=system]') @@ -141,12 +142,9 @@ Hooks.once('init', async function () { } Combat.prototype.rollInitiative = rollInitiative - // EnhancedChatCard.register( testCard) }) -Hooks.once('eec.ready', () => { - game.enhancedChatCardsLib.register( testCard) -}) +initEEC(testCard, testCard, testCard) Hooks.on('renderCombatTracker', (app, html, data) => CoC7Combat.renderCombatTracker(app, html, data) diff --git a/lib/chatcardlib/LICENSE.md b/module/common/chatcardlib/LICENSE.md similarity index 95% rename from lib/chatcardlib/LICENSE.md rename to module/common/chatcardlib/LICENSE.md index 35ac75c1..fdcdb502 100644 --- a/lib/chatcardlib/LICENSE.md +++ b/module/common/chatcardlib/LICENSE.md @@ -1,6 +1,6 @@ -*MIT License +# MIT License -Copyright (c) 2021 Bruno BIDET +Copyright (c) 2021 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/module/common/chatcardlib/init.js b/module/common/chatcardlib/init.js new file mode 100644 index 00000000..b98cc82e --- /dev/null +++ b/module/common/chatcardlib/init.js @@ -0,0 +1,3 @@ +import { initHooks } from './src/chatcardlib.js' + +initHooks() diff --git a/lib/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js similarity index 79% rename from lib/chatcardlib/src/chatcardlib.js rename to module/common/chatcardlib/src/chatcardlib.js index a5cd5b01..559db52e 100644 --- a/lib/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -1,48 +1,50 @@ const ECC_CLASS = 'enhanced-chat-card' -Hooks.once('socketlib.ready', initECCSocket) - -Hooks.on('renderChatMessage' , (app, html, data) => EnhancedChatCard.bindListeners(html)) - -function initECCSocket(){ - EnhancedChatCardLib.socket = socketlib.registerSystem(game.system.id) //Socket is attached to current system - Hooks.callAll("eec.ready"); +export function initEEC (...cardclass) { + // Hooks.once('init', function () { + // }) + + Hooks.once('socketlib.ready', function () { + EnhancedChatCardLib.register( cardclass) + EnhancedChatCardLib.socket = socketlib.registerSystem(game.system.id) //Socket is attached to current system + }) + + Hooks.on('renderChatMessage', (app, html, data) => + EnhancedChatCard.bindListeners(html) + ) } -class EnhancedChatCardLib { - constructor(){ +export class EnhancedChatCardLib { + constructor () { this.types = new Map() this.socket = null - this.enhancedChatCardClass = EnhancedChatCard + // this.enhancedChatCardClass = EnhancedChatCard } - static set socket(x){ - if(!game.enhancedChatCardsLib) game.enhancedChatCardsLib = new EnhancedChatCardLib() + static set socket (x) { + if (!game.enhancedChatCardsLib) + game.enhancedChatCardsLib = new EnhancedChatCardLib() game.enhancedChatCardsLib.socket = x } - static get types(){ - if(!game.enhancedChatCardsLib) game.enhancedChatCardsLib = new EnhancedChatCardLib() - return game.enhancedChatCardsLib.types + static get types () { + if (!game.enhancedChatCardsLib) + game.enhancedChatCardsLib = new EnhancedChatCardLib() + return game.enhancedChatCardsLib.types } - register (cardConstructor){ - if ( !this.types.get( cardConstructor.name)){ - this.types.set( cardConstructor.name, cardConstructor) - } + static register (cardConstructors) { + cardConstructors.forEach(cardConstructor => { + if (!EnhancedChatCardLib.types.get(cardConstructor.name)) { + EnhancedChatCardLib.types.set(cardConstructor.name, cardConstructor) + } + }); } - - // registerCard( cardClass){ - // const cardClassName = cardClass.name - // if( !this.types.get( cardClassName)){ - // this.types.set( cardClassName, cardClass) - // } - // } } export class EnhancedChatCard { - static register( cardConstructor){ - EnhancedChatCardLib.register( cardConstructor) + static register (cardConstructor) { + EnhancedChatCardLib.register(cardConstructor) } constructor (options = {}) { @@ -68,7 +70,8 @@ export class EnhancedChatCard { //Publish by current user by default unless options.GMchatCard const html = await renderTemplate(this.template, this) const htmlCardElement = $(html)[0] - if(this.options.attachObject) htmlCardElement.dataset.object = escape(this.objectDataString) + if (this.options.attachObject) + htmlCardElement.dataset.object = escape(this.objectDataString) htmlCardElement.dataset.eccClass = this.constructor.name htmlCardElement.classList.add(...this.cssClasses) @@ -81,9 +84,10 @@ export class EnhancedChatCard { optionnalChatData ) - if ( ["gmroll", "blindroll"].includes(this.rollMode) ) chatData.whisper = ChatMessage.getWhisperRecipients("GM"); - if ( this.rollMode === "selfroll" ) chatData.whisper = [game.user.id]; - if ( this.rollMode === "blindroll" ) chatData.blind = true; + if (['gmroll', 'blindroll'].includes(this.rollMode)) + chatData.whisper = ChatMessage.getWhisperRecipients('GM') + if (this.rollMode === 'selfroll') chatData.whisper = [game.user.id] + if (this.rollMode === 'blindroll') chatData.blind = true ChatMessage.create(chatData).then(msg => { return msg @@ -100,7 +104,7 @@ export class EnhancedChatCard { // Attach the sanCheckCard object to the message. htmlCardElement.dataset.object = escape(this.objectDataString) - htmlCardElement.dataset.cardClass = this.constructor.name + htmlCardElement.dataset.eccClass = this.constructor.name htmlCardElement.classList.add(...this.cssClasses) // Update the message. @@ -132,34 +136,34 @@ export class EnhancedChatCard { const htmlCardElement = htmlMessageElement.querySelector(`.${ECC_CLASS}`) if (!htmlCardElement) return if (!htmlCardElement.dataset.eccClass) return - const cardClass = EnhancedChatCardLib.types.get( htmlCardElement.dataset.eccClass) - if ( !cardClass) { - console.error(`Unknown chat card type: ${htmlCardElement.dataset.eccClass}`) + const cardClass = game.enhancedChatCardsLib.types.get( + htmlCardElement.dataset.eccClass + ) + if (!cardClass) { + console.error( + `Unknown chat card type: ${htmlCardElement.dataset.eccClass}` + ) return } const card = await EnhancedChatCard.fromHTMLCardElement(htmlCardElement) - const typedCard = Object.assign( - new cardClass(), - card - ) + const typedCard = Object.assign(new cardClass(), card) typedCard.assignObject() typedCard.activateListeners(html) } - /** * Override to reassign object type * @returns */ - assignObject () {} + assignObject () {} /** * * @param {*} event will check for an action (data-action) * if a method with that name exist it will be triggered. */ - _onButton (event) { + _onButton (event) { const button = event.currentTarget // button.style.display = 'none' //Avoid multiple push const action = button.dataset.action @@ -221,7 +225,7 @@ export class EnhancedChatCard { set messageId (x) { this._messageId = x } - + static get defaultOptions () { return { attachObject: true, @@ -234,7 +238,7 @@ export class EnhancedChatCard { get objectData () { return JSON.parse(this.objectDataString) } - + get objectDataString () { return JSON.stringify(this, (key, value) => { if (value === null) return undefined @@ -326,4 +330,4 @@ export class EnhancedChatCard { if (card) this._update(card) this.updateChatCard() } -} \ No newline at end of file +} diff --git a/system.json b/system.json index c5531d1a..8e4bcfc6 100644 --- a/system.json +++ b/system.json @@ -7,7 +7,6 @@ "minimumCoreVersion": "0.8.6", "compatibleCoreVersion": "0.8.9", "esmodules": [ - "lib/chatcardlib/src/chatcardlib.js", "lib/socketlib/src/libwrapper_shim.js", "lib/socketlib/src/socketlib.js", "bundle.js" diff --git a/templates/chat/cards/test.html b/templates/chat/cards/test.html index ca592e81..076fd200 100644 --- a/templates/chat/cards/test.html +++ b/templates/chat/cards/test.html @@ -1,5 +1,7 @@
              Pouet pouet {{localize 'CoC7.Critical'}} - + {{#if critical}} + CRITICAL IS ON + {{/if}}
              \ No newline at end of file From ab21d822c996a18c21cadeef2bb7c70b085269ea Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Sat, 16 Oct 2021 22:30:22 +0200 Subject: [PATCH 230/726] Swtich class added --- module/chat/cards/roll-card.js | 2 +- module/chat/interactive-chat-card.js | 2 +- module/common/chatcardlib/src/chatcardlib.js | 85 ++++++++++++++++---- templates/chat/cards/test.html | 2 +- 4 files changed, 74 insertions(+), 17 deletions(-) diff --git a/module/chat/cards/roll-card.js b/module/chat/cards/roll-card.js index 2bc78b0f..72adcb2e 100644 --- a/module/chat/cards/roll-card.js +++ b/module/chat/cards/roll-card.js @@ -181,7 +181,7 @@ export class RollCard { get message () { if (this._message) return this._message - if (this._messageId) return game.message.get(this._messageId) + if (this._messageId) return game.messages.get(this._messageId) return undefined } diff --git a/module/chat/interactive-chat-card.js b/module/chat/interactive-chat-card.js index abc32fe1..c9f438bc 100644 --- a/module/chat/interactive-chat-card.js +++ b/module/chat/interactive-chat-card.js @@ -160,7 +160,7 @@ export class InteractiveChatCard { get message () { if (this._message) return this._message - if (this._messageId) return game.message.get(this._messageId) + if (this._messageId) return game.messages.get(this._messageId) return undefined } diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 559db52e..56cfeb4d 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -1,5 +1,20 @@ + const ECC_CLASS = 'enhanced-chat-card' +const PERMISSION_TYPE = { + GM: 'gm', + OWNERS: 'owners', + SPEAKER: 'speaker', + USER: 'user', + EVERYONE: '' +} + +const STATE = { + ON: 'switched-on', + OFF: 'switched-off' +} + + export function initEEC (...cardclass) { // Hooks.once('init', function () { // }) @@ -7,6 +22,8 @@ export function initEEC (...cardclass) { Hooks.once('socketlib.ready', function () { EnhancedChatCardLib.register( cardclass) EnhancedChatCardLib.socket = socketlib.registerSystem(game.system.id) //Socket is attached to current system + EnhancedChatCardLib.socket.register('gm_onToggle', EnhancedChatCardLib.gm_onToggle) + // EnhancedChatCardLib.socket.register('gmtradeitemto', gmtradeitemto) }) Hooks.on('renderChatMessage', (app, html, data) => @@ -14,7 +31,7 @@ export function initEEC (...cardclass) { ) } -export class EnhancedChatCardLib { +class EnhancedChatCardLib { constructor () { this.types = new Map() this.socket = null @@ -27,6 +44,18 @@ export class EnhancedChatCardLib { game.enhancedChatCardsLib.socket = x } + static get socket () { + if( !game.enhancedChatCardsLib) { + ui.notifications.error( 'EEC not Initialized') + return undefined + } + if( !game.enhancedChatCardsLib.socket){ + ui.notifications.error( 'EEC no socket') + return undefined + } + return game.enhancedChatCardsLib.socket + } + static get types () { if (!game.enhancedChatCardsLib) game.enhancedChatCardsLib = new EnhancedChatCardLib() @@ -40,12 +69,16 @@ export class EnhancedChatCardLib { } }); } + + static gm_onToggle (data){ + ui.notifications.info( 'gm_onToggle') + } } export class EnhancedChatCard { - static register (cardConstructor) { - EnhancedChatCardLib.register(cardConstructor) - } + // static register (cardConstructor) { + // EnhancedChatCardLib.register(cardConstructor) + // } constructor (options = {}) { this._options = options @@ -110,25 +143,44 @@ export class EnhancedChatCard { // Update the message. const chatMessage = game.messages.get(this.messageId) - const msg = await chatMessage.update({ - content: htmlCardElement.outerHTML - }) - await ui.chat.updateMessage(msg, false) - return msg + const msg = await chatMessage.update({ //Dispatch request by socket + content: htmlCardElement.outerHTML //Dispatch request by socket + }) //Dispatch request by socket + await ui.chat.updateMessage(msg, false) //Dispatch request by socket + return msg //Dispatch request by socket } } activateListeners (html) { + const card = this html.on( 'click', - `.${ECC_CLASS} .ic-radio-switch`, + `.${ECC_CLASS} .ecc-radio-switch`, this._onToggle.bind(this) ) - html.on('click', `.${ECC_CLASS} .ic-switch`, this._onToggle.bind(this)) + html.on('click', `.${ECC_CLASS} .ecc-switch`, this._onToggle.bind(this)) html.on('click', `.${ECC_CLASS} .submit`, this._onSubmit.bind(this)) - html.on('focusout', 'input', this._onSubmit.bind(this)) + html.on('focusout', `.${ECC_CLASS} input`, this._onSubmit.bind(this)) html.on('click', `.${ECC_CLASS} button`, this._onButton.bind(this)) - html.on('keydown', 'form', this._onKey.bind(this)) + html.on('keydown', `.${ECC_CLASS} form`, this._onKey.bind(this)) + + html.find(`.${ECC_CLASS} .ecc-switch`).each( function() { + card.setState(this) + card.setVisibility(this)}) + } + + setState( element){ + if( !element.dataset.flag) return + element.classList.add( this[element.dataset.flag]?STATE.ON:STATE.OFF) + } + + setVisibility( element){ + if( !element.dataset.eecVisibility) return + + } + + hasPerm( restrictedTo){ + if( !restrictedTo.length) return true } static async bindListeners (html) { @@ -208,7 +260,7 @@ export class EnhancedChatCard { get message () { if (this._message) return this._message - if (this._messageId) return game.message.get(this._messageId) + if (this._messageId) return game.messages.get(this._messageId) return undefined } @@ -288,6 +340,7 @@ export class EnhancedChatCard { await card.assignObject() return card } + setFlag (flagName) { if (!flagName && !($.type(flagName) === 'string')) return this[flagName] = true @@ -303,6 +356,10 @@ export class EnhancedChatCard { } async _onToggle (event) { + const answer = await EnhancedChatCardLib.socket.executeAsGM('gm_onToggle', { + event: event, + card: this + }) event.preventDefault() const target = event.currentTarget diff --git a/templates/chat/cards/test.html b/templates/chat/cards/test.html index 076fd200..24f6b381 100644 --- a/templates/chat/cards/test.html +++ b/templates/chat/cards/test.html @@ -1,6 +1,6 @@
              Pouet pouet - {{localize 'CoC7.Critical'}} + {{localize 'CoC7.Critical'}} {{#if critical}} CRITICAL IS ON {{/if}} From ab3f939801abdb4a46f29eef844d59755e7b32be Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 17 Oct 2021 13:04:22 +0100 Subject: [PATCH 231/726] Update menu system compatibility for 0.8 and v9 FoundryVTT --- module/coc7.js | 3 +- module/menu.js | 199 ++++++--------------------------- module/utilities.js | 41 ++----- styles/interface/controls.less | 12 +- templates/coc7-menu.html | 23 ---- 5 files changed, 52 insertions(+), 226 deletions(-) delete mode 100644 templates/coc7-menu.html diff --git a/module/coc7.js b/module/coc7.js index 88a28a36..821f5610 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -419,7 +419,8 @@ Hooks.on('renderActorSheet', CoC7CharacterSheetV2.renderSheet) // TODO : change Hooks.on('renderItemSheet', CoC7CharacterSheetV2.renderSheet) // TODO : change from CoC7CharacterSheetV2 // Hooks.on('dropCanvasData', CoC7Parser.onDropSomething); -Hooks.on('renderSceneControls', CoC7Menu.renderMenu) +Hooks.on('getSceneControlButtons', CoC7Menu.getButtons) +Hooks.on('renderSceneControls', CoC7Menu.renderControls) Hooks.on('dropCanvasData', CoC7Canvas.onDropSomething) diff --git a/module/menu.js b/module/menu.js index 6aedeafb..7f809676 100644 --- a/module/menu.js +++ b/module/menu.js @@ -1,163 +1,40 @@ -/* global $, canvas, duplicate, game, Hooks, renderTemplate, ui */ - +/* global canvas, foundry, game, PlaceablesLayer */ import { CoC7Chat } from './chat.js' import { CoC7Utilities } from './utilities.js' import { CoC7ActorImporterDialog } from './apps/actor-importer-dialog.js' import { CoC7LinkCreationDialog } from './apps/link-creation-dialog.js' -export class CoC7Menu { - constructor (options) { - this.options = options - this.controls = this._getControls() - } - - static async renderMenu (controls, html) { - // This could be made non static by moving the game.CoC7.menus initialization to getSceneControlButtons hook - if (!game.CoC7.menus) { - game.CoC7.menus = new CoC7Menu() - // ui.notifications.info( 'Menu init'); - } - - const menu = await renderTemplate( - 'systems/CoC7/templates/coc7-menu.html', - game.CoC7.menus.getData() - ) - const coc7Button = $(menu) - - coc7Button - .find('.scene-control') - .click(game.CoC7.menus._onClickMenu.bind(game.CoC7.menus)) - coc7Button - .find('.control-tool') - .click(game.CoC7.menus._onClickTool.bind(game.CoC7.menus)) - - if (game.CoC7.menus.activeControl) { - html.find('.scene-control').removeClass('active') - } - - html - .find('.scene-control') - .click(game.CoC7.menus._clearActive.bind(game.CoC7.menus)) - - html.append(coc7Button) - game.CoC7.menus.html = html +class CoC7MenuLayer extends PlaceablesLayer { + constructor () { + super() + this.objects = {} } - get control () { - if (!this.controls) return null - return this.controls.find(c => c.name === this.activeControl) || null + static get layerOptions () { + return foundry.utils.mergeObject(super.layerOptions, { + name: 'coc7menu', + zIndex: 60 + }) } - _clearActive (event) { - event.preventDefault() - const customMenuActive = !!this.activeControl - this.activeControl = '' - const li = event.currentTarget - const controlName = li.dataset?.control - if (ui.controls.activeControl === controlName && customMenuActive) { - ui.controls.render() - } + static get documentName () { + return 'Token' } - _onClickTool (event) { - event.preventDefault() - if (!canvas?.ready) return - const li = event.currentTarget - const toolName = li.dataset.tool - const tool = this.control.tools.find(t => t.name === toolName) - - // ui.notifications.info( `found tool: ${tool.name}`); - - if (tool.toggle) { - // Handle Toggles - tool.active = !tool.active - if (tool.onClick instanceof Function) tool.onClick(tool.active) - } else if (tool.button) { - // Handle Buttons - if (tool.onClick instanceof Function) tool.onClick(event) - } else { - // Handle Tools - tool.activeTool = toolName - if (tool.onClick instanceof Function) tool.onClick() - } - } - - _onClickMenu (event) { - event.preventDefault() - if (!canvas?.ready) return - const li = event.currentTarget - const controlName = li.dataset.control - const control = this.controls.find(t => t.name === controlName) - - if (control.button) { - if (control.onClick instanceof Function) control.onClick(event) // If control is a button, don't make it active. - // ui.controls.render(); - } else { - // If control is a menu and is not active. - // html.find('.scene-control').removeClass('active'); // Deactivate other menu. - // event.currentTarget.classList.add('active'); //Activate this menu. - this.activeControl = controlName // Set curstom active control to that control. - ui.controls.render() - } - } - - getData () { - const isActive = !!canvas?.scene - - // Filter to control tool sets which can be displayed - const controls = this.controls - .filter(s => s.visible !== false) - .map(s => { - s = duplicate(s) - - // Add styling rules - s.css = [ - 'custom-control', - s.button ? 'button' : null, - isActive && this.activeControl === s.name ? 'active' : '' - ] - .filter(t => !!t) - .join(' ') - - // if( this.activeControl === s.name) ui.notifications.warn( `Active control: ${this.activeControl}`); - - if (s.button) return s - - // Prepare contained tools - s.tools = s.tools - .filter(t => t.visible !== false) - .map(t => { - const active = - isActive && (s.activeTool === t.name || (t.toggle && t.active)) - t.css = [ - t.toggle ? 'toggle' : null, - active ? 'active' : null, - t.class ? t.class : null - ] - .filter(t => !!t) - .join(' ') - return t - }) - return s - }) - - Hooks.call('renderSceneMenuCoC7', controls[0].css.indexOf('active') !== -1) - - // Return data for rendering - return { - active: isActive, - cssClass: isActive ? '' : 'disabled', - controls: controls // .filter(s => s.tools.length) - } + get placeables () { + return [] } +} - _getControls () { +export class CoC7Menu { + static getButtons (controls) { + canvas.coc7gmtools = new CoC7MenuLayer() const isGM = game.user.isGM - const controls = [] controls.push({ - icon: 'game-icon game-icon-tentacle-strike', - name: 'main-menu', + name: 'coc7menu', title: 'CoC7.GmTools', + layer: 'coc7gmtools', + icon: 'game-icon game-icon-tentacle-strike', visible: isGM, tools: [ { @@ -166,7 +43,7 @@ export class CoC7Menu { name: 'devphase', active: game.settings.get('CoC7', 'developmentEnabled'), title: 'CoC7.DevPhase', - onClick: async () => await CoC7Utilities.toggleDevPhase() + onClick: async (toggle) => await CoC7Utilities.toggleDevPhase(toggle) }, { toggle: true, @@ -174,7 +51,7 @@ export class CoC7Menu { name: 'charcreate', active: game.settings.get('CoC7', 'charCreationEnabled'), title: 'CoC7.CharCreationMode', - onClick: async () => await CoC7Utilities.toggleCharCreation() + onClick: async (toggle) => await CoC7Utilities.toggleCharCreation(toggle) }, { button: true, @@ -193,7 +70,7 @@ export class CoC7Menu { name: 'xptoggle', active: game.settings.get('CoC7', 'xpEnabled'), title: 'CoC7.toggleXP', - onClick: async () => await CoC7Utilities.toggleXPGain() + onClick: async (toggle) => await CoC7Utilities.toggleXPGain(toggle) }, { button: true, @@ -211,23 +88,17 @@ export class CoC7Menu { } ] }) + } - controls.push({ - icon: 'game-icon game-icon-d10', - name: 'dice-roll', - title: 'CoC7.RollDice', - button: true, - onClick: event => CoC7Utilities.rollDice(event) - }) - - controls.push({ - icon: 'fas fa-link', - name: 'create-link', - title: 'CoC7.CreateLink', - visible: isGM, - button: true, - onClick: CoC7LinkCreationDialog.create - }) - return controls + static renderControls (app, html, data) { + const isGM = game.user.isGM + const keeperMenu = html.find('.game-icon-tentacle-strike').parent() + keeperMenu.addClass('coc7-menu') + if (isGM) { + keeperMenu.after('
            7. ') + } + keeperMenu.after('') + html.find('.coc7-menu.coc7-dice-roll').click((event) => CoC7Utilities.rollDice(event)) + html.find('.coc7-menu.coc7-create-link').click((event) => CoC7LinkCreationDialog.create(event)) } } diff --git a/module/utilities.js b/module/utilities.js index b93585f4..9097b9fa 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -390,45 +390,31 @@ export class CoC7Utilities { return false } - static async toggleDevPhase () { - const isDevEnabled = game.settings.get('CoC7', 'developmentEnabled') - await game.settings.set('CoC7', 'developmentEnabled', !isDevEnabled) - const group = game.CoC7.menus.controls.find(b => b.name === 'main-menu') - const tool = group.tools.find(t => t.name === 'devphase') - tool.title = game.settings.get('CoC7', 'developmentEnabled') - ? game.i18n.localize('CoC7.DevPhaseEnabled') - : game.i18n.localize('CoC7.DevPhaseDisabled') + static async toggleDevPhase (toggle) { + await game.settings.set('CoC7', 'developmentEnabled', toggle) ui.notifications.info( - game.settings.get('CoC7', 'developmentEnabled') + toggle ? game.i18n.localize('CoC7.DevPhaseEnabled') : game.i18n.localize('CoC7.DevPhaseDisabled') ) - ui.controls.render() game.socket.emit('system.CoC7', { type: 'updateChar' }) CoC7Utilities.updateCharSheets() } - static async toggleCharCreation () { - const isCharCreation = game.settings.get('CoC7', 'charCreationEnabled') - await game.settings.set('CoC7', 'charCreationEnabled', !isCharCreation) - const group = game.CoC7.menus.controls.find(b => b.name === 'main-menu') - const tool = group.tools.find(t => t.name === 'charcreate') - tool.title = game.settings.get('CoC7', 'charCreationEnabled') - ? game.i18n.localize('CoC7.CharCreationEnabled') - : game.i18n.localize('CoC7.CharCreationDisabled') + static async toggleCharCreation (toggle) { + await game.settings.set('CoC7', 'charCreationEnabled', toggle) ui.notifications.info( - game.settings.get('CoC7', 'charCreationEnabled') + toggle ? game.i18n.localize('CoC7.CharCreationEnabled') : game.i18n.localize('CoC7.CharCreationDisabled') ) - ui.controls.render() game.socket.emit('system.CoC7', { type: 'updateChar' }) CoC7Utilities.updateCharSheets() - Hooks.call('toggleCharCreation', !isCharCreation) + Hooks.call('toggleCharCreation', toggle) } static async startRest () { @@ -523,20 +509,13 @@ export class CoC7Utilities { ChatMessage.create(chatData) } - static async toggleXPGain () { - const isXPEnabled = game.settings.get('CoC7', 'xpEnabled') - await game.settings.set('CoC7', 'xpEnabled', !isXPEnabled) - const group = game.CoC7.menus.controls.find(b => b.name === 'main-menu') - const tool = group.tools.find(t => t.name === 'xptoggle') - tool.title = game.settings.get('CoC7', 'xpEnabled') - ? game.i18n.localize('CoC7.XPGainEnabled') - : game.i18n.localize('CoC7.XPGainDisabled') + static async toggleXPGain (toggle) { + await game.settings.set('CoC7', 'xpEnabled', toggle) ui.notifications.info( - game.settings.get('CoC7', 'xpEnabled') + toggle ? game.i18n.localize('CoC7.XPGainEnabled') : game.i18n.localize('CoC7.XPGainDisabled') ) - ui.controls.render() } static async rollDice (event, options = {}) { diff --git a/styles/interface/controls.less b/styles/interface/controls.less index 2f8cab84..2e98b9ce 100644 --- a/styles/interface/controls.less +++ b/styles/interface/controls.less @@ -1,5 +1,5 @@ #controls { - .scene-control.custom-control { + .coc7-menu { background: rgba(30, 80, 80, 0.5) !important; &.active, &:hover { @@ -7,12 +7,10 @@ border-bottom: 1px solid #008060 !important; box-shadow: 0 0 10px #008060 !important; } - .control-tool { - &.xp_toggle { - &.active { - color: goldenrod; - } - } + } + li.control-tool.active { + i.fa-certificate { + color: goldenrod; } } } diff --git a/templates/coc7-menu.html b/templates/coc7-menu.html deleted file mode 100644 index dc180406..00000000 --- a/templates/coc7-menu.html +++ /dev/null @@ -1,23 +0,0 @@ -
              {{#each controls as |c|}} -
            8. - -
                - {{#each c.tools as |t|}} -
              1. - -
              2. - {{/each}} -
              -
            9. -{{/each}} -
              - \ No newline at end of file From 697a0f5c87d973778e501d7237d630850b044e0c Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 17 Oct 2021 14:10:40 +0100 Subject: [PATCH 232/726] Fix menu link order --- module/menu.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/menu.js b/module/menu.js index 7f809676..ba502c82 100644 --- a/module/menu.js +++ b/module/menu.js @@ -95,9 +95,9 @@ export class CoC7Menu { const keeperMenu = html.find('.game-icon-tentacle-strike').parent() keeperMenu.addClass('coc7-menu') if (isGM) { - keeperMenu.after('
            10. ') + keeperMenu.after('') } - keeperMenu.after('') + keeperMenu.after('
            11. ') html.find('.coc7-menu.coc7-dice-roll').click((event) => CoC7Utilities.rollDice(event)) html.find('.coc7-menu.coc7-create-link').click((event) => CoC7LinkCreationDialog.create(event)) } From 4ca9fb8d0afa079c1ad696edf55eb1c0eea8852a Mon Sep 17 00:00:00 2001 From: Rangertheman <81484515+Rangertheman@users.noreply.github.com> Date: Sun, 17 Oct 2021 21:50:15 +0200 Subject: [PATCH 233/726] Update sv.json --- lang/sv.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lang/sv.json b/lang/sv.json index 61c6681c..87ed8a40 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -705,6 +705,7 @@ "CoC7.ActorImporter": "Karaktärsimport", "CoC7.ActorImporterSummary": "Importera en SLP eller varelse från beskrivning och värden. Klistra bara in motsvarande text", "CoC7.PasteTheDataBelow": "Klistra in texten nedan", + "CoC7.TextFieldInvalidCharacters": "Det finns ogiltiga tecken i texten. Vänligen rätta till det, annars kommer de att tas bort", "CoC7.SelectActorType": "Välj karaktärstyp", "CoC7.NonPlayingCharacter": "Spelledarperson (SLP)", "CoC7.Creature": "Varelse", @@ -769,6 +770,7 @@ "SETTINGS.TitleChatCards": "Chattkortsinställningar", "SETTINGS.TitleScene": "Sceninställningar", "SETTINGS.TitleSheet": "Formulärinställningar", + "SETTINGS.TitleGameArtwork": "Grafikinställningar", "SETTINGS.TitleWeapon": "Vapeninställningar", "SETTINGS.TitleDiceSoNice": "Inställningar för Dice So Nice", "SETTINGS.TitleDeveloperDebug": "Utvecklar- och felsökningsinställningar", @@ -813,7 +815,7 @@ "SETTINGS.TenDieNoModHint": "Färgval för tiotalstärning när DsN används. (lämna rutan tom för att använda spelarens standardintsällning)", "SETTINGS.TenDieBonus": "[DsN] Färgval för bonustärning", "SETTINGS.TenDieBonusHint": "Färgval för bonustärning när DsN används. (lämna rutan tom för att använda spelarens standardintsällning)", - "SETTINGS.TenDiePenalty": "[DsN] TFärgval för strafftärning", + "SETTINGS.TenDiePenalty": "[DsN] Färgval för strafftärning", "SETTINGS.TenDiePenaltyHint": "Färgval för strafftärning när DsN används. (lämna rutan tom för att använda spelarens standardintsällning)", "SETTINGS.OverrideGameArtwork": "Skriv över spelets grafik", "SETTINGS.OverrideGameArtworkHint": "!!OMSTART KRÄVS!! ger åtkomst till avancerade spelinställningar, lämna tomt för standardinställningar", From 43bef009aec73245ded194df1725d9f8fa8938df Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 17 Oct 2021 21:04:03 +0000 Subject: [PATCH 234/726] Updated translations list --- .github/TRANSLATIONS.md | 762 ++++++++++++++++++++-------------------- 1 file changed, 381 insertions(+), 381 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 0d8bb6c8..96686b5b 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,387 +2,387 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The **pt-BR** translation is currently up to date - -| Key | cn | cs | de | es | fr | ja | pl | sv | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **376** | **152** | **169** | **40** | **40** | **40** | **17** | **2** | **46** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +The following translations are currently up to date **pt-BR**, **sv** + +| Key | cn | cs | de | es | fr | ja | pl | zh-TW | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **376** | **152** | **169** | **40** | **40** | **40** | **17** | **46** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ##### CoC7.ActorImporter From d367e20e5223f42feb042a8a993561bd1be8e226 Mon Sep 17 00:00:00 2001 From: castanho Date: Sun, 17 Oct 2021 22:24:44 -0300 Subject: [PATCH 235/726] Add the ability for spells to be opened through books --- module/items/book/data.js | 9 +++++++++ module/items/book/sheet.js | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/module/items/book/data.js b/module/items/book/data.js index 5098a869..c2e8ea59 100644 --- a/module/items/book/data.js +++ b/module/items/book/data.js @@ -3,6 +3,7 @@ import { SanCheckCard } from '../../chat/cards/san-check.js' import { CoC7Check } from '../../check.js' import { CoC7Item } from '../item.js' +import { CoC7Spell } from '../spell/data.js' export class CoC7Book extends CoC7Item { constructor (data, context) { @@ -43,6 +44,14 @@ export class CoC7Book extends CoC7Item { return await this.update({ 'data.spells': collection }) } + async spellDetail (index) { + const data = this.data.data.spells[index] + const parent = this.actor ? this.actor : null + const spell = new CoC7Spell(data, { parent }) + console.log(spell) + return await spell.sheet.render(true) + } + /** * Handles all the logic involving the attempt of initial reading * @returns {Promise} @see listen @see grantInitialReading diff --git a/module/items/book/sheet.js b/module/items/book/sheet.js index 250e1614..739cea88 100644 --- a/module/items/book/sheet.js +++ b/module/items/book/sheet.js @@ -54,6 +54,7 @@ export class CoC7BookSheet extends ItemSheet { this.item.attemptInitialReading() }) html.find('.delete-spell').click(event => this._onDelete(event)) + html.find('.spell-name').click(event => this._onSpellDetail(event)) html.find('.teach-spell').click(event => { const id = $(event.currentTarget) .parents('li') @@ -85,6 +86,15 @@ export class CoC7BookSheet extends ItemSheet { html.find('.option').click(event => this.modifyType(event)) } + async _onSpellDetail (event) { + if (!game.user.isGM) return + event.preventDefault() + const element = $(event.currentTarget) + /** @see data-index property on template */ + const index = element.parents('li').data('index') + return await this.item.spellDetail(index) + } + /** * It is called every time the user delete a spell on the sheet * @param {jQuery} event @see activateListeners From cb7d758fa8e415191eaa954d04ac0278fbf9b729 Mon Sep 17 00:00:00 2001 From: Sad Date: Mon, 18 Oct 2021 10:38:16 +0800 Subject: [PATCH 236/726] Update zh-TW.json --- lang/zh-TW.json | 50 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/lang/zh-TW.json b/lang/zh-TW.json index 39f2b709..d531a92a 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -305,7 +305,7 @@ "CoC7.MythosRating": "神話等級", "CoC7.StudyTime": "精讀時間", "CoC7.SpellCastingTime": "施法時間", - "CoC7.SpellCastingCost": "施法成本", + "CoC7.SpellCastingCost": "施法消耗", "CoC7.CallSpell": "呼喚", "CoC7.DismissSpell": "退散", "CoC7.ContactSpell": "接觸", @@ -777,5 +777,51 @@ "SETTINGS.StanbyGMRollsHint": "當KP從指定的角色卡中進行擲骰時,顯示一個擲骰按鈕而不是擲骰。", "SETTINGS.ShowExperimentalFeatures": "顯示實驗性功能。", "SETTINGS.ShowExperimentalFeaturesHint": "如果你使用這些功能,你的世界可能在未來的版本中變得無法使用。僅用於測試。不要在你遊玩中的遊戲世界使用這些功能。", - "CoC7.ExperimentalFeaturesWarning": "該功能正在開發中,不建議在你的遊戲世界中使用。" + "CoC7.ExperimentalFeaturesWarning": "該功能正在開發中,不建議在你的遊戲世界中使用。", + "CoC7.AttacksPerRound": "每輪攻擊次數", + "CoC7.Casting": "正在施放魔法", + "CoC7.SanityCost": "心智消耗", + "CoC7.PowerCost": "意志消耗", + "CoC7.HitPointsCost": "HP消耗", + "CoC7.MagicPointsCost": "MP消耗", + "CoC7.OtherCosts": "其他消耗", + "CoC7.CastingSpell": "施放{咒語}。", + "CoC7.NoResponse": "無反應", + "CoC7.InitiatorMissed": "{名稱}已錯過了。", + "CoC7.DriveAutoSkillName": "自動駕駛", + "CoC7.SortBySkillName": "按技能名稱排序", + "CoC7.SortBySkillValue": "按技能大小排序", + "CoC7.UncommonSkillsShow": "顯示不常見的技能", + "CoC7.UncommonSkillsHide": "隱藏不常見的技能", + "CoC7.InventoryIsCurrentlyEmpty": "清單目前是空的。", + "CoC7.EmptyCharacterSkillList": "通過拖放在這裡進行設置、增加職業或技能。", + "CoC7.TextFieldInvalidCharacters": "文本中存在無效文字,請修正,否則將被刪除", + "CoC7.ImportedCharactersFolder": "匯入角色", + "CoC7.ImportSkillItemLocations": "在其中尋找技能/法術/武器", + "CoC7.ImportActorItemsNone": "無", + "CoC7.ImportActorItemsItem": "道具", + "CoC7.ImportActorItemsItemWorldModuleSystem": "道具/世界/模組/系統", + "CoC7.ImportActorItemsWorldModuleItemSystem": "世界/模組/道具/系統", + "CoC7.Migrate.WithModulesMessage": "

              你的世界或模組可能需要更新以運行版本{版本}。

              在開始升級之前,請備份你的世界和下面列出的模組文件夾。

              如果你不更新你的世界,系統將無法正常工作。

              下面的模組包含角色或物品,所以也將被檢查。

              {模組}

              世界完成後可能被重新啟動。

              " , + "CoC7.MessageDistanceCalculationFailure": "無法計算Token之間的距離,請使用角色卡。", + "CoC7.ToolTipSkill": "
              1. 點擊左鍵 顯示選項的擲骰
              2. Shift + 左鍵 立即投擲普通難度檢定
              1. 點擊右鍵 顯示選項的對抗檢定
              2. Shift + 右鍵 立即進行對抗檢定
              1. Alt/Option + 右鍵 顯示選項的聯合檢定
              ", + "CoC7.ToolTipKeeperSkill": "
              1. CTRL + 左鍵 對話欄新增檢定連結
              2. {other}
              ", + "CoC7.ToolTipKeeperStandbySkill": "
            12. 點擊左鍵 要求 {name} 擲骰
            13. ", + "CoC7.ToolTipDB": "
              1. 點擊左鍵 立即投擲普通難度檢定
              ", + "CoC7.ToolTipKeeperSanity": "
            14. CTRL + Alt/Option 對話欄新增San Check連結
            15. ", + "CoC7.ToolTipAutoToggle": "
              1. 點擊左鍵 切換自動計算 / 手動輸入
              2. ", + "CoC7.ToolTipSkillFlagToggle": "
                1. 雙擊切換標誌狀態
                2. ", + "CoC7.ToolTipSkillFlagged": "加上成長標記", + "CoC7.ToolTipSkillUnflagged": "移除成長標記", + "SETTINGS.TitleGameArtwork": "遊戲美術風格設定", + "SETTINGS.showIconsOnly": "在總結表上,只顯示技能列表上的圖標。", + "SETTINGS.OverrideGameArtwork": "覆蓋遊戲美術風格", + "SETTINGS.OverrideGameArtworkHint": "!!!需要重啓!!!讓人可以進入高級遊戲設定,留空為默認", + "SETTINGS.ArtPauseImage": "暫停圖片", + "SETTINGS.ArtPauseImageHint": "。輸入'null'來刪除圖片", + "SETTINGS.ArtPauseText": "暫停文字", + "SETTINGS.ArtPauseTextHint": "留空為默認", + "SETTINGS.CheckElevation": "在距離中包括高度", + "SETTINGS.CheckElevationHint": "在範圍戰鬥距離計算中使用高度", + "CoC7.toolTipDelay": "顯示提示前的毫秒延遲,0表示從不顯示" } From 9b7a547cf897ca2f8bdb4440b7e6e74f6b104465 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 18 Oct 2021 03:05:39 +0000 Subject: [PATCH 237/726] Updated translations list --- .github/TRANSLATIONS.md | 92 ++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 96686b5b..625b2d43 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -6,7 +6,7 @@ The following translations are currently up to date **pt-BR**, **sv** | Key | cn | cs | de | es | fr | ja | pl | zh-TW | | :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **376** | **152** | **169** | **40** | **40** | **40** | **17** | **46** | +| **Remaining**: | **376** | **152** | **169** | **40** | **40** | **40** | **17** | **1** | | [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -22,7 +22,7 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -38,7 +38,7 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -68,10 +68,10 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | | [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -106,7 +106,7 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -118,21 +118,21 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | | [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | | [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -156,7 +156,7 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -167,7 +167,7 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -180,7 +180,7 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -190,7 +190,7 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | | [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -198,7 +198,7 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -208,7 +208,7 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -228,7 +228,7 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -236,8 +236,8 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -248,24 +248,24 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | | [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -304,7 +304,7 @@ The following translations are currently up to date **pt-BR**, **sv** | [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | | [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -313,10 +313,10 @@ The following translations are currently up to date **pt-BR**, **sv** | [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | | [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -341,8 +341,8 @@ The following translations are currently up to date **pt-BR**, **sv** | [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | -| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -357,8 +357,8 @@ The following translations are currently up to date **pt-BR**, **sv** | [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | | [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -371,7 +371,7 @@ The following translations are currently up to date **pt-BR**, **sv** | [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | | [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -382,7 +382,7 @@ The following translations are currently up to date **pt-BR**, **sv** | [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | | [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | +| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ##### CoC7.ActorImporter From d14d40f465a89ff5d9e5d407de88d72155bda6c4 Mon Sep 17 00:00:00 2001 From: HavlockV Date: Mon, 18 Oct 2021 07:14:13 +0300 Subject: [PATCH 238/726] tags --- module/common/chatcardlib/src/chatcardlib.js | 73 +++++++++++++------- templates/chat/cards/test.html | 26 +++++-- 2 files changed, 70 insertions(+), 29 deletions(-) diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 56cfeb4d..1a689505 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -3,9 +3,11 @@ const ECC_CLASS = 'enhanced-chat-card' const PERMISSION_TYPE = { GM: 'gm', - OWNERS: 'owners', + XGM: '-gm', SPEAKER: 'speaker', + XSPEAKER: '-speaker', USER: 'user', + USER: '-user', EVERYONE: '' } @@ -22,7 +24,8 @@ export function initEEC (...cardclass) { Hooks.once('socketlib.ready', function () { EnhancedChatCardLib.register( cardclass) EnhancedChatCardLib.socket = socketlib.registerSystem(game.system.id) //Socket is attached to current system - EnhancedChatCardLib.socket.register('gm_onToggle', EnhancedChatCardLib.gm_onToggle) + EnhancedChatCardLib.socket.register('updateMessage', updateMessage) + EnhancedChatCardLib.socket.register('advise',advise) // EnhancedChatCardLib.socket.register('gmtradeitemto', gmtradeitemto) }) @@ -31,6 +34,18 @@ export function initEEC (...cardclass) { ) } +async function updateMessage( messageId, newContent){ + const chatMessage = game.messages.get(messageId) + + const msg = await chatMessage.update({ + content: newContent + }) +} + +async function advise( ){ + return +} + class EnhancedChatCardLib { constructor () { this.types = new Map() @@ -70,9 +85,9 @@ class EnhancedChatCardLib { }); } - static gm_onToggle (data){ - ui.notifications.info( 'gm_onToggle') - } + // static gm_onToggle (data){ + // ui.notifications.info( 'gm_onToggle') + // } } export class EnhancedChatCard { @@ -97,6 +112,11 @@ export class EnhancedChatCard { } async toMessage (optionnalChatData = {}) { + this.mySelectOptions = { + 0: 'option 1', + 1: 'option 2' + } + //Map eec card type if not registered already // this.registerEECClass() @@ -141,32 +161,32 @@ export class EnhancedChatCard { htmlCardElement.classList.add(...this.cssClasses) // Update the message. - const chatMessage = game.messages.get(this.messageId) - - const msg = await chatMessage.update({ //Dispatch request by socket - content: htmlCardElement.outerHTML //Dispatch request by socket - }) //Dispatch request by socket - await ui.chat.updateMessage(msg, false) //Dispatch request by socket - return msg //Dispatch request by socket + game.enhancedChatCardsLib.socket.executeAsGM( 'updateMessage', this.messageId, htmlCardElement.outerHTML) + // const chatMessage = game.messages.get(this.messageId) + + // const msg = await chatMessage.update({ //Dispatch request by socket + // content: htmlCardElement.outerHTML //Dispatch request by socket + // }) //Dispatch request by socket + // await ui.chat.updateMessage(msg, false) //Dispatch request by socket + // return msg //Dispatch request by socket } } activateListeners (html) { - const card = this html.on( 'click', `.${ECC_CLASS} .ecc-radio-switch`, this._onToggle.bind(this) ) + html.on("change", "input,select,textarea", this._onSubmit.bind(this)); html.on('click', `.${ECC_CLASS} .ecc-switch`, this._onToggle.bind(this)) html.on('click', `.${ECC_CLASS} .submit`, this._onSubmit.bind(this)) html.on('focusout', `.${ECC_CLASS} input`, this._onSubmit.bind(this)) html.on('click', `.${ECC_CLASS} button`, this._onButton.bind(this)) html.on('keydown', `.${ECC_CLASS} form`, this._onKey.bind(this)) - html.find(`.${ECC_CLASS} .ecc-switch`).each( function() { - card.setState(this) - card.setVisibility(this)}) + html.find('[data-eec-visibility]').each(( i ,el) => this.setVisibility(el)) + html.find(`.${ECC_CLASS} .ecc-switch`).each( (i, el) => this.setState(el)) } setState( element){ @@ -176,11 +196,15 @@ export class EnhancedChatCard { setVisibility( element){ if( !element.dataset.eecVisibility) return - + if( !this.hasPerm(element.dataset.eecVisibility)) element.style.display = 'none' } hasPerm( restrictedTo){ if( !restrictedTo.length) return true + if( game.user.isGM){ + if(restrictedTo.includes(PERMISSION_TYPE.XGM)) return false + return true + } } static async bindListeners (html) { @@ -236,7 +260,7 @@ export class EnhancedChatCard { event.preventDefault() const target = event.currentTarget - const card = target.closest('.interactive-card') + const card = target.closest(`.${ECC_CLASS}`) if (!card) return const updates = this._update(card) if (updates) this.updateChatCard() @@ -283,7 +307,8 @@ export class EnhancedChatCard { attachObject: true, classes: [ECC_CLASS], exclude: [], - excludeStartWith: '_' + excludeStartWith: '_', + submitOnChange: true } } @@ -356,10 +381,10 @@ export class EnhancedChatCard { } async _onToggle (event) { - const answer = await EnhancedChatCardLib.socket.executeAsGM('gm_onToggle', { - event: event, - card: this - }) + // const answer = await EnhancedChatCardLib.socket.executeAsGM('gm_onToggle', { + // event: event, + // card: this + // }) event.preventDefault() const target = event.currentTarget @@ -383,7 +408,7 @@ export class EnhancedChatCard { } this.setFlag(flag) } - const card = target.closest('.interactive-card') + const card = target.closest(`.${ECC_CLASS}`) if (card) this._update(card) this.updateChatCard() } diff --git a/templates/chat/cards/test.html b/templates/chat/cards/test.html index 24f6b381..d2eea5e6 100644 --- a/templates/chat/cards/test.html +++ b/templates/chat/cards/test.html @@ -1,7 +1,23 @@
                  - Pouet pouet - {{localize 'CoC7.Critical'}} - {{#if critical}} + + + + + + + Pouet pouet + {{localize "CoC7.Critical"}} + {{#if critical}} CRITICAL IS ON - {{/if}} -
                  \ No newline at end of file + {{/if}} + +
              +{{!-- {{selectOptions sizes selected=swarm blank="" localize=true}} --}} From 0a7d26c3bbeb52e919809ba496a88b27a4898fa3 Mon Sep 17 00:00:00 2001 From: Piotr Krygier Date: Mon, 18 Oct 2021 08:27:21 +0200 Subject: [PATCH 239/726] Update Polish translation --- lang/pl.json | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/lang/pl.json b/lang/pl.json index 5ce685ca..704e4d10 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -224,6 +224,7 @@ "CoC7.FightBack": "Kontratak", "CoC7.Dodge": "Unikanie", "CoC7.Maneuver": "Manewrowanie", + "CoC7.NoResponse": "Brak reakcji", "CoC7.OutNumbered": "Przewaga Liczebna", "CoC7.combatCard.surprised": "Zaskoczony", "CoC7.combatCard.autoSuccess": "Auto. Sukces", @@ -235,6 +236,7 @@ "CoC7.TitleSurprised": "Dodaj 1 dodatkową kość za zaskoczony cel", "CoC7.TitleAutoSuccess": "Atak automatycznie trafia", "CoC7.WinnerRollDamage": "{name} Wygrał. Rzuć na obrażenia.", + "CoC7.InitiatorMissed": "{name} nie trafił.", "CoC7.NoWinner": "Obie strony zawiodły.", "CoC7.DodgeSuccess": "{name} unik!", "CoC7.ManeuverSuccess": "{name} manewr się udał.", @@ -364,7 +366,7 @@ "CoC7.Weapon.Property.Burn": "Podpala", "CoC7.Weapon.Property.Shotgun": "Strzelba", - "CoC7.ErrorItem": "Nie udało się znaleźć przedmiotu", + "CoC7.ErrorItem": "Nie udało się odnaleźć przedmiotu", "CoC7.ErrorActor": "Couldn't locate actor", "CoC7.ErrorInvalidFormula": "{value} nie jest prawidłową formułą", "CoC7.ErrorInvalid": "Nieprawidłowy", @@ -376,6 +378,7 @@ "CoC7.DodgeSkillName": "Uniki", "CoC7.CthulhuMythosName": "Mity Cthulhu", "CoC7.CreditRatingSkillName": "Majętność", + "CoC7.DriveAutoSkillName": "Prowadzenie Samochodu", "CoC7.FightingSpecializationName": "Walka Wręcz", "CoC7.FirearmSpecializationName": "Broń Palna", "CoC7.DriveSpecializationName": "Prowadzenie", @@ -693,6 +696,7 @@ "CoC7.ActorImporter": "Import postaci", "CoC7.ActorImporterSummary": "Zaimportuj BN albo Potwora z opisu i statystyk. Po prostu wklej odpowiedni text", "CoC7.PasteTheDataBelow": "Wklej tekst poniżej", + "CoC7.TextFieldInvalidCharacters": "W tekście występują nieprawidłowe znaki. Napraw to, albo zostaną automatycznie usunięte", "CoC7.SelectActorType": "Wybierz typ postaci", "CoC7.NonPlayingCharacter": "Bohater Neutralny (BN)", "CoC7.Creature": "Potwór", @@ -707,6 +711,12 @@ "CoC7.SelectSourceLanguage": "Wybierz źródło języka tekstu", "CoC7.ImportedUnnamedCharacter": "Zaimportowano nienazwaną postać", "CoC7.CreatedImportedCharactersFolder": "Stworzono 'Imported Characters' folder'", + "CoC7.ImportedCharactersFolder": "Zaimportowano postacie", + "CoC7.ImportSkillItemLocations": "Szukaj umiejętności/przedmiotów/broni w", + "CoC7.ImportActorItemsNone": "Brak", + "CoC7.ImportActorItemsItem": "Przedmioty", + "CoC7.ImportActorItemsItemWorldModuleSystem": "Przedmioty / Świat / Moduły / System", + "CoC7.ImportActorItemsWorldModuleItemSystem": "Świat / Moduły / Przedmioty / System", "CoC7.HowToTranslateTitle": "Jak przetłumaczyć?", "CoC7.HowToTranslateWarning": "Nie instaluj żadnych modułów, którym nie ufasz.", @@ -751,6 +761,7 @@ "SETTINGS.TitleChatCards": "Ustawienia Kart Czatu", "SETTINGS.TitleScene": "Ustawienia Sceny", "SETTINGS.TitleSheet": "Ustawienia Kart", + "SETTINGS.TitleGameArtwork": "Ustawienia Grafik Gry", "SETTINGS.TitleWeapon": "Ustawienia Broni", "SETTINGS.TitleDiceSoNice": "Ustawienia Dice So Nice", "SETTINGS.TitleDeveloperDebug": "Ustawienia developera i Debuggowania", @@ -797,6 +808,12 @@ "SETTINGS.TenDieBonusHint": "Używająć modułu DsN, kolory dla kości premiowych. (domyślnie używa ustawień gracza)", "SETTINGS.TenDiePenalty": "[DsN] Kolroy kości karnych", "SETTINGS.TenDiePenaltyHint": "Używająć modułu DsN, kolory dla kości karnych. (domyślnie używa ustawień gracza)", + "SETTINGS.OverrideGameArtwork": "Nadpisz grafiki gry", + "SETTINGS.OverrideGameArtworkHint": "!!WYMAGANY RESTART!! daje dostęp do zaawansowanych ustawień gry, zostaw puste dla domyślnych ustwień", + "SETTINGS.ArtPauseImage": "Obrazek pauzy", + "SETTINGS.ArtPauseImageHint": ". Wpisz 'null', żeby usunąć obrazek", + "SETTINGS.ArtPauseText": "Tekst pauzy", + "SETTINGS.ArtPauseTextHint": "Zostaw puste dla domyślnych ustawień", "SETTINGS.OverrideSheetArtwork": "Nadpisanie Grafiki Karty Postaci", "SETTINGS.OverrideSheetArtworkHint": "!!WYMAGANY RESTART!! daje możliwość konfiguracji karty, zostaw puste dla domyślnych ustawień", "SETTINGS.ArtWorkSheetBackground": "Tło karty postaci", From 3dc3674382ff801e4fb110f71c9591d7cb166592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trouver=20Objet=20Cach=C3=A9?= <44206935+vonv@users.noreply.github.com> Date: Mon, 18 Oct 2021 11:10:35 +0200 Subject: [PATCH 240/726] fr updated --- lang/fr.json | 54 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/lang/fr.json b/lang/fr.json index 7615ad2b..d67695e1 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -120,6 +120,14 @@ "CoC7.ItemWeapon": "Objet (Arme)", "CoC7.AttacksPerRound": "Attaques par round", + "CoC7.Cast": "Jet", + "CoC7.SanityCost": "Coût en SAN", + "CoC7.PowerCost": "Coût en Pouvoir", + "CoC7.HitPointsCost": "Coût en Points de Vie", + "CoC7.MagicPointsCost": "Coût en Points de Magie", + "CoC7.OtherCosts": "Autres coûts", + "CoC7.CastingSpell": "Jette {spell}.", + "CoC7.CopyToClipboard": "Copier vers le presse-papier", "CoC7.WhisperToSelection": "Murmurer aux tokens sélectionnés", "CoC7.WhisperTo": "Murmurer à", @@ -216,6 +224,7 @@ "CoC7.FightBack": "Rendre les coups", "CoC7.Dodge": "Esquive", "CoC7.Maneuver": "Manœuvre", + "CoC7.NoResponse": "Pas de Réponse", "CoC7.OutNumbered": "En sous-nombre", "CoC7.combatCard.surprised": "Surpris", "CoC7.combatCard.autoSuccess": "Réussite Auto.", @@ -227,6 +236,7 @@ "CoC7.TitleSurprised": "Ajouter 1 dé bonus si la cible est surprise", "CoC7.TitleAutoSuccess": "L'attaque touche automatiquement", "CoC7.WinnerRollDamage": "{name} a gagné, jet de dommages.", + "CoC7.InitiatorMissed": "{name} a raté.", "CoC7.NoWinner": "Les deux camps ont échoué.", "CoC7.DodgeSuccess": "{name} esquive !", "CoC7.ManeuverSuccess": "La manœuvre de {name} a réussi.", @@ -368,6 +378,7 @@ "CoC7.DodgeSkillName": "Esquive", "CoC7.CthulhuMythosName": "Mythe de Cthulhu", "CoC7.CreditRatingSkillName": "Crédit", + "CoC7.DriveAutoSkillName": "Conduite", "CoC7.FightingSpecializationName": "Combat rapproché", "CoC7.FirearmSpecializationName": "Combat à distance", "CoC7.DriveSpecializationName": "Conduite", @@ -404,6 +415,10 @@ "CoC7.EditItem": "Éditer objet", "CoC7.DeleteItem": "Supprimer objet", "CoC7.TradeItem": "Vendre / ranger Objet", + "CoC7.SortBySkillName": "Trier par nom de compétence", + "CoC7.SortBySkillValue": "Trier par valeur de compétence", + "CoC7.UncommonSkillsShow": "Montrer les compétences spéciales", + "CoC7.UncommonSkillsHide": "Cacher les compétences spéciales", "CoC7.NewBookName": "nouvel ouvrage", "CoC7.AddBook": "Ajouter un ouvrage", @@ -429,7 +444,7 @@ "CoC7.SanRollHint": "Déclencher un test de SAN pour les personnages ciblés", "CoC7.SANCheckTitle": "Perte de SAN : {name} ({sanMin}/{sanMax})", "CoC7.NoSkill": "Aucune compétence", - "CoC7.AddWeapontHint": "

              {actor} n'a pas d'{weapon}.
              Veux-tu en créer une ?

              ", + "CoC7.AddWeapontHint": "

              {actor} n'a pas de {weapon}.
              Veux-tu en créer une ?

              ", "CoC7.LinkCheck": " test de {name}", "CoC7.LinkCheckDiff": "[{difficulty}] test de {name}", @@ -681,6 +696,7 @@ "CoC7.ActorImporter": "Import de Personnage", "CoC7.ActorImporterSummary": "Importer un PNJ ou une Créature depuis sa description et ses statistiques. Copier simplement le texte", "CoC7.PasteTheDataBelow": "Coller le texte brut ci-dessous", + "CoC7.TextFieldInvalidCharacters": "Caractères non valides dans le texte, corrigez s'il vous plaît sinon ils seront supprimés", "CoC7.SelectActorType": "Sélectionnez le type de personnage", "CoC7.NonPlayingCharacter": "Personnage Non Joueur (PNJ)", "CoC7.Creature": "Créature", @@ -691,10 +707,17 @@ "CoC7.English": "Anglais", "CoC7.Spanish": "Espagnol", "CoC7.French": "Français", + "CoC7.TraditionalChinese": "Chinois Traditionnel", "CoC7.SelectSourceLanguage": "Sélectionnez la langue du texte copié", "CoC7.ImportedUnnamedCharacter": "Personnage importé sans nom", "CoC7.CreatedImportedCharactersFolder": "Dossier 'Imported Characters' créé'", - + "CoC7.ImportedCharactersFolder": "Personnage importé", + "CoC7.ImportSkillItemLocations": "Recherche les compétences/sorts/armes dans", + "CoC7.ImportActorItemsNone": "Aucun", + "CoC7.ImportActorItemsItem": "Objets", + "CoC7.ImportActorItemsItemWorldModuleSystem": "Objets / Monde / Modules / Système", + "CoC7.ImportActorItemsWorldModuleItemSystem": "Monde / Modules / Objets / Système", + "CoC7.HowToTranslateTitle": "Comment traduire?", "CoC7.HowToTranslateWarning": "N'installez que des modules dignes de confiance.", "CoC7.HowToTranslateInstallBabele": "Installez/Mettez à jour le module Babele depuis le gestionnaire de modules de Foundry.", @@ -704,7 +727,8 @@ "CoC7.Migrate.Title": "Mise à jour requise", "CoC7.Migrate.Message": "

              Votre monde a besoin d'une mise à jour pour tourner sous la version {version}.

              Faîtes une sauvegarde avant de lancer la mise à jour.

              Sans mise à jour, le système risque de dysfonctionner.

              Le monde risque de redémarrer à la fin du processus.

              ", - "CoC7.Migrate.GMRequired": "

              Votre monde a besoin d'une mise à jour pour tourner sous la version {version}.

              Attendez que votre Gardien fasse la mise à jour puis raffraichissez (F5) cette page.

              ", + "CoC7.Migrate.WithModulesMessage": "

              Votre monde ou vos modules doivent requérir une mise à jour pour fonctionner en version {version}.

              Sauvegardez votre monde et le répertoire de vos modules listés ci-dessous avant de mettre à jour.

              Si vous ne mettez pas à jour votre monde, le système ne fonctionnera pas correctement.

              Les modules suivants contiennent des personnages ou des objets, ils seront donc sélectionnés.

              {modules}

              Le monde risque de redémarrer une fois terminé.

              ", + "CoC7.Migrate.GMRequired": "

              Votre monde a besoin d'une mise à jour pour tourner sous la version {version}.

              Attendez que votre Gardien fasse la mise à jour puis rafraichissez (F5) cette page.

              ", "CoC7.Migrate.RestartRequired": "

              Votre monde va redémarrer à présent pour activer ces changements

              ", "CoC7.Migrate.ButtonUpdate": "Mise à jour", "CoC7.Migrate.ButtonSkip": "Passer", @@ -720,13 +744,24 @@ "CoC7.MessageTitleSelectUserToGiveTo": "Donner un objet à un autre personnage", "CoC7.MessageSelectUserToGiveTo": "A qui voulez-vous donner cet objet ?", "CoC7.MessageDistanceCalculationFailure": "Impossible de calculer la distance séparant les tokens, utiliser la fiche du token du personnage SVP.", - + + "CoC7.ToolTipSkill": "
              1. Clic gauche Jet avec options
              2. Shift + Clic gauche Jet immédiat à difficulté normale
              1. Clic droit Jet opposé avec options
              2. Shift + Clic droit Jet opposé immédiat
              1. Alt/Option + Clic droit Jet combiné avec options
              ", + "CoC7.ToolTipKeeperSkill": "
              1. CTRL + Clic gauche Crée un lien pour un jet
              2. {other}
              ", + "CoC7.ToolTipKeeperStandbySkill": "
            16. Clic gauche Demande un jet à {name}
            17. ", + "CoC7.ToolTipDB": "
              1. Clic gauche Jet immédiat à difficulté normale
              ", + "CoC7.ToolTipKeeperSanity": "
            18. CTRL + Alt/Option Crée un lien pour un jet de SAN
            19. ", + "CoC7.ToolTipAutoToggle": "
              1. Clic gauche Bascule du calcul automatique / manuel
              2. ", + "CoC7.ToolTipSkillFlagToggle": "
                1. Clic Double Bascule le statut de coche
                2. ", + "CoC7.ToolTipSkillFlagged": "Coché pour développement", + "CoC7.ToolTipSkillUnflagged": "Pas coché pour développement", + "SETTINGS.TitleRules": "Règles", "SETTINGS.TitleInitiative": "Paramètres d'initiative", "SETTINGS.TitleRoll": "Paramètres de jets de dés", "SETTINGS.TitleChatCards": "Paramètres de cartes de Chat", "SETTINGS.TitleScene": "Paramètres de scène", "SETTINGS.TitleSheet": "Paramètres de fiche", + "SETTINGS.TitleGameArtwork": "Paramètre d'Illustration du Jeu", "SETTINGS.TitleWeapon": "Paramètres d'arme", "SETTINGS.TitleDiceSoNice": "Paramètres Dice So Nice", "SETTINGS.TitleDeveloperDebug": "Paramètres Développeur et Debug", @@ -772,7 +807,13 @@ "SETTINGS.TenDieBonus": "[DsN] dés dix de bonus en couleurs", "SETTINGS.TenDieBonusHint": "Lorsque vous utilisez DsN, active le set de couleurs pour les dés de bonus (par défaut, utilise celle du joueur).", "SETTINGS.TenDiePenalty": "[DsN] dés dix de pénalité en couleurs", - "SETTINGS.TenDiePenaltyHint": "Lorsque vous utilisez DsN, active le set de couleurs pour les dé de pénalité (par défaut, utilise celle du joueur).", + "SETTINGS.TenDiePenaltyHint": "Lorsque vous utilisez DsN, active le set de couleurs pour les dés de pénalité (par défaut, utilise celle du joueur).", + "SETTINGS.OverrideGameArtwork": "Remplacer l'illustration du jeu", + "SETTINGS.OverrideGameArtworkHint": "!!REDÉMARRAGE REQUIS!! donne accès aux paramétrages avancés du jeu, laissez vide pour la valeur par défaut", + "SETTINGS.ArtPauseImage": "Image de pause", + "SETTINGS.ArtPauseImageHint": ". Tapez 'null' pour supprimer l'image", + "SETTINGS.ArtPauseText": "Texte de pause", + "SETTINGS.ArtPauseTextHint": "Laissez vide pour la valeur par défaut", "SETTINGS.OverrideSheetArtwork": "Changer l'apparence de la fiche", "SETTINGS.OverrideSheetArtworkHint": "!!REDÉMARRAGE REQUIS!! Vous permet de modifier l'apparence de la fiche Laisser les champs vide pour l'option par défaut.", "SETTINGS.ArtWorkSheetBackground": "Texture de fond de la fiche", @@ -827,5 +868,6 @@ "SETTINGS.ShowExperimentalFeaturesHint": "Votre monde ne sera plus utilisable dans le futur si vous utilisez ces fonctionnalités. Seulement pour le test, N'utilisez PAS ceci pour vos parties", "CoC7.ExperimentalFeaturesWarning": "Cette fonctionnalité est en développement, il n'est pas conseillé de l'utiliser pour vos parties.", "SETTINGS.CheckElevation": "Inclut l'altitude", - "SETTINGS.CheckElevationHint": "Utiliser l'altitude dans le calcul des distances en combat" + "SETTINGS.CheckElevationHint": "Utiliser l'altitude dans le calcul des distances en combat", + "CoC7.toolTipDelay": "Délai en millisecondes avant qu'une info-bulle apparaisse, 0 pour jamais" } From 46561a29fed3e98e91ac8a6b2f41fe3c4fa6a00b Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 18 Oct 2021 13:28:13 +0000 Subject: [PATCH 241/726] Updated translations list --- .github/TRANSLATIONS.md | 762 ++++++++++++++++++++-------------------- 1 file changed, 381 insertions(+), 381 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 625b2d43..963bdbae 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,387 +2,387 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **pt-BR**, **sv** - -| Key | cn | cs | de | es | fr | ja | pl | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **376** | **152** | **169** | **40** | **40** | **40** | **17** | **1** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +The following translations are currently up to date **fr**, **pt-BR**, **sv** + +| Key | cn | cs | de | es | ja | pl | zh-TW | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **376** | **152** | **169** | **40** | **40** | **17** | **1** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ##### CoC7.ActorImporter From dc5452ccd6c752e5f67c06143f18dc5f88493f4b Mon Sep 17 00:00:00 2001 From: castanho Date: Mon, 18 Oct 2021 11:22:11 -0300 Subject: [PATCH 242/726] Update ja.json thanks to Asami --- lang/ja.json | 89 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 65 insertions(+), 24 deletions(-) diff --git a/lang/ja.json b/lang/ja.json index 4c6127e9..e43d880e 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -20,23 +20,23 @@ "CoC7.Entities.Weapon": "武器", "CHARAC.STR": "STR", - "CHARAC.Strengh": "筋力", - "CHARAC.Strength": "筋力", + "CHARAC.Strengh": "STR [筋力]", + "CHARAC.Strength": "STR [筋力]", "CHARAC.CON": "CON", - "CHARAC.Constitution": "体力", + "CHARAC.Constitution": "CON [体力]", "CHARAC.SIZ": "SIZ", - "CHARAC.Size": "体格", + "CHARAC.Size": "SIZ [体格]", "CHARAC.DEX": "DEX", - "CHARAC.Dexterity": "敏捷性", + "CHARAC.Dexterity": "DEX [敏捷性]", "CHARAC.APP": "APP", - "CHARAC.Appearance": "外観", + "CHARAC.Appearance": "APP [外見]", "CHARAC.INT": "INT", - "CHARAC.Intelligence": "知性", + "CHARAC.Intelligence": "INT [知性]", "CHARAC.POW": "POW", - "CHARAC.Power": "精神力", + "CHARAC.Power": "POW [精神力]", "CHARAC.EDU": "EDU", - "CHARAC.Education": "教育", - + "CHARAC.Education": "EDU [教育]", + "CoC7.PlayerName": "プレイヤー", "CoC7.Name": "名前", "CoC7.Archetype": "アーキタイプ", "CoC7.Occupation": "職業", @@ -47,7 +47,7 @@ "CoC7.Organization": "組織", "CoC7.HitPoints": "耐久力", "CoC7.HP": "HP", - "CoC7.MagicPoints": "MP", + "CoC7.MagicPoints": "マジック・ポイント", "CoC7.MP": "MP", "CoC7.SanityPoints": "正気度ポイント", "CoC7.Sanity": "正気度", @@ -120,6 +120,14 @@ "CoC7.ItemWeapon": "アイテム (武器)", "CoC7.AttacksPerRound": "1ラウンドの攻撃回数", + "CoC7.Cast": "詠唱", + "CoC7.SanityCost": "正気度コスト", + "CoC7.PowerCost": "POWコスト", + "CoC7.HitPointsCost": "耐久力コスト", + "CoC7.MagicPointsCost": "MPコスト", + "CoC7.OtherCosts": "その他のコスト", + "CoC7.CastingSpell": "{spell} 呪文を詠唱。", + "CoC7.CopyToClipboard": "クリップボードにコピー", "CoC7.WhisperToSelection": "選択したトークンにウィスパー", "CoC7.WhisperTo": "ウィスパー:", @@ -160,7 +168,7 @@ "CoC7.check.FlagForDevelopment": "経験チェックを与える", "CoC7.IncreaseSuccessLevel": "成功レベルを増加する", "CoC7.check.DecreaseSuccessLevel": "成功レベルを減少する", - "CoC7.RollSecretDice": "ゲームマスターは個人的にいくつかのダイスを振った", + "CoC7.RollSecretDice": "ゲームマスターは個人的にいくつかのダイスをロールした", "CoC7.KeeperSentDecoy": "プレイヤーに送られる見せかけロール", "CoC7.FakeRoll": "見せかけロールをプレイヤーに送る", @@ -216,6 +224,7 @@ "CoC7.FightBack": "応戦", "CoC7.Dodge": "回避", "CoC7.Maneuver": "マヌーバー", + "CoC7.NoResponse": "反応なし", "CoC7.OutNumbered": "数的不利", "CoC7.combatCard.surprised": "奇襲", "CoC7.combatCard.autoSuccess": "自動成功", @@ -227,10 +236,11 @@ "CoC7.TitleSurprised": "対象が奇襲に気付かなかったことによりボーナス・ダイス1つを受ける", "CoC7.TitleAutoSuccess": "攻撃が自動的に成功する", "CoC7.WinnerRollDamage": "{name} が勝利! ダメージロール。", + "CoC7.InitiatorMissed": "{name} は攻撃を外した。", "CoC7.NoWinner": "両者失敗。", "CoC7.DodgeSuccess": "{name} は回避した!", - "CoC7.ManeuverSuccess": "{name} はマヌーバーを成功した。", - "CoC7.AttackSuccess": "{name} は打撃を与えた。", + "CoC7.ManeuverSuccess": "{name} のマヌーバーは成功した。", + "CoC7.AttackSuccess": "{name} はダメージを与えた。", "CoC7.InflictPain": "ダメージを適用する", "CoC7.AdvantageAttacker": "有利: 攻撃側", "CoC7.AdvantageDefender": "有利: 防御側", @@ -368,6 +378,7 @@ "CoC7.DodgeSkillName": "回避", "CoC7.CthulhuMythosName": "クトゥルフ神話", "CoC7.CreditRatingSkillName": "信用", + "CoC7.DriveAutoSkillName": "Drive Auto", "CoC7.FightingSpecializationName": "近接格闘", "CoC7.FirearmSpecializationName": "射撃", "CoC7.DriveSpecializationName": "運転", @@ -393,7 +404,7 @@ "CoC7.DevFailure": "{item} は成長しなかった ({die}/{score}%)", "CoC7.LuckIncreased": "幸運が {augment} ポイント回復した。({die}/{score})", "CoC7.LuckNotIncreased": "幸運は回復しなかった。 ({die}/{score})", - "CoC7.DevelopAttribWarn": "成長/作成時において、一部の属性にはアクセスできない。", + "CoC7.DevelopAttribWarn": "成長/作成時において、一部の入力欄には記入できない。", "CoC7.SkillDetail": "技能の詳細", "CoC7.EditSkill": "編集", "CoC7.DeleteSkill": "削除", @@ -404,6 +415,10 @@ "CoC7.EditItem": "編集", "CoC7.DeleteItem": "削除", "CoC7.TradeItem": "アイテムの交換/保存", + "CoC7.SortBySkillName": "技能名で並び替え", + "CoC7.SortBySkillValue": "技能%で並び替え", + "CoC7.UncommonSkillsShow": "まれな技能を表示", + "CoC7.UncommonSkillsHide": "まれな技能を非表示", "CoC7.NewBookName": "新しい本", "CoC7.AddBook": "本追加", @@ -420,7 +435,7 @@ "CoC7.WeaponSkill": "技能", "CoC7.WeaponSkillAlt": "別技能", "CoC7.Inventory": "インベントリ", - "CoC7.InventoryIsCurrentlyEmpty": "中身は空で、何も入っていない。", + "CoC7.InventoryIsCurrentlyEmpty": "何も持っていない。", "CoC7.CharacterDevelopment": "成長", "CoC7.OccupationSkill": "職業技能", "CoC7.ArchetypeSkill": "アーキタイプ技能", @@ -538,7 +553,7 @@ "CoC7.GainsForReading": "{book} を読んだときの技能増加。", "CoC7.InitialReading": "最初の読書", "CoC7.InitialReadingNeeded": "{actor} は {book} の最初の読書を行なうことで、完全な研究に進むことができる。", - "CoC7.LearnSpellAttempt": "{book} から {spell} 呪文を学ぼうとする。", + "CoC7.LearnSpellAttempt": "{book} から {spell} 呪文を学ぼうとした。", "CoC7.MarkedForDevelopment": "経験チェック", "CoC7.Mythos": "クトゥルフ神話", "CoC7.MythosRating": "神話レーティング", @@ -548,7 +563,7 @@ "CoC7.Progress": "進捗", "CoC7.RedoFullStudy": "完全な研究のやり直し", "CoC7.ReadAttempt": "{book} ({language}) を読もうとする、難易度({difficulty})。", - "CoC7.ReadingMythosTome": "{book} を読む。", + "CoC7.ReadingMythosTome": "{book} を読んだ。", "CoC7.Specific": "特定", "CoC7.SpellsLearned": "学んだ呪文", "CoC7.StudyTime": "研究期間", @@ -595,10 +610,10 @@ "CoC7.EmptySkillList": "ここに技能をドロップして追加する", "CoC7.EmptyItemList": "ここにアイテムをドロップして追加する", "CoC7.EmptyCharacterSkillList": "ここに初期設定、職業、技能などをドラッグ&ドロップして追加する。", - "CoC7.PersonalSpeciality": "個人的あるいはその時代の特色的な技能の数", + "CoC7.PersonalSpeciality": "個人的、あるいはその時代での特徴的な技能", "CoC7.AdditionalSkills": "追加の技能", "CoC7.SkillSelectionWindow": "オプションの技能を選択", - "CoC7.SelectPersonalSkills": "個人的あるいはその時代の特色的な技能として、{number} 個の技能を選択", + "CoC7.SelectPersonalSkills": "個人的、あるいはその時代での特徴的な技能として、{number} 個の技能を選択", "CoC7.ResetOccupation": "職業をリセット", "CoC7.ResetOccupationHint": "アクター {name} には既に職業がある。リセットするか?", "CoC7.ResetArchetype": "アーキタイプをリセット", @@ -664,8 +679,8 @@ "CoC7.InfoLessSkillThanOptions": "現在の技能の選択数は {skillCount} で、任意の技能数は {optionsCount} だ。選択数が足りない。", "CoC7.InfoAllSkillsAlreadySelected": "すでに選択可能な技能数まで選択済みだ。", - "CoC7.MessageCheckRequestedWait": "キーパーが {check} 判定を要求している。
                  それを待ってクリックしよう!
                  ", - "CoC7.MessageTargetCheckRequested": "キーパーが {name} に {check} 判定を要求している。", + "CoC7.MessageCheckRequestedWait": "キーパーが {check} 判定を要望。
                  それを待ってクリックしよう!
                  ", + "CoC7.MessageTargetCheckRequested": "キーパーが {name} に {check} 判定を要望。", "CoC7.MessageTitleSelectSingleUserForTarget": "この攻撃に対応できるユーザー", "CoC7.MessageSelectSingleUserForTarget": "このトークンは複数のユーザーによって管理されている。どのユーザーがこの攻撃に対応するかを選択すること。", "CoC7.MessageBoutOfMadnessTableNotFound": "狂気テーブルの結果が見つからない。すべてのロールテーブルが作成されているか確認すること", @@ -681,6 +696,7 @@ "CoC7.ActorImporter": "アクター・インポーター", "CoC7.ActorImporterSummary": "説明とステータスから、NPCまたはクリーチャーをインポートする。対応するテキストを貼り付けるだけだ", "CoC7.PasteTheDataBelow": "以下にテキストデータを貼り付ける", + "CoC7.TextFieldInvalidCharacters": "本文中に無効な文字が含まれており、修正されないものは削除されるため注意。", "CoC7.SelectActorType": "アクターの種類を選択", "CoC7.NonPlayingCharacter": "ノンプレイヤーキャラクター (NPC)", "CoC7.Creature": "クリーチャー", @@ -691,9 +707,16 @@ "CoC7.English": "英語", "CoC7.Spanish": "スペイン語", "CoC7.French": "フランス語", + "CoC7.TraditionalChinese": "繁体字中国語", "CoC7.SelectSourceLanguage": "言語を選択", "CoC7.ImportedUnnamedCharacter": "インポートされた無名のキャラクター", "CoC7.CreatedImportedCharactersFolder": "'インポート・キャラクター'フォルダを作成", + "CoC7.ImportedCharactersFolder": "インポートされたキャラクター", + "CoC7.ImportSkillItemLocations": "技能/呪文/武器を探しています…", + "CoC7.ImportActorItemsNone": "なし", + "CoC7.ImportActorItemsItem": "アイテム", + "CoC7.ImportActorItemsItemWorldModuleSystem": "アイテム / ワールド / MOD / システム", + "CoC7.ImportActorItemsWorldModuleItemSystem": "ワールド / MOD / アイテム / システム", "CoC7.HowToTranslateTitle": "どうやって翻訳するの?", "CoC7.HowToTranslateWarning": "信頼できないモジュールはインストールしないように。", @@ -704,6 +727,7 @@ "CoC7.Migrate.Title": "要更新", "CoC7.Migrate.Message": "

                  このワールドでは、バージョン {version} を実行するためのアップデートが必要だ。

                  アップデートを始める前に、ワールド・フォルダをバックアップすること。

                  アップデートしなければ、システムが正しく動作しないことに注意。

                  アップデートが完了したら、ワールドを再起動すること。

                  ", + "CoC7.Migrate.WithModulesMessage": "

                  使用中のワールドやモジュールは、バージョン {version} を実行するためのアップデートが必要となる場合がある。

                  そのため、アップデートを始める前に、ワールドやモジュールのフォルダをバックアップしておくことをお勧めする。

                  ワールドをアップデートしない限り、システムが正しく動作しないことに注意すること。

                  以下のモジュールにはアクターやアイテムが含まれているため、これらもチェックされる。

                  {modules}

                  アップデートが完了したら、ワールドの再起動をすること。

                  ", "CoC7.Migrate.GMRequired": "

                  このワールドは、バージョン {version} を実行するためのアップデートが必要だ。

                  GMによるシステム・アップデートの完了を待ってから、このページを更新(F5)すること。

                  ", "CoC7.Migrate.RestartRequired": "

                  この変更を有効にするため、ワールドを再起動を実行。

                  ", "CoC7.Migrate.ButtonUpdate": "アップデート", @@ -721,12 +745,23 @@ "CoC7.MessageSelectUserToGiveTo": "このアイテムをどのキャラクターに渡したいですか?", "CoC7.MessageDistanceCalculationFailure": "トークン間の距離を計算することができないため、トークン側のキャラクターシートを利用してください。", + "CoC7.ToolTipSkill": "
                  1. 左クリック ロール判定 (選択)
                  2. Shift + 左クリック 即時の通常難易度ロール
                  1. 右クリック 対抗判定 (選択)
                  2. Shift + 右クリック 即時の対抗判定
                  1. Alt/Option + 右クリック 組み合わせ判定 (選択)
                  ", + "CoC7.ToolTipKeeperSkill": "
                  1. CTRL + 左クリック ロールリンク作成
                  2. {other}
                  ", + "CoC7.ToolTipKeeperStandbySkill": "
                3. 左クリック Request a roll from {name} にロールを要望
                4. ", + "CoC7.ToolTipDB": "
                  1. 左クリック 即時の通常難易度ロール
                  ", + "CoC7.ToolTipKeeperSanity": "
                5. CTRL + Alt/Option 正気度判定のロールリンク作成
                6. ", + "CoC7.ToolTipAutoToggle": "
                  1. 左クリック 自動計算 / 手動入力
                  2. ", + "CoC7.ToolTipSkillFlagToggle": "
                    1. ダブルクリック フラグ状態の切替
                    2. ", + "CoC7.ToolTipSkillFlagged": "開発者フラグ 有効", + "CoC7.ToolTipSkillUnflagged": "開発者フラグ 無効", + "SETTINGS.TitleRules": "ルール", "SETTINGS.TitleInitiative": "イニシアチブ設定", "SETTINGS.TitleRoll": "ロール設定", "SETTINGS.TitleChatCards": "チャット・カード設定", "SETTINGS.TitleScene": "シーン設定", "SETTINGS.TitleSheet": "シート設定", + "SETTINGS.TitleGameArtwork": "ゲーム・アートワーク設定", "SETTINGS.TitleWeapon": "武器設定", "SETTINGS.TitleDiceSoNice": "Dice So Nice設定", "SETTINGS.TitleDeveloperDebug": "成長&デバッグ設定", @@ -773,8 +808,14 @@ "SETTINGS.TenDieBonusHint": "Dice so Nice使用時に、ボーナスの10の位ダイスで使用する色を別にする (デフォルトはプレイヤーのデフォルトを使用)", "SETTINGS.TenDiePenalty": "[DsN] 10面 ペナルティ・ダイス カラーセット", "SETTINGS.TenDiePenaltyHint": "Dice so Nice使用時に、ペナルティの10の位ダイスで使用する色を別にする (デフォルトはプレイヤーのデフォルトを使用)", + "SETTINGS.OverrideGameArtwork": "ゲーム・アートワークの上書き", + "SETTINGS.OverrideGameArtworkHint": "!!手動でワールドの再読み込みが必要!! これによりシートの詳細設定が変更される。(デフォルトは空欄)", + "SETTINGS.ArtPauseImage": "一時停止画像", + "SETTINGS.ArtPauseImageHint": ". 画像を削除する場合は 'null' を指定。", + "SETTINGS.ArtPauseText": "一時停止テキスト", + "SETTINGS.ArtPauseTextHint": "空白にするとデフォルトになる。", "SETTINGS.OverrideSheetArtwork": "キャラクターシートの見た目の変更", - "SETTINGS.OverrideSheetArtworkHint": "!!手動でワールドの再読み込みが必要!! キャラクターシートの事前設定にアクセスできるようになる (デフォルトは空欄)", + "SETTINGS.OverrideSheetArtworkHint": "!!手動でワールドの再読み込みが必要!! これによりシートの詳細設定が変更される。(デフォルトは空欄)", "SETTINGS.ArtWorkSheetBackground": "キャラクターシートの背景", "SETTINGS.ArtWorkSheetBackgroundHint": "手帳の背景を削除するためには「null」を入力する", "SETTINGS.ArtWorkSheetBackgroundType": "背景タイプ", @@ -828,5 +869,5 @@ "CoC7.ExperimentalFeaturesWarning": "この機能は開発中のものであり、あなたのワールドでの使用は推奨されません。", "SETTINGS.CheckElevation": "距離に高さを含める", "SETTINGS.CheckElevationHint": "射撃戦闘の距離計算に高さも含める", - "CoC7.PlayerName": "プレイヤー名" + "CoC7.toolTipDelay": "ツールチップが表示されるまでの時間 (ミリ秒)。0は非表示。" } From 3fd7e1c9abc099facd73f541497e2e7d7072e225 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 18 Oct 2021 14:23:05 +0000 Subject: [PATCH 243/726] Updated translations list --- .github/TRANSLATIONS.md | 762 ++++++++++++++++++++-------------------- 1 file changed, 381 insertions(+), 381 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 963bdbae..e7a48d1d 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,387 +2,387 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **fr**, **pt-BR**, **sv** - -| Key | cn | cs | de | es | ja | pl | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **376** | **152** | **169** | **40** | **40** | **17** | **1** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | +The following translations are currently up to date **fr**, **ja**, **pt-BR**, **sv** + +| Key | cn | cs | de | es | pl | zh-TW | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **376** | **152** | **169** | **40** | **17** | **1** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.ActorImporter From 622ac06e2e12f2d052ee926f9126d41c672ac4bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20E=2E=20Lozano?= Date: Mon, 18 Oct 2021 17:41:17 +0200 Subject: [PATCH 244/726] Spanish updated --- lang/es.json | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/lang/es.json b/lang/es.json index fa820048..56fdcb49 100644 --- a/lang/es.json +++ b/lang/es.json @@ -123,6 +123,14 @@ "CoC7.ItemWeapon": "Objeto (arma)", "CoC7.AttacksPerRound": "Ataques por asalto", + "CoC7.Cast": "Lanzamiento", + "CoC7.SanityCost": "Coste COR", + "CoC7.PowerCost": "Coste POD", + "CoC7.HitPointsCost": "Coste PVs", + "CoC7.MagicPointsCost": "Coste PMs", + "CoC7.OtherCosts": "Otro coste", + "CoC7.CastingSpell": "Lanzando {spell}.", + "CoC7.CopyToClipboard": "Copiar al portapapeles", "CoC7.WhisperToSelection": "Susurrar a iconos seleccionados", "CoC7.WhisperTo": "Susurrar a", @@ -219,6 +227,7 @@ "CoC7.FightBack": "Contraatacar", "CoC7.Dodge": "Esquivar", "CoC7.Maneuver": "Maniobra", + "CoC7.NoResponse": "No reaccionar", "CoC7.OutNumbered": "Superado", "CoC7.combatCard.surprised": "Sorprendido", "CoC7.combatCard.autoSuccess": "Éxito Automático", @@ -230,6 +239,7 @@ "CoC7.TitleSurprised": "Añadir 1 dado de bonificación por objetivo sorprendido", "CoC7.TitleAutoSuccess": "El ataque impacta automáticamente", "CoC7.WinnerRollDamage": "{name} ha ganado. Tirar daño", + "CoC7.InitiatorMissed": "{name} falló.", "CoC7.NoWinner": "Ambas partes han fallado", "CoC7.DodgeSuccess": "{name} ha esquivado!", "CoC7.ManeuverSuccess": "La maniobra {name} ha tenido éxito", @@ -371,6 +381,7 @@ "CoC7.DodgeSkillName": "Esquivar", "CoC7.CthulhuMythosName": "Mitos de Cthulhu", "CoC7.CreditRatingSkillName": "Crédito", + "CoC7.DriveAutoSkillName": "Conducir automóvil", "CoC7.FightingSpecializationName": "Combatir", "CoC7.FirearmSpecializationName": "Armas de fuego", "CoC7.DriveSpecializationName": "Conducir", @@ -407,6 +418,10 @@ "CoC7.EditItem": "Editar objeto", "CoC7.DeleteItem": "Eliminar objeto", "CoC7.TradeItem": "Cambiar/almacenar objeto", + "CoC7.SortBySkillName": "Ordenar por nombre de habilidad", + "CoC7.SortBySkillValue": "Ordenar por porcentaje de habilidad", + "CoC7.UncommonSkillsShow": "Mostrar habilidades infrecuentes", + "CoC7.UncommonSkillsHide": "Ocultar habilidades infrecuentes", "CoC7.NewBookName": "nuevo tomo", "CoC7.AddBook": "Añadir tomo", @@ -685,6 +700,7 @@ "CoC7.ActorImporter": "Importador de actores", "CoC7.ActorImporterSummary": "Importa un PNJ o criatura a partir de sus estadísticas y descripción. Solo deberá copiar sus estadísticas en formato texto plano", "CoC7.PasteTheDataBelow": "Pegue más abajo el texto sin formato", + "CoC7.TextFieldInvalidCharacters": "Caracteres inválidos en el texto, por favor, revíselo o será eliminado", "CoC7.SelectActorType": "Seleccione tipo de actor", "CoC7.NonPlayingCharacter": "Personaje no jugador (PNJ)", "CoC7.Creature": "Criatura", @@ -695,9 +711,16 @@ "CoC7.English": "Inglés", "CoC7.Spanish": "Español", "CoC7.French": "Francés", + "CoC7.TraditionalChinese": "Chino tradicional", "CoC7.SelectSourceLanguage": "Seleccione el idioma del texto original", "CoC7.ImportedUnnamedCharacter": "Se ha importado personaje 'unnamed'", - "CoC7.CreatedImportedCharactersFolder": "Creada carpeta 'Imported Characters'", + "CoC7.CreatedImportedCharactersFolder": "Creada carpeta 'Personajes importados'", + "CoC7.ImportedCharactersFolder": "Personajes importados", + "CoC7.ImportSkillItemLocations": "Buscar habilidades/hechizos/armas en", + "CoC7.ImportActorItemsNone": "Ninguno", + "CoC7.ImportActorItemsItem": "Objetos", + "CoC7.ImportActorItemsItemWorldModuleSystem": "Objetos / Mundo / Módulos / Sistema", + "CoC7.ImportActorItemsWorldModuleItemSystem": "Mundo / Módulos / Objetos / Sistema", "CoC7.HowToTranslateTitle": "¿Cómo traducir el sistema?", "CoC7.HowToTranslateWarning": "No instale ningún módulo que no sea de su confianza", @@ -708,6 +731,7 @@ "CoC7.Migrate.Title": "Se requiere actualizar", "CoC7.Migrate.Message": "

                      Su mundo necesita ser actualizado para funcionar con la versión {version}.

                      Por favor, haga una copia de seguridad de la carpeta del mundo antes de actualizar.

                      Si no actualiza el mundo el sistema no funcionará correctamente.

                      Se puede reiniciar el mundo una vez que se complete el proceso

                      ", + "CoC7.Migrate.WithModulesMessage": "

                      Es posible que tanto su mundo como sus módulos necesiten una actualización para ejecutar la versión {version}.

                      Por favor, haga copia de seguridad de su mundo y los módulos listados más abajo antes de comenzar la actualización.

                      Si no actualiza el mundo el sistema no funcionará correctamente.

                      Los módulos siguientes contienen actores u objetos, de modo que también se comprobarán.

                      {modules}

                      El mundo se reiniciará cuando se complete el proceso.

                      ", "CoC7.Migrate.GMRequired": "

                      Su mundo necesita ser actualizado para funcionar con la versión {version}.

                      Por favor, espere a que su GM realice la actualización del sistema y entonces refresque (F5) la página

                      ", "CoC7.Migrate.RestartRequired": "

                      Su mundo se reiniciará para activar los cambios

                      ", "CoC7.Migrate.ButtonUpdate": "Actualizar", @@ -725,12 +749,23 @@ "CoC7.MessageSelectUserToGiveTo": "¿A qué personaje quiere darle el objeto?", "CoC7.MessageDistanceCalculationFailure": "No es posible calcular la distancia entre los iconos, por favor, use la hoja de personaje del icono", + "CoC7.ToolTipSkill": "
                      1. Clic izquierdo tirada con opciones
                      2. Mayús + clic izquierdo Tirada inmediata a dificultad normal
                      1. Clic derecho Tirada enfrentada con opciones
                      2. Mayús + clic derecho Tirada enfrentada inmediata
                      1. Alt/Opción + clic derecho Tirada combinada con opciones
                      ", + "CoC7.ToolTipKeeperSkill": "
                      1. CTRL + clic izquierdo Crear enlace a tirada
                      2. {other}
                      ", + "CoC7.ToolTipKeeperStandbySkill": "
                    3. Clic izquierdo Petición de tirada a {name}
                    4. ", + "CoC7.ToolTipDB": "
                      1. Clic izquierdo Tirada inmediata a dificultad normal
                      ", + "CoC7.ToolTipKeeperSanity": "
                    5. CTRL + Alt/Opción Crea enlace a tirada de COR
                    6. ", + "CoC7.ToolTipAutoToggle": "
                      1. Left click Conmuta entre cálculo automático/entrada manual
                      2. ", + "CoC7.ToolTipSkillFlagToggle": "
                        1. Doble clic Marcar/desmarcar
                        2. ", + "CoC7.ToolTipSkillFlagged": "Marcada para desarrollo", + "CoC7.ToolTipSkillUnflagged": "No marcada para desarrollo", + "SETTINGS.TitleRules": "Reglas", "SETTINGS.TitleInitiative": "Ajustes de iniciativa", "SETTINGS.TitleRoll": "Ajustes de tiradas", "SETTINGS.TitleChatCards": "Ajustes de tarjetas del chat", "SETTINGS.TitleScene": "Ajustes de escena", "SETTINGS.TitleSheet": "Ajustes de la hoja", + "SETTINGS.TitleGameArtwork": "Ajustes de arte del juego", "SETTINGS.TitleWeapon": "Ajustes de armas", "SETTINGS.TitleDiceSoNice": "Ajustes Dice So Nice", "SETTINGS.TitleDeveloperDebug": "Ajustes de desarrollo y depuración", @@ -777,6 +812,12 @@ "SETTINGS.TenDieBonusHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de bonificación (si no se especifica otra cosa, usa los valores por defecto del jugador)", "SETTINGS.TenDiePenalty": "[DsN] Configuración de dado de penalización", "SETTINGS.TenDiePenaltyHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de penalización (si no se especifica otra cosa, usa los valores por defecto del jugador)", + "SETTINGS.OverrideGameArtwork": "Sobrescribir arte del juego", + "SETTINGS.OverrideGameArtworkHint": "!!REQUIERE REINICIAR!! da acceso al modo de configuración avanzada, deje en blanco para usar la configuración por defecto", + "SETTINGS.ArtPauseImage": "Imagen de pausa", + "SETTINGS.ArtPauseImageHint": ". Escriba 'null' para quitar la imagen", + "SETTINGS.ArtPauseText": "Texto de pausa", + "SETTINGS.ArtPauseTextHint": "Deje en blanco para usar el texto por defecto", "SETTINGS.OverrideSheetArtwork": "Sobrescribir arte de la hoja de PJ", "SETTINGS.OverrideSheetArtworkHint": "!!REQUIERE REINICIAR!! Da acceso a la configuración avanzada de la hoja de personaje, deje las opciones en blanco para usar los valores por defecto", "SETTINGS.ArtWorkSheetBackground": "Fondo de la hoja de PJ", @@ -831,5 +872,6 @@ "SETTINGS.ShowExperimentalFeaturesHint": "Su mundo puede corromperse en próximas versiones si usa estas características. Solo para pruebas, no las use en sus mundos de juego", "CoC7.ExperimentalFeaturesWarning": "Esta característica está en desarrollo y no se recomienda su uso en sus mundos de juego", "SETTINGS.CheckElevation": "Incluir elevación en la distancia", - "SETTINGS.CheckElevationHint": "Usa la elevación en el combate a distancia para medir alcances" + "SETTINGS.CheckElevationHint": "Usa la elevación en el combate a distancia para medir alcances", + "CoC7.toolTipDelay": "Retraso en milisegundos que tarda en aparecer los mensajes emergentes, ajustar a 0 para no mostrarlos nunca" } From 517bc50521902cb28bb7b7a02ac5479911d16699 Mon Sep 17 00:00:00 2001 From: castanho Date: Mon, 18 Oct 2021 12:48:01 -0300 Subject: [PATCH 245/726] Fix bug on ranged combat damage not being rolled when number --- module/chat/rangecombat.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/chat/rangecombat.js b/module/chat/rangecombat.js index 680f3892..cfb9075e 100644 --- a/module/chat/rangecombat.js +++ b/module/chat/rangecombat.js @@ -3,7 +3,6 @@ import { CoC7Dice } from '../dice.js' import { CoC7Check } from '../check.js' import { chatHelper, CoC7Roll, CoC7Damage } from './helper.js' -// import { CoC7Chat } from '../chat.js'; export class CoC7RangeInitiator { constructor (actorKey = null, itemId = null, fastForward = false) { @@ -715,7 +714,8 @@ export class CoC7RangeInitiator { const volleySize = parseInt(h.shot.bulletsShot) const damageRolls = [] - const damageFormula = h.shot.damage + let damageFormula = String(h.shot.damage) + if (!damageFormula || damageFormula === '') damageFormula = '0' const damageDie = CoC7Damage.getMainDie(damageFormula) const maxDamage = new Roll(damageFormula).evaluate({ maximize: true From 45539c5de318fdff274c7f0f295c5d4d83492bf2 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 18 Oct 2021 15:49:33 +0000 Subject: [PATCH 246/726] Updated translations list --- .github/TRANSLATIONS.md | 762 ++++++++++++++++++++-------------------- 1 file changed, 381 insertions(+), 381 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index e7a48d1d..a99165eb 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,387 +2,387 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **fr**, **ja**, **pt-BR**, **sv** - -| Key | cn | cs | de | es | pl | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **376** | **152** | **169** | **40** | **17** | **1** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | +The following translations are currently up to date **es**, **fr**, **ja**, **pt-BR**, **sv** + +| Key | cn | cs | de | pl | zh-TW | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **376** | **152** | **169** | **17** | **1** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | ##### CoC7.ActorImporter From b5686fa4ff9a3208234d70796f2306a3cc5c82a2 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 18 Oct 2021 21:29:12 +0100 Subject: [PATCH 247/726] Return {variable} to translation json --- lang/zh-TW.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lang/zh-TW.json b/lang/zh-TW.json index d531a92a..d45f1c13 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -785,9 +785,9 @@ "CoC7.HitPointsCost": "HP消耗", "CoC7.MagicPointsCost": "MP消耗", "CoC7.OtherCosts": "其他消耗", - "CoC7.CastingSpell": "施放{咒語}。", + "CoC7.CastingSpell": "施放{spell}。", "CoC7.NoResponse": "無反應", - "CoC7.InitiatorMissed": "{名稱}已錯過了。", + "CoC7.InitiatorMissed": "{name}已錯過了。", "CoC7.DriveAutoSkillName": "自動駕駛", "CoC7.SortBySkillName": "按技能名稱排序", "CoC7.SortBySkillValue": "按技能大小排序", @@ -802,7 +802,7 @@ "CoC7.ImportActorItemsItem": "道具", "CoC7.ImportActorItemsItemWorldModuleSystem": "道具/世界/模組/系統", "CoC7.ImportActorItemsWorldModuleItemSystem": "世界/模組/道具/系統", - "CoC7.Migrate.WithModulesMessage": "

                          你的世界或模組可能需要更新以運行版本{版本}。

                          在開始升級之前,請備份你的世界和下面列出的模組文件夾。

                          如果你不更新你的世界,系統將無法正常工作。

                          下面的模組包含角色或物品,所以也將被檢查。

                          {模組}

                          世界完成後可能被重新啟動。

                          " , + "CoC7.Migrate.WithModulesMessage": "

                          你的世界或模組可能需要更新以運行版本{version}。

                          在開始升級之前,請備份你的世界和下面列出的模組文件夾。

                          如果你不更新你的世界,系統將無法正常工作。

                          下面的模組包含角色或物品,所以也將被檢查。

                          {modules}

                          世界完成後可能被重新啟動。

                          " , "CoC7.MessageDistanceCalculationFailure": "無法計算Token之間的距離,請使用角色卡。", "CoC7.ToolTipSkill": "
                          1. 點擊左鍵 顯示選項的擲骰
                          2. Shift + 左鍵 立即投擲普通難度檢定
                          1. 點擊右鍵 顯示選項的對抗檢定
                          2. Shift + 右鍵 立即進行對抗檢定
                          1. Alt/Option + 右鍵 顯示選項的聯合檢定
                          ", "CoC7.ToolTipKeeperSkill": "
                          1. CTRL + 左鍵 對話欄新增檢定連結
                          2. {other}
                          ", From d6b8f35f2d7c6dcf3135f7d20e885caf11790d4d Mon Sep 17 00:00:00 2001 From: castanho Date: Mon, 18 Oct 2021 17:46:34 -0300 Subject: [PATCH 248/726] Add remaining key to zh-TW.json --- lang/zh-TW.json | 93 +++++++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/lang/zh-TW.json b/lang/zh-TW.json index d45f1c13..b20265a3 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -778,50 +778,51 @@ "SETTINGS.ShowExperimentalFeatures": "顯示實驗性功能。", "SETTINGS.ShowExperimentalFeaturesHint": "如果你使用這些功能,你的世界可能在未來的版本中變得無法使用。僅用於測試。不要在你遊玩中的遊戲世界使用這些功能。", "CoC7.ExperimentalFeaturesWarning": "該功能正在開發中,不建議在你的遊戲世界中使用。", - "CoC7.AttacksPerRound": "每輪攻擊次數", - "CoC7.Casting": "正在施放魔法", - "CoC7.SanityCost": "心智消耗", - "CoC7.PowerCost": "意志消耗", - "CoC7.HitPointsCost": "HP消耗", - "CoC7.MagicPointsCost": "MP消耗", - "CoC7.OtherCosts": "其他消耗", - "CoC7.CastingSpell": "施放{spell}。", - "CoC7.NoResponse": "無反應", - "CoC7.InitiatorMissed": "{name}已錯過了。", - "CoC7.DriveAutoSkillName": "自動駕駛", - "CoC7.SortBySkillName": "按技能名稱排序", - "CoC7.SortBySkillValue": "按技能大小排序", - "CoC7.UncommonSkillsShow": "顯示不常見的技能", - "CoC7.UncommonSkillsHide": "隱藏不常見的技能", - "CoC7.InventoryIsCurrentlyEmpty": "清單目前是空的。", - "CoC7.EmptyCharacterSkillList": "通過拖放在這裡進行設置、增加職業或技能。", - "CoC7.TextFieldInvalidCharacters": "文本中存在無效文字,請修正,否則將被刪除", - "CoC7.ImportedCharactersFolder": "匯入角色", - "CoC7.ImportSkillItemLocations": "在其中尋找技能/法術/武器", - "CoC7.ImportActorItemsNone": "無", - "CoC7.ImportActorItemsItem": "道具", - "CoC7.ImportActorItemsItemWorldModuleSystem": "道具/世界/模組/系統", - "CoC7.ImportActorItemsWorldModuleItemSystem": "世界/模組/道具/系統", - "CoC7.Migrate.WithModulesMessage": "

                          你的世界或模組可能需要更新以運行版本{version}。

                          在開始升級之前,請備份你的世界和下面列出的模組文件夾。

                          如果你不更新你的世界,系統將無法正常工作。

                          下面的模組包含角色或物品,所以也將被檢查。

                          {modules}

                          世界完成後可能被重新啟動。

                          " , - "CoC7.MessageDistanceCalculationFailure": "無法計算Token之間的距離,請使用角色卡。", - "CoC7.ToolTipSkill": "
                          1. 點擊左鍵 顯示選項的擲骰
                          2. Shift + 左鍵 立即投擲普通難度檢定
                          1. 點擊右鍵 顯示選項的對抗檢定
                          2. Shift + 右鍵 立即進行對抗檢定
                          1. Alt/Option + 右鍵 顯示選項的聯合檢定
                          ", - "CoC7.ToolTipKeeperSkill": "
                          1. CTRL + 左鍵 對話欄新增檢定連結
                          2. {other}
                          ", - "CoC7.ToolTipKeeperStandbySkill": "
                        3. 點擊左鍵 要求 {name} 擲骰
                        4. ", - "CoC7.ToolTipDB": "
                          1. 點擊左鍵 立即投擲普通難度檢定
                          ", - "CoC7.ToolTipKeeperSanity": "
                        5. CTRL + Alt/Option 對話欄新增San Check連結
                        6. ", - "CoC7.ToolTipAutoToggle": "
                          1. 點擊左鍵 切換自動計算 / 手動輸入
                          2. ", - "CoC7.ToolTipSkillFlagToggle": "
                            1. 雙擊切換標誌狀態
                            2. ", - "CoC7.ToolTipSkillFlagged": "加上成長標記", - "CoC7.ToolTipSkillUnflagged": "移除成長標記", - "SETTINGS.TitleGameArtwork": "遊戲美術風格設定", - "SETTINGS.showIconsOnly": "在總結表上,只顯示技能列表上的圖標。", - "SETTINGS.OverrideGameArtwork": "覆蓋遊戲美術風格", - "SETTINGS.OverrideGameArtworkHint": "!!!需要重啓!!!讓人可以進入高級遊戲設定,留空為默認", - "SETTINGS.ArtPauseImage": "暫停圖片", - "SETTINGS.ArtPauseImageHint": "。輸入'null'來刪除圖片", - "SETTINGS.ArtPauseText": "暫停文字", - "SETTINGS.ArtPauseTextHint": "留空為默認", - "SETTINGS.CheckElevation": "在距離中包括高度", - "SETTINGS.CheckElevationHint": "在範圍戰鬥距離計算中使用高度", - "CoC7.toolTipDelay": "顯示提示前的毫秒延遲,0表示從不顯示" + "CoC7.AttacksPerRound": "每輪攻擊次數", + "CoC7.Cast": "施法", + "CoC7.Casting": "正在施放魔法", + "CoC7.SanityCost": "心智消耗", + "CoC7.PowerCost": "意志消耗", + "CoC7.HitPointsCost": "HP消耗", + "CoC7.MagicPointsCost": "MP消耗", + "CoC7.OtherCosts": "其他消耗", + "CoC7.CastingSpell": "施放{spell}。", + "CoC7.NoResponse": "無反應", + "CoC7.InitiatorMissed": "{name}已錯過了。", + "CoC7.DriveAutoSkillName": "自動駕駛", + "CoC7.SortBySkillName": "按技能名稱排序", + "CoC7.SortBySkillValue": "按技能大小排序", + "CoC7.UncommonSkillsShow": "顯示不常見的技能", + "CoC7.UncommonSkillsHide": "隱藏不常見的技能", + "CoC7.InventoryIsCurrentlyEmpty": "清單目前是空的。", + "CoC7.EmptyCharacterSkillList": "通過拖放在這裡進行設置、增加職業或技能。", + "CoC7.TextFieldInvalidCharacters": "文本中存在無效文字,請修正,否則將被刪除", + "CoC7.ImportedCharactersFolder": "匯入角色", + "CoC7.ImportSkillItemLocations": "在其中尋找技能/法術/武器", + "CoC7.ImportActorItemsNone": "無", + "CoC7.ImportActorItemsItem": "道具", + "CoC7.ImportActorItemsItemWorldModuleSystem": "道具/世界/模組/系統", + "CoC7.ImportActorItemsWorldModuleItemSystem": "世界/模組/道具/系統", + "CoC7.Migrate.WithModulesMessage": "

                              你的世界或模組可能需要更新以運行版本{version}。

                              在開始升級之前,請備份你的世界和下面列出的模組文件夾。

                              如果你不更新你的世界,系統將無法正常工作。

                              下面的模組包含角色或物品,所以也將被檢查。

                              {modules}

                              世界完成後可能被重新啟動。

                              " , + "CoC7.MessageDistanceCalculationFailure": "無法計算Token之間的距離,請使用角色卡。", + "CoC7.ToolTipSkill": "
                              1. 點擊左鍵 顯示選項的擲骰
                              2. Shift + 左鍵 立即投擲普通難度檢定
                              1. 點擊右鍵 顯示選項的對抗檢定
                              2. Shift + 右鍵 立即進行對抗檢定
                              1. Alt/Option + 右鍵 顯示選項的聯合檢定
                              ", + "CoC7.ToolTipKeeperSkill": "
                              1. CTRL + 左鍵 對話欄新增檢定連結
                              2. {other}
                              ", + "CoC7.ToolTipKeeperStandbySkill": "
                            3. 點擊左鍵 要求 {name} 擲骰
                            4. ", + "CoC7.ToolTipDB": "
                              1. 點擊左鍵 立即投擲普通難度檢定
                              ", + "CoC7.ToolTipKeeperSanity": "
                            5. CTRL + Alt/Option 對話欄新增San Check連結
                            6. ", + "CoC7.ToolTipAutoToggle": "
                              1. 點擊左鍵 切換自動計算 / 手動輸入
                              2. ", + "CoC7.ToolTipSkillFlagToggle": "
                                1. 雙擊切換標誌狀態
                                2. ", + "CoC7.ToolTipSkillFlagged": "加上成長標記", + "CoC7.ToolTipSkillUnflagged": "移除成長標記", + "SETTINGS.TitleGameArtwork": "遊戲美術風格設定", + "SETTINGS.showIconsOnly": "在總結表上,只顯示技能列表上的圖標。", + "SETTINGS.OverrideGameArtwork": "覆蓋遊戲美術風格", + "SETTINGS.OverrideGameArtworkHint": "!!!需要重啓!!!讓人可以進入高級遊戲設定,留空為默認", + "SETTINGS.ArtPauseImage": "暫停圖片", + "SETTINGS.ArtPauseImageHint": "。輸入'null'來刪除圖片", + "SETTINGS.ArtPauseText": "暫停文字", + "SETTINGS.ArtPauseTextHint": "留空為默認", + "SETTINGS.CheckElevation": "在距離中包括高度", + "SETTINGS.CheckElevationHint": "在範圍戰鬥距離計算中使用高度", + "CoC7.toolTipDelay": "顯示提示前的毫秒延遲,0表示從不顯示" } From 18d48ed63f112548bff859ec07e2b9ae87159f5d Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 18 Oct 2021 20:47:27 +0000 Subject: [PATCH 249/726] Updated translations list --- .github/TRANSLATIONS.md | 762 ++++++++++++++++++++-------------------- 1 file changed, 381 insertions(+), 381 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index a99165eb..e4f89d41 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,387 +2,387 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **es**, **fr**, **ja**, **pt-BR**, **sv** - -| Key | cn | cs | de | pl | zh-TW | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **376** | **152** | **169** | **17** | **1** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ✅ | +The following translations are currently up to date **es**, **fr**, **ja**, **pt-BR**, **sv**, **zh-TW** + +| Key | cn | cs | de | pl | +| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | +| **Remaining**: | **376** | **152** | **169** | **17** | +| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | +| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | +| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | +| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | +| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | +| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | +| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | +| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | +| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | +| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | +| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | +| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | +| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | +| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | +| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | +| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | +| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | +| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | +| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | +| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | +| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | ##### CoC7.ActorImporter From ed4aad17db891d093b3c9b6350580976ccfef54e Mon Sep 17 00:00:00 2001 From: castanho Date: Mon, 18 Oct 2021 18:02:47 -0300 Subject: [PATCH 250/726] Add attempt to unlink original item from derivative --- module/items/book/data.js | 19 ++++++++++++++++--- module/items/book/sheet.js | 1 - module/items/spell/data.js | 9 +++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/module/items/book/data.js b/module/items/book/data.js index c2e8ea59..7075662b 100644 --- a/module/items/book/data.js +++ b/module/items/book/data.js @@ -1,4 +1,4 @@ -/* global ChatMessage, duplicate, game, renderTemplate, Roll, ui */ +/* global ChatMessage, duplicate, foundry, game, renderTemplate, Roll, ui */ import { SanCheckCard } from '../../chat/cards/san-check.js' import { CoC7Check } from '../../check.js' @@ -35,11 +35,14 @@ export class CoC7Book extends CoC7Item { * @returns {Promise} update to Item document */ async addSpells (spells) { + console.log(spells) const collection = this.data.data.spells ? duplicate(this.data.data.spells) : [] for (const spell of spells) { - collection.push(spell) + const { _source, _id, ...data } = spell + data._id = foundry.utils.randomID(16) + collection.push(data) } return await this.update({ 'data.spells': collection }) } @@ -48,10 +51,20 @@ export class CoC7Book extends CoC7Item { const data = this.data.data.spells[index] const parent = this.actor ? this.actor : null const spell = new CoC7Spell(data, { parent }) - console.log(spell) + await spell.update({ 'data.flags.book': this.id, 'data.flags.index': index }) return await spell.sheet.render(true) } + async updateSpell (index, data) { + console.log(data) + const collection = this.data.data.spells + ? duplicate(this.data.data.spells) + : [] + collection[index] = data + await this.update({ 'data.spells': collection }) + return this.sheet.render(true) + } + /** * Handles all the logic involving the attempt of initial reading * @returns {Promise} @see listen @see grantInitialReading diff --git a/module/items/book/sheet.js b/module/items/book/sheet.js index 739cea88..a6d1caae 100644 --- a/module/items/book/sheet.js +++ b/module/items/book/sheet.js @@ -87,7 +87,6 @@ export class CoC7BookSheet extends ItemSheet { } async _onSpellDetail (event) { - if (!game.user.isGM) return event.preventDefault() const element = $(event.currentTarget) /** @see data-index property on template */ diff --git a/module/items/spell/data.js b/module/items/spell/data.js index f333d4e7..330c8449 100644 --- a/module/items/spell/data.js +++ b/module/items/spell/data.js @@ -12,6 +12,15 @@ export class CoC7Spell extends CoC7Item { super(data, context) } + _onUpdate (changed, options, usedId) { + super._onUpdate(changed, options, usedId) + const book = this.data.data.flags?.book + const index = this.data.data.flags?.index + if (book) { + return game.items.get(book).updateSpell(index, this.data) + } + } + async cast () { if (!this.isOwned) { /** This is not owned by any Actor */ From 7a2db2616df940af7db7b4de0f0f0c0118533fba Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 19 Oct 2021 09:45:03 +0100 Subject: [PATCH 251/726] Split translations into current and adandoned --- .github/ABANDONED.md | 717 ++++++++++++++ .github/TRANSLATIONS.md | 1905 +------------------------------------- generate-translations.js | 40 +- package.json | 1 + 4 files changed, 795 insertions(+), 1868 deletions(-) create mode 100644 .github/ABANDONED.md diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md new file mode 100644 index 00000000..f278ffed --- /dev/null +++ b/.github/ABANDONED.md @@ -0,0 +1,717 @@ +# Abandoned Translations. + +Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. + +[cn.json](#cnjson) + +[cs.json](#csjson) + +[de.json](#dejson) + + +## cn.json +``` +"CoC7.Entities.Character": "Character", +"CoC7.Entities.Container": "Container", +"CoC7.Entities.Creature": "Creature", +"CoC7.Entities.Npc": "NPC", +"CoC7.Entities.Vehicle": "Vehicle", +"CoC7.Entities.Archetype": "Archetype", +"CoC7.Entities.Book": "Book", +"CoC7.Entities.Chase": "Chase", +"CoC7.Entities.Item": "Item", +"CoC7.Entities.Occupation": "Occupation", +"CoC7.Entities.Setup": "Setup", +"CoC7.Entities.Skill": "Skill", +"CoC7.Entities.Spell": "Spell", +"CoC7.Entities.Status": "Status", +"CoC7.Entities.Talent": "Talent", +"CoC7.Entities.Weapon": "Weapon", +"CoC7.PlayerName": "Player", +"CoC7.DailyLoss": "Daily", +"CoC7.DyingCheck": "Check if you'll die immediately", +"CoC7.UnderlyingInsanity": "Underlying insanity", +"CoC7.NotInsane": "None", +"CoC7.Weapons": "Weapons", +"CoC7.rounds": "round(s)", +"CoC7.hours": "hour(s)", +"CoC7.weeks": "week(s)", +"CoC7.remove": "Remove", +"CoC7.Any": "Any", +"CoC7.All": "All", +"CoC7.Success": "Success", +"CoC7.CustomLabel": "Custom label", +"CoC7.SpecificLocations": "Specific locations", +"CoC7.ArmourPlating": "Armour plating", +"CoC7.Location": "Location", +"CoC7.Properties": "Properties", +"CoC7.Attributes": "Attributes", +"CoC7.Attribute": "Attribute", +"CoC7.Collapse": "Collapse", +"CoC7.Expand": "Expand", +"CoC7.Blind": "Blind", +"CoC7.Label": "Label", +"CoC7.Icon": "Icon", +"CoC7.Check": "Check", +"CoC7.ItemWeapon": "Item (Weapon)", +"CoC7.AttacksPerRound": "Attacks per round", +"CoC7.Cast": "Cast", +"CoC7.SanityCost": "Sanity Cost", +"CoC7.PowerCost": "Power Cost", +"CoC7.HitPointsCost": "Hit Points Cost", +"CoC7.MagicPointsCost": "Magic Points Cost", +"CoC7.OtherCosts": "Other Costs", +"CoC7.CastingSpell": "Casting {spell}.", +"CoC7.CopyToClipboard": "Copy to clipboard", +"CoC7.WhisperToSelection": "Whisper to selected tokens", +"CoC7.WhisperTo": "Whisper to", +"CoC7.SendToChat": "Send to chat", +"CoC7.Modifiers": "Modifiers", +"CoC7.PushingSkill": ": pushing skill!", +"CoC7.RevealSanLoss": "Reveal SAN loss", +"CoC7.RollSecretDice": "Keeper privately rolled some dice", +"CoC7.KeeperSentDecoy": "Decoy roll sent to players", +"CoC7.FakeRoll": "Send a decoy roll to players", +"CoC7.SanDataSelectionWindow": "Select SAN losses", +"CoC7.RollThreshold": "Roll threshold", +"CoC7.FlatDiceModifier": "Flat dice modifier", +"CoC7.FlatModifier": "Flat modifier", +"CoC7.CreateLink": "Create link", +"CoC7.CombinedRollCard": "Combined roll card", +"CoC7.OpposedRollCard": "Opposed roll card", +"CoC7.CombinedAnyHint": "Any roll must succeed", +"CoC7.CombinedAllHint": "All rolls must succeed", +"CoC7.CloseCard": "Close card", +"CoC7.ArmorAbsorbsDamage": "Armor absorbs total damage", +"CoC7.Critical": "Critical", +"CoC7.Impale": "Impale", +"CoC7.CriticalTitle": "The blow is critical", +"CoC7.ImpaleTitle": "The weapon can impale", +"CoC7.Target": "Target", +"CoC7.TargetOutOfRange": "Target out of range", +"CoC7.NoTargetToDamage": "There is no target to apply the damage to", +"CoC7.ShotIsImpossible": "Shot is impossible", +"CoC7.OutOfAmmo": "Out of Ammo", +"CoC7.OutOfShots": "Out of shots", +"CoC7.NoResponse": "No Response", +"CoC7.InitiatorMissed": "{name} missed.", +"CoC7.AttackSuccess": "{name} landed a blow.", +"CoC7.AdvantageAttacker": "Advantage: Attacker", +"CoC7.AdvantageDefender": "Advantage: Defender", +"CoC7.Tie": "Tie", +"CoC7.DamageInflicted": "Damage inflicted", +"CoC7.TotalDamage": "Total damage", +"CoC7.AutomaticFire": "Automatic Fire", +"CoC7.rangeCombatCard.NormalTarget": "Normal Target", +"CoC7.rangeCombatDamageArmor": "{name} takes {total} damage. ({armor} mitigated)", +"CoC7.ShotBullets": "Shot {bullets} bullets at target {actor}.", +"CoC7.ShotVoley": "Shooting a voley of {bullets} bullets at target {actor}.", +"CoC7.rangeCombatCard.AimingTitle": "Add 1 bonus die for the first shot", +"CoC7.rangeCombatCard.CoverTitle": "1 penalty die. The target is under cover or successfully dived for cover", +"CoC7.rangeCombatCard.PointBlankRangeTitle": "1 bonus die. Target at point blank range", +"CoC7.rangeCombatCard.BigTargetTitle": "1 bonus die for big target (Build > 4)", +"CoC7.rangeCombatCard.SmallTargetTitle": "1 penalty die for a small target", +"CoC7.rangeCombatCard.NormalTargetTitle": "Target has a normal size, no bonus/penalty", +"CoC7.rangeCombatCard.InMeleeTitle": "1 penalty die. Target is engaged in melee combat", +"CoC7.rangeCombatCard.FastMovingTargetTitle": "1 penalty die. Target is fast (MOV 8+) and moving at full speed", +"CoC7.meleeCombatDamageTakes": "takes", +"CoC7.meleeCombatDamageFrom": "from", +"CoC7.meleeCombatDamageDeals": "deals", +"CoC7.meleeCombatDamageWith": "with", +"CoC7.Reload": "Left/Right click : add/remove 1 bullet\nShift + Left/Right click : Reload/Empty", +"CoC7.WeaponUsesPerRoundHint": "Attacks per round (1/3 : 1 attack every 3 rounds)", +"CoC7.BurstSizeHint": "How many bullets per burst", +"CoC7.DriveAutoSkillName": "Drive Auto", +"CoC7.DriveSpecializationName": "Drive", +"CoC7.PilotSpecializationName": "Pilot", +"CoC7.BoutOfMadnessName": "Bout of Madness", +"CoC7.InsanityName": "Insanity", +"CoC7.RecoverLuckPoints": "Recover Luck Points", +"CoC7.RollLuck4Dev": "Rolling Luck for development", +"CoC7.SanGained": "Gained 2d6 ({results} = {sanGained}) Sanity after mastering {skill} with a {skillValue}%", +"CoC7.LuckIncreased": "Luck recovered ({die}/{score}) by {augment} points", +"CoC7.LuckNotIncreased": "Luck NOT recovered ({die}/{score})", +"CoC7.DevelopAttribWarn": "You can not access some attributes in development/creation.", +"CoC7.TradeItem": "Trade / Store Item", +"CoC7.SortBySkillName": "Sort by skill name", +"CoC7.SortBySkillValue": "Sort by skill percent", +"CoC7.UncommonSkillsShow": "Show uncommon skills", +"CoC7.UncommonSkillsHide": "Hide uncommon skills", +"CoC7.NewBookName": "new book", +"CoC7.AddBook": "Add book", +"CoC7.NewSpellName": "new spell", +"CoC7.AddSpell": "Add spell", +"CoC7.InventoryIsCurrentlyEmpty": "Inventory is currently empty.", +"CoC7.LinkCheckDiff": "[{difficulty}] {name} check", +"CoC7.LinkCheckModif": " {name} check({modifier})", +"CoC7.LinkCheckDiffModif": "[{difficulty}] {name} check({modifier})", +"CoC7.LinkSanLossDiff": "[{difficulty}] SAN loss ({sanMin}/{sanMax})", +"CoC7.LinkSanLossModif": " SAN loss({modifier}) ({sanMin}/{sanMax})", +"CoC7.LinkSanLossDiffModif": "[{difficulty}] SAN loss({modifier}) ({sanMin}/{sanMax})", +"CoC7.LinkItem": " {name}", +"CoC7.LinkItemDiff": "[{difficulty}] {name}", +"CoC7.LinkItemModif": " {name} ({modifier})", +"CoC7.LinkItemDiffModif": "[{difficulty}] {name} ({modifier})", +"CoC7.InvoluntaryAction": "Involuntary action", +"CoC7.InvoluntaryActionPerfomed": "Involuntary action performed", +"CoC7.IntCheck": "Intelligence check", +"CoC7.SanityCheckPerformed": "You were exposed to a traumatic event.", +"CoC7.InvoluntaryActionPerformed": "You lost self-control for a moment.", +"CoC7.SanityLost": "Sanity points lost", +"CoC7.MemoryRepressed": "Your mind repressed the memory and buried it in your subconscious.", +"CoC7.RememberEverything": "You remember EVERYTHING.", +"CoC7.BoutOfMadnesslasted": "Your bout of madness lasted", +"CoC7.EnteringBoutOfMadness": "You experience a bout of madness", +"CoC7.GrowingAccustomedToAwfulness": "Your getting used to horror. (Your sanity loss is limited).", +"CoC7.ImmuneToAwfulness": "Your mind is immune to this awfulness. (No sanity loss).", +"CoC7.InvestigatorPhobiaGained": "The investigator gain a phobia", +"CoC7.PhobiaGained": "You gain a phobia", +"CoC7.InvestigatorManiaGained": "The investigator gain a mania", +"CoC7.ManiaGained": "You gain a mania", +"CoC7.AlreadyUnderlyingInsanity": "Investigator already in an underlying insanity state.", +"CoC7.IndefinitelyInsane": "You become indefinitely insane.", +"CoC7.TemporaryInsane": "You become temporary insane.", +"CoC7.GoodForAsylum": "You're good to be sent to the asylum", +"CoC7.BoutOfMadness": "Bout of madness", +"CoC7.BoutRealTime": "Bout of madness: Real time", +"CoC7.BoutSummary": "Bout of madness: Summary", +"CoC7.EndBoutOfMadness": "End bout of madness", +"CoC7.InsanityType": "Type of insanity", +"CoC7.Phobia": "Phobia", +"CoC7.Mania": "Mania", +"CoC7.MaxSanloss": "Max loss", +"CoC7.MinSanloss": "Min loss", +"CoC7.AlreadyLost": "Already lost", +"CoC7.CreatureMaxLoss": "Creature max loss", +"CoC7.MaxLossToCreature": "Max loss to this creature", +"CoC7.ResetCreatureSan": "Reset creature's history", +"CoC7.ResetSpecieSan": "Reset specie's history", +"CoC7.KeepData": "Keep creature's data", +"CoC7.BoutActive": "(Bout) Immune to SAN loss", +"CoC7.AlreadyInABout": "You're already suffering a bout of madness and are immune to further loss of sanity.", +"CoC7.PlayerPermanentlyInsane": "Player Permanently Insane", +"CoC7.MythosFirstEncounter": "Award Mythos Experience (+5% First time)", +"CoC7.MythosAlreadyEncountered": "Award Mythos Experience (+1%)", +"CoC7.DisregardMythosGain": "No Mythos gain", +"CoC7.MythosGain": "Mythos gain", +"CoC7.YouGainedCthulhuMythos": "Your mind quail before the unearthly manifestation (+{value}% Cthulhu Mythos)", +"CoC7.CardResolved": "Card resolved", +"CoC7.BookHasNothingMoreToTeach": "{book} has nothing more to teach. Cthulhu Mythos skill of {actor} is greater than this Mythos Rating.", +"CoC7.Content": "Content", +"CoC7.Development": "Development", +"CoC7.DifficultyLevel": "Difficulty Level", +"CoC7.DragSpell": "Drag spells here to insert them into the book...", +"CoC7.FullStudies": "Full Studies", +"CoC7.Gains": "Gains", +"CoC7.GainsForReading": "Skill gains for reading {book}.", +"CoC7.InitialReading": "Initial Reading", +"CoC7.InitialReadingNeeded": "{actor} needs to perform an Initial Reading on {book} to be able to advance through Full Study progress.", +"CoC7.LearnSpellAttempt": "Attempt to learn spell {spell}, from {book}.", +"CoC7.MarkedForDevelopment": "Marked for development", +"CoC7.Mythos": "Mythos", +"CoC7.NotOwned": "This Book needs to be owned by an Actor to perform this action.", +"CoC7.Points": "point(s)", +"CoC7.Progress": "Progress", +"CoC7.RedoFullStudy": "Redo Full Study", +"CoC7.ReadAttempt": "Attempt to read {book} ({language}), {difficulty} difficulty.", +"CoC7.ReadingMythosTome": "Reading {book}.", +"CoC7.Specific": "Specific", +"CoC7.SpellsLearned": "Spells Learned", +"CoC7.UnknownLanguage": "{actor} do not know the language in which this book is written.", +"CoC7.Unreadable": "Unreadable", +"CoC7.Crew": "Crew", +"CoC7.Origin": "Origin", +"CoC7.ArmedVehicle": "Armed Vehicle", +"CoC7.Vehicle": "Vehicle", +"CoC7.Status": "Status", +"CoC7.EmptyItemList": "Add an item by dropping it here.", +"CoC7.EmptyCharacterSkillList": "Add a setup, occupation, or skill by dropping it here.", +"CoC7.Characteristic": "Characteristic", +"CoC7.GmTools": "Keeper's tools", +"CoC7.GmNotes": "Keeper's notes", +"CoC7.DevPhase": "Development phase", +"CoC7.CharCreationMode": "Character creation mode", +"CoC7.toggleXP": "XP gain", +"CoC7.XPGainEnabled": "Character can gain XP", +"CoC7.XPGainDisabled": "Character cannot gain XP", +"CoC7.startRest": "Start Rest", +"CoC7.dreaming": "The Investigators wait dreaming", +"CoC7.healthRecovered": "Recovered one Hit Point", +"CoC7.pulpHealthRecovered": "Recovered {number} Hit Points", +"CoC7.dailySanLossRestarted": "Daily Sanity loss counter restarted", +"CoC7.magicPointsRecovered": "Magic Points recovered", +"CoC7.hasCriticalWounds": "Unable to recover Hit Points due to Critical Wounds", +"CoC7.quickHealer": "Quick Healer", +"CoC7.MessageCheckRequestedWait": "{check} roll requested by your Keeper.
                                  Wait before clicking!
                                  ", +"CoC7.MessageTargetCheckRequested": "Your keeper has requested {name} make a {check} roll.", +"CoC7.MessageTitleSelectSingleUserForTarget": "Which user can respond to this attack", +"CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.", +"CoC7.MessageBoutOfMadnessTableNotFound": "The result from the madness table was not found, please check all your roll tables are created", +"CoC7.MessageBoutOfMadnessItemNotFound": "The result from the madness table was not found, please check all your statuses are created", +"CoC7.DealDamage": "Deal {damage} damage points to {target}?", +"CoC7.NoTargetSelected": "You have not selected a target for your {weapon} check. Do you want to proceed anyway?", +"CoC7.Import": "Import", +"CoC7.Proceed": "Proceed", +"CoC7.Cancel": "Cancel", +"CoC7.ActorImporter": "Actor Importer", +"CoC7.ActorImporterSummary": "Import an NPC or Creature from description and stats. Just paste the corresponding plain text", +"CoC7.PasteTheDataBelow": "Paste the raw text data below", +"CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed", +"CoC7.SelectActorType": "Select actor type", +"CoC7.NonPlayingCharacter": "Non Playing Character (NPC)", +"CoC7.Creature": "Creature", +"CoC7.ConvertFrom6Edition": "Convert from 6 edition", +"CoC7.Convert": "Convert", +"CoC7.NoConvert": "No Convert", +"CoC7.Guess": "Guess", +"CoC7.English": "English", +"CoC7.Spanish": "Spanish", +"CoC7.French": "French", +"CoC7.TraditionalChinese": "Traditional Chinese", +"CoC7.SelectSourceLanguage": "Select the source text language", +"CoC7.ImportedUnnamedCharacter": "Imported unnamed character", +"CoC7.CreatedImportedCharactersFolder": "Created 'Imported Characters' folder", +"CoC7.ImportedCharactersFolder": "Imported characters", +"CoC7.ImportSkillItemLocations": "Look for skills/spells/weapons in", +"CoC7.ImportActorItemsNone": "None", +"CoC7.ImportActorItemsItem": "Items", +"CoC7.ImportActorItemsItemWorldModuleSystem": "Items / World / Modules / System", +"CoC7.ImportActorItemsWorldModuleItemSystem": "World / Modules / Items / System", +"CoC7.HowToTranslateTitle": "How to translate?", +"CoC7.HowToTranslateWarning": "Do not install any modules you do not trust.", +"CoC7.HowToTranslateInstallBabele": "Install/Update Babele module from Foundry's module manager.", +"CoC7.HowToTranslateInstallTranslation": "Install/Update Translation from Foundry's module manager.", +"CoC7.HowToTranslateEnableTranslation": "Inside the Game World, under Configuration/Manage Modules activate both Babele and the translations.", +"CoC7.HowToTranslateNoTranslation": "Instructions for creating new language translations are available on existing translation modules.", +"CoC7.Migrate.Title": "Update required", +"CoC7.Migrate.Message": "

                                  Your world requires an update to run version {version}.

                                  Please backup your world folder before starting the upgrade.

                                  If you do not update your world the system will not work correctly.

                                  The world may be restarted when completed.

                                  ", +"CoC7.Migrate.WithModulesMessage": "

                                  Your world or modules may require an update to run version {version}.

                                  Please backup your world and module folders listed below before starting the upgrade.

                                  If you do not update your world the system will not work correctly.

                                  The following modules contain actors or items so will also be checked.

                                  {modules}

                                  The world may be restarted when completed.

                                  ", +"CoC7.Migrate.GMRequired": "

                                  Your world requires an update to run version {version}.

                                  Please wait for your GM to update the system then refresh (F5) this page.

                                  ", +"CoC7.Migrate.RestartRequired": "

                                  Your world will now restart to enable these changes

                                  ", +"CoC7.Migrate.ButtonUpdate": "Update", +"CoC7.Migrate.ButtonSkip": "Skip", +"CoC7.Migrate.ButtonOkay": "Okay", +"CoC7.Maximize": "Maximize", +"CoC7.Summarize": "Summarize", +"CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you", +"CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", +"CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2", +"CoC7.MessageTitleSelectUserToGiveTo": "Give item to another character", +"CoC7.MessageSelectUserToGiveTo": "Which character would you like to give this item to?", +"CoC7.MessageDistanceCalculationFailure": "Unable to calculate distance between tokens, please use the token character sheet.", +"CoC7.ToolTipSkill": "
                                  1. Left click roll check with options
                                  2. Shift + Left click Immediate regular difficulty roll
                                  1. Right click Opposed check with options
                                  2. Shift + Right click Immediate opposed check
                                  1. Alt/Option + Right click Combined check with options
                                  ", +"CoC7.ToolTipKeeperSkill": "
                                  1. CTRL + Left click Create roll link
                                  2. {other}
                                  ", +"CoC7.ToolTipKeeperStandbySkill": "
                                3. Left click Request a roll from {name}
                                4. ", +"CoC7.ToolTipDB": "
                                  1. Left click Immediate regular difficulty roll
                                  ", +"CoC7.ToolTipKeeperSanity": "
                                5. CTRL + Alt/Option Create sanity check roll link
                                6. ", +"CoC7.ToolTipAutoToggle": "
                                  1. Left click Toggle automatic calculation / manual entry
                                  2. ", +"CoC7.ToolTipSkillFlagToggle": "
                                    1. Double Click Toggle flag status
                                    2. ", +"CoC7.ToolTipSkillFlagged": "Flagged for development", +"CoC7.ToolTipSkillUnflagged": "Not flagged for development", +"SETTINGS.TitleRules": "Rules", +"SETTINGS.TitleInitiative": "Initiative Settings", +"SETTINGS.TitleRoll": "Roll Settings", +"SETTINGS.TitleChatCards": "Chat Cards Settings", +"SETTINGS.TitleScene": "Scene Settings", +"SETTINGS.TitleSheet": "Sheet Settings", +"SETTINGS.TitleGameArtwork": "Game Artwork Settings", +"SETTINGS.TitleWeapon": "Weapon Settings", +"SETTINGS.TitleDiceSoNice": "Dice So Nice Settings", +"SETTINGS.TitleDeveloperDebug": "Developer And Debug Settings", +"SETTINGS.TitleRollTable": "Roll Table Settings", +"SETTINGS.DebugMode": "System Debug Mode", +"SETTINGS.DebugModeHint": "!!RESTART REQUIRED!!", +"SETTINGS.showIconsOnly": "On summarized sheet, show only icons on skills list.", +"SETTINGS.developmentRollForLuck": "Recoverable Luck points", +"SETTINGS.developmentRollForLuckHint": "Each player can make an improvement check for their Luck on Development Phase", +"SETTINGS.displayPlayerNameOnSheet": "Display player's name on sheet", +"SETTINGS.OverrideGameArtwork": "Override game Artwork", +"SETTINGS.OverrideGameArtworkHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default", +"SETTINGS.ArtPauseImage": "Pause image", +"SETTINGS.ArtPauseImageHint": ". Type 'null' to remove image", +"SETTINGS.ArtPauseText": "Pause text", +"SETTINGS.ArtPauseTextHint": "Leave blank for default", +"SETTINGS.OverrideSheetArtwork": "Override Sheet Artwork", +"SETTINGS.OverrideSheetArtworkHint": "!!RESTART REQUIRED!! gives access to advance sheet config, leave blank for default", +"SETTINGS.ArtWorkSheetBackground": "Character sheet background", +"SETTINGS.ArtWorkSheetBackgroundHint": "type 'null' to remove background, blank for default", +"SETTINGS.ArtWorkSheetBackgroundType": "Background type", +"SETTINGS.BackgroundSlice": "Background image will be sliced (css:border-image)", +"SETTINGS.BackgroundAuto": "Scales the image maintening proportions (css:auto)", +"SETTINGS.BackgroundContain": "Scales to fill without croping/stretching (css:contain)", +"SETTINGS.BackgroundCover": "Scales to fill with croping/stretching (css:cover)", +"SETTINGS.ArtWorkOtherSheetBackground": "Other sheet background", +"SETTINGS.ArtWorkOtherSheetBackgroundHint": "type 'null' to remove background. Only for items and vehicle for now", +"SETTINGS.ArtworkSheetImage": "Character sheet image", +"SETTINGS.ArtworkSheetImageHint": "type 'null' to remove image", +"SETTINGS.ArtworkFrontColor": "Main color", +"SETTINGS.ArtworkFrontColorHint": "Used for all elements", +"SETTINGS.ArtworkBackgroundColor": "Secondary color", +"SETTINGS.ArtworkBackgroundColorHint": "Used for background and inputs", +"SETTINGS.ArtworkInteractiveColor": "Interactive elements color", +"SETTINGS.ArtworkInteractiveColorHint": "Used for interactives/rollables elements", +"SETTINGS.ArtworkFixedSkillLength": "Limit skill name length", +"SETTINGS.ArtworkFixedSkillLengthHint": "The skill length in the skill tab will be limited for a more compact sheet", +"SETTINGS.ArtworkMainFont": "Main font", +"SETTINGS.ArtworkMainFontBold": "Main font (bold)", +"SETTINGS.ArtworkMainFontSize": "Default font size (px)", +"SETTINGS.BoutOfMadnessSummaryTable": "Bout of madness (Summary) table", +"SETTINGS.BoutOfMadnessRealTimeTable": "Bout of madness (Real Time) table", +"SETTINGS.LetKeeperDecide": "Let keeper decide", +"SETTINGS.DisplayResultType": "Display dice result type (text)", +"SETTINGS.DisplayCheckSuccessLevel": "Display check level of success (stars)", +"SETTINGS.PlayerUnlockSheetMode": "Player can unlock sheet", +"SETTINGS.AlwaysEditable": "always", +"SETTINGS.CreationModeOnly": "in creation mode only", +"SETTINGS.NeverEditable": "never (Keeper only)", +"SETTINGS.StanbyGMRolls": "Standby Keeper rolls", +"SETTINGS.StanbyGMRollsHint": "When the Keeper is making a roll from an assigned character sheet, display a roll button instead of rolling", +"SETTINGS.AllowFlatDiceModifier": "Flat dice modifier", +"SETTINGS.AllowFlatDiceModifierHint": "Allows dice roll results to be modified by a flat value.", +"SETTINGS.AllowFlatThresholdModifier": "Flat value modifier", +"SETTINGS.AllowFlatThresholdModifierHint": "Allows checks success value to be modified by a flat value.", +"SETTINGS.OpposedRollTieBreaker": "Opposed rolls Viriato139ac tie breaker", +"SETTINGS.OpposedRollTieBreakerHint": "In case of a tie during opposed roll, winner is determined by highest rolled value, not higher skill.", +"SETTINGS.SelfRollWhisperTarget": "Self roll notification:", +"SETTINGS.SelfRollWhisperTargetHint": "As a GM, when doing self check roll, who do you want to send a notification to.", +"SETTINGS.DoNotAdvise": "Keep it for yourself.", +"SETTINGS.AdviseOwnersOnly": "Notify actor's owner", +"SETTINGS.AdviseAllPlayer": "Notify all players", +"SETTINGS.OneBlockBackStory": "One block backstory", +"SETTINGS.OneBlockBackStoryHint": "Turn backstory to one editor block, but you can format/add links.", +"SETTINGS.EnableStatusIcons": "Enable status icons", +"SETTINGS.EnableStatusIconsHint": "Set if combat and sanity effects icons are shown in tokens.", +"SETTINGS.ShowExperimentalFeatures": "Show Experimental Features", +"SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds", +"CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.", +"SETTINGS.CheckElevation": "Include elevation in distance", +"SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations", +"CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never" +``` +## cs.json +``` +"CoC7.Entities.Character": "Character", +"CoC7.Entities.Container": "Container", +"CoC7.Entities.Creature": "Creature", +"CoC7.Entities.Npc": "NPC", +"CoC7.Entities.Vehicle": "Vehicle", +"CoC7.Entities.Archetype": "Archetype", +"CoC7.Entities.Book": "Book", +"CoC7.Entities.Chase": "Chase", +"CoC7.Entities.Item": "Item", +"CoC7.Entities.Occupation": "Occupation", +"CoC7.Entities.Setup": "Setup", +"CoC7.Entities.Skill": "Skill", +"CoC7.Entities.Spell": "Spell", +"CoC7.Entities.Status": "Status", +"CoC7.Entities.Talent": "Talent", +"CoC7.Entities.Weapon": "Weapon", +"CoC7.PlayerName": "Player", +"CoC7.Weapons": "Weapons", +"CoC7.weeks": "week(s)", +"CoC7.AttacksPerRound": "Attacks per round", +"CoC7.Cast": "Cast", +"CoC7.SanityCost": "Sanity Cost", +"CoC7.PowerCost": "Power Cost", +"CoC7.HitPointsCost": "Hit Points Cost", +"CoC7.MagicPointsCost": "Magic Points Cost", +"CoC7.OtherCosts": "Other Costs", +"CoC7.CastingSpell": "Casting {spell}.", +"CoC7.NoTargetToDamage": "There is no target to apply the damage to", +"CoC7.NoResponse": "No Response", +"CoC7.InitiatorMissed": "{name} missed.", +"CoC7.ShotBullets": "Shot {bullets} bullets at target {actor}.", +"CoC7.ShotVoley": "Shooting a voley of {bullets} bullets at target {actor}.", +"CoC7.meleeCombatDamageTakes": "takes", +"CoC7.meleeCombatDamageFrom": "from", +"CoC7.meleeCombatDamageDeals": "deals", +"CoC7.meleeCombatDamageWith": "with", +"CoC7.DriveAutoSkillName": "Drive Auto", +"CoC7.SanGained": "Gained 2d6 ({results} = {sanGained}) Sanity after mastering {skill} with a {skillValue}%", +"CoC7.DevelopAttribWarn": "You can not access some attributes in development/creation.", +"CoC7.TradeItem": "Trade / Store Item", +"CoC7.SortBySkillName": "Sort by skill name", +"CoC7.SortBySkillValue": "Sort by skill percent", +"CoC7.UncommonSkillsShow": "Show uncommon skills", +"CoC7.UncommonSkillsHide": "Hide uncommon skills", +"CoC7.NewBookName": "new book", +"CoC7.AddBook": "Add book", +"CoC7.NewSpellName": "new spell", +"CoC7.AddSpell": "Add spell", +"CoC7.InventoryIsCurrentlyEmpty": "Inventory is currently empty.", +"CoC7.BookHasNothingMoreToTeach": "{book} has nothing more to teach. Cthulhu Mythos skill of {actor} is greater than this Mythos Rating.", +"CoC7.Content": "Content", +"CoC7.Development": "Development", +"CoC7.DifficultyLevel": "Difficulty Level", +"CoC7.DragSpell": "Drag spells here to insert them into the book...", +"CoC7.FullStudies": "Full Studies", +"CoC7.Gains": "Gains", +"CoC7.GainsForReading": "Skill gains for reading {book}.", +"CoC7.InitialReading": "Initial Reading", +"CoC7.InitialReadingNeeded": "{actor} needs to perform an Initial Reading on {book} to be able to advance through Full Study progress.", +"CoC7.LearnSpellAttempt": "Attempt to learn spell {spell}, from {book}.", +"CoC7.MarkedForDevelopment": "Marked for development", +"CoC7.Mythos": "Mythos", +"CoC7.NotOwned": "This Book needs to be owned by an Actor to perform this action.", +"CoC7.Points": "point(s)", +"CoC7.Progress": "Progress", +"CoC7.RedoFullStudy": "Redo Full Study", +"CoC7.ReadAttempt": "Attempt to read {book} ({language}), {difficulty} difficulty.", +"CoC7.ReadingMythosTome": "Reading {book}.", +"CoC7.Specific": "Specific", +"CoC7.SpellsLearned": "Spells Learned", +"CoC7.UnknownLanguage": "{actor} do not know the language in which this book is written.", +"CoC7.Unreadable": "Unreadable", +"CoC7.EmptyCharacterSkillList": "Add a setup, occupation, or skill by dropping it here.", +"CoC7.MessageTitleSelectSingleUserForTarget": "Which user can respond to this attack", +"CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.", +"CoC7.MessageBoutOfMadnessTableNotFound": "The result from the madness table was not found, please check all your roll tables are created", +"CoC7.MessageBoutOfMadnessItemNotFound": "The result from the madness table was not found, please check all your statuses are created", +"CoC7.DealDamage": "Deal {damage} damage points to {target}?", +"CoC7.NoTargetSelected": "You have not selected a target for your {weapon} check. Do you want to proceed anyway?", +"CoC7.Import": "Import", +"CoC7.Proceed": "Proceed", +"CoC7.Cancel": "Cancel", +"CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed", +"CoC7.TraditionalChinese": "Traditional Chinese", +"CoC7.ImportedUnnamedCharacter": "Imported unnamed character", +"CoC7.CreatedImportedCharactersFolder": "Created 'Imported Characters' folder", +"CoC7.ImportedCharactersFolder": "Imported characters", +"CoC7.ImportSkillItemLocations": "Look for skills/spells/weapons in", +"CoC7.ImportActorItemsNone": "None", +"CoC7.ImportActorItemsItem": "Items", +"CoC7.ImportActorItemsItemWorldModuleSystem": "Items / World / Modules / System", +"CoC7.ImportActorItemsWorldModuleItemSystem": "World / Modules / Items / System", +"CoC7.HowToTranslateTitle": "How to translate?", +"CoC7.HowToTranslateWarning": "Do not install any modules you do not trust.", +"CoC7.HowToTranslateInstallBabele": "Install/Update Babele module from Foundry's module manager.", +"CoC7.HowToTranslateInstallTranslation": "Install/Update Translation from Foundry's module manager.", +"CoC7.HowToTranslateEnableTranslation": "Inside the Game World, under Configuration/Manage Modules activate both Babele and the translations.", +"CoC7.HowToTranslateNoTranslation": "Instructions for creating new language translations are available on existing translation modules.", +"CoC7.Migrate.Title": "Update required", +"CoC7.Migrate.Message": "

                                      Your world requires an update to run version {version}.

                                      Please backup your world folder before starting the upgrade.

                                      If you do not update your world the system will not work correctly.

                                      The world may be restarted when completed.

                                      ", +"CoC7.Migrate.WithModulesMessage": "

                                      Your world or modules may require an update to run version {version}.

                                      Please backup your world and module folders listed below before starting the upgrade.

                                      If you do not update your world the system will not work correctly.

                                      The following modules contain actors or items so will also be checked.

                                      {modules}

                                      The world may be restarted when completed.

                                      ", +"CoC7.Migrate.GMRequired": "

                                      Your world requires an update to run version {version}.

                                      Please wait for your GM to update the system then refresh (F5) this page.

                                      ", +"CoC7.Migrate.RestartRequired": "

                                      Your world will now restart to enable these changes

                                      ", +"CoC7.Migrate.ButtonUpdate": "Update", +"CoC7.Migrate.ButtonSkip": "Skip", +"CoC7.Migrate.ButtonOkay": "Okay", +"CoC7.Maximize": "Maximize", +"CoC7.Summarize": "Summarize", +"CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you", +"CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", +"CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2", +"CoC7.MessageTitleSelectUserToGiveTo": "Give item to another character", +"CoC7.MessageSelectUserToGiveTo": "Which character would you like to give this item to?", +"CoC7.MessageDistanceCalculationFailure": "Unable to calculate distance between tokens, please use the token character sheet.", +"CoC7.ToolTipSkill": "
                                      1. Left click roll check with options
                                      2. Shift + Left click Immediate regular difficulty roll
                                      1. Right click Opposed check with options
                                      2. Shift + Right click Immediate opposed check
                                      1. Alt/Option + Right click Combined check with options
                                      ", +"CoC7.ToolTipKeeperSkill": "
                                      1. CTRL + Left click Create roll link
                                      2. {other}
                                      ", +"CoC7.ToolTipKeeperStandbySkill": "
                                    3. Left click Request a roll from {name}
                                    4. ", +"CoC7.ToolTipDB": "
                                      1. Left click Immediate regular difficulty roll
                                      ", +"CoC7.ToolTipKeeperSanity": "
                                    5. CTRL + Alt/Option Create sanity check roll link
                                    6. ", +"CoC7.ToolTipAutoToggle": "
                                      1. Left click Toggle automatic calculation / manual entry
                                      2. ", +"CoC7.ToolTipSkillFlagToggle": "
                                        1. Double Click Toggle flag status
                                        2. ", +"CoC7.ToolTipSkillFlagged": "Flagged for development", +"CoC7.ToolTipSkillUnflagged": "Not flagged for development", +"SETTINGS.TitleRules": "Rules", +"SETTINGS.TitleInitiative": "Initiative Settings", +"SETTINGS.TitleRoll": "Roll Settings", +"SETTINGS.TitleChatCards": "Chat Cards Settings", +"SETTINGS.TitleScene": "Scene Settings", +"SETTINGS.TitleSheet": "Sheet Settings", +"SETTINGS.TitleGameArtwork": "Game Artwork Settings", +"SETTINGS.TitleWeapon": "Weapon Settings", +"SETTINGS.TitleDiceSoNice": "Dice So Nice Settings", +"SETTINGS.TitleDeveloperDebug": "Developer And Debug Settings", +"SETTINGS.TitleRollTable": "Roll Table Settings", +"SETTINGS.showIconsOnly": "On summarized sheet, show only icons on skills list.", +"SETTINGS.displayPlayerNameOnSheet": "Display player's name on sheet", +"SETTINGS.OverrideGameArtwork": "Override game Artwork", +"SETTINGS.OverrideGameArtworkHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default", +"SETTINGS.ArtPauseImage": "Pause image", +"SETTINGS.ArtPauseImageHint": ". Type 'null' to remove image", +"SETTINGS.ArtPauseText": "Pause text", +"SETTINGS.ArtPauseTextHint": "Leave blank for default", +"SETTINGS.StanbyGMRolls": "Standby Keeper rolls", +"SETTINGS.StanbyGMRollsHint": "When the Keeper is making a roll from an assigned character sheet, display a roll button instead of rolling", +"SETTINGS.EnableStatusIcons": "Enable status icons", +"SETTINGS.EnableStatusIconsHint": "Set if combat and sanity effects icons are shown in tokens.", +"SETTINGS.ShowExperimentalFeatures": "Show Experimental Features", +"SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds", +"CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.", +"SETTINGS.CheckElevation": "Include elevation in distance", +"SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations", +"CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never" +``` +## de.json +``` +"CoC7.Entities.Character": "Character", +"CoC7.Entities.Container": "Container", +"CoC7.Entities.Creature": "Creature", +"CoC7.Entities.Npc": "NPC", +"CoC7.Entities.Vehicle": "Vehicle", +"CoC7.Entities.Archetype": "Archetype", +"CoC7.Entities.Book": "Book", +"CoC7.Entities.Chase": "Chase", +"CoC7.Entities.Item": "Item", +"CoC7.Entities.Occupation": "Occupation", +"CoC7.Entities.Setup": "Setup", +"CoC7.Entities.Skill": "Skill", +"CoC7.Entities.Spell": "Spell", +"CoC7.Entities.Status": "Status", +"CoC7.Entities.Talent": "Talent", +"CoC7.Entities.Weapon": "Weapon", +"CoC7.PlayerName": "Player", +"CoC7.Weapons": "Weapons", +"CoC7.weeks": "week(s)", +"CoC7.AttacksPerRound": "Attacks per round", +"CoC7.Cast": "Cast", +"CoC7.SanityCost": "Sanity Cost", +"CoC7.PowerCost": "Power Cost", +"CoC7.HitPointsCost": "Hit Points Cost", +"CoC7.MagicPointsCost": "Magic Points Cost", +"CoC7.OtherCosts": "Other Costs", +"CoC7.CastingSpell": "Casting {spell}.", +"CoC7.NoTargetToDamage": "There is no target to apply the damage to", +"CoC7.NoResponse": "No Response", +"CoC7.InitiatorMissed": "{name} missed.", +"CoC7.AutomaticFire": "Automatic Fire", +"CoC7.ShotBullets": "Shot {bullets} bullets at target {actor}.", +"CoC7.ShotVoley": "Shooting a voley of {bullets} bullets at target {actor}.", +"CoC7.meleeCombatDamageTakes": "takes", +"CoC7.meleeCombatDamageFrom": "from", +"CoC7.meleeCombatDamageDeals": "deals", +"CoC7.meleeCombatDamageWith": "with", +"CoC7.DriveAutoSkillName": "Drive Auto", +"CoC7.DriveSpecializationName": "Drive", +"CoC7.PilotSpecializationName": "Pilot", +"CoC7.RecoverLuckPoints": "Recover Luck Points", +"CoC7.RollLuck4Dev": "Rolling Luck for development", +"CoC7.SanGained": "Gained 2d6 ({results} = {sanGained}) Sanity after mastering {skill} with a {skillValue}%", +"CoC7.LuckIncreased": "Luck recovered ({die}/{score}) by {augment} points", +"CoC7.LuckNotIncreased": "Luck NOT recovered ({die}/{score})", +"CoC7.DevelopAttribWarn": "You can not access some attributes in development/creation.", +"CoC7.TradeItem": "Trade / Store Item", +"CoC7.SortBySkillName": "Sort by skill name", +"CoC7.SortBySkillValue": "Sort by skill percent", +"CoC7.UncommonSkillsShow": "Show uncommon skills", +"CoC7.UncommonSkillsHide": "Hide uncommon skills", +"CoC7.NewBookName": "new book", +"CoC7.AddBook": "Add book", +"CoC7.NewSpellName": "new spell", +"CoC7.AddSpell": "Add spell", +"CoC7.InventoryIsCurrentlyEmpty": "Inventory is currently empty.", +"CoC7.BookHasNothingMoreToTeach": "{book} has nothing more to teach. Cthulhu Mythos skill of {actor} is greater than this Mythos Rating.", +"CoC7.Content": "Content", +"CoC7.Development": "Development", +"CoC7.DifficultyLevel": "Difficulty Level", +"CoC7.DragSpell": "Drag spells here to insert them into the book...", +"CoC7.FullStudies": "Full Studies", +"CoC7.Gains": "Gains", +"CoC7.GainsForReading": "Skill gains for reading {book}.", +"CoC7.InitialReading": "Initial Reading", +"CoC7.InitialReadingNeeded": "{actor} needs to perform an Initial Reading on {book} to be able to advance through Full Study progress.", +"CoC7.LearnSpellAttempt": "Attempt to learn spell {spell}, from {book}.", +"CoC7.MarkedForDevelopment": "Marked for development", +"CoC7.Mythos": "Mythos", +"CoC7.NotOwned": "This Book needs to be owned by an Actor to perform this action.", +"CoC7.Points": "point(s)", +"CoC7.Progress": "Progress", +"CoC7.RedoFullStudy": "Redo Full Study", +"CoC7.ReadAttempt": "Attempt to read {book} ({language}), {difficulty} difficulty.", +"CoC7.ReadingMythosTome": "Reading {book}.", +"CoC7.Specific": "Specific", +"CoC7.SpellsLearned": "Spells Learned", +"CoC7.UnknownLanguage": "{actor} do not know the language in which this book is written.", +"CoC7.Unreadable": "Unreadable", +"CoC7.EmptyCharacterSkillList": "Add a setup, occupation, or skill by dropping it here.", +"CoC7.magicPointsRecovered": "Magic Points recovered", +"CoC7.MessageTitleSelectSingleUserForTarget": "Which user can respond to this attack", +"CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.", +"CoC7.MessageBoutOfMadnessTableNotFound": "The result from the madness table was not found, please check all your roll tables are created", +"CoC7.MessageBoutOfMadnessItemNotFound": "The result from the madness table was not found, please check all your statuses are created", +"CoC7.DealDamage": "Deal {damage} damage points to {target}?", +"CoC7.NoTargetSelected": "You have not selected a target for your {weapon} check. Do you want to proceed anyway?", +"CoC7.Import": "Import", +"CoC7.Proceed": "Proceed", +"CoC7.Cancel": "Cancel", +"CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed", +"CoC7.TraditionalChinese": "Traditional Chinese", +"CoC7.ImportedUnnamedCharacter": "Imported unnamed character", +"CoC7.CreatedImportedCharactersFolder": "Created 'Imported Characters' folder", +"CoC7.ImportedCharactersFolder": "Imported characters", +"CoC7.ImportSkillItemLocations": "Look for skills/spells/weapons in", +"CoC7.ImportActorItemsNone": "None", +"CoC7.ImportActorItemsItem": "Items", +"CoC7.ImportActorItemsItemWorldModuleSystem": "Items / World / Modules / System", +"CoC7.ImportActorItemsWorldModuleItemSystem": "World / Modules / Items / System", +"CoC7.HowToTranslateTitle": "How to translate?", +"CoC7.HowToTranslateWarning": "Do not install any modules you do not trust.", +"CoC7.HowToTranslateInstallBabele": "Install/Update Babele module from Foundry's module manager.", +"CoC7.HowToTranslateInstallTranslation": "Install/Update Translation from Foundry's module manager.", +"CoC7.HowToTranslateEnableTranslation": "Inside the Game World, under Configuration/Manage Modules activate both Babele and the translations.", +"CoC7.HowToTranslateNoTranslation": "Instructions for creating new language translations are available on existing translation modules.", +"CoC7.Migrate.Title": "Update required", +"CoC7.Migrate.Message": "

                                          Your world requires an update to run version {version}.

                                          Please backup your world folder before starting the upgrade.

                                          If you do not update your world the system will not work correctly.

                                          The world may be restarted when completed.

                                          ", +"CoC7.Migrate.WithModulesMessage": "

                                          Your world or modules may require an update to run version {version}.

                                          Please backup your world and module folders listed below before starting the upgrade.

                                          If you do not update your world the system will not work correctly.

                                          The following modules contain actors or items so will also be checked.

                                          {modules}

                                          The world may be restarted when completed.

                                          ", +"CoC7.Migrate.GMRequired": "

                                          Your world requires an update to run version {version}.

                                          Please wait for your GM to update the system then refresh (F5) this page.

                                          ", +"CoC7.Migrate.RestartRequired": "

                                          Your world will now restart to enable these changes

                                          ", +"CoC7.Migrate.ButtonUpdate": "Update", +"CoC7.Migrate.ButtonSkip": "Skip", +"CoC7.Migrate.ButtonOkay": "Okay", +"CoC7.Maximize": "Maximize", +"CoC7.Summarize": "Summarize", +"CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you", +"CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", +"CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2", +"CoC7.MessageTitleSelectUserToGiveTo": "Give item to another character", +"CoC7.MessageSelectUserToGiveTo": "Which character would you like to give this item to?", +"CoC7.MessageDistanceCalculationFailure": "Unable to calculate distance between tokens, please use the token character sheet.", +"CoC7.ToolTipSkill": "
                                          1. Left click roll check with options
                                          2. Shift + Left click Immediate regular difficulty roll
                                          1. Right click Opposed check with options
                                          2. Shift + Right click Immediate opposed check
                                          1. Alt/Option + Right click Combined check with options
                                          ", +"CoC7.ToolTipKeeperSkill": "
                                          1. CTRL + Left click Create roll link
                                          2. {other}
                                          ", +"CoC7.ToolTipKeeperStandbySkill": "
                                        3. Left click Request a roll from {name}
                                        4. ", +"CoC7.ToolTipDB": "
                                          1. Left click Immediate regular difficulty roll
                                          ", +"CoC7.ToolTipKeeperSanity": "
                                        5. CTRL + Alt/Option Create sanity check roll link
                                        6. ", +"CoC7.ToolTipAutoToggle": "
                                          1. Left click Toggle automatic calculation / manual entry
                                          2. ", +"CoC7.ToolTipSkillFlagToggle": "
                                            1. Double Click Toggle flag status
                                            2. ", +"CoC7.ToolTipSkillFlagged": "Flagged for development", +"CoC7.ToolTipSkillUnflagged": "Not flagged for development", +"SETTINGS.TitleRules": "Rules", +"SETTINGS.TitleInitiative": "Initiative Settings", +"SETTINGS.TitleRoll": "Roll Settings", +"SETTINGS.TitleChatCards": "Chat Cards Settings", +"SETTINGS.TitleScene": "Scene Settings", +"SETTINGS.TitleSheet": "Sheet Settings", +"SETTINGS.TitleGameArtwork": "Game Artwork Settings", +"SETTINGS.TitleWeapon": "Weapon Settings", +"SETTINGS.TitleDiceSoNice": "Dice So Nice Settings", +"SETTINGS.TitleDeveloperDebug": "Developer And Debug Settings", +"SETTINGS.TitleRollTable": "Roll Table Settings", +"SETTINGS.DebugMode": "System Debug Mode", +"SETTINGS.DebugModeHint": "!!RESTART REQUIRED!!", +"SETTINGS.showIconsOnly": "On summarized sheet, show only icons on skills list.", +"SETTINGS.developmentRollForLuck": "Recoverable Luck points", +"SETTINGS.developmentRollForLuckHint": "Each player can make an improvement check for their Luck on Development Phase", +"SETTINGS.displayPlayerNameOnSheet": "Display player's name on sheet", +"SETTINGS.OverrideGameArtwork": "Override game Artwork", +"SETTINGS.OverrideGameArtworkHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default", +"SETTINGS.ArtPauseImage": "Pause image", +"SETTINGS.ArtPauseImageHint": ". Type 'null' to remove image", +"SETTINGS.ArtPauseText": "Pause text", +"SETTINGS.ArtPauseTextHint": "Leave blank for default", +"SETTINGS.ArtWorkSheetBackgroundType": "Background type", +"SETTINGS.BackgroundSlice": "Background image will be sliced (css:border-image)", +"SETTINGS.BackgroundAuto": "Scales the image maintening proportions (css:auto)", +"SETTINGS.BackgroundContain": "Scales to fill without croping/stretching (css:contain)", +"SETTINGS.BackgroundCover": "Scales to fill with croping/stretching (css:cover)", +"SETTINGS.StanbyGMRolls": "Standby Keeper rolls", +"SETTINGS.StanbyGMRollsHint": "When the Keeper is making a roll from an assigned character sheet, display a roll button instead of rolling", +"SETTINGS.EnableStatusIcons": "Enable status icons", +"SETTINGS.EnableStatusIconsHint": "Set if combat and sanity effects icons are shown in tokens.", +"SETTINGS.ShowExperimentalFeatures": "Show Experimental Features", +"SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds", +"CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.", +"SETTINGS.CheckElevation": "Include elevation in distance", +"SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations", +"CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never" +``` diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index e4f89d41..e3f7dd27 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,1886 +4,59 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry The following translations are currently up to date **es**, **fr**, **ja**, **pt-BR**, **sv**, **zh-TW** -| Key | cn | cs | de | pl | -| :--------------------------------------------------------------------------------------- | :------: | :------: | :------: | :------: | -| **Remaining**: | **376** | **152** | **169** | **17** | -| [CoC7.ActorImporter](#coc7actorimporter) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ActorImporterSummary](#coc7actorimportersummary) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.AddBook](#coc7addbook) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.AddSpell](#coc7addspell) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.AdvantageAttacker](#coc7advantageattacker) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.AdvantageDefender](#coc7advantagedefender) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.All](#coc7all) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyInABout](#coc7alreadyinabout) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyLost](#coc7alreadylost) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyUnderlyingInsanity](#coc7alreadyunderlyinginsanity) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Any](#coc7any) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ArmedVehicle](#coc7armedvehicle) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ArmorAbsorbsDamage](#coc7armorabsorbsdamage) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ArmourPlating](#coc7armourplating) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.AttackSuccess](#coc7attacksuccess) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.AttacksPerRound](#coc7attacksperround) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Attribute](#coc7attribute) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Attributes](#coc7attributes) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.AutomaticFire](#coc7automaticfire) | ❌ | ✅ | ❌ | ✅ | -| [CoC7.Blind](#coc7blind) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.BookHasNothingMoreToTeach](#coc7bookhasnothingmoretoteach) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.BoutActive](#coc7boutactive) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadness](#coc7boutofmadness) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnessName](#coc7boutofmadnessname) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.BoutOfMadnesslasted](#coc7boutofmadnesslasted) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.BoutRealTime](#coc7boutrealtime) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.BoutSummary](#coc7boutsummary) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.BurstSizeHint](#coc7burstsizehint) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Cancel](#coc7cancel) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.CardResolved](#coc7cardresolved) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Cast](#coc7cast) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.CastingSpell](#coc7castingspell) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.CharCreationMode](#coc7charcreationmode) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Characteristic](#coc7characteristic) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Check](#coc7check) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.CloseCard](#coc7closecard) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Collapse](#coc7collapse) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAllHint](#coc7combinedallhint) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.CombinedAnyHint](#coc7combinedanyhint) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.CombinedRollCard](#coc7combinedrollcard) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Content](#coc7content) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Convert](#coc7convert) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ConvertFrom6Edition](#coc7convertfrom6edition) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.CopyToClipboard](#coc7copytoclipboard) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.CreateLink](#coc7createlink) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.CreatedImportedCharactersFolder](#coc7createdimportedcharactersfolder) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Creature](#coc7creature) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.CreatureMaxLoss](#coc7creaturemaxloss) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Crew](#coc7crew) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Critical](#coc7critical) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.CriticalTitle](#coc7criticaltitle) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.CustomLabel](#coc7customlabel) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DailyLoss](#coc7dailyloss) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DamageInflicted](#coc7damageinflicted) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DealDamage](#coc7dealdamage) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DevPhase](#coc7devphase) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DevelopAttribWarn](#coc7developattribwarn) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Development](#coc7development) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DifficultyLevel](#coc7difficultylevel) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DisregardMythosGain](#coc7disregardmythosgain) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.DragSpell](#coc7dragspell) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.DriveAutoSkillName](#coc7driveautoskillname) | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DriveSpecializationName](#coc7drivespecializationname) | ❌ | ✅ | ❌ | ✅ | -| [CoC7.DyingCheck](#coc7dyingcheck) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.EmptyCharacterSkillList](#coc7emptycharacterskilllist) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.EmptyItemList](#coc7emptyitemlist) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.EndBoutOfMadness](#coc7endboutofmadness) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.English](#coc7english) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.EnteringBoutOfMadness](#coc7enteringboutofmadness) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Entities.Archetype](#coc7entitiesarchetype) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Book](#coc7entitiesbook) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Character](#coc7entitiescharacter) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Chase](#coc7entitieschase) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Container](#coc7entitiescontainer) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Creature](#coc7entitiescreature) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Item](#coc7entitiesitem) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Npc](#coc7entitiesnpc) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Occupation](#coc7entitiesoccupation) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Setup](#coc7entitiessetup) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Skill](#coc7entitiesskill) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Spell](#coc7entitiesspell) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Status](#coc7entitiesstatus) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Talent](#coc7entitiestalent) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Vehicle](#coc7entitiesvehicle) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Entities.Weapon](#coc7entitiesweapon) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Expand](#coc7expand) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ExperimentalFeaturesWarning](#coc7experimentalfeatureswarning) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.FakeRoll](#coc7fakeroll) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.FlatDiceModifier](#coc7flatdicemodifier) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.FlatModifier](#coc7flatmodifier) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.French](#coc7french) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.FullStudies](#coc7fullstudies) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Gains](#coc7gains) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.GainsForReading](#coc7gainsforreading) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.GmNotes](#coc7gmnotes) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.GmTools](#coc7gmtools) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.GoodForAsylum](#coc7goodforasylum) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.GrowingAccustomedToAwfulness](#coc7growingaccustomedtoawfulness) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Guess](#coc7guess) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.HitPointsCost](#coc7hitpointscost) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateEnableTranslation](#coc7howtotranslateenabletranslation) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateInstallBabele](#coc7howtotranslateinstallbabele) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateInstallTranslation](#coc7howtotranslateinstalltranslation) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateNoTranslation](#coc7howtotranslatenotranslation) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateTitle](#coc7howtotranslatetitle) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.HowToTranslateWarning](#coc7howtotranslatewarning) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Icon](#coc7icon) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ImmuneToAwfulness](#coc7immunetoawfulness) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Impale](#coc7impale) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ImpaleTitle](#coc7impaletitle) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Import](#coc7import) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ImportActorItemsItem](#coc7importactoritemsitem) | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem) | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportActorItemsNone](#coc7importactoritemsnone) | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem) | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportSkillItemLocations](#coc7importskillitemlocations) | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder) | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ImportedUnnamedCharacter](#coc7importedunnamedcharacter) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.IndefinitelyInsane](#coc7indefinitelyinsane) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.InitialReading](#coc7initialreading) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.InitialReadingNeeded](#coc7initialreadingneeded) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.InitiatorMissed](#coc7initiatormissed) | ❌ | ❌ | ❌ | ❌ | -| [CoC7.InsanityName](#coc7insanityname) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.InsanityType](#coc7insanitytype) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.IntCheck](#coc7intcheck) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.InventoryIsCurrentlyEmpty](#coc7inventoryiscurrentlyempty) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.InvestigatorManiaGained](#coc7investigatormaniagained) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.InvestigatorPhobiaGained](#coc7investigatorphobiagained) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryAction](#coc7involuntaryaction) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerfomed](#coc7involuntaryactionperfomed) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.InvoluntaryActionPerformed](#coc7involuntaryactionperformed) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ItemWeapon](#coc7itemweapon) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.KeepData](#coc7keepdata) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.KeeperSentDecoy](#coc7keepersentdecoy) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Label](#coc7label) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LearnSpellAttempt](#coc7learnspellattempt) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.LinkCheckDiff](#coc7linkcheckdiff) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckDiffModif](#coc7linkcheckdiffmodif) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LinkCheckModif](#coc7linkcheckmodif) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LinkItem](#coc7linkitem) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiff](#coc7linkitemdiff) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemDiffModif](#coc7linkitemdiffmodif) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LinkItemModif](#coc7linkitemmodif) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiff](#coc7linksanlossdiff) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossDiffModif](#coc7linksanlossdiffmodif) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LinkSanLossModif](#coc7linksanlossmodif) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Location](#coc7location) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.LuckIncreased](#coc7luckincreased) | ❌ | ✅ | ❌ | ✅ | -| [CoC7.LuckNotIncreased](#coc7lucknotincreased) | ❌ | ✅ | ❌ | ✅ | -| [CoC7.MagicPointsCost](#coc7magicpointscost) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Mania](#coc7mania) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ManiaGained](#coc7maniagained) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MarkedForDevelopment](#coc7markedfordevelopment) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MaxLossToCreature](#coc7maxlosstocreature) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MaxSanloss](#coc7maxsanloss) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Maximize](#coc7maximize) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MemoryRepressed](#coc7memoryrepressed) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageBoutOfMadnessItemNotFound](#coc7messageboutofmadnessitemnotfound) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MessageBoutOfMadnessTableNotFound](#coc7messageboutofmadnesstablenotfound) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MessageCheckRequestedWait](#coc7messagecheckrequestedwait) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageDistanceCalculationFailure](#coc7messagedistancecalculationfailure) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MessageSelectSingleUserForTarget](#coc7messageselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MessageSelectUserToGiveTo](#coc7messageselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MessageTargetCheckRequested](#coc7messagetargetcheckrequested) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MessageTitleSelectSingleUserForTarget](#coc7messagetitleselectsingleuserfortarget) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MessageTitleSelectUserToGiveTo](#coc7messagetitleselectusertogiveto) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.ButtonOkay](#coc7migratebuttonokay) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.ButtonSkip](#coc7migratebuttonskip) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.ButtonUpdate](#coc7migratebuttonupdate) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.GMRequired](#coc7migrategmrequired) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.Message](#coc7migratemessage) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.RestartRequired](#coc7migraterestartrequired) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.Title](#coc7migratetitle) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Migrate.WithModulesMessage](#coc7migratewithmodulesmessage) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MinSanloss](#coc7minsanloss) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Modifiers](#coc7modifiers) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Mythos](#coc7mythos) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.MythosAlreadyEncountered](#coc7mythosalreadyencountered) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MythosFirstEncounter](#coc7mythosfirstencounter) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.MythosGain](#coc7mythosgain) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NewBookName](#coc7newbookname) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NewSpellName](#coc7newspellname) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NoConvert](#coc7noconvert) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NoResponse](#coc7noresponse) | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoTargetSelected](#coc7notargetselected) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NoTargetToDamage](#coc7notargettodamage) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NonPlayingCharacter](#coc7nonplayingcharacter) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NotInsane](#coc7notinsane) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NotOwned](#coc7notowned) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.OpposedRollCard](#coc7opposedrollcard) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Origin](#coc7origin) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.OtherCosts](#coc7othercosts) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.OutOfAmmo](#coc7outofammo) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.OutOfShots](#coc7outofshots) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.PasteTheDataBelow](#coc7pastethedatabelow) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Phobia](#coc7phobia) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.PhobiaGained](#coc7phobiagained) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.PilotSpecializationName](#coc7pilotspecializationname) | ❌ | ✅ | ❌ | ✅ | -| [CoC7.PlayerName](#coc7playername) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.PlayerPermanentlyInsane](#coc7playerpermanentlyinsane) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Points](#coc7points) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.PowerCost](#coc7powercost) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Proceed](#coc7proceed) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Progress](#coc7progress) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Properties](#coc7properties) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.PushingSkill](#coc7pushingskill) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ReadAttempt](#coc7readattempt) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ReadingMythosTome](#coc7readingmythostome) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.RecoverLuckPoints](#coc7recoverluckpoints) | ❌ | ✅ | ❌ | ✅ | -| [CoC7.RedoFullStudy](#coc7redofullstudy) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Reload](#coc7reload) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.RememberEverything](#coc7remembereverything) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ResetCreatureSan](#coc7resetcreaturesan) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ResetSpecieSan](#coc7resetspeciesan) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.RevealSanLoss](#coc7revealsanloss) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.RollLuck4Dev](#coc7rollluck4dev) | ❌ | ✅ | ❌ | ✅ | -| [CoC7.RollSecretDice](#coc7rollsecretdice) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.RollThreshold](#coc7rollthreshold) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SanDataSelectionWindow](#coc7sandataselectionwindow) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SanGained](#coc7sangained) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.SanityCheckPerformed](#coc7sanitycheckperformed) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SanityCost](#coc7sanitycost) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.SanityLost](#coc7sanitylost) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SelectActorType](#coc7selectactortype) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SelectSourceLanguage](#coc7selectsourcelanguage) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SendToChat](#coc7sendtochat) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ShotBullets](#coc7shotbullets) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ShotIsImpossible](#coc7shotisimpossible) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ShotVoley](#coc7shotvoley) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.SortBySkillName](#coc7sortbyskillname) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.SortBySkillValue](#coc7sortbyskillvalue) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Spanish](#coc7spanish) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Specific](#coc7specific) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.SpecificLocations](#coc7specificlocations) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.SpellsLearned](#coc7spellslearned) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Status](#coc7status) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Success](#coc7success) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Summarize](#coc7summarize) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Target](#coc7target) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.TargetOutOfRange](#coc7targetoutofrange) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.TemporaryInsane](#coc7temporaryinsane) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters) | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Tie](#coc7tie) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ToolTipAutoToggle](#coc7tooltipautotoggle) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ToolTipDB](#coc7tooltipdb) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ToolTipKeeperSanity](#coc7tooltipkeepersanity) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ToolTipKeeperSkill](#coc7tooltipkeeperskill) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ToolTipKeeperStandbySkill](#coc7tooltipkeeperstandbyskill) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ToolTipSkill](#coc7tooltipskill) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ToolTipSkillFlagToggle](#coc7tooltipskillflagtoggle) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ToolTipSkillFlagged](#coc7tooltipskillflagged) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.ToolTipSkillUnflagged](#coc7tooltipskillunflagged) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.TotalDamage](#coc7totaldamage) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.TradeItem](#coc7tradeitem) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.TraditionalChinese](#coc7traditionalchinese) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.UnableToCopyToClipboard](#coc7unabletocopytoclipboard) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.UnableToInteractWithChatCard](#coc7unabletointeractwithchatcard) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.UncommonSkillsHide](#coc7uncommonskillshide) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.UncommonSkillsShow](#coc7uncommonskillsshow) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.UnderlyingInsanity](#coc7underlyinginsanity) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.UnknownLanguage](#coc7unknownlanguage) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Unreadable](#coc7unreadable) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.Vehicle](#coc7vehicle) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.WarningCharacterSheetV1Depreciated](#coc7warningcharactersheetv1depreciated) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.WeaponUsesPerRoundHint](#coc7weaponusesperroundhint) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Weapons](#coc7weapons) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.WhisperTo](#coc7whisperto) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.WhisperToSelection](#coc7whispertoselection) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.XPGainDisabled](#coc7xpgaindisabled) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.XPGainEnabled](#coc7xpgainenabled) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.YouGainedCthulhuMythos](#coc7yougainedcthulhumythos) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.dailySanLossRestarted](#coc7dailysanlossrestarted) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.dreaming](#coc7dreaming) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.hasCriticalWounds](#coc7hascriticalwounds) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.healthRecovered](#coc7healthrecovered) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.hours](#coc7hours) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.magicPointsRecovered](#coc7magicpointsrecovered) | ❌ | ✅ | ❌ | ✅ | -| [CoC7.meleeCombatDamageDeals](#coc7meleecombatdamagedeals) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.meleeCombatDamageFrom](#coc7meleecombatdamagefrom) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.meleeCombatDamageTakes](#coc7meleecombatdamagetakes) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.meleeCombatDamageWith](#coc7meleecombatdamagewith) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.pulpHealthRecovered](#coc7pulphealthrecovered) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.quickHealer](#coc7quickhealer) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.AimingTitle](#coc7rangecombatcardaimingtitle) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.BigTargetTitle](#coc7rangecombatcardbigtargettitle) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.CoverTitle](#coc7rangecombatcardcovertitle) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.FastMovingTargetTitle](#coc7rangecombatcardfastmovingtargettitle) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.InMeleeTitle](#coc7rangecombatcardinmeleetitle) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTarget](#coc7rangecombatcardnormaltarget) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.NormalTargetTitle](#coc7rangecombatcardnormaltargettitle) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.PointBlankRangeTitle](#coc7rangecombatcardpointblankrangetitle) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SmallTargetTitle](#coc7rangecombatcardsmalltargettitle) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatDamageArmor](#coc7rangecombatdamagearmor) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.remove](#coc7remove) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.rounds](#coc7rounds) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.startRest](#coc7startrest) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.toggleXP](#coc7togglexp) | ❌ | ✅ | ✅ | ✅ | -| [CoC7.toolTipDelay](#coc7tooltipdelay) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.weeks](#coc7weeks) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.AdviseAllPlayer](#settingsadviseallplayer) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.AdviseOwnersOnly](#settingsadviseownersonly) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifier](#settingsallowflatdicemodifier) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatDiceModifierHint](#settingsallowflatdicemodifierhint) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifier](#settingsallowflatthresholdmodifier) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.AllowFlatThresholdModifierHint](#settingsallowflatthresholdmodifierhint) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.AlwaysEditable](#settingsalwayseditable) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtPauseImage](#settingsartpauseimage) | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint) | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtPauseText](#settingsartpausetext) | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtPauseTextHint](#settingsartpausetexthint) | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ArtWorkOtherSheetBackground](#settingsartworkothersheetbackground) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkOtherSheetBackgroundHint](#settingsartworkothersheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackground](#settingsartworksheetbackground) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundHint](#settingsartworksheetbackgroundhint) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtWorkSheetBackgroundType](#settingsartworksheetbackgroundtype) | ❌ | ✅ | ❌ | ✅ | -| [SETTINGS.ArtworkBackgroundColor](#settingsartworkbackgroundcolor) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkBackgroundColorHint](#settingsartworkbackgroundcolorhint) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLength](#settingsartworkfixedskilllength) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFixedSkillLengthHint](#settingsartworkfixedskilllengthhint) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColor](#settingsartworkfrontcolor) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkFrontColorHint](#settingsartworkfrontcolorhint) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColor](#settingsartworkinteractivecolor) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkInteractiveColorHint](#settingsartworkinteractivecolorhint) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFont](#settingsartworkmainfont) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontBold](#settingsartworkmainfontbold) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkMainFontSize](#settingsartworkmainfontsize) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImage](#settingsartworksheetimage) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ArtworkSheetImageHint](#settingsartworksheetimagehint) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BackgroundAuto](#settingsbackgroundauto) | ❌ | ✅ | ❌ | ✅ | -| [SETTINGS.BackgroundContain](#settingsbackgroundcontain) | ❌ | ✅ | ❌ | ✅ | -| [SETTINGS.BackgroundCover](#settingsbackgroundcover) | ❌ | ✅ | ❌ | ✅ | -| [SETTINGS.BackgroundSlice](#settingsbackgroundslice) | ❌ | ✅ | ❌ | ✅ | -| [SETTINGS.BoutOfMadnessRealTimeTable](#settingsboutofmadnessrealtimetable) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.BoutOfMadnessSummaryTable](#settingsboutofmadnesssummarytable) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.CheckElevation](#settingscheckelevation) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.CheckElevationHint](#settingscheckelevationhint) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.CreationModeOnly](#settingscreationmodeonly) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DebugMode](#settingsdebugmode) | ❌ | ✅ | ❌ | ✅ | -| [SETTINGS.DebugModeHint](#settingsdebugmodehint) | ❌ | ✅ | ❌ | ✅ | -| [SETTINGS.DisplayCheckSuccessLevel](#settingsdisplaychecksuccesslevel) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DisplayResultType](#settingsdisplayresulttype) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DoNotAdvise](#settingsdonotadvise) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.EnableStatusIcons](#settingsenablestatusicons) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.EnableStatusIconsHint](#settingsenablestatusiconshint) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.LetKeeperDecide](#settingsletkeeperdecide) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.NeverEditable](#settingsnevereditable) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStory](#settingsoneblockbackstory) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.OneBlockBackStoryHint](#settingsoneblockbackstoryhint) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreaker](#settingsopposedrolltiebreaker) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.OpposedRollTieBreakerHint](#settingsopposedrolltiebreakerhint) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork) | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint) | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.OverrideSheetArtwork](#settingsoverridesheetartwork) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.OverrideSheetArtworkHint](#settingsoverridesheetartworkhint) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.PlayerUnlockSheetMode](#settingsplayerunlocksheetmode) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTarget](#settingsselfrollwhispertarget) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.SelfRollWhisperTargetHint](#settingsselfrollwhispertargethint) | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.ShowExperimentalFeatures](#settingsshowexperimentalfeatures) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.ShowExperimentalFeaturesHint](#settingsshowexperimentalfeatureshint) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.StanbyGMRolls](#settingsstanbygmrolls) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.StanbyGMRollsHint](#settingsstanbygmrollshint) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleChatCards](#settingstitlechatcards) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleDeveloperDebug](#settingstitledeveloperdebug) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleDiceSoNice](#settingstitledicesonice) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleGameArtwork](#settingstitlegameartwork) | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.TitleInitiative](#settingstitleinitiative) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleRoll](#settingstitleroll) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleRollTable](#settingstitlerolltable) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleRules](#settingstitlerules) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleScene](#settingstitlescene) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleSheet](#settingstitlesheet) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.TitleWeapon](#settingstitleweapon) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.developmentRollForLuck](#settingsdevelopmentrollforluck) | ❌ | ✅ | ❌ | ✅ | -| [SETTINGS.developmentRollForLuckHint](#settingsdevelopmentrollforluckhint) | ❌ | ✅ | ❌ | ✅ | -| [SETTINGS.displayPlayerNameOnSheet](#settingsdisplayplayernameonsheet) | ❌ | ❌ | ❌ | ✅ | -| [SETTINGS.showIconsOnly](#settingsshowiconsonly) | ❌ | ❌ | ❌ | ✅ | - -##### CoC7.ActorImporter - -`"CoC7.ActorImporter": "Actor Importer",` - -##### CoC7.ActorImporterSummary - -`"CoC7.ActorImporterSummary": "Import an NPC or Creature from description and stats. Just paste the corresponding plain text",` - -##### CoC7.AddBook - -`"CoC7.AddBook": "Add book",` - -##### CoC7.AddSpell - -`"CoC7.AddSpell": "Add spell",` - -##### CoC7.AdvantageAttacker - -`"CoC7.AdvantageAttacker": "Advantage: Attacker",` - -##### CoC7.AdvantageDefender - -`"CoC7.AdvantageDefender": "Advantage: Defender",` - -##### CoC7.All - -`"CoC7.All": "All",` - -##### CoC7.AlreadyInABout - -`"CoC7.AlreadyInABout": "You're already suffering a bout of madness and are immune to further loss of sanity.",` - -##### CoC7.AlreadyLost - -`"CoC7.AlreadyLost": "Already lost",` - -##### CoC7.AlreadyUnderlyingInsanity - -`"CoC7.AlreadyUnderlyingInsanity": "Investigator already in an underlying insanity state.",` - -##### CoC7.Any - -`"CoC7.Any": "Any",` - -##### CoC7.ArmedVehicle - -`"CoC7.ArmedVehicle": "Armed Vehicle",` - -##### CoC7.ArmorAbsorbsDamage - -`"CoC7.ArmorAbsorbsDamage": "Armor absorbs total damage",` - -##### CoC7.ArmourPlating - -`"CoC7.ArmourPlating": "Armour plating",` - -##### CoC7.AttackSuccess - -`"CoC7.AttackSuccess": "{name} landed a blow.",` - -##### CoC7.AttacksPerRound - -`"CoC7.AttacksPerRound": "Attacks per round",` - -##### CoC7.Attribute - -`"CoC7.Attribute": "Attribute",` - -##### CoC7.Attributes - -`"CoC7.Attributes": "Attributes",` - -##### CoC7.AutomaticFire - -`"CoC7.AutomaticFire": "Automatic Fire",` - -##### CoC7.Blind - -`"CoC7.Blind": "Blind",` - -##### CoC7.BookHasNothingMoreToTeach - -`"CoC7.BookHasNothingMoreToTeach": "{book} has nothing more to teach. Cthulhu Mythos skill of {actor} is greater than this Mythos Rating.",` - -##### CoC7.BoutActive - -`"CoC7.BoutActive": "(Bout) Immune to SAN loss",` - -##### CoC7.BoutOfMadness - -`"CoC7.BoutOfMadness": "Bout of madness",` - -##### CoC7.BoutOfMadnessName - -`"CoC7.BoutOfMadnessName": "Bout of Madness",` - -##### CoC7.BoutOfMadnesslasted - -`"CoC7.BoutOfMadnesslasted": "Your bout of madness lasted",` - -##### CoC7.BoutRealTime - -`"CoC7.BoutRealTime": "Bout of madness: Real time",` - -##### CoC7.BoutSummary - -`"CoC7.BoutSummary": "Bout of madness: Summary",` - -##### CoC7.BurstSizeHint - -`"CoC7.BurstSizeHint": "How many bullets per burst",` - -##### CoC7.Cancel - -`"CoC7.Cancel": "Cancel",` - -##### CoC7.CardResolved - -`"CoC7.CardResolved": "Card resolved",` - -##### CoC7.Cast - -`"CoC7.Cast": "Cast",` - -##### CoC7.CastingSpell - -`"CoC7.CastingSpell": "Casting {spell}.",` - -##### CoC7.CharCreationMode - -`"CoC7.CharCreationMode": "Character creation mode",` - -##### CoC7.Characteristic - -`"CoC7.Characteristic": "Characteristic",` - -##### CoC7.Check - -`"CoC7.Check": "Check",` - -##### CoC7.CloseCard - -`"CoC7.CloseCard": "Close card",` - -##### CoC7.Collapse - -`"CoC7.Collapse": "Collapse",` - -##### CoC7.CombinedAllHint - -`"CoC7.CombinedAllHint": "All rolls must succeed",` - -##### CoC7.CombinedAnyHint - -`"CoC7.CombinedAnyHint": "Any roll must succeed",` - -##### CoC7.CombinedRollCard - -`"CoC7.CombinedRollCard": "Combined roll card",` - -##### CoC7.Content - -`"CoC7.Content": "Content",` - -##### CoC7.Convert - -`"CoC7.Convert": "Convert",` - -##### CoC7.ConvertFrom6Edition - -`"CoC7.ConvertFrom6Edition": "Convert from 6 edition",` - -##### CoC7.CopyToClipboard - -`"CoC7.CopyToClipboard": "Copy to clipboard",` - -##### CoC7.CreateLink - -`"CoC7.CreateLink": "Create link",` - -##### CoC7.CreatedImportedCharactersFolder - -`"CoC7.CreatedImportedCharactersFolder": "Created 'Imported Characters' folder",` - -##### CoC7.Creature - -`"CoC7.Creature": "Creature",` - -##### CoC7.CreatureMaxLoss - -`"CoC7.CreatureMaxLoss": "Creature max loss",` - -##### CoC7.Crew - -`"CoC7.Crew": "Crew",` - -##### CoC7.Critical - -`"CoC7.Critical": "Critical",` - -##### CoC7.CriticalTitle - -`"CoC7.CriticalTitle": "The blow is critical",` - -##### CoC7.CustomLabel - -`"CoC7.CustomLabel": "Custom label",` - -##### CoC7.DailyLoss - -`"CoC7.DailyLoss": "Daily",` - -##### CoC7.DamageInflicted - -`"CoC7.DamageInflicted": "Damage inflicted",` - -##### CoC7.DealDamage - -`"CoC7.DealDamage": "Deal {damage} damage points to {target}?",` - -##### CoC7.DevPhase - -`"CoC7.DevPhase": "Development phase",` - -##### CoC7.DevelopAttribWarn - -`"CoC7.DevelopAttribWarn": "You can not access some attributes in development/creation.",` - -##### CoC7.Development - -`"CoC7.Development": "Development",` - -##### CoC7.DifficultyLevel - -`"CoC7.DifficultyLevel": "Difficulty Level",` - -##### CoC7.DisregardMythosGain - -`"CoC7.DisregardMythosGain": "No Mythos gain",` - -##### CoC7.DragSpell - -`"CoC7.DragSpell": "Drag spells here to insert them into the book...",` - +The following translations have been abandoned **cn**, **cs**, **de**, [are you able to help?](./ABANDONED.md) + +|Key|pl| +|:---|:---:| +|**Remaining**:|**17**| +|[CoC7.DriveAutoSkillName](#coc7driveautoskillname)|❌| +|[CoC7.ImportActorItemsItem](#coc7importactoritemsitem)|❌| +|[CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem)|❌| +|[CoC7.ImportActorItemsNone](#coc7importactoritemsnone)|❌| +|[CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem)|❌| +|[CoC7.ImportSkillItemLocations](#coc7importskillitemlocations)|❌| +|[CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder)|❌| +|[CoC7.InitiatorMissed](#coc7initiatormissed)|❌| +|[CoC7.NoResponse](#coc7noresponse)|❌| +|[CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters)|❌| +|[SETTINGS.ArtPauseImage](#settingsartpauseimage)|❌| +|[SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint)|❌| +|[SETTINGS.ArtPauseText](#settingsartpausetext)|❌| +|[SETTINGS.ArtPauseTextHint](#settingsartpausetexthint)|❌| +|[SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork)|❌| +|[SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint)|❌| +|[SETTINGS.TitleGameArtwork](#settingstitlegameartwork)|❌| ##### CoC7.DriveAutoSkillName - -`"CoC7.DriveAutoSkillName": "Drive Auto",` - -##### CoC7.DriveSpecializationName - -`"CoC7.DriveSpecializationName": "Drive",` - -##### CoC7.DyingCheck - -`"CoC7.DyingCheck": "Check if you'll die immediately",` - -##### CoC7.EmptyCharacterSkillList - -`"CoC7.EmptyCharacterSkillList": "Add a setup, occupation, or skill by dropping it here.",` - -##### CoC7.EmptyItemList - -`"CoC7.EmptyItemList": "Add an item by dropping it here.",` - -##### CoC7.EndBoutOfMadness - -`"CoC7.EndBoutOfMadness": "End bout of madness",` - -##### CoC7.English - -`"CoC7.English": "English",` - -##### CoC7.EnteringBoutOfMadness - -`"CoC7.EnteringBoutOfMadness": "You experience a bout of madness",` - -##### CoC7.Entities.Archetype - -`"CoC7.Entities.Archetype": "Archetype",` - -##### CoC7.Entities.Book - -`"CoC7.Entities.Book": "Book",` - -##### CoC7.Entities.Character - -`"CoC7.Entities.Character": "Character",` - -##### CoC7.Entities.Chase - -`"CoC7.Entities.Chase": "Chase",` - -##### CoC7.Entities.Container - -`"CoC7.Entities.Container": "Container",` - -##### CoC7.Entities.Creature - -`"CoC7.Entities.Creature": "Creature",` - -##### CoC7.Entities.Item - -`"CoC7.Entities.Item": "Item",` - -##### CoC7.Entities.Npc - -`"CoC7.Entities.Npc": "NPC",` - -##### CoC7.Entities.Occupation - -`"CoC7.Entities.Occupation": "Occupation",` - -##### CoC7.Entities.Setup - -`"CoC7.Entities.Setup": "Setup",` - -##### CoC7.Entities.Skill - -`"CoC7.Entities.Skill": "Skill",` - -##### CoC7.Entities.Spell - -`"CoC7.Entities.Spell": "Spell",` - -##### CoC7.Entities.Status - -`"CoC7.Entities.Status": "Status",` - -##### CoC7.Entities.Talent - -`"CoC7.Entities.Talent": "Talent",` - -##### CoC7.Entities.Vehicle - -`"CoC7.Entities.Vehicle": "Vehicle",` - -##### CoC7.Entities.Weapon - -`"CoC7.Entities.Weapon": "Weapon",` - -##### CoC7.Expand - -`"CoC7.Expand": "Expand",` - -##### CoC7.ExperimentalFeaturesWarning - -`"CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.",` - -##### CoC7.FakeRoll - -`"CoC7.FakeRoll": "Send a decoy roll to players",` - -##### CoC7.FlatDiceModifier - -`"CoC7.FlatDiceModifier": "Flat dice modifier",` - -##### CoC7.FlatModifier - -`"CoC7.FlatModifier": "Flat modifier",` - -##### CoC7.French - -`"CoC7.French": "French",` - -##### CoC7.FullStudies - -`"CoC7.FullStudies": "Full Studies",` - -##### CoC7.Gains - -`"CoC7.Gains": "Gains",` - -##### CoC7.GainsForReading - -`"CoC7.GainsForReading": "Skill gains for reading {book}.",` - -##### CoC7.GmNotes - -`"CoC7.GmNotes": "Keeper's notes",` - -##### CoC7.GmTools - -`"CoC7.GmTools": "Keeper's tools",` - -##### CoC7.GoodForAsylum - -`"CoC7.GoodForAsylum": "You're good to be sent to the asylum",` - -##### CoC7.GrowingAccustomedToAwfulness - -`"CoC7.GrowingAccustomedToAwfulness": "Your getting used to horror. (Your sanity loss is limited).",` - -##### CoC7.Guess - -`"CoC7.Guess": "Guess",` - -##### CoC7.HitPointsCost - -`"CoC7.HitPointsCost": "Hit Points Cost",` - -##### CoC7.HowToTranslateEnableTranslation - -`"CoC7.HowToTranslateEnableTranslation": "Inside the Game World, under Configuration/Manage Modules activate both Babele and the translations.",` - -##### CoC7.HowToTranslateInstallBabele - -`"CoC7.HowToTranslateInstallBabele": "Install/Update Babele module from Foundry's module manager.",` - -##### CoC7.HowToTranslateInstallTranslation - -`"CoC7.HowToTranslateInstallTranslation": "Install/Update Translation from Foundry's module manager.",` - -##### CoC7.HowToTranslateNoTranslation - -`"CoC7.HowToTranslateNoTranslation": "Instructions for creating new language translations are available on existing translation modules.",` - -##### CoC7.HowToTranslateTitle - -`"CoC7.HowToTranslateTitle": "How to translate?",` - -##### CoC7.HowToTranslateWarning - -`"CoC7.HowToTranslateWarning": "Do not install any modules you do not trust.",` - -##### CoC7.Icon - -`"CoC7.Icon": "Icon",` - -##### CoC7.ImmuneToAwfulness - -`"CoC7.ImmuneToAwfulness": "Your mind is immune to this awfulness. (No sanity loss).",` - -##### CoC7.Impale - -`"CoC7.Impale": "Impale",` - -##### CoC7.ImpaleTitle - -`"CoC7.ImpaleTitle": "The weapon can impale",` - -##### CoC7.Import - -`"CoC7.Import": "Import",` - +``` "CoC7.DriveAutoSkillName": "Drive Auto",``` ##### CoC7.ImportActorItemsItem - -`"CoC7.ImportActorItemsItem": "Items",` - +``` "CoC7.ImportActorItemsItem": "Items",``` ##### CoC7.ImportActorItemsItemWorldModuleSystem - -`"CoC7.ImportActorItemsItemWorldModuleSystem": "Items / World / Modules / System",` - +``` "CoC7.ImportActorItemsItemWorldModuleSystem": "Items / World / Modules / System",``` ##### CoC7.ImportActorItemsNone - -`"CoC7.ImportActorItemsNone": "None",` - +``` "CoC7.ImportActorItemsNone": "None",``` ##### CoC7.ImportActorItemsWorldModuleItemSystem - -`"CoC7.ImportActorItemsWorldModuleItemSystem": "World / Modules / Items / System",` - +``` "CoC7.ImportActorItemsWorldModuleItemSystem": "World / Modules / Items / System",``` ##### CoC7.ImportSkillItemLocations - -`"CoC7.ImportSkillItemLocations": "Look for skills/spells/weapons in",` - +``` "CoC7.ImportSkillItemLocations": "Look for skills/spells/weapons in",``` ##### CoC7.ImportedCharactersFolder - -`"CoC7.ImportedCharactersFolder": "Imported characters",` - -##### CoC7.ImportedUnnamedCharacter - -`"CoC7.ImportedUnnamedCharacter": "Imported unnamed character",` - -##### CoC7.IndefinitelyInsane - -`"CoC7.IndefinitelyInsane": "You become indefinitely insane.",` - -##### CoC7.InitialReading - -`"CoC7.InitialReading": "Initial Reading",` - -##### CoC7.InitialReadingNeeded - -`"CoC7.InitialReadingNeeded": "{actor} needs to perform an Initial Reading on {book} to be able to advance through Full Study progress.",` - +``` "CoC7.ImportedCharactersFolder": "Imported characters",``` ##### CoC7.InitiatorMissed - -`"CoC7.InitiatorMissed": "{name} missed.",` - -##### CoC7.InsanityName - -`"CoC7.InsanityName": "Insanity",` - -##### CoC7.InsanityType - -`"CoC7.InsanityType": "Type of insanity",` - -##### CoC7.IntCheck - -`"CoC7.IntCheck": "Intelligence check",` - -##### CoC7.InventoryIsCurrentlyEmpty - -`"CoC7.InventoryIsCurrentlyEmpty": "Inventory is currently empty.",` - -##### CoC7.InvestigatorManiaGained - -`"CoC7.InvestigatorManiaGained": "The investigator gain a mania",` - -##### CoC7.InvestigatorPhobiaGained - -`"CoC7.InvestigatorPhobiaGained": "The investigator gain a phobia",` - -##### CoC7.InvoluntaryAction - -`"CoC7.InvoluntaryAction": "Involuntary action",` - -##### CoC7.InvoluntaryActionPerfomed - -`"CoC7.InvoluntaryActionPerfomed": "Involuntary action performed",` - -##### CoC7.InvoluntaryActionPerformed - -`"CoC7.InvoluntaryActionPerformed": "You lost self-control for a moment.",` - -##### CoC7.ItemWeapon - -`"CoC7.ItemWeapon": "Item (Weapon)",` - -##### CoC7.KeepData - -`"CoC7.KeepData": "Keep creature's data",` - -##### CoC7.KeeperSentDecoy - -`"CoC7.KeeperSentDecoy": "Decoy roll sent to players",` - -##### CoC7.Label - -`"CoC7.Label": "Label",` - -##### CoC7.LearnSpellAttempt - -`"CoC7.LearnSpellAttempt": "Attempt to learn spell {spell}, from {book}.",` - -##### CoC7.LinkCheckDiff - -`"CoC7.LinkCheckDiff": "[{difficulty}] {name} check",` - -##### CoC7.LinkCheckDiffModif - -`"CoC7.LinkCheckDiffModif": "[{difficulty}] {name} check({modifier})",` - -##### CoC7.LinkCheckModif - -`"CoC7.LinkCheckModif": " {name} check({modifier})",` - -##### CoC7.LinkItem - -`"CoC7.LinkItem": " {name}",` - -##### CoC7.LinkItemDiff - -`"CoC7.LinkItemDiff": "[{difficulty}] {name}",` - -##### CoC7.LinkItemDiffModif - -`"CoC7.LinkItemDiffModif": "[{difficulty}] {name} ({modifier})",` - -##### CoC7.LinkItemModif - -`"CoC7.LinkItemModif": " {name} ({modifier})",` - -##### CoC7.LinkSanLossDiff - -`"CoC7.LinkSanLossDiff": "[{difficulty}] SAN loss ({sanMin}/{sanMax})",` - -##### CoC7.LinkSanLossDiffModif - -`"CoC7.LinkSanLossDiffModif": "[{difficulty}] SAN loss({modifier}) ({sanMin}/{sanMax})",` - -##### CoC7.LinkSanLossModif - -`"CoC7.LinkSanLossModif": " SAN loss({modifier}) ({sanMin}/{sanMax})",` - -##### CoC7.Location - -`"CoC7.Location": "Location",` - -##### CoC7.LuckIncreased - -`"CoC7.LuckIncreased": "Luck recovered ({die}/{score}) by {augment} points",` - -##### CoC7.LuckNotIncreased - -`"CoC7.LuckNotIncreased": "Luck NOT recovered ({die}/{score})",` - -##### CoC7.MagicPointsCost - -`"CoC7.MagicPointsCost": "Magic Points Cost",` - -##### CoC7.Mania - -`"CoC7.Mania": "Mania",` - -##### CoC7.ManiaGained - -`"CoC7.ManiaGained": "You gain a mania",` - -##### CoC7.MarkedForDevelopment - -`"CoC7.MarkedForDevelopment": "Marked for development",` - -##### CoC7.MaxLossToCreature - -`"CoC7.MaxLossToCreature": "Max loss to this creature",` - -##### CoC7.MaxSanloss - -`"CoC7.MaxSanloss": "Max loss",` - -##### CoC7.Maximize - -`"CoC7.Maximize": "Maximize",` - -##### CoC7.MemoryRepressed - -`"CoC7.MemoryRepressed": "Your mind repressed the memory and buried it in your subconscious.",` - -##### CoC7.MessageBoutOfMadnessItemNotFound - -`"CoC7.MessageBoutOfMadnessItemNotFound": "The result from the madness table was not found, please check all your statuses are created",` - -##### CoC7.MessageBoutOfMadnessTableNotFound - -`"CoC7.MessageBoutOfMadnessTableNotFound": "The result from the madness table was not found, please check all your roll tables are created",` - -##### CoC7.MessageCheckRequestedWait - -`"CoC7.MessageCheckRequestedWait": "{check} roll requested by your Keeper.
                                              Wait before clicking!
                                              ",` - -##### CoC7.MessageDistanceCalculationFailure - -`"CoC7.MessageDistanceCalculationFailure": "Unable to calculate distance between tokens, please use the token character sheet.",` - -##### CoC7.MessageSelectSingleUserForTarget - -`"CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.",` - -##### CoC7.MessageSelectUserToGiveTo - -`"CoC7.MessageSelectUserToGiveTo": "Which character would you like to give this item to?",` - -##### CoC7.MessageTargetCheckRequested - -`"CoC7.MessageTargetCheckRequested": "Your keeper has requested {name} make a {check} roll.",` - -##### CoC7.MessageTitleSelectSingleUserForTarget - -`"CoC7.MessageTitleSelectSingleUserForTarget": "Which user can respond to this attack",` - -##### CoC7.MessageTitleSelectUserToGiveTo - -`"CoC7.MessageTitleSelectUserToGiveTo": "Give item to another character",` - -##### CoC7.Migrate.ButtonOkay - -`"CoC7.Migrate.ButtonOkay": "Okay",` - -##### CoC7.Migrate.ButtonSkip - -`"CoC7.Migrate.ButtonSkip": "Skip",` - -##### CoC7.Migrate.ButtonUpdate - -`"CoC7.Migrate.ButtonUpdate": "Update",` - -##### CoC7.Migrate.GMRequired - -`"CoC7.Migrate.GMRequired": "

                                              Your world requires an update to run version {version}.

                                              Please wait for your GM to update the system then refresh (F5) this page.

                                              ",` - -##### CoC7.Migrate.Message - -`"CoC7.Migrate.Message": "

                                              Your world requires an update to run version {version}.

                                              Please backup your world folder before starting the upgrade.

                                              If you do not update your world the system will not work correctly.

                                              The world may be restarted when completed.

                                              ",` - -##### CoC7.Migrate.RestartRequired - -`"CoC7.Migrate.RestartRequired": "

                                              Your world will now restart to enable these changes

                                              ",` - -##### CoC7.Migrate.Title - -`"CoC7.Migrate.Title": "Update required",` - -##### CoC7.Migrate.WithModulesMessage - -`"CoC7.Migrate.WithModulesMessage": "

                                              Your world or modules may require an update to run version {version}.

                                              Please backup your world and module folders listed below before starting the upgrade.

                                              If you do not update your world the system will not work correctly.

                                              The following modules contain actors or items so will also be checked.

                                              {modules}

                                              The world may be restarted when completed.

                                              ",` - -##### CoC7.MinSanloss - -`"CoC7.MinSanloss": "Min loss",` - -##### CoC7.Modifiers - -`"CoC7.Modifiers": "Modifiers",` - -##### CoC7.Mythos - -`"CoC7.Mythos": "Mythos",` - -##### CoC7.MythosAlreadyEncountered - -`"CoC7.MythosAlreadyEncountered": "Award Mythos Experience (+1%)",` - -##### CoC7.MythosFirstEncounter - -`"CoC7.MythosFirstEncounter": "Award Mythos Experience (+5% First time)",` - -##### CoC7.MythosGain - -`"CoC7.MythosGain": "Mythos gain",` - -##### CoC7.NewBookName - -`"CoC7.NewBookName": "new book",` - -##### CoC7.NewSpellName - -`"CoC7.NewSpellName": "new spell",` - -##### CoC7.NoConvert - -`"CoC7.NoConvert": "No Convert",` - +``` "CoC7.InitiatorMissed": "{name} missed.",``` ##### CoC7.NoResponse - -`"CoC7.NoResponse": "No Response",` - -##### CoC7.NoTargetSelected - -`"CoC7.NoTargetSelected": "You have not selected a target for your {weapon} check. Do you want to proceed anyway?",` - -##### CoC7.NoTargetToDamage - -`"CoC7.NoTargetToDamage": "There is no target to apply the damage to",` - -##### CoC7.NonPlayingCharacter - -`"CoC7.NonPlayingCharacter": "Non Playing Character (NPC)",` - -##### CoC7.NotInsane - -`"CoC7.NotInsane": "None",` - -##### CoC7.NotOwned - -`"CoC7.NotOwned": "This Book needs to be owned by an Actor to perform this action.",` - -##### CoC7.OpposedRollCard - -`"CoC7.OpposedRollCard": "Opposed roll card",` - -##### CoC7.Origin - -`"CoC7.Origin": "Origin",` - -##### CoC7.OtherCosts - -`"CoC7.OtherCosts": "Other Costs",` - -##### CoC7.OutOfAmmo - -`"CoC7.OutOfAmmo": "Out of Ammo",` - -##### CoC7.OutOfShots - -`"CoC7.OutOfShots": "Out of shots",` - -##### CoC7.PasteTheDataBelow - -`"CoC7.PasteTheDataBelow": "Paste the raw text data below",` - -##### CoC7.Phobia - -`"CoC7.Phobia": "Phobia",` - -##### CoC7.PhobiaGained - -`"CoC7.PhobiaGained": "You gain a phobia",` - -##### CoC7.PilotSpecializationName - -`"CoC7.PilotSpecializationName": "Pilot",` - -##### CoC7.PlayerName - -`"CoC7.PlayerName": "Player",` - -##### CoC7.PlayerPermanentlyInsane - -`"CoC7.PlayerPermanentlyInsane": "Player Permanently Insane",` - -##### CoC7.Points - -`"CoC7.Points": "point(s)",` - -##### CoC7.PowerCost - -`"CoC7.PowerCost": "Power Cost",` - -##### CoC7.Proceed - -`"CoC7.Proceed": "Proceed",` - -##### CoC7.Progress - -`"CoC7.Progress": "Progress",` - -##### CoC7.Properties - -`"CoC7.Properties": "Properties",` - -##### CoC7.PushingSkill - -`"CoC7.PushingSkill": ": pushing skill!",` - -##### CoC7.ReadAttempt - -`"CoC7.ReadAttempt": "Attempt to read {book} ({language}), {difficulty} difficulty.",` - -##### CoC7.ReadingMythosTome - -`"CoC7.ReadingMythosTome": "Reading {book}.",` - -##### CoC7.RecoverLuckPoints - -`"CoC7.RecoverLuckPoints": "Recover Luck Points",` - -##### CoC7.RedoFullStudy - -`"CoC7.RedoFullStudy": "Redo Full Study",` - -##### CoC7.Reload - -`"CoC7.Reload": "Left/Right click : add/remove 1 bullet\nShift + Left/Right click : Reload/Empty",` - -##### CoC7.RememberEverything - -`"CoC7.RememberEverything": "You remember EVERYTHING.",` - -##### CoC7.ResetCreatureSan - -`"CoC7.ResetCreatureSan": "Reset creature's history",` - -##### CoC7.ResetSpecieSan - -`"CoC7.ResetSpecieSan": "Reset specie's history",` - -##### CoC7.RevealSanLoss - -`"CoC7.RevealSanLoss": "Reveal SAN loss",` - -##### CoC7.RollLuck4Dev - -`"CoC7.RollLuck4Dev": "Rolling Luck for development",` - -##### CoC7.RollSecretDice - -`"CoC7.RollSecretDice": "Keeper privately rolled some dice",` - -##### CoC7.RollThreshold - -`"CoC7.RollThreshold": "Roll threshold",` - -##### CoC7.SanDataSelectionWindow - -`"CoC7.SanDataSelectionWindow": "Select SAN losses",` - -##### CoC7.SanGained - -`"CoC7.SanGained": "Gained 2d6 ({results} = {sanGained}) Sanity after mastering {skill} with a {skillValue}%",` - -##### CoC7.SanityCheckPerformed - -`"CoC7.SanityCheckPerformed": "You were exposed to a traumatic event.",` - -##### CoC7.SanityCost - -`"CoC7.SanityCost": "Sanity Cost",` - -##### CoC7.SanityLost - -`"CoC7.SanityLost": "Sanity points lost",` - -##### CoC7.SelectActorType - -`"CoC7.SelectActorType": "Select actor type",` - -##### CoC7.SelectSourceLanguage - -`"CoC7.SelectSourceLanguage": "Select the source text language",` - -##### CoC7.SendToChat - -`"CoC7.SendToChat": "Send to chat",` - -##### CoC7.ShotBullets - -`"CoC7.ShotBullets": "Shot {bullets} bullets at target {actor}.",` - -##### CoC7.ShotIsImpossible - -`"CoC7.ShotIsImpossible": "Shot is impossible",` - -##### CoC7.ShotVoley - -`"CoC7.ShotVoley": "Shooting a voley of {bullets} bullets at target {actor}.",` - -##### CoC7.SortBySkillName - -`"CoC7.SortBySkillName": "Sort by skill name",` - -##### CoC7.SortBySkillValue - -`"CoC7.SortBySkillValue": "Sort by skill percent",` - -##### CoC7.Spanish - -`"CoC7.Spanish": "Spanish",` - -##### CoC7.Specific - -`"CoC7.Specific": "Specific",` - -##### CoC7.SpecificLocations - -`"CoC7.SpecificLocations": "Specific locations",` - -##### CoC7.SpellsLearned - -`"CoC7.SpellsLearned": "Spells Learned",` - -##### CoC7.Status - -`"CoC7.Status": "Status",` - -##### CoC7.Success - -`"CoC7.Success": "Success",` - -##### CoC7.Summarize - -`"CoC7.Summarize": "Summarize",` - -##### CoC7.Target - -`"CoC7.Target": "Target",` - -##### CoC7.TargetOutOfRange - -`"CoC7.TargetOutOfRange": "Target out of range",` - -##### CoC7.TemporaryInsane - -`"CoC7.TemporaryInsane": "You become temporary insane.",` - +``` "CoC7.NoResponse": "No Response",``` ##### CoC7.TextFieldInvalidCharacters - -`"CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed",` - -##### CoC7.Tie - -`"CoC7.Tie": "Tie",` - -##### CoC7.ToolTipAutoToggle - -`"CoC7.ToolTipAutoToggle": "
                                              1. Left click Toggle automatic calculation / manual entry
                                              2. ",` - -##### CoC7.ToolTipDB - -`"CoC7.ToolTipDB": "
                                                1. Left click Immediate regular difficulty roll
                                                ",` - -##### CoC7.ToolTipKeeperSanity - -`"CoC7.ToolTipKeeperSanity": "
                                              3. CTRL + Alt/Option Create sanity check roll link
                                              4. ",` - -##### CoC7.ToolTipKeeperSkill - -`"CoC7.ToolTipKeeperSkill": "
                                                1. CTRL + Left click Create roll link
                                                2. {other}
                                                ",` - -##### CoC7.ToolTipKeeperStandbySkill - -`"CoC7.ToolTipKeeperStandbySkill": "
                                              5. Left click Request a roll from {name}
                                              6. ",` - -##### CoC7.ToolTipSkill - -`"CoC7.ToolTipSkill": "
                                                1. Left click roll check with options
                                                2. Shift + Left click Immediate regular difficulty roll
                                                1. Right click Opposed check with options
                                                2. Shift + Right click Immediate opposed check
                                                1. Alt/Option + Right click Combined check with options
                                                ",` - -##### CoC7.ToolTipSkillFlagToggle - -`"CoC7.ToolTipSkillFlagToggle": "
                                                1. Double Click Toggle flag status
                                                2. ",` - -##### CoC7.ToolTipSkillFlagged - -`"CoC7.ToolTipSkillFlagged": "Flagged for development",` - -##### CoC7.ToolTipSkillUnflagged - -`"CoC7.ToolTipSkillUnflagged": "Not flagged for development",` - -##### CoC7.TotalDamage - -`"CoC7.TotalDamage": "Total damage",` - -##### CoC7.TradeItem - -`"CoC7.TradeItem": "Trade / Store Item",` - -##### CoC7.TraditionalChinese - -`"CoC7.TraditionalChinese": "Traditional Chinese",` - -##### CoC7.UnableToCopyToClipboard - -`"CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.",` - -##### CoC7.UnableToInteractWithChatCard - -`"CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you",` - -##### CoC7.UncommonSkillsHide - -`"CoC7.UncommonSkillsHide": "Hide uncommon skills",` - -##### CoC7.UncommonSkillsShow - -`"CoC7.UncommonSkillsShow": "Show uncommon skills",` - -##### CoC7.UnderlyingInsanity - -`"CoC7.UnderlyingInsanity": "Underlying insanity",` - -##### CoC7.UnknownLanguage - -`"CoC7.UnknownLanguage": "{actor} do not know the language in which this book is written.",` - -##### CoC7.Unreadable - -`"CoC7.Unreadable": "Unreadable",` - -##### CoC7.Vehicle - -`"CoC7.Vehicle": "Vehicle",` - -##### CoC7.WarningCharacterSheetV1Depreciated - -`"CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2",` - -##### CoC7.WeaponUsesPerRoundHint - -`"CoC7.WeaponUsesPerRoundHint": "Attacks per round (1/3 : 1 attack every 3 rounds)",` - -##### CoC7.Weapons - -`"CoC7.Weapons": "Weapons",` - -##### CoC7.WhisperTo - -`"CoC7.WhisperTo": "Whisper to",` - -##### CoC7.WhisperToSelection - -`"CoC7.WhisperToSelection": "Whisper to selected tokens",` - -##### CoC7.XPGainDisabled - -`"CoC7.XPGainDisabled": "Character cannot gain XP",` - -##### CoC7.XPGainEnabled - -`"CoC7.XPGainEnabled": "Character can gain XP",` - -##### CoC7.YouGainedCthulhuMythos - -`"CoC7.YouGainedCthulhuMythos": "Your mind quail before the unearthly manifestation (+{value}% Cthulhu Mythos)",` - -##### CoC7.dailySanLossRestarted - -`"CoC7.dailySanLossRestarted": "Daily Sanity loss counter restarted",` - -##### CoC7.dreaming - -`"CoC7.dreaming": "The Investigators wait dreaming",` - -##### CoC7.hasCriticalWounds - -`"CoC7.hasCriticalWounds": "Unable to recover Hit Points due to Critical Wounds",` - -##### CoC7.healthRecovered - -`"CoC7.healthRecovered": "Recovered one Hit Point",` - -##### CoC7.hours - -`"CoC7.hours": "hour(s)",` - -##### CoC7.magicPointsRecovered - -`"CoC7.magicPointsRecovered": "Magic Points recovered",` - -##### CoC7.meleeCombatDamageDeals - -`"CoC7.meleeCombatDamageDeals": "deals",` - -##### CoC7.meleeCombatDamageFrom - -`"CoC7.meleeCombatDamageFrom": "from",` - -##### CoC7.meleeCombatDamageTakes - -`"CoC7.meleeCombatDamageTakes": "takes",` - -##### CoC7.meleeCombatDamageWith - -`"CoC7.meleeCombatDamageWith": "with",` - -##### CoC7.pulpHealthRecovered - -`"CoC7.pulpHealthRecovered": "Recovered {number} Hit Points",` - -##### CoC7.quickHealer - -`"CoC7.quickHealer": "Quick Healer",` - -##### CoC7.rangeCombatCard.AimingTitle - -`"CoC7.rangeCombatCard.AimingTitle": "Add 1 bonus die for the first shot",` - -##### CoC7.rangeCombatCard.BigTargetTitle - -`"CoC7.rangeCombatCard.BigTargetTitle": "1 bonus die for big target (Build > 4)",` - -##### CoC7.rangeCombatCard.CoverTitle - -`"CoC7.rangeCombatCard.CoverTitle": "1 penalty die. The target is under cover or successfully dived for cover",` - -##### CoC7.rangeCombatCard.FastMovingTargetTitle - -`"CoC7.rangeCombatCard.FastMovingTargetTitle": "1 penalty die. Target is fast (MOV 8+) and moving at full speed",` - -##### CoC7.rangeCombatCard.InMeleeTitle - -`"CoC7.rangeCombatCard.InMeleeTitle": "1 penalty die. Target is engaged in melee combat",` - -##### CoC7.rangeCombatCard.NormalTarget - -`"CoC7.rangeCombatCard.NormalTarget": "Normal Target",` - -##### CoC7.rangeCombatCard.NormalTargetTitle - -`"CoC7.rangeCombatCard.NormalTargetTitle": "Target has a normal size, no bonus/penalty",` - -##### CoC7.rangeCombatCard.PointBlankRangeTitle - -`"CoC7.rangeCombatCard.PointBlankRangeTitle": "1 bonus die. Target at point blank range",` - -##### CoC7.rangeCombatCard.SmallTargetTitle - -`"CoC7.rangeCombatCard.SmallTargetTitle": "1 penalty die for a small target",` - -##### CoC7.rangeCombatDamageArmor - -`"CoC7.rangeCombatDamageArmor": "{name} takes {total} damage. ({armor} mitigated)",` - -##### CoC7.remove - -`"CoC7.remove": "Remove",` - -##### CoC7.rounds - -`"CoC7.rounds": "round(s)",` - -##### CoC7.startRest - -`"CoC7.startRest": "Start Rest",` - -##### CoC7.toggleXP - -`"CoC7.toggleXP": "XP gain",` - -##### CoC7.toolTipDelay - -`"CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never",` - -##### CoC7.weeks - -`"CoC7.weeks": "week(s)",` - -##### SETTINGS.AdviseAllPlayer - -`"SETTINGS.AdviseAllPlayer": "Notify all players",` - -##### SETTINGS.AdviseOwnersOnly - -`"SETTINGS.AdviseOwnersOnly": "Notify actor's owner",` - -##### SETTINGS.AllowFlatDiceModifier - -`"SETTINGS.AllowFlatDiceModifier": "Flat dice modifier",` - -##### SETTINGS.AllowFlatDiceModifierHint - -`"SETTINGS.AllowFlatDiceModifierHint": "Allows dice roll results to be modified by a flat value.",` - -##### SETTINGS.AllowFlatThresholdModifier - -`"SETTINGS.AllowFlatThresholdModifier": "Flat value modifier",` - -##### SETTINGS.AllowFlatThresholdModifierHint - -`"SETTINGS.AllowFlatThresholdModifierHint": "Allows checks success value to be modified by a flat value.",` - -##### SETTINGS.AlwaysEditable - -`"SETTINGS.AlwaysEditable": "always",` - +``` "CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed",``` ##### SETTINGS.ArtPauseImage - -`"SETTINGS.ArtPauseImage": "Pause image",` - +``` "SETTINGS.ArtPauseImage": "Pause image",``` ##### SETTINGS.ArtPauseImageHint - -`"SETTINGS.ArtPauseImageHint": ". Type 'null' to remove image",` - +``` "SETTINGS.ArtPauseImageHint": ". Type 'null' to remove image",``` ##### SETTINGS.ArtPauseText - -`"SETTINGS.ArtPauseText": "Pause text",` - +``` "SETTINGS.ArtPauseText": "Pause text",``` ##### SETTINGS.ArtPauseTextHint - -`"SETTINGS.ArtPauseTextHint": "Leave blank for default",` - -##### SETTINGS.ArtWorkOtherSheetBackground - -`"SETTINGS.ArtWorkOtherSheetBackground": "Other sheet background",` - -##### SETTINGS.ArtWorkOtherSheetBackgroundHint - -`"SETTINGS.ArtWorkOtherSheetBackgroundHint": "type 'null' to remove background. Only for items and vehicle for now",` - -##### SETTINGS.ArtWorkSheetBackground - -`"SETTINGS.ArtWorkSheetBackground": "Character sheet background",` - -##### SETTINGS.ArtWorkSheetBackgroundHint - -`"SETTINGS.ArtWorkSheetBackgroundHint": "type 'null' to remove background, blank for default",` - -##### SETTINGS.ArtWorkSheetBackgroundType - -`"SETTINGS.ArtWorkSheetBackgroundType": "Background type",` - -##### SETTINGS.ArtworkBackgroundColor - -`"SETTINGS.ArtworkBackgroundColor": "Secondary color",` - -##### SETTINGS.ArtworkBackgroundColorHint - -`"SETTINGS.ArtworkBackgroundColorHint": "Used for background and inputs",` - -##### SETTINGS.ArtworkFixedSkillLength - -`"SETTINGS.ArtworkFixedSkillLength": "Limit skill name length",` - -##### SETTINGS.ArtworkFixedSkillLengthHint - -`"SETTINGS.ArtworkFixedSkillLengthHint": "The skill length in the skill tab will be limited for a more compact sheet",` - -##### SETTINGS.ArtworkFrontColor - -`"SETTINGS.ArtworkFrontColor": "Main color",` - -##### SETTINGS.ArtworkFrontColorHint - -`"SETTINGS.ArtworkFrontColorHint": "Used for all elements",` - -##### SETTINGS.ArtworkInteractiveColor - -`"SETTINGS.ArtworkInteractiveColor": "Interactive elements color",` - -##### SETTINGS.ArtworkInteractiveColorHint - -`"SETTINGS.ArtworkInteractiveColorHint": "Used for interactives/rollables elements",` - -##### SETTINGS.ArtworkMainFont - -`"SETTINGS.ArtworkMainFont": "Main font",` - -##### SETTINGS.ArtworkMainFontBold - -`"SETTINGS.ArtworkMainFontBold": "Main font (bold)",` - -##### SETTINGS.ArtworkMainFontSize - -`"SETTINGS.ArtworkMainFontSize": "Default font size (px)",` - -##### SETTINGS.ArtworkSheetImage - -`"SETTINGS.ArtworkSheetImage": "Character sheet image",` - -##### SETTINGS.ArtworkSheetImageHint - -`"SETTINGS.ArtworkSheetImageHint": "type 'null' to remove image",` - -##### SETTINGS.BackgroundAuto - -`"SETTINGS.BackgroundAuto": "Scales the image maintening proportions (css:auto)",` - -##### SETTINGS.BackgroundContain - -`"SETTINGS.BackgroundContain": "Scales to fill without croping/stretching (css:contain)",` - -##### SETTINGS.BackgroundCover - -`"SETTINGS.BackgroundCover": "Scales to fill with croping/stretching (css:cover)",` - -##### SETTINGS.BackgroundSlice - -`"SETTINGS.BackgroundSlice": "Background image will be sliced (css:border-image)",` - -##### SETTINGS.BoutOfMadnessRealTimeTable - -`"SETTINGS.BoutOfMadnessRealTimeTable": "Bout of madness (Real Time) table",` - -##### SETTINGS.BoutOfMadnessSummaryTable - -`"SETTINGS.BoutOfMadnessSummaryTable": "Bout of madness (Summary) table",` - -##### SETTINGS.CheckElevation - -`"SETTINGS.CheckElevation": "Include elevation in distance",` - -##### SETTINGS.CheckElevationHint - -`"SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations",` - -##### SETTINGS.CreationModeOnly - -`"SETTINGS.CreationModeOnly": "in creation mode only",` - -##### SETTINGS.DebugMode - -`"SETTINGS.DebugMode": "System Debug Mode",` - -##### SETTINGS.DebugModeHint - -`"SETTINGS.DebugModeHint": "!!RESTART REQUIRED!!",` - -##### SETTINGS.DisplayCheckSuccessLevel - -`"SETTINGS.DisplayCheckSuccessLevel": "Display check level of success (stars)",` - -##### SETTINGS.DisplayResultType - -`"SETTINGS.DisplayResultType": "Display dice result type (text)",` - -##### SETTINGS.DoNotAdvise - -`"SETTINGS.DoNotAdvise": "Keep it for yourself.",` - -##### SETTINGS.EnableStatusIcons - -`"SETTINGS.EnableStatusIcons": "Enable status icons",` - -##### SETTINGS.EnableStatusIconsHint - -`"SETTINGS.EnableStatusIconsHint": "Set if combat and sanity effects icons are shown in tokens.",` - -##### SETTINGS.LetKeeperDecide - -`"SETTINGS.LetKeeperDecide": "Let keeper decide",` - -##### SETTINGS.NeverEditable - -`"SETTINGS.NeverEditable": "never (Keeper only)",` - -##### SETTINGS.OneBlockBackStory - -`"SETTINGS.OneBlockBackStory": "One block backstory",` - -##### SETTINGS.OneBlockBackStoryHint - -`"SETTINGS.OneBlockBackStoryHint": "Turn backstory to one editor block, but you can format/add links.",` - -##### SETTINGS.OpposedRollTieBreaker - -`"SETTINGS.OpposedRollTieBreaker": "Opposed rolls Viriato139ac tie breaker",` - -##### SETTINGS.OpposedRollTieBreakerHint - -`"SETTINGS.OpposedRollTieBreakerHint": "In case of a tie during opposed roll, winner is determined by highest rolled value, not higher skill.",` - +``` "SETTINGS.ArtPauseTextHint": "Leave blank for default",``` ##### SETTINGS.OverrideGameArtwork - -`"SETTINGS.OverrideGameArtwork": "Override game Artwork",` - +``` "SETTINGS.OverrideGameArtwork": "Override game Artwork",``` ##### SETTINGS.OverrideGameArtworkHint - -`"SETTINGS.OverrideGameArtworkHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default",` - -##### SETTINGS.OverrideSheetArtwork - -`"SETTINGS.OverrideSheetArtwork": "Override Sheet Artwork",` - -##### SETTINGS.OverrideSheetArtworkHint - -`"SETTINGS.OverrideSheetArtworkHint": "!!RESTART REQUIRED!! gives access to advance sheet config, leave blank for default",` - -##### SETTINGS.PlayerUnlockSheetMode - -`"SETTINGS.PlayerUnlockSheetMode": "Player can unlock sheet",` - -##### SETTINGS.SelfRollWhisperTarget - -`"SETTINGS.SelfRollWhisperTarget": "Self roll notification:",` - -##### SETTINGS.SelfRollWhisperTargetHint - -`"SETTINGS.SelfRollWhisperTargetHint": "As a GM, when doing self check roll, who do you want to send a notification to.",` - -##### SETTINGS.ShowExperimentalFeatures - -`"SETTINGS.ShowExperimentalFeatures": "Show Experimental Features",` - -##### SETTINGS.ShowExperimentalFeaturesHint - -`"SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds",` - -##### SETTINGS.StanbyGMRolls - -`"SETTINGS.StanbyGMRolls": "Standby Keeper rolls",` - -##### SETTINGS.StanbyGMRollsHint - -`"SETTINGS.StanbyGMRollsHint": "When the Keeper is making a roll from an assigned character sheet, display a roll button instead of rolling",` - -##### SETTINGS.TitleChatCards - -`"SETTINGS.TitleChatCards": "Chat Cards Settings",` - -##### SETTINGS.TitleDeveloperDebug - -`"SETTINGS.TitleDeveloperDebug": "Developer And Debug Settings",` - -##### SETTINGS.TitleDiceSoNice - -`"SETTINGS.TitleDiceSoNice": "Dice So Nice Settings",` - +``` "SETTINGS.OverrideGameArtworkHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default",``` ##### SETTINGS.TitleGameArtwork - -`"SETTINGS.TitleGameArtwork": "Game Artwork Settings",` - -##### SETTINGS.TitleInitiative - -`"SETTINGS.TitleInitiative": "Initiative Settings",` - -##### SETTINGS.TitleRoll - -`"SETTINGS.TitleRoll": "Roll Settings",` - -##### SETTINGS.TitleRollTable - -`"SETTINGS.TitleRollTable": "Roll Table Settings",` - -##### SETTINGS.TitleRules - -`"SETTINGS.TitleRules": "Rules",` - -##### SETTINGS.TitleScene - -`"SETTINGS.TitleScene": "Scene Settings",` - -##### SETTINGS.TitleSheet - -`"SETTINGS.TitleSheet": "Sheet Settings",` - -##### SETTINGS.TitleWeapon - -`"SETTINGS.TitleWeapon": "Weapon Settings",` - -##### SETTINGS.developmentRollForLuck - -`"SETTINGS.developmentRollForLuck": "Recoverable Luck points",` - -##### SETTINGS.developmentRollForLuckHint - -`"SETTINGS.developmentRollForLuckHint": "Each player can make an improvement check for their Luck on Development Phase",` - -##### SETTINGS.displayPlayerNameOnSheet - -`"SETTINGS.displayPlayerNameOnSheet": "Display player's name on sheet",` - -##### SETTINGS.showIconsOnly - -`"SETTINGS.showIconsOnly": "On summarized sheet, show only icons on skills list.",` +``` "SETTINGS.TitleGameArtwork": "Game Artwork Settings",``` diff --git a/generate-translations.js b/generate-translations.js index 868f6401..63db3695 100644 --- a/generate-translations.js +++ b/generate-translations.js @@ -1,9 +1,11 @@ +import del from './node_modules/del/index.js' import glob from './node_modules/glob/glob.js' import jsonfile from './node_modules/jsonfile/index.js' import write from './node_modules/write/index.js' const unordered = {} let missing = [] +const abandoned = {} const source = jsonfile.readFileSync('./lang/en.json') const keys = Object.keys(source) @@ -13,8 +15,13 @@ glob('./lang/*.json', {}, async function (er, files) { const lang = filename.replace(/^(.+\/)([a-zA-Z0-9-]+)(\.json)$/, '$2') if (lang !== 'en') { const json = jsonfile.readFileSync(filename) - unordered[lang] = keys.filter(x => !Object.keys(json).includes(x)) - missing = missing.concat(unordered[lang]) + const missingKeys = keys.filter(x => !Object.keys(json).includes(x)) + if (missingKeys.length < 100) { + unordered[lang] = missingKeys + missing = missing.concat(unordered[lang]) + } else { + abandoned[lang] = missingKeys + } } }) ) @@ -55,6 +62,11 @@ glob('./lang/*.json', {}, async function (er, files) { complete.join() + '** translation is currently up to date\n\n' } + if (Object.keys(abandoned).length > 0) { + output = output + 'The following translations have been abandoned **' + + Object.keys(abandoned).join('**, **') + + '**, [are you able to help?](./ABANDONED.md)\n\n' + } if (missing.length > 0) { output = output + '|Key|' Object.entries(langs).forEach(([key, value]) => { @@ -101,4 +113,28 @@ glob('./lang/*.json', {}, async function (er, files) { output = output + anchors } write('./.github/TRANSLATIONS.md', output) + if (Object.keys(abandoned).length > 0) { + output = '' + output = output + '# Abandoned Translations.\n\n' + output = output + 'Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better!' + output = output + ' Below is a list of translations keys on existing files that still need translated, based on `en.json`.\n\n' + Object.entries(abandoned).forEach(([key, values]) => { + output = output + '[' + key + '.json](#' + (key + '.json').toLowerCase().replace(/[^a-zA-Z0-9]+/g, '') + ')\n\n' + }) + output = output + '\n' + Object.entries(abandoned).forEach(([key, values]) => { + output = output + '## ' + key + '.json\n```\n' + values.forEach(sourceKey => { + output = output + '"' + + sourceKey + + '": "' + + source[sourceKey].replace(/\n/g, '\\n') + + '",\n' + }) + output = output.substr(0, output.length - 2) + '\n```\n' + }) + write('./.github/ABANDONED.md', output) + } else { + del('./.github/ABANDONED.md') + } }) diff --git a/package.json b/package.json index d5c611ac..c711d0d2 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "copy-webpack-plugin": "^9.0.1", "css-loader": "^6.2.0", "css-minimizer-webpack-plugin": "^3.0.2", + "del": "^6.0.0", "glob": "^7.1.7", "jsonfile": "^6.1.0", "less": "^4.1.1", From 75febf4b108560098e0997343d4aec0e10aa6b41 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:37:23 +0200 Subject: [PATCH 252/726] Switch to get data --- module/common/chatcardlib/src/chatcardlib.js | 162 ++++++++++++------- templates/chat/cards/test.html | 33 +++- 2 files changed, 130 insertions(+), 65 deletions(-) diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 1a689505..00bf4ff2 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -3,12 +3,8 @@ const ECC_CLASS = 'enhanced-chat-card' const PERMISSION_TYPE = { GM: 'gm', - XGM: '-gm', SPEAKER: 'speaker', - XSPEAKER: '-speaker', - USER: 'user', - USER: '-user', - EVERYONE: '' + EVERYONE: 'all' } const STATE = { @@ -95,10 +91,16 @@ export class EnhancedChatCard { // EnhancedChatCardLib.register(cardConstructor) // } - constructor (options = {}) { + constructor (data={},options = {}) { + this.initialize( data) this._options = options } + initialize( data){ + this._data = data + if( !this._data.flags) this._data.flags = {} + } + get options () { return mergeObject(this.constructor.defaultOptions, this._options) } @@ -108,25 +110,48 @@ export class EnhancedChatCard { } get cssClasses () { - return this.options.classes + return this.options.classes?.join( ' ') + } + + getData(){ + return{ + card: this, + flags: this.flags, + data: this.toObject(), + options: this.options, + css: this.cssClasses, + mySelectOptions: { + 0: 'option 1', + 1: 'option 2' + } + } } - async toMessage (optionnalChatData = {}) { - this.mySelectOptions = { - 0: 'option 1', - 1: 'option 2' + toObject() { + if( !this._data) return + const data = {}; + for ( let k of Object.keys(this._data) ) { + const v = this._data[k] + if ( v instanceof Object ) { + data[k] = v.toObject ? v.toObject() : deepClone(v); + } + else data[k] = v; } + return data; + } + + async toMessage (optionnalChatData = {}) { //Map eec card type if not registered already // this.registerEECClass() //Publish by current user by default unless options.GMchatCard - const html = await renderTemplate(this.template, this) + const html = await renderTemplate(this.template, this.getData()) const htmlCardElement = $(html)[0] if (this.options.attachObject) htmlCardElement.dataset.object = escape(this.objectDataString) htmlCardElement.dataset.eccClass = this.constructor.name - htmlCardElement.classList.add(...this.cssClasses) + htmlCardElement.classList.add(...this.options.classes) const chatData = foundry.utils.mergeObject( { @@ -152,13 +177,13 @@ export class EnhancedChatCard { if (!this.messageId) { this.toMessage() } else { - const html = await renderTemplate(this.template, this) + const html = await renderTemplate(this.template, this.getData()) const htmlCardElement = $.parseHTML(html)[0] // Attach the sanCheckCard object to the message. htmlCardElement.dataset.object = escape(this.objectDataString) htmlCardElement.dataset.eccClass = this.constructor.name - htmlCardElement.classList.add(...this.cssClasses) + htmlCardElement.classList.add(...this.options.classes) // Update the message. game.enhancedChatCardsLib.socket.executeAsGM( 'updateMessage', this.messageId, htmlCardElement.outerHTML) @@ -173,11 +198,11 @@ export class EnhancedChatCard { } activateListeners (html) { - html.on( - 'click', - `.${ECC_CLASS} .ecc-radio-switch`, - this._onToggle.bind(this) - ) + // html.on( + // 'click', + // `.${ECC_CLASS} .ecc-radio-switch`, + // this._onToggle.bind(this) + // ) html.on("change", "input,select,textarea", this._onSubmit.bind(this)); html.on('click', `.${ECC_CLASS} .ecc-switch`, this._onToggle.bind(this)) html.on('click', `.${ECC_CLASS} .submit`, this._onSubmit.bind(this)) @@ -187,15 +212,31 @@ export class EnhancedChatCard { html.find('[data-eec-visibility]').each(( i ,el) => this.setVisibility(el)) html.find(`.${ECC_CLASS} .ecc-switch`).each( (i, el) => this.setState(el)) + html.find(`.${ECC_CLASS} input[type="radio"]`).each( (i, el) => this.setRadioState(el)) + // html.find(`.${ECC_CLASS} .ecc-radio-switch`).each( (i, el) => this.setState(el)) + } setState( element){ - if( !element.dataset.flag) return - element.classList.add( this[element.dataset.flag]?STATE.ON:STATE.OFF) + if( !element || !element.dataset.flag) return + element.classList.add( this.flags[element.dataset.flag]?STATE.ON:STATE.OFF) + } + + setRadioState( element){ + if( !element || !element.name) return + const splited = element.name.split('.') + if( 'data' != splited[0].toLowerCase() ) return + if( this._data && undefined != this._data[splited[1]]){ + if( this._data[splited[1]] == element.value){ + element.checked = true + } + } + } setVisibility( element){ if( !element.dataset.eecVisibility) return + const perm = element.dataset.eecVisibility.split('|') if( !this.hasPerm(element.dataset.eecVisibility)) element.style.display = 'none' } @@ -211,25 +252,18 @@ export class EnhancedChatCard { const htmlMessageElement = html[0] const htmlCardElement = htmlMessageElement.querySelector(`.${ECC_CLASS}`) if (!htmlCardElement) return - if (!htmlCardElement.dataset.eccClass) return - const cardClass = game.enhancedChatCardsLib.types.get( - htmlCardElement.dataset.eccClass - ) - if (!cardClass) { - console.error( - `Unknown chat card type: ${htmlCardElement.dataset.eccClass}` - ) - return - } const card = await EnhancedChatCard.fromHTMLCardElement(htmlCardElement) - const typedCard = Object.assign(new cardClass(), card) - typedCard.assignObject() - typedCard.activateListeners(html) + card.assignObject() + card.activateListeners(html) + } + + get flags(){ + return this._data.flags } /** - * Override to reassign object type + * Override to reassign object from the data structure. * @returns */ assignObject () {} @@ -273,9 +307,9 @@ export class EnhancedChatCard { const form = forms[i] const fd = new FormDataExtended(form) let data = fd.toObject() - data = diffObject(this, expandObject(data)) - for (const [key, value] of Object.entries(data)) { - this[key] = value + data = foundry.utils.diffObject(this._data, foundry.utils.expandObject(data)) + for (const [key, value] of Object.entries(data.data)) { + this._data[key] = value updates = true } } @@ -312,12 +346,12 @@ export class EnhancedChatCard { } } - get objectData () { - return JSON.parse(this.objectDataString) - } + // get objectData () { + // return JSON.parse(this.objectDataString) + // } get objectDataString () { - return JSON.stringify(this, (key, value) => { + return JSON.stringify(this._data, (key, value) => { if (value === null) return undefined if (this.options.exclude?.includes(key)) return undefined if (key.startsWith(this.options.excludeStartWith)) return undefined @@ -351,33 +385,45 @@ export class EnhancedChatCard { return card } - static async fromHTMLCardElement (card) { - const cardData = JSON.parse(unescape(card.dataset.object)) - if (!cardData.messageId) { - const message = card.closest('.message') - cardData.messageId = message?.dataset?.messageId - } - return await this.fromData(cardData) + static async fromHTMLCardElement (htmmlCard) { + if (!htmmlCard) return + if (!htmmlCard.dataset.eccClass) return + const cardData = JSON.parse(unescape(htmmlCard.dataset.object)) + const message = htmmlCard.closest('.message') + const messageId = message?.dataset?.messageId + + return await this.fromData(cardData, htmmlCard.dataset.eccClass, messageId) + } - static async fromData (data) { - const card = Object.assign(new this(), data) - await card.assignObject() + static async fromData (data, cardClassName, messageId = null) { + const cardClass = game.enhancedChatCardsLib.types.get( cardClassName) + + if (!cardClass) { + console.error( + `Unknown chat card type: ${htmlCardElement.dataset.eccClass}` + ) + return + } + + const card = new cardClass(data) + if( messageId) card.messageId = messageId + await card.assignObject() return card } setFlag (flagName) { if (!flagName && !($.type(flagName) === 'string')) return - this[flagName] = true + this._data.flags[flagName] = true } unsetFlag (flagName) { if (!flagName && !($.type(flagName) === 'string')) return - this[flagName] = false + this._data.flags[flagName] = false } toggleFlag (flagName) { - this[flagName] = !this[flagName] + this.flags[flagName] = !this.flags[flagName] } async _onToggle (event) { @@ -398,11 +444,11 @@ export class EnhancedChatCard { } const flag = target.dataset.flag if (!flag) return - const toggle = target.closest('.ic-radio') + const toggle = target.closest('.ecc-radio') if (!toggle) { this.toggleFlag(flag) } else { - const buttons = toggle.querySelectorAll('.ic-radio-switch') + const buttons = toggle.querySelectorAll('.ecc-switch') for (const b of buttons) { this.unsetFlag(b.dataset.flag) } diff --git a/templates/chat/cards/test.html b/templates/chat/cards/test.html index d2eea5e6..dbb2e486 100644 --- a/templates/chat/cards/test.html +++ b/templates/chat/cards/test.html @@ -1,21 +1,40 @@
                                                  - - + - + {{#select data.mySelect2}} {{/select}} +
                                                  + + + + + + +
                                                  + +
                                                  + {{localize 'CoC7.AdvantageAttacker'}} + {{localize 'CoC7.AdvantageDefender'}} +
                                                  + Pouet pouet - {{localize "CoC7.Critical"}} - {{#if critical}} + {{localize "CoC7.Critical"}} + {{#if flags.critical}} CRITICAL IS ON {{/if}}
                                                  From 025b6f07bf1a081c0816a1a891bc1cbdf417987d Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:49:55 +0100 Subject: [PATCH 253/726] Send inventory book id to spell --- module/items/book/data.js | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/module/items/book/data.js b/module/items/book/data.js index 7075662b..f3e5e7a2 100644 --- a/module/items/book/data.js +++ b/module/items/book/data.js @@ -1,4 +1,4 @@ -/* global ChatMessage, duplicate, foundry, game, renderTemplate, Roll, ui */ +/* global ChatMessage, duplicate, game, renderTemplate, Roll, ui */ import { SanCheckCard } from '../../chat/cards/san-check.js' import { CoC7Check } from '../../check.js' @@ -35,14 +35,11 @@ export class CoC7Book extends CoC7Item { * @returns {Promise} update to Item document */ async addSpells (spells) { - console.log(spells) const collection = this.data.data.spells ? duplicate(this.data.data.spells) : [] for (const spell of spells) { - const { _source, _id, ...data } = spell - data._id = foundry.utils.randomID(16) - collection.push(data) + collection.push(spell) } return await this.update({ 'data.spells': collection }) } @@ -50,21 +47,10 @@ export class CoC7Book extends CoC7Item { async spellDetail (index) { const data = this.data.data.spells[index] const parent = this.actor ? this.actor : null - const spell = new CoC7Spell(data, { parent }) - await spell.update({ 'data.flags.book': this.id, 'data.flags.index': index }) + const spell = new CoC7Spell(data, { parent, bookId: this.id }) return await spell.sheet.render(true) } - async updateSpell (index, data) { - console.log(data) - const collection = this.data.data.spells - ? duplicate(this.data.data.spells) - : [] - collection[index] = data - await this.update({ 'data.spells': collection }) - return this.sheet.render(true) - } - /** * Handles all the logic involving the attempt of initial reading * @returns {Promise} @see listen @see grantInitialReading From 552e5db46bee020f3cb25e9cd6773ecc16179a04 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:51:50 +0100 Subject: [PATCH 254/726] When updating check if was from and actor and book If the spell is from an Actor and Book updateEmbeddedDocuments otherwise do a normal update --- module/items/spell/data.js | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/module/items/spell/data.js b/module/items/spell/data.js index 330c8449..a2e4d2b2 100644 --- a/module/items/spell/data.js +++ b/module/items/spell/data.js @@ -10,15 +10,7 @@ export class CoC7Spell extends CoC7Item { data.img = 'systems/CoC7/assets/icons/pentagram-rose.svg' } super(data, context) - } - - _onUpdate (changed, options, usedId) { - super._onUpdate(changed, options, usedId) - const book = this.data.data.flags?.book - const index = this.data.data.flags?.index - if (book) { - return game.items.get(book).updateSpell(index, this.data) - } + this.context = context } async cast () { @@ -109,4 +101,23 @@ export class CoC7Spell extends CoC7Item { sanityCheck.updateChatCard() } } + + update (data, context) { + if ( + typeof this.context.parent !== 'undefined' && + typeof this.context.bookId !== 'undefined' + ) { + const book = this.context.parent.items + .get(this.context.bookId) + .toObject() + for (let i = 0, im = book.data.spells.length; i < im; i++) { + if (book.data.spells[i]._id === this.id) { + book.data.spells[i] = mergeObject(book.data.spells[i], data) + } + } + this.context.parent.updateEmbeddedDocuments('Item', [book]) + } else { + super.update(data, context) + } + } } From fe7fed61f183237ae3dbfa906a27725eecb0d914 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 19 Oct 2021 13:32:17 +0100 Subject: [PATCH 255/726] Code formatting --- module/items/spell/data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/items/spell/data.js b/module/items/spell/data.js index a2e4d2b2..8ee5db84 100644 --- a/module/items/spell/data.js +++ b/module/items/spell/data.js @@ -1,4 +1,4 @@ -/* global ChatMessage, game, Roll, renderTemplate, ui */ +/* global ChatMessage, game, mergeObject, Roll, renderTemplate, ui */ import { CoC7Utilities } from '../../utilities.js' import { CoC7Item } from '../item.js' From 7bbb05b1d6f358d02ad2816031625e32dc0c8109 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 19 Oct 2021 23:35:21 +0100 Subject: [PATCH 256/726] Allow update from book --- module/items/spell/data.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/module/items/spell/data.js b/module/items/spell/data.js index 8ee5db84..c9a725b3 100644 --- a/module/items/spell/data.js +++ b/module/items/spell/data.js @@ -107,15 +107,28 @@ export class CoC7Spell extends CoC7Item { typeof this.context.parent !== 'undefined' && typeof this.context.bookId !== 'undefined' ) { - const book = this.context.parent.items - .get(this.context.bookId) - .toObject() + let item + let book + if (this.context.parent === null) { + item = game.items.get(this.context.bookId) + book = item.toObject() + } else { + book = this.context.parent.items + .get(this.context.bookId) + .toObject() + } for (let i = 0, im = book.data.spells.length; i < im; i++) { if (book.data.spells[i]._id === this.id) { book.data.spells[i] = mergeObject(book.data.spells[i], data) } } - this.context.parent.updateEmbeddedDocuments('Item', [book]) + if (this.context.parent === null) { + item.update({ + 'data.spells': book.data.spells + }) + } else { + this.context.parent.updateEmbeddedDocuments('Item', [book]) + } } else { super.update(data, context) } From 67fc738e93693e9e52dcc33105350a9a0dd1f863 Mon Sep 17 00:00:00 2001 From: castanho Date: Tue, 19 Oct 2021 19:59:46 -0300 Subject: [PATCH 257/726] Add edit listener to book sheet --- module/items/book/sheet.js | 1 + templates/items/book/main.html | 1 + 2 files changed, 2 insertions(+) diff --git a/module/items/book/sheet.js b/module/items/book/sheet.js index a6d1caae..20607ff4 100644 --- a/module/items/book/sheet.js +++ b/module/items/book/sheet.js @@ -54,6 +54,7 @@ export class CoC7BookSheet extends ItemSheet { this.item.attemptInitialReading() }) html.find('.delete-spell').click(event => this._onDelete(event)) + html.find('.edit-spell').click(event => this._onSpellDetail(event)) html.find('.spell-name').click(event => this._onSpellDetail(event)) html.find('.teach-spell').click(event => { const id = $(event.currentTarget) diff --git a/templates/items/book/main.html b/templates/items/book/main.html index 7e047d4e..5f76d3b8 100644 --- a/templates/items/book/main.html +++ b/templates/items/book/main.html @@ -170,6 +170,7 @@
                                                  +
                                                  From 3ab03d179dcf796fd13100c9e7ea7fd662996112 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 19 Oct 2021 23:03:02 +0000 Subject: [PATCH 258/726] Updated translations list --- .github/TRANSLATIONS.md | 59 ++--------------------------------------- 1 file changed, 2 insertions(+), 57 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index e3f7dd27..c523f50c 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -1,62 +1,7 @@ # Translating. -Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! +Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **es**, **fr**, **ja**, **pt-BR**, **sv**, **zh-TW** +The following translations are currently up to date **es**, **fr**, **ja**, **pl**, **pt-BR**, **sv**, **zh-TW** The following translations have been abandoned **cn**, **cs**, **de**, [are you able to help?](./ABANDONED.md) - -|Key|pl| -|:---|:---:| -|**Remaining**:|**17**| -|[CoC7.DriveAutoSkillName](#coc7driveautoskillname)|❌| -|[CoC7.ImportActorItemsItem](#coc7importactoritemsitem)|❌| -|[CoC7.ImportActorItemsItemWorldModuleSystem](#coc7importactoritemsitemworldmodulesystem)|❌| -|[CoC7.ImportActorItemsNone](#coc7importactoritemsnone)|❌| -|[CoC7.ImportActorItemsWorldModuleItemSystem](#coc7importactoritemsworldmoduleitemsystem)|❌| -|[CoC7.ImportSkillItemLocations](#coc7importskillitemlocations)|❌| -|[CoC7.ImportedCharactersFolder](#coc7importedcharactersfolder)|❌| -|[CoC7.InitiatorMissed](#coc7initiatormissed)|❌| -|[CoC7.NoResponse](#coc7noresponse)|❌| -|[CoC7.TextFieldInvalidCharacters](#coc7textfieldinvalidcharacters)|❌| -|[SETTINGS.ArtPauseImage](#settingsartpauseimage)|❌| -|[SETTINGS.ArtPauseImageHint](#settingsartpauseimagehint)|❌| -|[SETTINGS.ArtPauseText](#settingsartpausetext)|❌| -|[SETTINGS.ArtPauseTextHint](#settingsartpausetexthint)|❌| -|[SETTINGS.OverrideGameArtwork](#settingsoverridegameartwork)|❌| -|[SETTINGS.OverrideGameArtworkHint](#settingsoverridegameartworkhint)|❌| -|[SETTINGS.TitleGameArtwork](#settingstitlegameartwork)|❌| -##### CoC7.DriveAutoSkillName -``` "CoC7.DriveAutoSkillName": "Drive Auto",``` -##### CoC7.ImportActorItemsItem -``` "CoC7.ImportActorItemsItem": "Items",``` -##### CoC7.ImportActorItemsItemWorldModuleSystem -``` "CoC7.ImportActorItemsItemWorldModuleSystem": "Items / World / Modules / System",``` -##### CoC7.ImportActorItemsNone -``` "CoC7.ImportActorItemsNone": "None",``` -##### CoC7.ImportActorItemsWorldModuleItemSystem -``` "CoC7.ImportActorItemsWorldModuleItemSystem": "World / Modules / Items / System",``` -##### CoC7.ImportSkillItemLocations -``` "CoC7.ImportSkillItemLocations": "Look for skills/spells/weapons in",``` -##### CoC7.ImportedCharactersFolder -``` "CoC7.ImportedCharactersFolder": "Imported characters",``` -##### CoC7.InitiatorMissed -``` "CoC7.InitiatorMissed": "{name} missed.",``` -##### CoC7.NoResponse -``` "CoC7.NoResponse": "No Response",``` -##### CoC7.TextFieldInvalidCharacters -``` "CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed",``` -##### SETTINGS.ArtPauseImage -``` "SETTINGS.ArtPauseImage": "Pause image",``` -##### SETTINGS.ArtPauseImageHint -``` "SETTINGS.ArtPauseImageHint": ". Type 'null' to remove image",``` -##### SETTINGS.ArtPauseText -``` "SETTINGS.ArtPauseText": "Pause text",``` -##### SETTINGS.ArtPauseTextHint -``` "SETTINGS.ArtPauseTextHint": "Leave blank for default",``` -##### SETTINGS.OverrideGameArtwork -``` "SETTINGS.OverrideGameArtwork": "Override game Artwork",``` -##### SETTINGS.OverrideGameArtworkHint -``` "SETTINGS.OverrideGameArtworkHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default",``` -##### SETTINGS.TitleGameArtwork -``` "SETTINGS.TitleGameArtwork": "Game Artwork Settings",``` From 4e9170d5353bfc050b5d77920cd3d7cb13ea9ab2 Mon Sep 17 00:00:00 2001 From: castanho Date: Tue, 19 Oct 2021 20:12:52 -0300 Subject: [PATCH 259/726] Prepare system for 0.7.0 version --- .github/CHANGELOG.md | 9 ++++++--- package.json | 2 +- system.json | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 9cc0d6cc..42216861 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,17 +1,19 @@ -## Changes coming in a future release: +## Version 0.7.0: When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. - Add options to change pause icon and text on settings. - Add Pulp Luck recovery rules. -- Add several tooltips to the character sheet (Skill, DB, Sanity, etc). +- Add several tooltips to the Character sheet (Skill, DB, Sanity, etc). - Initial refactor of Spell system. - - Cast Spell prompts its description and costs results on chat; + - Cast spell prompts its description and costs results on chat; - Now Spell costs are discounted when casting; + - Now you can open Spell sheet from Book Spell list and edit the Spell information within the Book without affecting the original one. - Update sheet layout to V2. - Fix "The key ? does not exist in the EmbeddedCollection Collection" dragging an English setup onto a translated Actor. - Fix background integrity on Book sheet. - Fix bug on Archetype Item properties. +- Fix bug on Ranged Combat damage not being rolled when value is number. - Fix bug where GM is speaking instead of NPC on checks - Fix Combined / Opposed Roll using the incorrect image path for wildcard tokens. - Fix DsN 3D dices not rolling sometimes. @@ -23,6 +25,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV and @sn - Now the defender has an option to do nothing in combat flow. - Now there is an option to show or not show uncommon skills on Character sheet. - Several improvements on the Actor Importer app; +- Update menu system compatibility for 0.8 and V9 Foundry VTT. - Update updater to check module compendiums for Actor and Item when modules version module numbers are new or changed. - Update to French localization, thanks to @vonv. - Update to Japanese localization, thanks to `@Asami#8627`. diff --git a/package.json b/package.json index d5c611ac..fd3b8ede 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fvtt-coc7", - "version": "0.6.9", + "version": "0.7.0", "description": "An unofficial implementation of Call of Cthulhu 7th Edition system for Foundry VTT.", "scripts": { "build": "webpack --mode production", diff --git a/system.json b/system.json index 8e4bcfc6..a74ba470 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "name": "CoC7", "title": "Call of Cthulhu 7th Edition (Unofficial)", "description": "An unofficial implementation of the Call of Cthulhu 7th Edition game system for Foundry Virtual Tabletop.", - "version": "0.6.9", + "version": "0.7.0", "author": "Miskatonic Investigative Society", "minimumCoreVersion": "0.8.6", "compatibleCoreVersion": "0.8.9", From fa01b8b8fa80067b24e11d8d4f0f8902368a8032 Mon Sep 17 00:00:00 2001 From: castanho Date: Tue, 19 Oct 2021 20:14:47 -0300 Subject: [PATCH 260/726] Fix typo on changelog --- .github/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 42216861..ed535ed7 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -6,7 +6,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV and @sn - Add Pulp Luck recovery rules. - Add several tooltips to the Character sheet (Skill, DB, Sanity, etc). - Initial refactor of Spell system. - - Cast spell prompts its description and costs results on chat; + - Cast Spell prompts its description and costs results on chat; - Now Spell costs are discounted when casting; - Now you can open Spell sheet from Book Spell list and edit the Spell information within the Book without affecting the original one. - Update sheet layout to V2. From 37a01ce95f7de5870cc013dd7e8ee8973af48799 Mon Sep 17 00:00:00 2001 From: castanho Date: Wed, 20 Oct 2021 01:20:43 -0300 Subject: [PATCH 261/726] Fix GM notes on spell sheet Resolve #902 --- templates/items/spell/main.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/items/spell/main.html b/templates/items/spell/main.html index 36086f92..cfb0d622 100644 --- a/templates/items/spell/main.html +++ b/templates/items/spell/main.html @@ -67,8 +67,8 @@
                                                  {{editor - content=data.notes - target="data.notes" + content=data.description.keeper + target="data.description.keeper" button=true owner=owner editable=editable From 6a7849b942c8d775fe16b39157c33825a0ab7591 Mon Sep 17 00:00:00 2001 From: castanho Date: Wed, 20 Oct 2021 01:24:50 -0300 Subject: [PATCH 262/726] Remove deprecated sheet template --- templates/items/spell.html | 119 ------------------------------------- 1 file changed, 119 deletions(-) delete mode 100644 templates/items/spell.html diff --git a/templates/items/spell.html b/templates/items/spell.html deleted file mode 100644 index cfd2c114..00000000 --- a/templates/items/spell.html +++ /dev/null @@ -1,119 +0,0 @@ -
                                                  -
                                                  -
                                                  -

                                                  - -

                                                  - -
                                                    -
                                                  • - -
                                                  • -
                                                  • - -
                                                  • -
                                                  • - {{ castingCost }} -
                                                  • -
                                                  - -
                                                  - - -
                                                  - {{!-- Item Sheet Navigation --}} - - - - {{!-- Item Sheet Body --}} -
                                                  - - {{!-- Description Tab --}} -
                                                  - -
                                                  -
                                                    - {{#each itemProperties}} -
                                                  1. {{this}}
                                                  2. - {{/each}} -
                                                  -
                                                  - - {{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}} -
                                                  - - {{!-- Details Tab --}} -
                                                  - -

                                                  {{ localize "CoC7.Details" }}

                                                  - {{!-- Spell Type --}} -
                                                  - -
                                                  - - - - - - - - -
                                                  -
                                                  - -

                                                  {{ localize "CoC7.SpellCastingCost" }}

                                                  - -
                                                  - - -
                                                  - -
                                                  - - -
                                                  - -
                                                  - - -
                                                  - -
                                                  - - -
                                                  - -

                                                  {{ localize "CoC7.Notes"}}

                                                  - {{editor content=data.description.notes target="data.description.notes" button=true owner=owner editable=editable}} -
                                                  - {{#if isKeeper}} -
                                                  - {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} -
                                                  - {{/if}} -
                                                  - -
                                                  From 917283158522b6b46d1985cb34e87c4459f7dfe8 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 20 Oct 2021 07:26:54 +0200 Subject: [PATCH 263/726] Setting permissions --- module/actors/sheets/base.js | 4 +- module/chat.js | 1 + module/common/chatcardlib/src/chatcardlib.js | 212 +++++++++++++------ templates/chat/cards/test.html | 5 +- 4 files changed, 151 insertions(+), 71 deletions(-) diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 3aee4a99..6fe716d5 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -882,7 +882,7 @@ export class CoC7ActorSheet extends ActorSheet { .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) html.find('.test-trigger').click(async event => { - const test = new testCard() + const test = new testCard({}, { speaker: ChatMessage.getSpeaker() }) test.toMessage() // await OpposedCheckCard.dispatch({ // type: OpposedCheckCard.defaultConfig.type, @@ -900,7 +900,7 @@ export class CoC7ActorSheet extends ActorSheet { // action: 'new', // roll: { // characteristic: 'con' - // actor: this.actor.actorKey + // actor: this.actor.actorKey // } // }) // const val = getProperty( this.actor, 'data.data.attribs.san.value'); diff --git a/module/chat.js b/module/chat.js index b845d200..0a32672c 100644 --- a/module/chat.js +++ b/module/chat.js @@ -697,6 +697,7 @@ export class CoC7Chat { const button = event.currentTarget const card = button.closest('.chat-card') + if (!card) return const originMessage = button.closest('.message') // const messageId = originMessage.dataset.messageId; const action = button.dataset.action diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 00bf4ff2..27c22f1a 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -1,10 +1,11 @@ - const ECC_CLASS = 'enhanced-chat-card' const PERMISSION_TYPE = { - GM: 'gm', + GM: 'gm', SPEAKER: 'speaker', - EVERYONE: 'all' + USER: 'user', + EVERYONE: 'all', + BLACKLIST: 'blacklist' } const STATE = { @@ -12,16 +13,15 @@ const STATE = { OFF: 'switched-off' } - export function initEEC (...cardclass) { // Hooks.once('init', function () { // }) Hooks.once('socketlib.ready', function () { - EnhancedChatCardLib.register( cardclass) + EnhancedChatCardLib.register(cardclass) EnhancedChatCardLib.socket = socketlib.registerSystem(game.system.id) //Socket is attached to current system EnhancedChatCardLib.socket.register('updateMessage', updateMessage) - EnhancedChatCardLib.socket.register('advise',advise) + EnhancedChatCardLib.socket.register('advise', advise) // EnhancedChatCardLib.socket.register('gmtradeitemto', gmtradeitemto) }) @@ -30,15 +30,15 @@ export function initEEC (...cardclass) { ) } -async function updateMessage( messageId, newContent){ +async function updateMessage (messageId, newContent) { const chatMessage = game.messages.get(messageId) - const msg = await chatMessage.update({ + const msg = await chatMessage.update({ content: newContent }) } -async function advise( ){ +async function advise () { return } @@ -56,12 +56,12 @@ class EnhancedChatCardLib { } static get socket () { - if( !game.enhancedChatCardsLib) { - ui.notifications.error( 'EEC not Initialized') + if (!game.enhancedChatCardsLib) { + ui.notifications.error('EEC not Initialized') return undefined } - if( !game.enhancedChatCardsLib.socket){ - ui.notifications.error( 'EEC no socket') + if (!game.enhancedChatCardsLib.socket) { + ui.notifications.error('EEC no socket') return undefined } return game.enhancedChatCardsLib.socket @@ -78,7 +78,7 @@ class EnhancedChatCardLib { if (!EnhancedChatCardLib.types.get(cardConstructor.name)) { EnhancedChatCardLib.types.set(cardConstructor.name, cardConstructor) } - }); + }) } // static gm_onToggle (data){ @@ -91,14 +91,14 @@ export class EnhancedChatCard { // EnhancedChatCardLib.register(cardConstructor) // } - constructor (data={},options = {}) { - this.initialize( data) + constructor (data = {}, options = {}) { + this.initialize(data) this._options = options } - initialize( data){ + initialize (data) { this._data = data - if( !this._data.flags) this._data.flags = {} + if (!this._data.flags) this._data.flags = {} } get options () { @@ -110,11 +110,11 @@ export class EnhancedChatCard { } get cssClasses () { - return this.options.classes?.join( ' ') + return this.options.classes?.join(' ') } - getData(){ - return{ + getData () { + return { card: this, flags: this.flags, data: this.toObject(), @@ -127,21 +127,19 @@ export class EnhancedChatCard { } } - toObject() { - if( !this._data) return - const data = {}; - for ( let k of Object.keys(this._data) ) { + toObject () { + if (!this._data) return + const data = {} + for (let k of Object.keys(this._data)) { const v = this._data[k] - if ( v instanceof Object ) { - data[k] = v.toObject ? v.toObject() : deepClone(v); - } - else data[k] = v; + if (v instanceof Object) { + data[k] = v.toObject ? v.toObject() : deepClone(v) + } else data[k] = v } - return data; + return data } async toMessage (optionnalChatData = {}) { - //Map eec card type if not registered already // this.registerEECClass() @@ -153,9 +151,14 @@ export class EnhancedChatCard { htmlCardElement.dataset.eccClass = this.constructor.name htmlCardElement.classList.add(...this.options.classes) + const speaker = this.options.speaker + ? ChatMessage.getSpeaker(this.options.speaker) + : {} + const chatData = foundry.utils.mergeObject( { user: game.user.id, + speaker: speaker, flavor: game.i18n.localize(this.options.title), content: htmlCardElement.outerHTML }, @@ -186,66 +189,121 @@ export class EnhancedChatCard { htmlCardElement.classList.add(...this.options.classes) // Update the message. - game.enhancedChatCardsLib.socket.executeAsGM( 'updateMessage', this.messageId, htmlCardElement.outerHTML) + game.enhancedChatCardsLib.socket.executeAsGM( + 'updateMessage', + this.messageId, + htmlCardElement.outerHTML + ) // const chatMessage = game.messages.get(this.messageId) // const msg = await chatMessage.update({ //Dispatch request by socket - // content: htmlCardElement.outerHTML //Dispatch request by socket + // content: htmlCardElement.outerHTML //Dispatch request by socket // }) //Dispatch request by socket // await ui.chat.updateMessage(msg, false) //Dispatch request by socket // return msg //Dispatch request by socket } } - activateListeners (html) { + async activateListeners (html) { // html.on( // 'click', // `.${ECC_CLASS} .ecc-radio-switch`, // this._onToggle.bind(this) // ) - html.on("change", "input,select,textarea", this._onSubmit.bind(this)); + html.on('change', 'input,select,textarea', this._onChange.bind(this)) html.on('click', `.${ECC_CLASS} .ecc-switch`, this._onToggle.bind(this)) html.on('click', `.${ECC_CLASS} .submit`, this._onSubmit.bind(this)) - html.on('focusout', `.${ECC_CLASS} input`, this._onSubmit.bind(this)) + html.on('focusout', `.${ECC_CLASS} input`, this._onChange.bind(this)) html.on('click', `.${ECC_CLASS} button`, this._onButton.bind(this)) html.on('keydown', `.${ECC_CLASS} form`, this._onKey.bind(this)) - html.find('[data-eec-visibility]').each(( i ,el) => this.setVisibility(el)) - html.find(`.${ECC_CLASS} .ecc-switch`).each( (i, el) => this.setState(el)) - html.find(`.${ECC_CLASS} input[type="radio"]`).each( (i, el) => this.setRadioState(el)) + // const visi = html.find('[data-eec-visibility]') + // for (let i = 0; i < visi.length; i++) { + // const el = visi[i]; + // await this.setVisibility(el) + + // } + + html + .find('[data-eec-visibility]') + .each(async (i, el) => await this.setVisibility(el)) + html.find(`.${ECC_CLASS} .ecc-switch`).each((i, el) => this.setState(el)) + html + .find(`.${ECC_CLASS} input[type="radio"]`) + .each((i, el) => this.setRadioState(el)) // html.find(`.${ECC_CLASS} .ecc-radio-switch`).each( (i, el) => this.setState(el)) - } - setState( element){ - if( !element || !element.dataset.flag) return - element.classList.add( this.flags[element.dataset.flag]?STATE.ON:STATE.OFF) + setState (element) { + if (!element || !element.dataset.flag) return + element.classList.add( + this.flags[element.dataset.flag] ? STATE.ON : STATE.OFF + ) } - setRadioState( element){ - if( !element || !element.name) return + setRadioState (element) { + if (!element || !element.name) return const splited = element.name.split('.') - if( 'data' != splited[0].toLowerCase() ) return - if( this._data && undefined != this._data[splited[1]]){ - if( this._data[splited[1]] == element.value){ - element.checked = true + if ('data' != splited[0].toLowerCase()) return + if (this._data && undefined != this._data[splited[1]]) { + if (this._data[splited[1]] == element.value) { + element.checked = true + } } } - } - - setVisibility( element){ - if( !element.dataset.eecVisibility) return + async setVisibility (element) { + if (!element.dataset.eecVisibility) return const perm = element.dataset.eecVisibility.split('|') - if( !this.hasPerm(element.dataset.eecVisibility)) element.style.display = 'none' + const canYouSee = await this.hasPerm(element.dataset.eecVisibility, true) + if (!canYouSee) + element.style.display = 'none' } - hasPerm( restrictedTo){ - if( !restrictedTo.length) return true - if( game.user.isGM){ - if(restrictedTo.includes(PERMISSION_TYPE.XGM)) return false - return true + /** + * Check if the current user as permission against a string of allowed persons. + * If the string is empty permission are all granted + * @param {string} restrictedTo A string containing the set of player allowed. Value can be owner, gm, players, uuid separated by space + * @param {boolean} vision if true gm will be considered for permissions. false = gm has always right. true GM permission will be checked + * @returns + */ + async hasPerm (restrictedTo, vision = false) { + if (!restrictedTo.length) return true + let permissionsArray = restrictedTo.split(' ') + const whiteList = !permissionsArray.includes(PERMISSION_TYPE.BLACKLIST) + if( !whiteList) permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.BLACKLIST) + if (game.user.isGM) { + if (!vision) return true //GM can always modify everything ! Nah + if (permissionsArray.includes(PERMISSION_TYPE.GM)) + return true && whiteList + return false || !whiteList //If pass the filter return false unless it's a blacklist + } else { + permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.GM) + } + + if (permissionsArray.includes(PERMISSION_TYPE.USER)) { + if (this.message.isAuthor) return true && whiteList //isAuthor vs user.isOwner ? + permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.USER) + } + + if (permissionsArray.includes(PERMISSION_TYPE.SPEAKER)) { + const speaker = this.message.data.speaker + if (speaker.token && speaker.scene) { + const actor = await fromUuid(`Scene.${speaker.scene}.Token.${speaker.token}`) + if (actor) { + if (actor.isOwner) return true && whiteList + } + } else if (speaker.actor) { + const actor = game.actors.get(speaker.actor) + if (actor) { + if (actor.isOwner) return true && whiteList + } + } else if (speaker.user) { + if (game.user.id == speaker.user) return true && whiteList + } + permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.SPEAKER) } + return false || !whiteList //If pass the filter return false unless it's a blacklist } static async bindListeners (html) { @@ -258,7 +316,7 @@ export class EnhancedChatCard { card.activateListeners(html) } - get flags(){ + get flags () { return this._data.flags } @@ -277,6 +335,14 @@ export class EnhancedChatCard { const button = event.currentTarget // button.style.display = 'none' //Avoid multiple push const action = button.dataset.action + if (!action) { + console.warn(`no action associated with this button`) + return + } + if (!this[action]) { + console.warn(`no ${action} action found for this card`) + return + } if (this[action]) this[action]({ event: event, update: true }) } @@ -290,6 +356,12 @@ export class EnhancedChatCard { return event.key !== 'Enter' } + _onChange (event) { + if (this.options.submitOnChange) { + return this._onSubmit(event) + } + } + _onSubmit (event) { event.preventDefault() @@ -307,7 +379,10 @@ export class EnhancedChatCard { const form = forms[i] const fd = new FormDataExtended(form) let data = fd.toObject() - data = foundry.utils.diffObject(this._data, foundry.utils.expandObject(data)) + data = foundry.utils.diffObject( + this._data, + foundry.utils.expandObject(data) + ) for (const [key, value] of Object.entries(data.data)) { this._data[key] = value updates = true @@ -393,11 +468,10 @@ export class EnhancedChatCard { const messageId = message?.dataset?.messageId return await this.fromData(cardData, htmmlCard.dataset.eccClass, messageId) - } static async fromData (data, cardClassName, messageId = null) { - const cardClass = game.enhancedChatCardsLib.types.get( cardClassName) + const cardClass = game.enhancedChatCardsLib.types.get(cardClassName) if (!cardClass) { console.error( @@ -406,9 +480,9 @@ export class EnhancedChatCard { return } - const card = new cardClass(data) - if( messageId) card.messageId = messageId - await card.assignObject() + const card = new cardClass(data) + if (messageId) card.messageId = messageId + await card.assignObject() return card } @@ -455,7 +529,9 @@ export class EnhancedChatCard { this.setFlag(flag) } const card = target.closest(`.${ECC_CLASS}`) - if (card) this._update(card) - this.updateChatCard() + if (this.options.submitOnChange) { + if (card) this._update(card) + this.updateChatCard() + } } } diff --git a/templates/chat/cards/test.html b/templates/chat/cards/test.html index dbb2e486..1df9ccd4 100644 --- a/templates/chat/cards/test.html +++ b/templates/chat/cards/test.html @@ -33,10 +33,13 @@
                                                  Pouet pouet - {{localize "CoC7.Critical"}} + {{localize "CoC7.Critical"}} {{#if flags.critical}} CRITICAL IS ON {{/if}} +
                                                  + +
              {{!-- {{selectOptions sizes selected=swarm blank="" localize=true}} --}} From 2efa15c27f839ebe3d992e8eb6c17f3513ee87b8 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 20 Oct 2021 19:54:37 +0100 Subject: [PATCH 264/726] Prevent error when updating modules --- module/updater.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/module/updater.js b/module/updater.js index e287fd6e..bdfebcc0 100644 --- a/module/updater.js +++ b/module/updater.js @@ -281,6 +281,11 @@ export class Updater { value: item.data.description, keeper: '' } + } else if (typeof item.data.description === 'undefined') { + updateData['data.description'] = { + value: '', + keeper: '' + } } else if (typeof item.data.description.keeper === 'undefined') { updateData['data.description.keeper'] = '' } From 3aee5e9b6be9dc204b50c4796fe3073cfe44870c Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 20 Oct 2021 22:54:58 +0100 Subject: [PATCH 265/726] Merged any notes accidentally stored in data.notes --- module/updater.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/module/updater.js b/module/updater.js index bdfebcc0..a0818df6 100644 --- a/module/updater.js +++ b/module/updater.js @@ -239,6 +239,7 @@ export class Updater { Updater._migrateItemBookAutomated(item, updateData) Updater._migrateItemKeeperNotes(item, updateData) Updater._migrateItemSpellAutomated(item, updateData) + Updater._migrateItemKeeperNotesMerge(item, updateData) return updateData } @@ -435,6 +436,19 @@ export class Updater { return updateData } + static _migrateItemKeeperNotesMerge (item, updateData) { + if (item.type === 'spell') { + if (typeof item.data.notes !== 'undefined') { + if (typeof item.data.description.keeper !== 'undefined') { + updateData['data.description.keeper'] = item.data.description.keeper + item.data.notes + } else { + updateData['data.description.keeper'] = item.data.notes + } + updateData['data.-=notes'] = null + } + } + } + static _migrateActorArtwork (actor, updateData) { const regEx = new RegExp(/systems\/CoC7\/artwork\/icons\/(.+)/) let image = String(actor.img).match(regEx) From c46e1fa4c6791e12ed2640cfda855bb6af15cfac Mon Sep 17 00:00:00 2001 From: castanho Date: Wed, 20 Oct 2021 19:41:48 -0300 Subject: [PATCH 266/726] Prepare system for 0.7.1 hotfix --- .github/CHANGELOG.md | 8 ++++++++ package.json | 2 +- system.json | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index ed535ed7..460adaf1 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,3 +1,11 @@ +## Version 0.7.1: + +When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. + +- Fix wrong attribute in Keeper Notes on Spell sheet. +- Merge any notes accidentally stored in data.notes on Spell sheet. +- Prevent error when updating related compendiums/modules. + ## Version 0.7.0: When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. diff --git a/package.json b/package.json index 2381dc41..3587ac80 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fvtt-coc7", - "version": "0.7.0", + "version": "0.7.1", "description": "An unofficial implementation of Call of Cthulhu 7th Edition system for Foundry VTT.", "scripts": { "build": "webpack --mode production", diff --git a/system.json b/system.json index a74ba470..02b8b89d 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "name": "CoC7", "title": "Call of Cthulhu 7th Edition (Unofficial)", "description": "An unofficial implementation of the Call of Cthulhu 7th Edition game system for Foundry Virtual Tabletop.", - "version": "0.7.0", + "version": "0.7.1", "author": "Miskatonic Investigative Society", "minimumCoreVersion": "0.8.6", "compatibleCoreVersion": "0.8.9", From c0f256e6c9b6c6edfb46e16239bab8ecf5f2bc1a Mon Sep 17 00:00:00 2001 From: castanho Date: Wed, 20 Oct 2021 19:56:28 -0300 Subject: [PATCH 267/726] Make localization reference as generic Item --- lang/en.json | 2 +- lang/es.json | 2 +- lang/fr.json | 10 +++++----- lang/ja.json | 2 +- lang/pl.json | 2 +- lang/pt-BR.json | 2 +- lang/sv.json | 4 ++-- lang/zh-TW.json | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/lang/en.json b/lang/en.json index 984aac7f..c98b41f4 100644 --- a/lang/en.json +++ b/lang/en.json @@ -557,7 +557,7 @@ "CoC7.MarkedForDevelopment": "Marked for development", "CoC7.Mythos": "Mythos", "CoC7.MythosRating": "Mythos Rating", - "CoC7.NotOwned": "This Book needs to be owned by an Actor to perform this action.", + "CoC7.NotOwned": "This Item needs to be owned by an Actor to perform this action.", "CoC7.Occult": "Occult", "CoC7.Points": "point(s)", "CoC7.Progress": "Progress", diff --git a/lang/es.json b/lang/es.json index 56fdcb49..0507a428 100644 --- a/lang/es.json +++ b/lang/es.json @@ -560,7 +560,7 @@ "CoC7.MarkedForDevelopment": "Marcado para desarrollo", "CoC7.Mythos": "Mitos", "CoC7.MythosRating": "Puntuación de Mitos", - "CoC7.NotOwned": "Este libro requiere permisos de propietario de un actor para realizar esta acción", + "CoC7.NotOwned": "Este objeto requiere permisos de propietario de un actor para realizar esta acción", "CoC7.Occult": "Ciencias ocultas", "CoC7.Points": "punto(s)", "CoC7.Progress": "Progreso", diff --git a/lang/fr.json b/lang/fr.json index d67695e1..0f79da19 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -127,7 +127,7 @@ "CoC7.MagicPointsCost": "Coût en Points de Magie", "CoC7.OtherCosts": "Autres coûts", "CoC7.CastingSpell": "Jette {spell}.", - + "CoC7.CopyToClipboard": "Copier vers le presse-papier", "CoC7.WhisperToSelection": "Murmurer aux tokens sélectionnés", "CoC7.WhisperTo": "Murmurer à", @@ -557,7 +557,7 @@ "CoC7.MarkedForDevelopment": "Marqué pour développement", "CoC7.Mythos": "Mythe", "CoC7.MythosRating": "Évaluation du mythe", - "CoC7.NotOwned": "Cet ouvrage doit être possédé par un Personnage pour réaliser cette action.", + "CoC7.NotOwned": "Cet objet doit être possédé par un Personnage pour réaliser cette action.", "CoC7.Occult": "Occulte", "CoC7.Points": "point(s)", "CoC7.Progress": "En cours", @@ -717,7 +717,7 @@ "CoC7.ImportActorItemsItem": "Objets", "CoC7.ImportActorItemsItemWorldModuleSystem": "Objets / Monde / Modules / Système", "CoC7.ImportActorItemsWorldModuleItemSystem": "Monde / Modules / Objets / Système", - + "CoC7.HowToTranslateTitle": "Comment traduire?", "CoC7.HowToTranslateWarning": "N'installez que des modules dignes de confiance.", "CoC7.HowToTranslateInstallBabele": "Installez/Mettez à jour le module Babele depuis le gestionnaire de modules de Foundry.", @@ -744,7 +744,7 @@ "CoC7.MessageTitleSelectUserToGiveTo": "Donner un objet à un autre personnage", "CoC7.MessageSelectUserToGiveTo": "A qui voulez-vous donner cet objet ?", "CoC7.MessageDistanceCalculationFailure": "Impossible de calculer la distance séparant les tokens, utiliser la fiche du token du personnage SVP.", - + "CoC7.ToolTipSkill": "
              1. Clic gauche Jet avec options
              2. Shift + Clic gauche Jet immédiat à difficulté normale
              1. Clic droit Jet opposé avec options
              2. Shift + Clic droit Jet opposé immédiat
              1. Alt/Option + Clic droit Jet combiné avec options
              ", "CoC7.ToolTipKeeperSkill": "
              1. CTRL + Clic gauche Crée un lien pour un jet
              2. {other}
              ", "CoC7.ToolTipKeeperStandbySkill": "
            20. Clic gauche Demande un jet à {name}
            21. ", @@ -754,7 +754,7 @@ "CoC7.ToolTipSkillFlagToggle": "
              1. Clic Double Bascule le statut de coche
              2. ", "CoC7.ToolTipSkillFlagged": "Coché pour développement", "CoC7.ToolTipSkillUnflagged": "Pas coché pour développement", - + "SETTINGS.TitleRules": "Règles", "SETTINGS.TitleInitiative": "Paramètres d'initiative", "SETTINGS.TitleRoll": "Paramètres de jets de dés", diff --git a/lang/ja.json b/lang/ja.json index e43d880e..4f60d411 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -557,7 +557,7 @@ "CoC7.MarkedForDevelopment": "経験チェック", "CoC7.Mythos": "クトゥルフ神話", "CoC7.MythosRating": "神話レーティング", - "CoC7.NotOwned": "このアクションを実行するには、この本をアクターが所有している必要がある。", + "CoC7.NotOwned": "このアクションを実行するには、このアイテムをアクターが所有している必要がある。", "CoC7.Occult": "オカルト", "CoC7.Points": "点", "CoC7.Progress": "進捗", diff --git a/lang/pl.json b/lang/pl.json index 704e4d10..24995935 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -557,7 +557,7 @@ "CoC7.MarkedForDevelopment": "Oznaczono do rozwoju", "CoC7.Mythos": "Księga Mitów", "CoC7.MythosRating": "Wskaźnik Mitów", - "CoC7.NotOwned": "Tak książka musi być w posiadaniu postaci by wykonać tę akcję.", + "CoC7.NotOwned": "Tak przedmiot musi być w posiadaniu postaci by wykonać tę akcję.", "CoC7.Occult": "Okultystyczna", "CoC7.Points": "punkt/punkty", "CoC7.Progress": "Progres", diff --git a/lang/pt-BR.json b/lang/pt-BR.json index 08ee3100..bcaef976 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -563,7 +563,7 @@ "CoC7.Development": "Desenvolvimento", "CoC7.Specific": "Específico", "CoC7.InitialReadingNeeded": "{actor} precisa realizar uma Leitura Inicial em {book} para poder avançar através do progresso de Estudo Completo.", - "CoC7.NotOwned": "Esse livro precisa ser possuído por um Ator para realizar essa ação.", + "CoC7.NotOwned": "Esse Item precisa ser possuído por um Ator para realizar essa ação.", "CoC7.ReadAttempt": "Tentativa de ler {book} ({language}), dificuldade {difficulty}.", "CoC7.ReadingMythosTome": "Lendo {book}...", "CoC7.UnknownLanguage": "{actor} não conhece o idioma qual este livro está escrito.", diff --git a/lang/sv.json b/lang/sv.json index 893bb335..6589b808 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -536,7 +536,7 @@ "CoC7.Occult": "Ockultism", "CoC7.Points": "poäng", "CoC7.MythosRating": "Mythosnivå", - "CoC7.NotOwned": "Den här boken måste ägas av en karaktär för att du ska kunna utföra handlingen.", + "CoC7.NotOwned": "Den här föremål måste ägas av en karaktär för att du ska kunna utföra handlingen.", "CoC7.StudyTime": "Studium", "CoC7.SpellCastingTime": "Tid", "CoC7.SpellCastingCost": "Kostnad", @@ -726,7 +726,7 @@ "CoC7.ImportActorItemsItem": "Föremål", "CoC7.ImportActorItemsItemWorldModuleSystem": "Föremål / Spelvärldar / Moduler / System", "CoC7.ImportActorItemsWorldModuleItemSystem": "Spelvärldar / Moduler / Föremål / System", - + "CoC7.HowToTranslateTitle": "Så här översätter du?", "CoC7.HowToTranslateWarning": "Installera inga moduler du inte litar på.", "CoC7.HowToTranslateInstallBabele": "Installera/uppdatera Babele-modulen från Foundrys tilläggsmodulhanterare.", diff --git a/lang/zh-TW.json b/lang/zh-TW.json index b20265a3..304d54ac 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -749,7 +749,7 @@ "CoC7.LearnSpellAttempt": "嘗試從{book}學習咒語{spell}。", "CoC7.MarkedForDevelopment": "被標記為可成長", "CoC7.Mythos": "神話", - "CoC7.NotOwned": "這本書需要被一個角色擁有才能執行這個動作。", + "CoC7.NotOwned": "這本物品需要被一個角色擁有才能執行這個動作。", "CoC7.Points": "點數", "CoC7.RedoFullStudy": "重新精讀。", "CoC7.ReadAttempt": "嘗試閱讀{book}({language}),{difficulty}難度。", From 3d0656747f6d54f4ed5dd76c16e3d1b2d197757c Mon Sep 17 00:00:00 2001 From: castanho Date: Wed, 20 Oct 2021 20:00:02 -0300 Subject: [PATCH 268/726] Run prettier-standard format --- .github/ABANDONED.md | 6 ++- generate-translations.js | 24 +++++++--- lang/zh-TW.json | 2 +- module/actors/actor.js | 12 ++++- module/apps/actor-importer-dialog.js | 12 +++-- module/apps/actor-importer-regexp.js | 67 ++++++++++++++++++++-------- module/apps/actor-importer.js | 33 ++++++++++---- module/coc7.js | 44 +++++++++--------- module/items/item.js | 4 +- module/items/sheets/chase.js | 1 - module/items/spell/data.js | 4 +- module/menu.js | 27 ++++++++--- module/updater.js | 3 +- 13 files changed, 166 insertions(+), 73 deletions(-) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index f278ffed..aba3ec77 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -8,8 +8,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry [de.json](#dejson) - ## cn.json + ``` "CoC7.Entities.Character": "Character", "CoC7.Entities.Container": "Container", @@ -388,7 +388,9 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations", "CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never" ``` + ## cs.json + ``` "CoC7.Entities.Character": "Character", "CoC7.Entities.Container": "Container", @@ -543,7 +545,9 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations", "CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never" ``` + ## de.json + ``` "CoC7.Entities.Character": "Character", "CoC7.Entities.Container": "Container", diff --git a/generate-translations.js b/generate-translations.js index 63db3695..85217cf8 100644 --- a/generate-translations.js +++ b/generate-translations.js @@ -63,7 +63,9 @@ glob('./lang/*.json', {}, async function (er, files) { '** translation is currently up to date\n\n' } if (Object.keys(abandoned).length > 0) { - output = output + 'The following translations have been abandoned **' + + output = + output + + 'The following translations have been abandoned **' + Object.keys(abandoned).join('**, **') + '**, [are you able to help?](./ABANDONED.md)\n\n' } @@ -116,16 +118,28 @@ glob('./lang/*.json', {}, async function (er, files) { if (Object.keys(abandoned).length > 0) { output = '' output = output + '# Abandoned Translations.\n\n' - output = output + 'Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better!' - output = output + ' Below is a list of translations keys on existing files that still need translated, based on `en.json`.\n\n' + output = + output + + 'Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better!' + output = + output + + ' Below is a list of translations keys on existing files that still need translated, based on `en.json`.\n\n' Object.entries(abandoned).forEach(([key, values]) => { - output = output + '[' + key + '.json](#' + (key + '.json').toLowerCase().replace(/[^a-zA-Z0-9]+/g, '') + ')\n\n' + output = + output + + '[' + + key + + '.json](#' + + (key + '.json').toLowerCase().replace(/[^a-zA-Z0-9]+/g, '') + + ')\n\n' }) output = output + '\n' Object.entries(abandoned).forEach(([key, values]) => { output = output + '## ' + key + '.json\n```\n' values.forEach(sourceKey => { - output = output + '"' + + output = + output + + '"' + sourceKey + '": "' + source[sourceKey].replace(/\n/g, '\\n') + diff --git a/lang/zh-TW.json b/lang/zh-TW.json index 304d54ac..b738ca17 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -803,7 +803,7 @@ "CoC7.ImportActorItemsItem": "道具", "CoC7.ImportActorItemsItemWorldModuleSystem": "道具/世界/模組/系統", "CoC7.ImportActorItemsWorldModuleItemSystem": "世界/模組/道具/系統", - "CoC7.Migrate.WithModulesMessage": "

                你的世界或模組可能需要更新以運行版本{version}。

                在開始升級之前,請備份你的世界和下面列出的模組文件夾。

                如果你不更新你的世界,系統將無法正常工作。

                下面的模組包含角色或物品,所以也將被檢查。

                {modules}

                世界完成後可能被重新啟動。

                " , + "CoC7.Migrate.WithModulesMessage": "

                你的世界或模組可能需要更新以運行版本{version}。

                在開始升級之前,請備份你的世界和下面列出的模組文件夾。

                如果你不更新你的世界,系統將無法正常工作。

                下面的模組包含角色或物品,所以也將被檢查。

                {modules}

                世界完成後可能被重新啟動。

                ", "CoC7.MessageDistanceCalculationFailure": "無法計算Token之間的距離,請使用角色卡。", "CoC7.ToolTipSkill": "
                1. 點擊左鍵 顯示選項的擲骰
                2. Shift + 左鍵 立即投擲普通難度檢定
                1. 點擊右鍵 顯示選項的對抗檢定
                2. Shift + 右鍵 立即進行對抗檢定
                1. Alt/Option + 右鍵 顯示選項的聯合檢定
                ", "CoC7.ToolTipKeeperSkill": "
                1. CTRL + 左鍵 對話欄新增檢定連結
                2. {other}
                ", diff --git a/module/actors/actor.js b/module/actors/actor.js index b1c17656..efd7d368 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -452,7 +452,17 @@ export class CoCActor extends Actor { // return super.create(data, options); // } - static emptySkill (skillName, value, { rarity = false, push = true, combat = false, img = false, specialization = false } = {}) { + static emptySkill ( + skillName, + value, + { + rarity = false, + push = true, + combat = false, + img = false, + specialization = false + } = {} + ) { const data = { name: skillName, type: 'skill', diff --git a/module/apps/actor-importer-dialog.js b/module/apps/actor-importer-dialog.js index a3171f65..7b1a80bc 100644 --- a/module/apps/actor-importer-dialog.js +++ b/module/apps/actor-importer-dialog.js @@ -19,12 +19,18 @@ export class CoC7ActorImporterDialog extends Dialog { }) .trigger('change') html.find('#coc-pasted-character-data').on('keyup', function (e) { - const charactersTooExtended = $(this).val().match(/[\udbc0-\udbfe][\udc00-\udfff]/) + const charactersTooExtended = $(this) + .val() + .match(/[\udbc0-\udbfe][\udc00-\udfff]/) const prompt = $('#coc-prompt') if (charactersTooExtended) { - prompt.html(game.i18n.localize('CoC7.TextFieldInvalidCharacters')).addClass('error') + prompt + .html(game.i18n.localize('CoC7.TextFieldInvalidCharacters')) + .addClass('error') } else { - prompt.html(game.i18n.localize('CoC7.PasteTheDataBelow')).removeClass('error') + prompt + .html(game.i18n.localize('CoC7.PasteTheDataBelow')) + .removeClass('error') } }) } diff --git a/module/apps/actor-importer-regexp.js b/module/apps/actor-importer-regexp.js index 78cd7fd7..9a3bd2aa 100644 --- a/module/apps/actor-importer-regexp.js +++ b/module/apps/actor-importer-regexp.js @@ -105,7 +105,10 @@ const keys = { rifle: '(?' + 'Carabine|Lee-Enfield|Fusil' + ')', smb: '(?' + 'SMG|Thompson' + ')', machineGun: '(?' + 'Browning|Vickers|Mitrailleuse' + ')', - launched: '(?' + 'Boomerang de guerre|Javeline|Pierre|Shuriken|Bâton de dynamite|Cocktail Molotov|Grenade à main|Molotov|Grenade|Dynamite' + ')', + launched: + '(?' + + 'Boomerang de guerre|Javeline|Pierre|Shuriken|Bâton de dynamite|Cocktail Molotov|Grenade à main|Molotov|Grenade|Dynamite' + + ')', example: 'Example Character, 27 ans\nFOR 75 CON 60 TAI 80 DEX 70 APP 60 INT 80\nPOU 50 ÉDU 85 SAN 55 PV 14 BD: 1D4\nCarrure: 1 Mvt: 7 PM: 10 Chance: 40 Armure: 1\nAttaques par round 3 Perte de SAN: 1d4/1d8\nAttaques\nBite 50% (25/10), dommage 1D6\nBrawl 30% (15/6), dommage 1D3\nDerringer 40% (20/8), dommage 1D8+1\nEsquiver 50% (25/10)\nCompétences\nAnimal Handling 55%, Charm 30%, First Aid 25%, Disguise 20%,\nListen 50%, Medicine 45%, Persuade 25%, Psychology 75%,\nScience (Astronomy) 90%, Science (Botany) 35%, Science (Zoology) 10%,\nSpot Hidden 35%, Stealth 10%\nLangue: English 80%, Eklo 5%.\nSortilèges: Summon NPC, Dispel NPC.' }, @@ -171,7 +174,8 @@ const keys = { const translations = { en: { age: '(?\\d+)[,\\s]*', - occupation: '[,\\s]*' + 'Occupation' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', + occupation: + '[,\\s]*' + 'Occupation' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', str: '(?\\d+|-)[,\\s\n]*', con: '(?\\d+|-)[,\\s\n]*', siz: '(?\\d+|-)[,\\s\n]*', @@ -180,9 +184,14 @@ const translations = { dex: '(?\\d+|-)[,\\s\n]*', app: '(?\\d+|-)[,\\s\n]*', edu: '(?\\d+|-)[,\\s\n]*', - san: '(?\\d+|-)[,\\s\n]*', - hp: '(?\\d+|-)[,\\s\n]*', - mp: '(?\\d+|-)[,\\s\n]*', + san: + '(?\\d+|-)[,\\s\n]*', + hp: + '(?\\d+|-)[,\\s\n]*', + mp: + '(?\\d+|-)[,\\s\n]*', db: '(?\\d+)\\s*' + 'ans' + '(?![a-z])[,\\s]*', - occupation: '[,\\s]*' + 'Occupation' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', + occupation: + '[,\\s]*' + 'Occupation' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', str: '(?\\d+|-)[,\\s\n]*', con: '(?\\d+|-)[,\\s\n]*', siz: '(?\\d+|-)[,\\s\n]*', @@ -256,17 +266,25 @@ const translations = { app: '(?\\d+|-)[,\\s\n]*', edu: '(?\\d+|-)[,\\s\n]*', san: - '(?\\d+|-)[,\\s\n]*', - hp: '(?\\d+|-)[,\\s\n]*', + '(?\\d+|-)[,\\s\n]*', + hp: + '(?\\d+|-)[,\\s\n]*', mp: - '(?\\d+|-)[,\\s\n]*', + '(?\\d+|-)[,\\s\n]*', db: '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + keys.fr.dbNone + ')[,\\s\n]*', - build: '(?[+-]?\\d+)[,\\s\n]*', + build: + '(?[+-]?\\d+)[,\\s\n]*', armor: '(?\\d+)\\s*' + 'a[ñÑ]os' + '(?![a-z])[,\\s]*', - occupation: '[,\\s]*' + 'Ocupación' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', + occupation: + '[,\\s]*' + 'Ocupación' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', str: '(?\\d+|-)[,\\s\n]*', con: '(?\\d+|-)[,\\s\n]*', siz: '(?\\d+|-)[,\\s\n]*', @@ -335,7 +354,8 @@ const translations = { dex: '(?\\d+|-)[,\\s\n]*', app: '(?\\d+|-)[,\\s\n]*', edu: '(?\\d+|-)[,\\s\n]*', - san: '(?\\d+|-)[,\\s\n]*', + san: + '(?\\d+|-)[,\\s\n]*', hp: '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + keys.es.dbNone + ')[,\\s\n]*', - build: '(?[+-]?\\d+)[,\\s\n]*', + build: + '(?[+-]?\\d+)[,\\s\n]*', armor: '(?\\d+)[,\\s]*', /* NEW KEY BELOW - TRANSLATION REQUIRED */ - occupation: '[,\\s]*' + 'Occupation' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', + occupation: + '[,\\s]*' + 'Occupation' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', str: '(?\\d+|-)[,\\s\n]*', con: '(?\\d+|-)[,\\s\n]*', siz: '(?\\d+|-)[,\\s\n]*', @@ -417,17 +439,26 @@ const translations = { dex: '(?\\d+|-)[,\\s\n]*', app: '(?\\d+|-)[,\\s\n]*', edu: '(?\\d+|-)[,\\s\n]*', - san: '(?\\d+|-)[,\\s\n]*', + san: + '(?\\d+|-)[,\\s\n]*', hp: - '(?\\d+|-)[,\\s\n]*', - mp: '(?\\d+|-)[,\\s\n]*', + '(?\\d+|-)[,\\s\n]*', + mp: + '(?\\d+|-)[,\\s\n]*', db: '(?[+-]?\\d+(?:d\\d+|D\\d+)?|' + keys['zh-TW'].dbNone + ')[,\\s\n]*', - build: '(?[+-]?\\d+)[,\\s\n]*', + build: + '(?[+-]?\\d+)[,\\s\n]*', armor: '(? await CoC7Utilities.toggleDevPhase(toggle) + onClick: async toggle => await CoC7Utilities.toggleDevPhase(toggle) }, { toggle: true, @@ -51,7 +51,8 @@ export class CoC7Menu { name: 'charcreate', active: game.settings.get('CoC7', 'charCreationEnabled'), title: 'CoC7.CharCreationMode', - onClick: async (toggle) => await CoC7Utilities.toggleCharCreation(toggle) + onClick: async toggle => + await CoC7Utilities.toggleCharCreation(toggle) }, { button: true, @@ -70,7 +71,7 @@ export class CoC7Menu { name: 'xptoggle', active: game.settings.get('CoC7', 'xpEnabled'), title: 'CoC7.toggleXP', - onClick: async (toggle) => await CoC7Utilities.toggleXPGain(toggle) + onClick: async toggle => await CoC7Utilities.toggleXPGain(toggle) }, { button: true, @@ -95,10 +96,22 @@ export class CoC7Menu { const keeperMenu = html.find('.game-icon-tentacle-strike').parent() keeperMenu.addClass('coc7-menu') if (isGM) { - keeperMenu.after('') + keeperMenu.after( + '' + ) } - keeperMenu.after('
              3. ') - html.find('.coc7-menu.coc7-dice-roll').click((event) => CoC7Utilities.rollDice(event)) - html.find('.coc7-menu.coc7-create-link').click((event) => CoC7LinkCreationDialog.create(event)) + keeperMenu.after( + '
              4. ' + ) + html + .find('.coc7-menu.coc7-dice-roll') + .click(event => CoC7Utilities.rollDice(event)) + html + .find('.coc7-menu.coc7-create-link') + .click(event => CoC7LinkCreationDialog.create(event)) } } diff --git a/module/updater.js b/module/updater.js index a0818df6..139a5021 100644 --- a/module/updater.js +++ b/module/updater.js @@ -440,7 +440,8 @@ export class Updater { if (item.type === 'spell') { if (typeof item.data.notes !== 'undefined') { if (typeof item.data.description.keeper !== 'undefined') { - updateData['data.description.keeper'] = item.data.description.keeper + item.data.notes + updateData['data.description.keeper'] = + item.data.description.keeper + item.data.notes } else { updateData['data.description.keeper'] = item.data.notes } From eb5c75835fabfbf9288b081dc1ef565d6564a535 Mon Sep 17 00:00:00 2001 From: castanho Date: Fri, 22 Oct 2021 02:13:45 -0300 Subject: [PATCH 269/726] Add scroll overflow on spell list on books Resolve #907 --- styles/sheets/book.less | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/styles/sheets/book.less b/styles/sheets/book.less index 2ffadccd..4ca7ce5a 100644 --- a/styles/sheets/book.less +++ b/styles/sheets/book.less @@ -3,7 +3,7 @@ background: var(--other-sheet-bg); background-repeat: repeat; } - font-family: customSheetFont, 'Palatino Linotype', serif; + font-family: customSheetFont, "Palatino Linotype", serif; .window-resizable-handle { background: var(--main-sheet-front-color); } @@ -22,10 +22,10 @@ gap: 0.3rem; grid-auto-flow: row; grid-template-areas: - 'portrait information aside' - 'progress progress progress' - 'navigation navigation navigation' - 'body body body'; + "portrait information aside" + "progress progress progress" + "navigation navigation navigation" + "body body body"; padding: 0.15rem; .flexrow { padding: 0.15rem 0; @@ -39,7 +39,7 @@ select { border: 0.375rem transparent; flex: 0; - font-family: customSheetFont, 'Palatino Linotype', serif; + font-family: customSheetFont, "Palatino Linotype", serif; &:focus { box-shadow: none; } @@ -221,6 +221,7 @@ border: 0.065rem solid var(--main-sheet-front-color); border-radius: 0.25rem; height: 100%; + overflow: scroll; padding: 0.15rem 0; } .details { @@ -230,8 +231,8 @@ gap: 0 0.1rem; grid-auto-flow: row; grid-template-areas: - 'traits gains' - 'other other'; + "traits gains" + "other other"; .traits { grid-area: traits; .type { @@ -262,9 +263,9 @@ } } } - #mythos:checked ~ label[for='data.type.mythos'], - #occult:checked ~ label[for='data.type.occult'], - #other:checked ~ label[for='data.type.other'] { + #mythos:checked ~ label[for="data.type.mythos"], + #occult:checked ~ label[for="data.type.occult"], + #other:checked ~ label[for="data.type.other"] { background-color: var(--main-sheet-front-color); color: lightgray; opacity: 100%; @@ -308,7 +309,7 @@ grid-template-rows: 1fr; gap: 0.625rem; grid-auto-flow: row; - grid-template-areas: 'portrait name edit status'; + grid-template-areas: "portrait name edit status"; .portrait { border: none; grid-area: portrait; From ba4f1412650d1023d0977444ba26b723b3579772 Mon Sep 17 00:00:00 2001 From: HavlockV Date: Fri, 22 Oct 2021 13:17:53 +0300 Subject: [PATCH 270/726] remove test polution starting uuid perms --- module/chat/cards/test.js | 10 ++++++++ module/common/chatcardlib/src/chatcardlib.js | 26 +++++++++++--------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/module/chat/cards/test.js b/module/chat/cards/test.js index 544e5597..70dc8efc 100644 --- a/module/chat/cards/test.js +++ b/module/chat/cards/test.js @@ -10,6 +10,16 @@ export class testCard extends EnhancedChatCard { }) } + getData(){ + const data = super.getData() + data.mySelectOptions = { + 0: 'option 1', + 1: 'option 2' + } + + return data + } + // activateListeners (html) { // super.activateListeners(html) // } diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 27c22f1a..f66cb747 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -1,11 +1,11 @@ const ECC_CLASS = 'enhanced-chat-card' const PERMISSION_TYPE = { - GM: 'gm', - SPEAKER: 'speaker', - USER: 'user', - EVERYONE: 'all', - BLACKLIST: 'blacklist' + GM: 'gm', // user is GM + SPEAKER: 'speaker', // the speaker is an actor controled/owned by the user + USER: 'user', // the user is the message's author + EVERYONE: 'all', // equivalent to empty string + BLACKLIST: 'blacklist' // invert the logic } const STATE = { @@ -120,10 +120,7 @@ export class EnhancedChatCard { data: this.toObject(), options: this.options, css: this.cssClasses, - mySelectOptions: { - 0: 'option 1', - 1: 'option 2' - } + user: game.user, } } @@ -298,11 +295,16 @@ export class EnhancedChatCard { if (actor) { if (actor.isOwner) return true && whiteList } - } else if (speaker.user) { - if (game.user.id == speaker.user) return true && whiteList - } + } + // else if (speaker.user) { + // if (game.user.id == speaker.user) return true && whiteList + // } permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.SPEAKER) } + // All filter passed, array should contains only uuids or actor/token ids + if( permissionsArray.length){ + ui.notifications.info( 'Array permission is not empty !') + } return false || !whiteList //If pass the filter return false unless it's a blacklist } From e702c8a16a33b4fab3d97cc4e3f47a3d1f094ccf Mon Sep 17 00:00:00 2001 From: HavlockV Date: Fri, 22 Oct 2021 14:12:48 +0300 Subject: [PATCH 271/726] ooc --- module/actors/sheets/base.js | 2 +- module/common/chatcardlib/src/chatcardlib.js | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 6fe716d5..cdd86539 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -882,7 +882,7 @@ export class CoC7ActorSheet extends ActorSheet { .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) html.find('.test-trigger').click(async event => { - const test = new testCard({}, { speaker: ChatMessage.getSpeaker() }) + const test = new testCard({}, {ooc: true}) test.toMessage() // await OpposedCheckCard.dispatch({ // type: OpposedCheckCard.defaultConfig.type, diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index f66cb747..52e8de96 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -148,7 +148,7 @@ export class EnhancedChatCard { htmlCardElement.dataset.eccClass = this.constructor.name htmlCardElement.classList.add(...this.options.classes) - const speaker = this.options.speaker + const speaker = this.options.speaker && ! this.options.ooc ? ChatMessage.getSpeaker(this.options.speaker) : {} @@ -419,7 +419,9 @@ export class EnhancedChatCard { classes: [ECC_CLASS], exclude: [], excludeStartWith: '_', - submitOnChange: true + submitOnChange: true, + speaker: ChatMessage.getSpeaker(), + ooc: false // * @param {boolean} [options.ooc=false] Use the speaker/getspeaker. if true use the user instead } } From a5b38df1c1dcd17f718eb6f7b0f847627d685897 Mon Sep 17 00:00:00 2001 From: HavlockV Date: Sat, 23 Oct 2021 10:36:34 +0300 Subject: [PATCH 272/726] Addeding speaker --- module/actors/sheets/base.js | 2 +- module/common/chatcardlib/src/chatcardlib.js | 44 ++++++++++++++------ 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index cdd86539..e52c1683 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -882,7 +882,7 @@ export class CoC7ActorSheet extends ActorSheet { .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) html.find('.test-trigger').click(async event => { - const test = new testCard({}, {ooc: true}) + const test = new testCard({}) test.toMessage() // await OpposedCheckCard.dispatch({ // type: OpposedCheckCard.defaultConfig.type, diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 52e8de96..045bb2b8 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -113,6 +113,16 @@ export class EnhancedChatCard { return this.options.classes?.join(' ') } + get speaker () { + if (this.options.ooc) return game.user + if ( + this.options.speaker && + ChatMessage.getSpeakerActor(this.options.speaker) + ) + return ChatMessage.getSpeakerActor(this.options.speaker) + return game.user + } + getData () { return { card: this, @@ -121,6 +131,7 @@ export class EnhancedChatCard { options: this.options, css: this.cssClasses, user: game.user, + speaker: this.speaker } } @@ -148,9 +159,10 @@ export class EnhancedChatCard { htmlCardElement.dataset.eccClass = this.constructor.name htmlCardElement.classList.add(...this.options.classes) - const speaker = this.options.speaker && ! this.options.ooc - ? ChatMessage.getSpeaker(this.options.speaker) - : {} + const speaker = + this.options.speaker && !this.options.ooc + ? ChatMessage.getSpeaker(this.options.speaker) + : {} const chatData = foundry.utils.mergeObject( { @@ -218,7 +230,7 @@ export class EnhancedChatCard { // for (let i = 0; i < visi.length; i++) { // const el = visi[i]; // await this.setVisibility(el) - + // } html @@ -253,8 +265,7 @@ export class EnhancedChatCard { if (!element.dataset.eecVisibility) return const perm = element.dataset.eecVisibility.split('|') const canYouSee = await this.hasPerm(element.dataset.eecVisibility, true) - if (!canYouSee) - element.style.display = 'none' + if (!canYouSee) element.style.display = 'none' } /** @@ -268,9 +279,12 @@ export class EnhancedChatCard { if (!restrictedTo.length) return true let permissionsArray = restrictedTo.split(' ') const whiteList = !permissionsArray.includes(PERMISSION_TYPE.BLACKLIST) - if( !whiteList) permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.BLACKLIST) + if (!whiteList) + permissionsArray = permissionsArray.filter( + e => e != PERMISSION_TYPE.BLACKLIST + ) if (game.user.isGM) { - if (!vision) return true //GM can always modify everything ! Nah + if (!vision) return true //GM can always modify everything ! Nah if (permissionsArray.includes(PERMISSION_TYPE.GM)) return true && whiteList return false || !whiteList //If pass the filter return false unless it's a blacklist @@ -286,7 +300,9 @@ export class EnhancedChatCard { if (permissionsArray.includes(PERMISSION_TYPE.SPEAKER)) { const speaker = this.message.data.speaker if (speaker.token && speaker.scene) { - const actor = await fromUuid(`Scene.${speaker.scene}.Token.${speaker.token}`) + const actor = await fromUuid( + `Scene.${speaker.scene}.Token.${speaker.token}` + ) if (actor) { if (actor.isOwner) return true && whiteList } @@ -295,15 +311,17 @@ export class EnhancedChatCard { if (actor) { if (actor.isOwner) return true && whiteList } - } + } // else if (speaker.user) { // if (game.user.id == speaker.user) return true && whiteList // } - permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.SPEAKER) + permissionsArray = permissionsArray.filter( + e => e != PERMISSION_TYPE.SPEAKER + ) } // All filter passed, array should contains only uuids or actor/token ids - if( permissionsArray.length){ - ui.notifications.info( 'Array permission is not empty !') + if (permissionsArray.length) { + ui.notifications.info('Array permission is not empty !') } return false || !whiteList //If pass the filter return false unless it's a blacklist } From bbf9290a763e75cba9d3007129eef0001d055b1b Mon Sep 17 00:00:00 2001 From: HavlockV Date: Sat, 23 Oct 2021 19:29:11 +0300 Subject: [PATCH 273/726] Inject CSS --- module/common/chatcardlib/css/ecc.css | 0 module/common/chatcardlib/src/chatcardlib.js | 18 +++++++++++++++++- templates/chat/cards/test.html | 10 +++++----- 3 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 module/common/chatcardlib/css/ecc.css diff --git a/module/common/chatcardlib/css/ecc.css b/module/common/chatcardlib/css/ecc.css new file mode 100644 index 00000000..e69de29b diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 045bb2b8..82fb3f0e 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -17,6 +17,10 @@ export function initEEC (...cardclass) { // Hooks.once('init', function () { // }) + Hooks.on('renderChatLog', (app, html, data) => + EnhancedChatCardLib.injectCSS(app, html, data) + ) + Hooks.once('socketlib.ready', function () { EnhancedChatCardLib.register(cardclass) EnhancedChatCardLib.socket = socketlib.registerSystem(game.system.id) //Socket is attached to current system @@ -49,6 +53,10 @@ class EnhancedChatCardLib { // this.enhancedChatCardClass = EnhancedChatCard } + static injectCSS (app, html, data) { + return + } + static set socket (x) { if (!game.enhancedChatCardsLib) game.enhancedChatCardsLib = new EnhancedChatCardLib() @@ -236,6 +244,9 @@ export class EnhancedChatCard { html .find('[data-eec-visibility]') .each(async (i, el) => await this.setVisibility(el)) + html + .find('[data-eec-permissions]') + .each(async (i, el) => await this.setPermission(el)) html.find(`.${ECC_CLASS} .ecc-switch`).each((i, el) => this.setState(el)) html .find(`.${ECC_CLASS} input[type="radio"]`) @@ -263,11 +274,16 @@ export class EnhancedChatCard { async setVisibility (element) { if (!element.dataset.eecVisibility) return - const perm = element.dataset.eecVisibility.split('|') const canYouSee = await this.hasPerm(element.dataset.eecVisibility, true) if (!canYouSee) element.style.display = 'none' } + async setPermission (element) { + if (!element.dataset.eecPermissions) return + const canYouMod = await this.hasPerm(element.dataset.eecModify) + if (!canYouMod) element.classList.add('eec-restricted') + } + /** * Check if the current user as permission against a string of allowed persons. * If the string is empty permission are all granted diff --git a/templates/chat/cards/test.html b/templates/chat/cards/test.html index 1df9ccd4..bab3e286 100644 --- a/templates/chat/cards/test.html +++ b/templates/chat/cards/test.html @@ -1,11 +1,11 @@
                - + - {{#select data.mySelect2}} @@ -25,10 +25,10 @@
                -
                - + {{localize 'CoC7.AdvantageAttacker'}} - {{localize 'CoC7.AdvantageDefender'}}
                From c44f31698f3deaab037ecb7a16330f9a62c812ba Mon Sep 17 00:00:00 2001 From: castanho Date: Sun, 24 Oct 2021 20:38:41 -0300 Subject: [PATCH 274/726] Fix luck recovery roll Resolve #910 --- module/actors/actor.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index efd7d368..4bf4ba56 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -2981,18 +2981,18 @@ export class CoCActor extends Actor { if (!currentLuck) await this.update({ 'data.attribs.lck.value': 0 }) const pulpRulesActivated = game.settings.get('CoC7', 'pulpRules') const upgradeRoll = (await new Roll('1D100').roll({ async: true })).total - const equalOrLessCurrentLuck = upgradeRoll <= currentLuck + const equalOrGreaterCurrentLuck = upgradeRoll >= currentLuck let augmentRoll if (pulpRulesActivated) { - equalOrLessCurrentLuck + equalOrGreaterCurrentLuck ? (augmentRoll = '2D10+10') : (augmentRoll = '1D10+5') - } else if (equalOrLessCurrentLuck) { + } else if (equalOrGreaterCurrentLuck) { augmentRoll = '1D10' } const title = game.i18n.localize('CoC7.RollLuck4Dev') let message = '

                ' - if (pulpRulesActivated || equalOrLessCurrentLuck) { + if (pulpRulesActivated || equalOrGreaterCurrentLuck) { const augmentValue = (await new Roll(augmentRoll).roll({ async: true })) .total await this.update({ From 00bdbbc04fca9e1e9d97aa8a764f9297673df779 Mon Sep 17 00:00:00 2001 From: castanho Date: Sun, 24 Oct 2021 20:39:07 -0300 Subject: [PATCH 275/726] Run npx prettier-standard --format --- module/items/spell/data.js | 8 +++++++- styles/sheets/book.less | 24 ++++++++++++------------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/module/items/spell/data.js b/module/items/spell/data.js index ab69c373..3dcf4f8f 100644 --- a/module/items/spell/data.js +++ b/module/items/spell/data.js @@ -102,13 +102,14 @@ export class CoC7Spell extends CoC7Item { } } - update (data, context) { + async update (data, context) { if ( typeof this.context.parent !== 'undefined' && typeof this.context.bookId !== 'undefined' ) { let item let book + // let spellData if (this.context.parent === null) { item = game.items.get(this.context.bookId) book = item.toObject() @@ -118,6 +119,7 @@ export class CoC7Spell extends CoC7Item { for (let i = 0, im = book.data.spells.length; i < im; i++) { if (book.data.spells[i]._id === this.id) { book.data.spells[i] = mergeObject(book.data.spells[i], data) + // spellData = book.data.spells[i] } } if (this.context.parent === null) { @@ -127,6 +129,10 @@ export class CoC7Spell extends CoC7Item { } else { this.context.parent.updateEmbeddedDocuments('Item', [book]) } + // const parent = book.actor ? book.actor : null + // const spell = new CoC7Spell(spellData, { parent, bookId: book.id }) + // await this.sheet.close(true) + // await spell.sheet.render(true) } else { super.update(data, context) } diff --git a/styles/sheets/book.less b/styles/sheets/book.less index 4ca7ce5a..64bf3479 100644 --- a/styles/sheets/book.less +++ b/styles/sheets/book.less @@ -3,7 +3,7 @@ background: var(--other-sheet-bg); background-repeat: repeat; } - font-family: customSheetFont, "Palatino Linotype", serif; + font-family: customSheetFont, 'Palatino Linotype', serif; .window-resizable-handle { background: var(--main-sheet-front-color); } @@ -22,10 +22,10 @@ gap: 0.3rem; grid-auto-flow: row; grid-template-areas: - "portrait information aside" - "progress progress progress" - "navigation navigation navigation" - "body body body"; + 'portrait information aside' + 'progress progress progress' + 'navigation navigation navigation' + 'body body body'; padding: 0.15rem; .flexrow { padding: 0.15rem 0; @@ -39,7 +39,7 @@ select { border: 0.375rem transparent; flex: 0; - font-family: customSheetFont, "Palatino Linotype", serif; + font-family: customSheetFont, 'Palatino Linotype', serif; &:focus { box-shadow: none; } @@ -231,8 +231,8 @@ gap: 0 0.1rem; grid-auto-flow: row; grid-template-areas: - "traits gains" - "other other"; + 'traits gains' + 'other other'; .traits { grid-area: traits; .type { @@ -263,9 +263,9 @@ } } } - #mythos:checked ~ label[for="data.type.mythos"], - #occult:checked ~ label[for="data.type.occult"], - #other:checked ~ label[for="data.type.other"] { + #mythos:checked ~ label[for='data.type.mythos'], + #occult:checked ~ label[for='data.type.occult'], + #other:checked ~ label[for='data.type.other'] { background-color: var(--main-sheet-front-color); color: lightgray; opacity: 100%; @@ -309,7 +309,7 @@ grid-template-rows: 1fr; gap: 0.625rem; grid-auto-flow: row; - grid-template-areas: "portrait name edit status"; + grid-template-areas: 'portrait name edit status'; .portrait { border: none; grid-area: portrait; From 3666e58d30fd8faae48391475ef5e9d43f184eb3 Mon Sep 17 00:00:00 2001 From: castanho Date: Tue, 26 Oct 2021 00:43:03 -0300 Subject: [PATCH 276/726] Fix luck recovery rules for 1920 and Pulp --- module/actors/actor.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index 4bf4ba56..f3e382e7 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -237,15 +237,15 @@ export class CoCActor extends Actor { } let boutDurationText = this.isInABoutOfMadness ? boutRealTime - ? `${duration} ${game.i18n.localize('CoC7.rounds')}` - : `${duration} ${game.i18n.localize('CoC7.hours')}` + ? `${duration} ${game.i18n.localize('CoC7.rounds')}` + : `${duration} ${game.i18n.localize('CoC7.hours')}` : null const insanityDurationText = insaneDuration ? this.isInsane - ? indefiniteInstanity - ? null - : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` - : null + ? indefiniteInstanity + ? null + : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` + : null : null if (this.isInsane && !insanityDurationText && !indefiniteInstanity) { indefiniteInstanity = true @@ -272,8 +272,8 @@ export class CoCActor extends Actor { durationText: insanityDurationText || '', hint: this.isInsane ? indefiniteInstanity - ? game.i18n.localize('CoC7.IndefiniteInsanity') - : `${game.i18n.localize( + ? game.i18n.localize('CoC7.IndefiniteInsanity') + : `${game.i18n.localize( 'CoC7.TemporaryInsanity' )} ${insanityDurationText || ''}` : game.i18n.localize('CoC7.NotInsane') @@ -2981,18 +2981,18 @@ export class CoCActor extends Actor { if (!currentLuck) await this.update({ 'data.attribs.lck.value': 0 }) const pulpRulesActivated = game.settings.get('CoC7', 'pulpRules') const upgradeRoll = (await new Roll('1D100').roll({ async: true })).total - const equalOrGreaterCurrentLuck = upgradeRoll >= currentLuck + const higherThanCurrentLuck = upgradeRoll > currentLuck let augmentRoll if (pulpRulesActivated) { - equalOrGreaterCurrentLuck + higherThanCurrentLuck ? (augmentRoll = '2D10+10') : (augmentRoll = '1D10+5') - } else if (equalOrGreaterCurrentLuck) { + } else if (higherThanCurrentLuck) { augmentRoll = '1D10' } const title = game.i18n.localize('CoC7.RollLuck4Dev') let message = '

                ' - if (pulpRulesActivated || equalOrGreaterCurrentLuck) { + if (pulpRulesActivated || higherThanCurrentLuck) { const augmentValue = (await new Roll(augmentRoll).roll({ async: true })) .total await this.update({ From 1d4cbebf464bcd529166283bcc41f080ef8bce40 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 27 Oct 2021 09:48:38 +0200 Subject: [PATCH 277/726] Typo EEC - ECC --- module/coc7.js | 4 +- module/common/chatcardlib/src/chatcardlib.js | 45 ++++++++++++++------ templates/chat/cards/test.html | 7 +-- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/module/coc7.js b/module/coc7.js index 61a2d8d0..07103d3d 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -23,7 +23,7 @@ import { CoC7ChaseSheet } from './items/sheets/chase.js' import { CoC7Socket, CoC7ChatCards } from './hooks/socket.js' import { DropActorSheetData } from './hooks/drop-actor-sheet-data.js' import { testCard } from './chat/cards/test.js' -import { initEEC } from './common/chatcardlib/src/chatcardlib.js' +import { initECC } from './common/chatcardlib/src/chatcardlib.js' Hooks.on('renderSettingsConfig', (app, html, options) => { const systemTab = $(app.form).find('.tab[data-tab=system]') @@ -144,7 +144,7 @@ Hooks.once('init', async function () { }) -initEEC(testCard, testCard, testCard) +initECC(testCard, testCard, testCard) Hooks.on('renderCombatTracker', (app, html, data) => CoC7Combat.renderCombatTracker(app, html, data) diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 82fb3f0e..d8e6b4a8 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -13,7 +13,7 @@ const STATE = { OFF: 'switched-off' } -export function initEEC (...cardclass) { +export function initECC (...cardclass) { // Hooks.once('init', function () { // }) @@ -53,7 +53,14 @@ class EnhancedChatCardLib { // this.enhancedChatCardClass = EnhancedChatCard } - static injectCSS (app, html, data) { + static injectCSS () { + let style = $('head').find('style') + if( !style?.length){ + $('head').append( $('')) + style = $('head').find('style') + } + style.append('.ecc-restricted {color: red}') + return } @@ -65,11 +72,11 @@ class EnhancedChatCardLib { static get socket () { if (!game.enhancedChatCardsLib) { - ui.notifications.error('EEC not Initialized') + ui.notifications.error('ECC not Initialized') return undefined } if (!game.enhancedChatCardsLib.socket) { - ui.notifications.error('EEC no socket') + ui.notifications.error('ECC no socket') return undefined } return game.enhancedChatCardsLib.socket @@ -156,8 +163,8 @@ export class EnhancedChatCard { } async toMessage (optionnalChatData = {}) { - //Map eec card type if not registered already - // this.registerEECClass() + //Map ecc card type if not registered already + // this.registerECCClass() //Publish by current user by default unless options.GMchatCard const html = await renderTemplate(this.template, this.getData()) @@ -234,7 +241,7 @@ export class EnhancedChatCard { html.on('click', `.${ECC_CLASS} button`, this._onButton.bind(this)) html.on('keydown', `.${ECC_CLASS} form`, this._onKey.bind(this)) - // const visi = html.find('[data-eec-visibility]') + // const visi = html.find('[data-ecc-visibility]') // for (let i = 0; i < visi.length; i++) { // const el = visi[i]; // await this.setVisibility(el) @@ -242,10 +249,10 @@ export class EnhancedChatCard { // } html - .find('[data-eec-visibility]') + .find('[data-ecc-visibility]') .each(async (i, el) => await this.setVisibility(el)) html - .find('[data-eec-permissions]') + .find('[data-ecc-permissions]') .each(async (i, el) => await this.setPermission(el)) html.find(`.${ECC_CLASS} .ecc-switch`).each((i, el) => this.setState(el)) html @@ -273,15 +280,20 @@ export class EnhancedChatCard { } async setVisibility (element) { - if (!element.dataset.eecVisibility) return - const canYouSee = await this.hasPerm(element.dataset.eecVisibility, true) + if (!element.dataset.eccVisibility) return + const canYouSee = await this.hasPerm(element.dataset.eccVisibility, true) if (!canYouSee) element.style.display = 'none' } async setPermission (element) { - if (!element.dataset.eecPermissions) return - const canYouMod = await this.hasPerm(element.dataset.eecModify) - if (!canYouMod) element.classList.add('eec-restricted') + if (!element.dataset.eccPermissions) return + const canYouMod = await this.hasPerm(element.dataset.eccPermissions) + if (!canYouMod) element.classList.add('ecc-restricted') + if( $(element).is('input')){ + if( 'range' == element.type) $(element).attr('disabled', true) + else $(element).attr('readonly', true) + } + if( $(element).is('select')) $(element).attr('disabled', true) } /** @@ -408,6 +420,11 @@ export class EnhancedChatCard { if (updates) this.updateChatCard() } + /** + * Retrieve the form from the card and update the data structure + * @param {HTMLElement} card + * @returns + */ _update (card) { const forms = card.querySelectorAll('form') let updates = false diff --git a/templates/chat/cards/test.html b/templates/chat/cards/test.html index bab3e286..65d2cd15 100644 --- a/templates/chat/cards/test.html +++ b/templates/chat/cards/test.html @@ -24,8 +24,9 @@ name="data.contact" value="mail">

              + -
              +
              {{localize 'CoC7.AdvantageAttacker'}} Pouet pouet - {{localize "CoC7.Critical"}} + {{localize "CoC7.Critical"}} {{#if flags.critical}} CRITICAL IS ON {{/if}} -
              +
              From a7b8ef3388124604ed0c30e43aed59ab2b3f75d9 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Sat, 30 Oct 2021 10:56:13 +0200 Subject: [PATCH 278/726] ecc-restricted :hover --- module/common/chatcardlib/src/chatcardlib.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index d8e6b4a8..02453929 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -59,7 +59,9 @@ class EnhancedChatCardLib { $('head').append( $('')) style = $('head').find('style') } - style.append('.ecc-restricted {color: red}') + style.append( + `.ecc-restricted {color: red} + .ecc-restricted:hover {cursor: not-allowed}`) return } @@ -288,13 +290,15 @@ export class EnhancedChatCard { async setPermission (element) { if (!element.dataset.eccPermissions) return const canYouMod = await this.hasPerm(element.dataset.eccPermissions) - if (!canYouMod) element.classList.add('ecc-restricted') + if (!canYouMod){ + element.classList.add('ecc-restricted') if( $(element).is('input')){ if( 'range' == element.type) $(element).attr('disabled', true) else $(element).attr('readonly', true) } if( $(element).is('select')) $(element).attr('disabled', true) } + } /** * Check if the current user as permission against a string of allowed persons. From e35a244983f9a32fa78c631d1f052feed014a1fb Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Sat, 30 Oct 2021 11:00:02 +0200 Subject: [PATCH 279/726] TO BE REMOVED mentions --- module/chat/cards/test.js | 1 + module/coc7.js | 2 +- templates/chat/cards/test.html | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/module/chat/cards/test.js b/module/chat/cards/test.js index 70dc8efc..90c6fa80 100644 --- a/module/chat/cards/test.js +++ b/module/chat/cards/test.js @@ -1,3 +1,4 @@ +//TO BE REMOVED FOR PROD import { EnhancedChatCard } from '../../common/chatcardlib/src/chatcardlib.js' export class testCard extends EnhancedChatCard { /** diff --git a/module/coc7.js b/module/coc7.js index 07103d3d..d1590343 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -144,7 +144,7 @@ Hooks.once('init', async function () { }) -initECC(testCard, testCard, testCard) +initECC(testCard) //TO BE REMOVED FOR PROD Hooks.on('renderCombatTracker', (app, html, data) => CoC7Combat.renderCombatTracker(app, html, data) diff --git a/templates/chat/cards/test.html b/templates/chat/cards/test.html index 65d2cd15..944e37e1 100644 --- a/templates/chat/cards/test.html +++ b/templates/chat/cards/test.html @@ -1,3 +1,4 @@ +{{!-- TO BE REMOVED FOR PROD --}}
              From 420ef5bd5574ac620ed9acee4736dd233ea706ff Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 31 Oct 2021 00:49:29 +0100 Subject: [PATCH 280/726] Remove comment from handlebar js template as it breaks displaying under certain conditions --- templates/actors/parts/actor-background.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/templates/actors/parts/actor-background.html b/templates/actors/parts/actor-background.html index b9ab24f6..ab04581e 100644 --- a/templates/actors/parts/actor-background.html +++ b/templates/actors/parts/actor-background.html @@ -22,7 +22,6 @@
              {{/if}} -
              {{/each}} -
              \ No newline at end of file +
              From 1c5d463cae2a10547186c3ec6d73058d4c1d0b8f Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 31 Oct 2021 01:01:40 +0100 Subject: [PATCH 281/726] Fix make public on skill rolls --- module/chat.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/chat.js b/module/chat.js index 0a32672c..d452b8bf 100644 --- a/module/chat.js +++ b/module/chat.js @@ -1035,7 +1035,7 @@ export class CoC7Chat { ) { check.updateChatCard({ makePublic: true }) } else { - check.updateChatCard() + check.updateChatCard({ makePublic: true }) } break } From ff207ceabb7a33450b24f8a4a89881b9738173e3 Mon Sep 17 00:00:00 2001 From: Mero-Pe Date: Sun, 31 Oct 2021 20:00:56 +0900 Subject: [PATCH 282/726] FEATURE: add Korean Translate(WIP) --- lang/ko.json | 876 +++++++++++++++++++++++++++++++++++++++++++++++++++ system.json | 5 + 2 files changed, 881 insertions(+) create mode 100644 lang/ko.json diff --git a/lang/ko.json b/lang/ko.json new file mode 100644 index 00000000..f5f3a60f --- /dev/null +++ b/lang/ko.json @@ -0,0 +1,876 @@ +{ + "I18N.LANGUAGE": "ko", + + "CoC7.title": "크툴루의 부름 7th Edition (비공식)", + + "CoC7.Entities.Character": "캐릭터", + "CoC7.Entities.Container": "Container", + "CoC7.Entities.Creature": "크리쳐", + "CoC7.Entities.Npc": "NPC", + "CoC7.Entities.Vehicle": "탈것", + + "CoC7.Entities.Archetype": "캐릭터 타입", + "CoC7.Entities.Book": "서적", + "CoC7.Entities.Chase": "추격", + "CoC7.Entities.Item": "아이템", + "CoC7.Entities.Occupation": "직업", + "CoC7.Entities.Setup": "초기설정", + "CoC7.Entities.Skill": "기능", + "CoC7.Entities.Spell": "주문", + "CoC7.Entities.Status": "Status", + "CoC7.Entities.Talent": "Talent", + "CoC7.Entities.Weapon": "무기", + + "CHARAC.STR": "근력", + "CHARAC.Strengh": "근력", + "CHARAC.Strength": "근력", + "CHARAC.CON": "건강", + "CHARAC.Constitution": "건강", + "CHARAC.SIZ": "크기", + "CHARAC.Size": "크기", + "CHARAC.DEX": "민첩성", + "CHARAC.Dexterity": "민첩성", + "CHARAC.APP": "외모", + "CHARAC.Appearance": "외모", + "CHARAC.INT": "지능", + "CHARAC.Intelligence": "지능", + "CHARAC.POW": "정신력", + "CHARAC.Power": "정신력", + "CHARAC.EDU": "교육", + "CHARAC.Education": "교육", + "CoC7.PlayerName": "플레이어", + "CoC7.Name": "이름", + "CoC7.Archetype": "캐릭터 타입", + "CoC7.Occupation": "직업", + "CoC7.Age": "나이", + "CoC7.Sex": "성별", + "CoC7.Residence": "거주지", + "CoC7.Birthplace": "출생지", + "CoC7.Organization": "소속", + "CoC7.HitPoints": "체력", + "CoC7.HP": "HP", + "CoC7.MagicPoints": "마력", + "CoC7.MP": "MP", + "CoC7.SanityPoints": "이성", + "CoC7.Sanity": "이성", + "CoC7.SAN": "이성", + "CoC7.DailySanLoss": "일일 이성 손실", + "CoC7.DailyLoss": "일일 손실", + "CoC7.Luck": "운", + "CoC7.Movement": "이동력", + "CoC7.Mov": "이동력", + "CoC7.BonusDamage": "피해 보너스", + "CoC7.DB": "피해", + "CoC7.Build": "체격", + "CoC7.Skills": "기능", + "CoC7.Skill": "기능", + "CoC7.Combat": "전투", + "CoC7.Possessions": "소지품", + "CoC7.Background": "백스토리", + "CoC7.Notes": "메모", + "CoC7.DailySanIconOver": "초기화", + "CoC7.Prone": "쓰러짐", + "CoC7.Unconsious": "의식불명", + "CoC7.CriticalWounds": "중상", + "CoC7.Dying": "빈사", + "CoC7.DyingCheck": "건강에 의한 사망판정", + "CoC7.Dead": "사망", + "CoC7.Resist": "저항", + "CoC7.UnderlyingInsanity": "잠재적 광기", + "CoC7.TemporaryInsanity": "일시적 광기", + "CoC7.IndefiniteInsanity": "장기적 광기", + "CoC7.NotInsane": "None", + "CoC7.UnlockActor": "액터 해금", + "CoC7.LockActor": "액터 잠금", + "CoC7.NpcRollCharacteristics": "특성치 굴림", + "CoC7.NpcAvarageCharacteristics": "특성치 평준화", + "CoC7.NpcCharacteristicsFormula": "수식", + "CoC7.NpcCharacteristicsValues": "값", + "CoC7.language": "언어", + "CoC7.Author": "저자", + "CoC7.Date": "날짜", + "CoC7.Spells": "주문", + "CoC7.Spell": "주문", + "CoC7.Spells&Notes": "주문과 서적", + "CoC7.Weapons": "장비", + "CoC7.Effects": "효과", + "CoC7.Cost": "비용", + "CoC7.Source": "출처", + "CoC7.SpellDetails": "주문 상세", + "CoC7.Details": "상세", + "CoC7.Other": "기타", + "CoC7.rounds": "라운드", + "CoC7.hours": "시간", + "CoC7.weeks": "주", + "CoC7.remove": "제거", + "CoC7.Any": "또는", + "CoC7.All": "모두", + "CoC7.Success": "성공", + "CoC7.CustomLabel": "커스텀 라벨", + "CoC7.SpecificLocations": "특정 장소", + "CoC7.ArmourPlating": "무장 방어복", + "CoC7.Location": "위지", + "CoC7.Properties": "기능", + "CoC7.Attributes": "속성", + "CoC7.Attribute": "속성", + "CoC7.Collapse": "축소", + "CoC7.Expand": "확장", + "CoC7.Blind": "실명", + "CoC7.Label": "라벨", + "CoC7.Icon": "아이콘", + "CoC7.Check": "판정", + "CoC7.ItemWeapon": "아이템 (무기)", + "CoC7.AttacksPerRound": "라운드당 공격횟수", + + "CoC7.Cast": "Cast", + "CoC7.SanityCost": "이성 조건", + "CoC7.PowerCost": "정신력 조건", + "CoC7.HitPointsCost": "체력 조건", + "CoC7.MagicPointsCost": "마력 조건", + "CoC7.OtherCosts": "기타 조건", + "CoC7.CastingSpell": "{spell} 주문 시전.", + + "CoC7.CopyToClipboard": "클립보드에 복사", + "CoC7.WhisperToSelection": "선택한 토큰에 귓속말", + "CoC7.WhisperTo": "귓속말: ", + "CoC7.SendToChat": "채팅송신", + + "CoC7.RegularSuccess": "보통 성공", + "CoC7.HardSuccess": "어려운 성공", + "CoC7.ExtremeSuccess": "극단적 성공", + "CoC7.CriticalSuccess": "대성공", + "CoC7.Fumble": "대실패", + "CoC7.Failure": "실패", + "CoC7.Malfunction": "{itemName} 이(가) 고장났습니다", + + "CoC7.Dice": "주사위", + "CoC7.DiceModifierBonus": "주사위", + "CoC7.DiceModifierPenalty": "패널티", + "CoC7.Modifiers": "수정", + "CoC7.BonusDice": "보너스 주사위", + "CoC7.UnitsDie": "1 단위 주사위", + "CoC7.TensDie": "10면주사위", + "CoC7.TensDice": "10면주사위", + "CoC7.SuccessRequired": "{successRequired} 성공이 필요합니다.", + "CoC7.Roll": "판정", + "CoC7.Pushing": "강행", + "CoC7.PushingSkill": ": 기능 강행판정!", + "CoC7.PushSkill": "강행", + "CoC7.PushedRoll": "(강행판정)", + "CoC7.SpendLuck": "성공하기 위해 {luckNeededValue} 의 행운 소모", + "CoC7.LuckSpent": "{luckAmount} 성공하기 위해 행운 소모", + "CoC7.LuckSpentAlt": "행운 소모", + "CoC7.LuckError": "{actorName} 은(는) 판정에 필요한 행운이 모자랍니다", + "CoC7.check.AutoSuccess": "자동. 성공", + "CoC7.check.AutoFailure": "자동. 실패", + "CoC7.RevealCheck": "판정 공개", + "CoC7.RevealSanLoss": "이성 손실 공개", + "CoC7.check.ForcePass": "강제 통과", + "CoC7.check.ForceFail": "강제 실패", + "CoC7.check.FlagForDevelopment": "경험치 보상", + "CoC7.IncreaseSuccessLevel": "성공율 증가", + "CoC7.check.DecreaseSuccessLevel": "성공율 감소", + "CoC7.RollSecretDice": "수호자가 몇개의 주사위를 굴렸습니다", + "CoC7.KeeperSentDecoy": "플레이어가 눈속임판정을 받았습니다", + "CoC7.FakeRoll": "플레이어에게 눈속임판정을 보냅니다", + + "CoC7.ConstitutionCheck": "건강 판정", + + "CoC7.SanDataSelectionWindow": "이성치 손실 선택", + "CoC7.BonusSelectionWindow": "보너스 선택 창", + "CoC7.BonusSelectionWindowNamed": "{name} 판정을 위해 난이도를 선택합니다", + "CoC7.SkillDetailsWindow": "상세 기능 창", + "CoC7.RegularDifficulty": "보통", + "CoC7.HardDifficulty": "어려움", + "CoC7.ExtremeDifficulty": "극단적", + "CoC7.CriticalDifficulty": "대성공", + "CoC7.UnknownDifficulty": "난이도 미공개", + "CoC7.RollDifficulty": "난이도 판정", + "CoC7.RollThreshold": "역치 판정", + "CoC7.FlatDiceModifier": "Flat dice modifier", + "CoC7.FlatModifier": "Flat modifier", + "CoC7.RollDifficultyUnknown": "난이도 미공개", + "CoC7.RollDifficultyRegular": "보통", + "CoC7.RollDifficultyHard": "어려움", + "CoC7.RollDifficultyExtreme": "극단적", + "CoC7.RollDifficultyCritical": "대성공", + "CoC7.RollResult.LuckSpendText": "{luckAmount} 의 행운을 써서, {successLevel} 성공입니다", + "CoC7.RollDice": "판정 !", + "CoC7.CreateLink": "링크 생성", + "CoC7.SuccesLevelHint": "{value} 난이도의 성공", + "CoC7.FailureLevelHint": "{value} 난이도로 인해 실패", + "CoC7.CombinedRollCard": "Combined roll card", + "CoC7.OpposedRollCard": "Opposed roll card", + "CoC7.CombinedAnyHint": "하나 이상 판정에 성공", + "CoC7.CombinedAllHint": "모든 판정에 성공", + "CoC7.CloseCard": "카드 닫음", + + "CoC7.CheckResult": "{name} 판정 ({value}%) - {difficulty} 난이도", + "CoC7.ItemCheckResult": "{item} - {skill} 판정 ({value}%) - {difficulty} 난이도", + "CoC7.CheckRawValue": "({rawvalue}%) - {difficulty} 난이도", + + "CoC7.ArmorAbsorbsDamage": "방어구가 무시한 총 피해", + "CoC7.Critical": "치명상", + "CoC7.Impale": "관통상", + "CoC7.CriticalTitle": "치명상을 입었다", + "CoC7.ImpaleTitle": "이 무기는 관통할 수 있다", + "CoC7.Target": "대상", + "CoC7.TargetOutOfRange": "범위밖 대상", + "CoC7.NoTargetToDamage": "피해를 입힐 대상이 없음", + "CoC7.ShotIsImpossible": "사격 불가", + "CoC7.OutOfAmmo": "탄약 고갈", + "CoC7.OutOfShots": "사정거리 밖", + + "CoC7.BonusDamageRoll": "피해 보너스 판정", + "CoC7.Type": "유형", + "CoC7.FightBack": "반격", + "CoC7.Dodge": "회피", + "CoC7.Maneuver": "조종", + "CoC7.NoResponse": "응답없음", + "CoC7.OutNumbered": "수적열세", + "CoC7.combatCard.surprised": "기습", + "CoC7.combatCard.autoSuccess": "자동성공", + "CoC7.Advantage": "이점", + "CoC7.Disadvantage": "불이익", + "CoC7.TitleAdvantage": "보너스 주사위 1 추가 (대상이 쓰러지거나 저지됨...)", + "CoC7.TitleDisadvantage": "패널티 주사위 1 추가 (쓰러지거나 저지당함...)", + "CoC7.TitleOutNumbered": "수적열세의 대상에 대해 보너스 주사위 1 추가", + "CoC7.TitleSurprised": "대상을 기습함에 따라 보너스 주사위 1 추가", + "CoC7.TitleAutoSuccess": "공격 자동 명중", + "CoC7.WinnerRollDamage": "{name} 승리. 피해 판정.", + "CoC7.InitiatorMissed": "{name} 놓침.", + "CoC7.NoWinner": "양쪽 모두 실패.", + "CoC7.DodgeSuccess": "{name} 회피함!", + "CoC7.ManeuverSuccess": "{name} 조종이 성공적이었음.", + "CoC7.AttackSuccess": "{name} 유효타를 입힘.", + "CoC7.InflictPain": "고통을 입힘", + "CoC7.AdvantageAttacker": "우위: 공격측", + "CoC7.AdvantageDefender": "우위: 방어측", + "CoC7.Tie": "Tie", + "CoC7.DamageInflicted": "피해 반영됨", + "CoC7.TotalDamage": "총 피해", + + "CoC7.combatCard.dive4cover": "Dive for Cover", + + "CoC7.rangeCombatCard.SingleShot": "사격(단발)", + "CoC7.rangeCombatCard.MultipleShots": "사격(연발)", + "CoC7.AutomaticFire": "반자동 사격", + "CoC7.rangeCombatCard.Burst": "집중 사격", + "CoC7.rangeCombatCard.FullAuto": "전자동", + "CoC7.rangeCombatCard.BaseRange": "단거리", + "CoC7.rangeCombatCard.LongRange": "중거리", + "CoC7.rangeCombatCard.ExtremeRange": "장거리", + "CoC7.rangeCombatCard.OutOfRange": "사거리 밖", + "CoC7.rangeCombatCard.Cover": "은엄폐", + "CoC7.rangeCombatCard.PointBlankRange": "Point blank range", + "CoC7.rangeCombatCard.NormalTarget": "보통 대상", + "CoC7.rangeCombatCard.BigTarget": "큰 대상", + "CoC7.combatCard.SmallTarget": "작은 대상", + "CoC7.rangeCombatCard.FastMovingTarget": "Fast", + "CoC7.rangeCombatCard.InMelee": "근접전", + "CoC7.rangeCombatCard.aiming": "조준", + "CoC7.rangeCombatDamage": "{name} 이(가) {total} 의 피해를 입었습니다", + "CoC7.rangeCombatDamageArmor": "{name} 이(가) {total} 의 피해를 입었습니다. ({armor} 경감)", + "CoC7.RollDamage": "피해 판정", + "CoC7.BulletsFired": "Bullets fired", + "CoC7.Shots": "발포횟수", + "CoC7.Shoot": "사격", + "CoC7.ShotBullets": "{bullets} 탄약을 {actor}에게 쏩니다.", + "CoC7.ShotVoley": "Shooting a voley of {bullets} bullets at target {actor}.", + "CoC7.rangeCombatCard.AimingTitle": "첫 사격에 보너스 주사위 1개 추가", + "CoC7.rangeCombatCard.CoverTitle": "패널티 주사위 1개. 대상이 엄폐했거나 성공적으로 지원을 받았습니다.", + "CoC7.rangeCombatCard.PointBlankRangeTitle": "보너스 주사위 1개. 지근거리 내 대상", + "CoC7.rangeCombatCard.BigTargetTitle": "큰 대상에 대해 보너스 주사위 1개 (체격 > 4)", + "CoC7.rangeCombatCard.SmallTargetTitle": "작은 대상에 대해 패널티 주사위 1개", + "CoC7.rangeCombatCard.NormalTargetTitle": "보통 크기의 대상. 어떤 패널티/보너스도 없습니다", + "CoC7.rangeCombatCard.InMeleeTitle": "패널티 주사위 1개. 대상이 근접 전투에 들어갔습니다", + "CoC7.rangeCombatCard.FastMovingTargetTitle": "패널티 주사위 1개. 대상이 빠르고 (MOV 8+) 최고 속도로 움직입니다", + + "CoC7.meleeCombatDamageTakes": "takes", + "CoC7.meleeCombatDamageFrom": "from", + "CoC7.meleeCombatDamageDeals": "deals", + "CoC7.meleeCombatDamageWith": "with", + + "CoC7.DropZone": "DropZone", + + "CoC7.Value": "수치", + "CoC7.SkillValue": "기능 수치", + "CoC7.SkillBase": "기본", + "CoC7.BaseSkillValue": "기본 기능 수치", + "CoC7.SkillExperience": "경험치", + "CoC7.SkillArchetype": "캐릭터 타입", + "CoC7.SkillOccupation": "직업 기능", + "CoC7.SkillPersonal": "관심 기능", + + "CoC7.SkillTotalExperience": "경험치 점수", + "CoC7.SkillTotalArchetype": "캐릭터 타입 점수", + "CoC7.SkillTotalOccupation": "직업 점수", + "CoC7.SkillTotalPersonal": "관심 기능 점수", + "CoC7.CharacteristicsPoints": "특성치 점수", + "CoC7.TotalPoints": "총 직업 기능 점수", + + "CoC7.ItemQuantity": "양", + "CoC7.ItemWeight": "무게", + "CoC7.ItemDetails": "상세", + "CoC7.Description": "설명", + "CoC7.Reload": "좌/우 클릭 : 1의 탄종을 장탄/제거 \nShift + 좌/우 클릭 : 재장전/비우기", + "CoC7.WeaponRange": "사거리", + "CoC7.WeaponDamage": "피해량", + "CoC7.Weapon.BlastRadius": "폭발 범위", + "CoC7.WeaponMalfunction": "고장", + "CoC7.WeaponUsesPerRound": "라운드당 사용횟수", + "CoC7.WeaponUsesPerRoundHint": "라운드당 공격횟수 (1/3 : 매 3번의 라운드당 1번의 공격)", + "CoC7.WeaponSheet.RoundsPerUse.Info": "발사준비가 될때까지 걸리는 라운드", + "CoC7.WeaponMax": "최대 라운드당 사용횟수", + "CoC7.BurstSize": "점사 규모", + "CoC7.BurstSizeHint": "점사당 몇발의 탄 소모", + "CoC7.WeaponBulletsInMag": "탄창", + "CoC7.WeaponSpecial": "특수", + "CoC7.ItemPrice": "가격", + "CoC7.Armor": "방어구", + + "CoC7.EraNvct": "인빅터스", + "CoC7.EraDrka": "암흑기", + "CoC7.EraDdts": "더 어두운 오솔길로", + "CoC7.EraGlit": "가스등의 크툴루", + "CoC7.Era1920": "1920s", + "CoC7.EraPulp": "펄프 크툴루", + "CoC7.EraMdrn": "현대", + "CoC7.Eras": "크툴루 배경", + + "CoC7.SkillNoAdjustments": "수정 불가", + "CoC7.SkillNoXpGain": "경험치 습득 불가", + "CoC7.SkillSpecial": "전문화", + "CoC7.SkillRarity": "희귀", + "CoC7.SkillPush": "강행", + "CoC7.SkillCombat": "근접전(격투)", + "CoC7.SkillFighting": "근접전(무장)", + "CoC7.SkillFirearm": "사격", + + "CoC7.WeaponRngd": "원거리", + "CoC7.WeaponProperyManeuver": "가동 기능", + "CoC7.WeaponTouch": "접촉", + "CoC7.WeaponImpl": "관통", + "CoC7.WeaponRare": "희귀", + "CoC7.WeaponAhdb": "+DB/2", + "CoC7.WeaponAddb": "+DB", + "CoC7.WeaponSlnt": "소음", + "CoC7.WeaponXplv": "폭파", + "CoC7.WeaponBrst": "점사", + "CoC7.WeaponAuto": "전자동", + "CoC7.WeaponSpcl": "특수", + "CoC7.WeaponMont": "Mounted", + "CoC7.WeaponDbrl": "Dual barrel", + "CoC7.WeaponBlst": "폭발", + "CoC7.WeaponStun": "기절", + "CoC7.Weapon.Property.Melee": "근접", + "CoC7.Weapon.Property.Thrown": "투척", + "CoC7.Weapon.Property.Burn": "발화", + "CoC7.Weapon.Property.Shotgun": "산탄총", + + "CoC7.ErrorItem": "아이템을 찾을 수 없습니다", + "CoC7.ErrorActor": "액터를 찾을 수 없습니다", + "CoC7.ErrorInvalidFormula": "{value}은(는) 유효한 수식이 아닙니다.", + "CoC7.ErrorInvalid": "무효", + "CoC7.Validate": "승인", + "CoC7.Apply": "적용", + + "CoC7.NewBioSectionName": "새 단락", + + "CoC7.DodgeSkillName": "회피", + "CoC7.CthulhuMythosName": "크툴루 신화", + "CoC7.CreditRatingSkillName": "신용 등급", + "CoC7.DriveAutoSkillName": "자동 운행", + "CoC7.FightingSpecializationName": "근접전", + "CoC7.FirearmSpecializationName": "사격", + "CoC7.DriveSpecializationName": "운전", + "CoC7.PilotSpecializationName": "조종", + "CoC7.AnySpecName": "Any", + "CoC7.BoutOfMadnessName": "광기", + "CoC7.InsanityName": "광기", + + "CoC7.NewSkillName": "새 기능", + "CoC7.AddSkill": "기능 추가", + "CoC7.DevelopemmentPhase": "성장 단계", + "CoC7.RecoverLuckPoints": "행운 점수 회복", + "CoC7.SkillCantGainXp": "기능이 자동으로 경험치를 얻지 못합니다.", + "CoC7.SkillUnflagForDevelopement": "성장 비표시", + "CoC7.SkillFlagForDevelopement": "성장 표시", + "CoC7.RollAll4Dev": "성장할 모든 기능에 대해 판정", + "CoC7.RollLuck4Dev": "행운점수 성장에 대해 판정", + "CoC7.DevRollTitle": "{item}성장에 대해 판정: {die}/{score}%", + "CoC7.DevSuccessDetails": "{item} 이(가) {augment} 만큼 향상%", + "CoC7.SanGained": "Gained 2d6 ({results} = {sanGained}) Sanity after mastering {skill} with a {skillValue}%", + "CoC7.DevFailureDetails": "{item}이(가) 향상되지 않음", + "CoC7.DevSuccess": "{item} upgraded ({die}/{score}%) by {augment}%", + "CoC7.DevFailure": "{item} NOT upgraded ({die}/{score}%)", + "CoC7.LuckIncreased": "Luck recovered ({die}/{score}) by {augment} points", + "CoC7.LuckNotIncreased": "Luck NOT recovered ({die}/{score})", + "CoC7.DevelopAttribWarn": "성장/생성중인 속성에 접근할 수 없습니다.", + "CoC7.SkillDetail": "상세", + "CoC7.EditSkill": "기능 편집", + "CoC7.DeleteSkill": "기능 제거", + "CoC7.RangeSkills": "원거리 기능", + "CoC7.MeleeSkills": "근접전 기능", + "CoC7.NewItemName": "새 아이템", + "CoC7.AddItem": "아이템 추가", + "CoC7.EditItem": "아이템 편집", + "CoC7.DeleteItem": "아이템 삭제", + "CoC7.TradeItem": "아이템 교환 / 소지 ", + "CoC7.SortBySkillName": "기능 이름으로 정렬", + "CoC7.SortBySkillValue": "기능 퍼센트로 정렬", + "CoC7.UncommonSkillsShow": "희귀 기능 표시", + "CoC7.UncommonSkillsHide": "희귀 기능 숨김", + + "CoC7.NewBookName": "새로운 서적", + "CoC7.AddBook": "서적 추가", + "CoC7.NewSpellName": "새로운 주문", + "CoC7.AddSpell": "주문 추가", + + "CoC7.AddWeapon": "무기 추가", + "CoC7.NewWeaponName": "새로운 무기", + "CoC7.EditWeapon": "무기 편집", + "CoC7.DeleteWeapon": "무기 삭제", + "CoC7.MeleeWeapons": "근접 무기", + "CoC7.RangeWeapons": "원거리 무기", + "CoC7.WeaponName": "이름", + "CoC7.WeaponSkill": "기능", + "CoC7.WeaponSkillAlt": "Alt-skill", + "CoC7.Inventory": "소지품", + "CoC7.InventoryIsCurrentlyEmpty": "현재 소지품이 없습니다.", + "CoC7.CharacterDevelopment": "성장", + "CoC7.OccupationSkill": "직업 기능", + "CoC7.ArchetypeSkill": "캐릭터 타입 기능", + "CoC7.UseFormula": "주사위 판정 사용", + "CoC7.EnterFormula": "수식 입력", + "CoC7.SanRollHint": "대상에 대한 이성수치 판정", + "CoC7.SANCheckTitle": "이성 감소 : {name} ({sanMin}/{sanMax})", + "CoC7.NoSkill": "기능 없음", + "CoC7.AddWeapontHint": "

              {actor} doesn't have a {weapon}.
              Do you want to create one ?

              ", + + "CoC7.LinkCheck": " {name} 판정", + "CoC7.LinkCheckDiff": "[{difficulty}] {name} 판정", + "CoC7.LinkCheckModif": " {name} 판정({modifier})", + "CoC7.LinkCheckDiffModif": "[{difficulty}] {name} 판정({modifier})", + "CoC7.LinkSanLoss": " 이성 감소 ({sanMin}/{sanMax})", + "CoC7.LinkSanLossDiff": "[{difficulty}] 이성 감소 ({sanMin}/{sanMax})", + "CoC7.LinkSanLossModif": " 이성 감소({modifier}) ({sanMin}/{sanMax})", + "CoC7.LinkSanLossDiffModif": "[{difficulty}] 이성 감소({modifier}) ({sanMin}/{sanMax})", + "CoC7.LinkItem": " {name}", + "CoC7.LinkItemDiff": "[{difficulty}] {name}", + "CoC7.LinkItemModif": " {name} ({modifier})", + "CoC7.LinkItemDiffModif": "[{difficulty}] {name} ({modifier})", + + "CoC7.ManualCreditValues": "Manual Credit Values", + "CoC7.MonetarySymbol": "상징 :", + "CoC7.MonetaryFactor": "요인 :", + "CoC7.AutoCreditValues": "자동 계산 토글", + "CoC7.MonetarySpendingLevel": "레벨 사용 :", + "CoC7.MonetaryCash": "현금 :", + "CoC7.MonetarySpent": "지출 :", + "CoC7.MonetaryAssets": "자산 :", + "CoC7.MonetaryAssetsDetails": "자산 상세", + + "CoC7.PossessionsNotes": "메모 :", + "CoC7.PossessionsNotesHolder": "메모", + + "CoC7.BackgroundNewSection": "새로운 문단 추가", + "CoC7.BackgroundSectionNameHolder": "문단 제목 입력", + "CoC7.BackgroundDeleteSection": "문단 삭제", + "CoC7.BackgroundSectionMoveUp": "위로", + "CoC7.BackgroundSectionMoveDown": "아래로", + + "CoC7.creatureFightingSkill": "근접전", + + "CoC7.InvoluntaryAction": "원치 않는 행동", + "CoC7.InvoluntaryActionPerfomed": "원치 않는 행동을 수행했습니다", + "CoC7.SanityCheck": "이성 판정", + "CoC7.IntCheck": "지능 판정", + "CoC7.NoSanLoss": "이성 손실 없음", + "CoC7.SANLoss": "이성 손실", + "CoC7.SanityCheckPerformed": "트라우마적 사건에 노출되었습니다.", + "CoC7.InvoluntaryActionPerformed": "잠시동안 스스로 제어할 수 없습니다.", + "CoC7.SanityLost": "이성치 손실", + "CoC7.MemoryRepressed": "당신은 그 기억을 상기시키고 당신의 무의식에 묻습니다.", + "CoC7.RememberEverything": "당신은 모든것을 기억합니다.", + "CoC7.BoutOfMadnesslasted": "Your bout of madness lasted", + "CoC7.EnteringBoutOfMadness": "You experience a bout of madness", + "CoC7.GrowingAccustomedToAwfulness": "Your getting used to horror. (Your sanity loss is limited).", + "CoC7.ImmuneToAwfulness": "Your mind is immune to this awfulness. (No sanity loss).", + "CoC7.InvestigatorPhobiaGained": "The investigator gain a phobia", + "CoC7.PhobiaGained": "You gain a phobia", + "CoC7.InvestigatorManiaGained": "The investigator gain a mania", + "CoC7.ManiaGained": "You gain a mania", + "CoC7.AlreadyUnderlyingInsanity": "Investigator already in an underlying insanity state.", + "CoC7.IndefinitelyInsane": "You become indefinitely insane.", + "CoC7.TemporaryInsane": "You become temporary insane.", + "CoC7.GoodForAsylum": "You're good to be sent to the asylum", + "CoC7.BoutOfMadness": "Bout of madness", + "CoC7.BoutRealTime": "Bout of madness: Real time", + "CoC7.BoutSummary": "Bout of madness: Summary", + "CoC7.EndBoutOfMadness": "End bout of madness", + "CoC7.InsanityType": "Type of insanity", + "CoC7.Phobia": "Phobia", + "CoC7.Mania": "Mania", + "CoC7.MaxSanloss": "Max loss", + "CoC7.MinSanloss": "Min loss", + "CoC7.AlreadyLost": "Already lost", + "CoC7.CreatureMaxLoss": "Creature max loss", + "CoC7.MaxLossToCreature": "Max loss to this creature", + "CoC7.ResetCreatureSan": "Reset creature's history", + "CoC7.ResetSpecieSan": "Reset specie's history", + "CoC7.KeepData": "Keep creature's data", + "CoC7.BoutActive": "(Bout) Immune to SAN loss", + "CoC7.AlreadyInABout": "You're already suffering a bout of madness and are immune to further loss of sanity.", + "CoC7.PlayerPermanentlyInsane": "Player Permanently Insane", + "CoC7.MythosFirstEncounter": "Award Mythos Experience (+5% First time)", + "CoC7.MythosAlreadyEncountered": "Award Mythos Experience (+1%)", + "CoC7.DisregardMythosGain": "No Mythos gain", + "CoC7.MythosGain": "Mythos gain", + "CoC7.YouGainedCthulhuMythos": "Your mind quail before the unearthly manifestation (+{value}% Cthulhu Mythos)", + "CoC7.CardResolved": "Card resolved", + + "CoC7.SpellCastingTime": "시전 시간", + "CoC7.SpellCastingCost": "시전 비용", + "CoC7.CallSpell": "외침", + "CoC7.DismissSpell": "취소", + "CoC7.ContactSpell": "접촉", + "CoC7.SummonSpell": "소환", + "CoC7.BindSpell": "속박", + "CoC7.EnchantmentSpell": "인챈트", + "CoC7.GateSpell": "Gate", + "CoC7.CombatSpell": "전투", + "CoC7.SpellType": "주문 타입", + + "CoC7.BookHasNothingMoreToTeach": "{book} has nothing more to teach. Cthulhu Mythos skill of {actor} is greater than this Mythos Rating.", + "CoC7.BookType": "서적 타입", + "CoC7.Content": "내용", + "CoC7.CthulhuMythosFinal": "Mythos Final", + "CoC7.CthulhuMythosInitial": "Mythos Initial", + "CoC7.Development": "성장", + "CoC7.DifficultyLevel": "난이도", + "CoC7.DragSpell": "Drag spells here to insert them into the book...", + "CoC7.FullStudies": "Full Studies", + "CoC7.Gains": "습득", + "CoC7.GainsForReading": "Skill gains for reading {book}.", + "CoC7.InitialReading": "첫 독서", + "CoC7.InitialReadingNeeded": "{actor} needs to perform an Initial Reading on {book} to be able to advance through Full Study progress.", + "CoC7.LearnSpellAttempt": "Attempt to learn spell {spell}, from {book}.", + "CoC7.MarkedForDevelopment": "Marked for development", + "CoC7.Mythos": "신화", + "CoC7.MythosRating": "신화 등급", + "CoC7.NotOwned": "This Item needs to be owned by an Actor to perform this action.", + "CoC7.Occult": "오컬트", + "CoC7.Points": "수치", + "CoC7.Progress": "진행", + "CoC7.RedoFullStudy": "Redo Full Study", + "CoC7.ReadAttempt": "Attempt to read {book} ({language}), {difficulty} difficulty.", + "CoC7.ReadingMythosTome": "Reading {book}.", + "CoC7.Specific": "특수한", + "CoC7.SpellsLearned": "주문을 배움", + "CoC7.StudyTime": "Study Time", + "CoC7.UnknownLanguage": "{actor} do not know the language in which this book is written.", + "CoC7.Unreadable": "해독 불가", + + "CoC7.Crew": "Crew", + "CoC7.Origin": "Origin", + "CoC7.ArmedVehicle": "군용 탈것", + + "CoC7.PulpTalents": "펄프 재능", + "CoC7.TalentType": "재능 타입", + "CoC7.PhysicalTalent": "신체적", + "CoC7.MentalTalent": "정신적", + "CoC7.CombatTalent": "전투", + "CoC7.MiscellaneousTalent": "잡다한", + "CoC7.BasicTalent": "기본", + "CoC7.InsaneTalent": "광기", + "CoC7.OtherTalent": "기타", + + "CoC7.Items": "아이템", + "CoC7.Vehicle": "탈것", + "CoC7.Books": "서적", + "CoC7.Status": "상태", + + "CoC7.Classic": "고전", + "CoC7.Lovecraftian": "Lovecraftian", + "CoC7.Pulp": "펄프", + "CoC7.Modern": "현대", + "CoC7.Related": "관련 직업", + "CoC7.OccupationType": "직업 타입", + "CoC7.OccupationPoints": "직업 점수", + "CoC7.Selected": "선택됨", + "CoC7.Multiplier": "배수", + "CoC7.Optional": "선택", + "CoC7.Or": "또는", + "CoC7.Minimum": "최소", + "CoC7.Maximum": "최대", + "CoC7.CommonSkills": "흔한 기능", + "CoC7.OptionSkills": "선택 기능 그룹", + "CoC7.ChoiceNumber": "선택지", + "CoC7.Choose": "Number to choose from", + "CoC7.Chosen": "Chosen", + "CoC7.EmptySkillList": "Add a skill by dropping it here.", + "CoC7.EmptyItemList": "Add an item by dropping it here.", + "CoC7.EmptyCharacterSkillList": "Add a setup, occupation, or skill by dropping it here.", + "CoC7.PersonalSpeciality": "Number of personal or era specialty", + "CoC7.AdditionalSkills": "추가 기능", + "CoC7.SkillSelectionWindow": "Select optional skills", + "CoC7.SelectPersonalSkills": "Select {number} skill(s) as personal interest skills", + "CoC7.ResetOccupation": "직업 초기화", + "CoC7.ResetOccupationHint": "Actor {name} already have an occupation. Do you want to reset it?", + "CoC7.ResetArchetype": "캐릭터 타입 초기화", + "CoC7.ResetArchetypeHint": "Actor {name} already have an archetype. Do you want to reset it?", + "CoC7.CreditOutOfRange": "Credit rating should be between {min} and {max}", + "CoC7.BioSections": "백스토리 문단", + "CoC7.BioSectionName": "백스토리 문단 이름", + "CoC7.SpendPoints": "특성치 점수 할당", + "CoC7.RollCharac": "특성치 굴림", + "CoC7.SelectCoreCharac": "주 특성치 선택", + "CoC7.SkillSpecSelectTitle": "Select/create skill of {specialization} specialization", + "CoC7.SkillSelectBase": "Select base value for skill {name}", + "CoC7.SelectSkill": "Select an existing skill", + "CoC7.CreateNewSkill": "새 기능 생성", + + "CoC7.Characteristics": "특성치", + "CoC7.Characteristic": "특성치", + "CoC7.EnableCharacteristics": "특성치 입력", + "CoC7.UsePoints": "점수 사용", + "CoC7.UseRolls": "판정 사용", + "CoC7.CoreCharacteristics": "주 특성치", + "CoC7.BonusPoints": "보너스 포인트", + "CoC7.SuggestedOccupations": "제안 직업", + "CoC7.SuggestedTraits": "제안 성격", + + "CoC7.PutGunAway": "Put your gun away", + "CoC7.DrawGun": "Draw your gun", + + "CoC7.GmTools": "수호자의 도구", + "CoC7.GmNotes": "수호자의 노트", + "CoC7.DevPhase": "성장 단계", + "CoC7.DevPhaseEnabled": "성장 단계 활성화", + "CoC7.DevPhaseDisabled": "성장 단계 비활성화", + "CoC7.CharCreationMode": "캐릭터 생성 모드", + "CoC7.CharCreationEnabled": "캐릭터 생성 모드 활성화", + "CoC7.CharCreationDisabled": "캐릭터 생성 모드 비활성화", + "CoC7.toggleXP": "경험치 습득", + "CoC7.XPGainEnabled": "캐릭터가 경험치를 얻을 수 있습니다", + "CoC7.XPGainDisabled": "캐릭터가 경험치를 얻을 수 없습니다", + "CoC7.WarnNoActorAvailable": "You do not have any actor controlled nor selected", + "CoC7.WarnMacroIncorrectType": "You can create macro for weapons and skills only", + "CoC7.WarnNoGlobalSpec": "You can't create macro for unspecified specializations", + "CoC7.WarnMacroNoItemFound": "No usable item found", + "CoC7.WarnNoControlledActor": "You don't have any controlled actor", + "CoC7.WarnFastTargetWithWrongMOV": "Fast selected on a target with less than 8 MOV. (MOV: {mov})", + "CoC7.WarnTooManyTarget": "Too many target selected. Keeping only last selected target", + + "CoC7.startRest": "휴식 시작", + "CoC7.dreaming": "The Investigators wait dreaming", + "CoC7.healthRecovered": "체력 1점 회복", + "CoC7.pulpHealthRecovered": "Recovered {number} Hit Points", + "CoC7.dailySanLossRestarted": "Daily Sanity loss counter restarted", + "CoC7.magicPointsRecovered": "Magic Points recovered", + "CoC7.hasCriticalWounds": "Unable to recover Hit Points due to Critical Wounds", + "CoC7.quickHealer": "Quick Healer", + + "CoC7.ErrorNoDodgeSkill": "Actor doesn't have a dodge skill", + "CoC7.ErrorNotEnoughLuck": "{actor} didn't have enough luck to pass the check", + "CoC7.ErrorManeuverNotPossible": "Your opponent is too strong for you to perform a maneuver", + "CoC7.ErrorNotFound": "{missing} not found!", + "CoC7.ErrorNotFoundForActor": "{missing} not found for actor {actor}!", + + "CoC7.InfoLessSkillThanOptions": "There's only {skillCount} and {optionsCount} options, adding all of them", + "CoC7.InfoAllSkillsAlreadySelected": "All skills are already selected.", + + "CoC7.MessageCheckRequestedWait": "{check} roll requested by your Keeper.
              Wait before clicking!
              ", + "CoC7.MessageTargetCheckRequested": "Your keeper has requested {name} make a {check} roll.", + "CoC7.MessageTitleSelectSingleUserForTarget": "Which user can respond to this attack", + "CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.", + "CoC7.MessageBoutOfMadnessTableNotFound": "The result from the madness table was not found, please check all your roll tables are created", + "CoC7.MessageBoutOfMadnessItemNotFound": "The result from the madness table was not found, please check all your statuses are created", + + "CoC7.DealDamage": "Deal {damage} damage points to {target}?", + "CoC7.NoTargetSelected": "You have not selected a target for your {weapon} check. Do you want to proceed anyway?", + + "CoC7.Import": "Import", + "CoC7.Proceed": "Proceed", + "CoC7.Cancel": "Cancel", + + "CoC7.ActorImporter": "Actor Importer", + "CoC7.ActorImporterSummary": "Import an NPC or Creature from description and stats. Just paste the corresponding plain text", + "CoC7.PasteTheDataBelow": "Paste the raw text data below", + "CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed", + "CoC7.SelectActorType": "액터 타입 선택", + "CoC7.NonPlayingCharacter": "Non Playing Character (NPC)", + "CoC7.Creature": "크리쳐", + "CoC7.ConvertFrom6Edition": "Convert from 6 edition", + "CoC7.Convert": "Convert", + "CoC7.NoConvert": "No Convert", + "CoC7.Guess": "Guess", + "CoC7.English": "English", + "CoC7.Spanish": "Spanish", + "CoC7.French": "French", + "CoC7.Korean": "Korean", + "CoC7.TraditionalChinese": "Traditional Chinese", + "CoC7.SelectSourceLanguage": "Select the source text language", + "CoC7.ImportedUnnamedCharacter": "Imported unnamed character", + "CoC7.CreatedImportedCharactersFolder": "test", + "CoC7.ImportedCharactersFolder": "Imported characters", + "CoC7.ImportSkillItemLocations": "Look for skills/spells/weapons in", + "CoC7.ImportActorItemsNone": "None", + "CoC7.ImportActorItemsItem": "아이템", + "CoC7.ImportActorItemsItemWorldModuleSystem": "Items / World / Modules / System", + "CoC7.ImportActorItemsWorldModuleItemSystem": "World / Modules / Items / System", + + "CoC7.HowToTranslateTitle": "번역 방법", + "CoC7.HowToTranslateWarning": "신뢰할 수 없는 모듈은 설치하지 마십시오.", + "CoC7.HowToTranslateInstallBabele": "Install/Update Babele module from Foundry's module manager.", + "CoC7.HowToTranslateInstallTranslation": "Install/Update Translation from Foundry's module manager.", + "CoC7.HowToTranslateEnableTranslation": "Inside the Game World, under Configuration/Manage Modules activate both Babele and the translations.", + "CoC7.HowToTranslateNoTranslation": "Instructions for creating new language translations are available on existing translation modules.", + + "CoC7.Migrate.Title": "업데이트 필요", + "CoC7.Migrate.Message": "

              Your world requires an update to run version {version}.

              Please backup your world folder before starting the upgrade.

              If you do not update your world the system will not work correctly.

              The world may be restarted when completed.

              ", + "CoC7.Migrate.WithModulesMessage": "

              Your world or modules may require an update to run version {version}.

              Please backup your world and module folders listed below before starting the upgrade.

              If you do not update your world the system will not work correctly.

              The following modules contain actors or items so will also be checked.

              {modules}

              The world may be restarted when completed.

              ", + "CoC7.Migrate.GMRequired": "

              Your world requires an update to run version {version}.

              Please wait for your GM to update the system then refresh (F5) this page.

              ", + "CoC7.Migrate.RestartRequired": "

              Your world will now restart to enable these changes

              ", + "CoC7.Migrate.ButtonUpdate": "Update", + "CoC7.Migrate.ButtonSkip": "Skip", + "CoC7.Migrate.ButtonOkay": "Okay", + + "CoC7.Maximize": "최대화", + "CoC7.Summarize": "요약", + + "CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you", + "CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", + "CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2", + + "CoC7.MessageTitleSelectUserToGiveTo": "Give item to another character", + "CoC7.MessageSelectUserToGiveTo": "Which character would you like to give this item to?", + "CoC7.MessageDistanceCalculationFailure": "Unable to calculate distance between tokens, please use the token character sheet.", + + "CoC7.ToolTipSkill": "
              1. Left click roll check with options
              2. Shift + Left click Immediate regular difficulty roll
              1. Right click Opposed check with options
              2. Shift + Right click Immediate opposed check
              1. Alt/Option + Right click Combined check with options
              ", + "CoC7.ToolTipKeeperSkill": "
              1. CTRL + Left click Create roll link
              2. {other}
              ", + "CoC7.ToolTipKeeperStandbySkill": "
            22. Left click Request a roll from {name}
            23. ", + "CoC7.ToolTipDB": "
              1. Left click Immediate regular difficulty roll
              ", + "CoC7.ToolTipKeeperSanity": "
            24. CTRL + Alt/Option Create sanity check roll link
            25. ", + "CoC7.ToolTipAutoToggle": "
              1. Left click Toggle automatic calculation / manual entry
              2. ", + "CoC7.ToolTipSkillFlagToggle": "
                1. Double Click Toggle flag status
                2. ", + "CoC7.ToolTipSkillFlagged": "Flagged for development", + "CoC7.ToolTipSkillUnflagged": "Not flagged for development", + + "SETTINGS.TitleRules": "룰", + "SETTINGS.TitleInitiative": "초기 세팅", + "SETTINGS.TitleRoll": "주사위 세팅", + "SETTINGS.TitleChatCards": "Chat Cards Settings", + "SETTINGS.TitleScene": "장면 세팅", + "SETTINGS.TitleSheet": "Sheet Settings", + "SETTINGS.TitleGameArtwork": "Game Artwork Settings", + "SETTINGS.TitleWeapon": "Weapon Settings", + "SETTINGS.TitleDiceSoNice": "Dice So Nice Settings", + "SETTINGS.TitleDeveloperDebug": "Developer And Debug Settings", + "SETTINGS.TitleRollTable": "", + "SETTINGS.DebugMode": "System Debug Mode", + "SETTINGS.DebugModeHint": "!!재시작 필요!!", + "SETTINGS.DefautDifficulty": "Default check difficulty", + "SETTINGS.DefaultDifficultyHint": "You can choose the default difficulty for checks. Unknown will roll checks without the player knowing the check difficulty.", + "SETTINGS.CheckDifficultyRegular": "Default difficulty", + "SETTINGS.CheckDifficultyUnknown": "Unknown difficulty", + "SETTINGS.showIconsOnly": "On summarized sheet, show only icons on skills list.", + "SETTINGS.UseToken": "Use token image", + "SETTINGS.UseTokenHint": "Use token image instead of portraits in chat-cards", + "SETTINGS.DisplayActorOnCard": "Display actor on card", + "SETTINGS.DisplayActorOnCardHint": "Display the actor's image/token on combat chat-cards", + "SETTINGS.InitiativeRule": "Select initiative rule", + "SETTINGS.InitiativeRuleHint": "You can select basic initiative rule (using DEX value) or optional rule (using a roll)", + "SETTINGS.InitiativeRuleBasic": "Basic", + "SETTINGS.InitiativeRuleOptional": "Optional", + "SETTINGS.displayInitDices": "Display init dice", + "SETTINGS.displayInitDicesHint": "Display the dices when rolling for initiative (Optional rules only)", + "SETTINGS.displayInitAsText": "Display init text", + "SETTINGS.displayInitAsTextHint": "Display initiative as text instead of number (Optional rules only)", + "SETTINGS.PulpRules": "Pulp rules", + "SETTINGS.PulpRulesHint": "Alow the usage of Pulp Rules (Archetype, Talent, HP), !early implementation!", + "SETTINGS.developmentRollForLuck": "Recoverable Luck points", + "SETTINGS.developmentRollForLuckHint": "Each player can make an improvement check for their Luck on Development Phase", + "SETTINGS.displayPlayerNameOnSheet": "Display player's name on sheet", + "SETTINGS.DisregardAmmo": "Disregard Ammo count.", + "SETTINGS.DisregardAmmoHint": "Enabling this will not take in account the number of bullets loaded in the gun.", + "SETTINGS.DisregardUsePerRound": "Disregard Uses per Rounds.", + "SETTINGS.DisregardUsePerRoundHint": "Enabling this will allow you to fire as much as you want, regardless of the uses per round of the weapon.", + "SETTINGS.RestrictGridSpaces": "Restrict measurement to grid spaces", + "SETTINGS.RestrictGridSpacesHint": "For range combat, if selected the distances will be measured in grid spaces, if not the 'real' (euclidean) distance will be used.", + "SETTINGS.StatusPlayerEditable": "Player can modify status", + "SETTINGS.StatusPlayerEditableHint": "Let your player modify their status (prone, unconscious, dying, dead) and reset their daily SAN loss", + "SETTINGS.SyncDice3D": "[DsN] Sync dice", + "SETTINGS.SyncDice3DHint": "When using DsN, sync dice between clients", + "SETTINGS.UnitDieColorset": "[DsN] Unit die colorset", + "SETTINGS.UnitDieColorsetHint": "When using DsN, colorset to use for unit die. (leave blank to use player default)", + "SETTINGS.TenDieNoMod": "[DsN] Ten die colorset", + "SETTINGS.TenDieNoModHint": "When using DsN, colorset to use for single ten die. (leave blank to use player default)", + "SETTINGS.TenDieBonus": "[DsN] Ten bonus dice colorset", + "SETTINGS.TenDieBonusHint": "When using DsN, colorset to use for ten bonus dice. (leave blank to use player default)", + "SETTINGS.TenDiePenalty": "[DsN] Ten penalty dice colorset", + "SETTINGS.TenDiePenaltyHint": "When using DsN, colorset to use for penalty bonus dice. (leave blank to use player default)", + "SETTINGS.OverrideGameArtwork": "Override game Artwork", + "SETTINGS.OverrideGameArtworkHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default", + "SETTINGS.ArtPauseImage": "Pause image", + "SETTINGS.ArtPauseImageHint": ". Type 'null' to remove image", + "SETTINGS.ArtPauseText": "Pause text", + "SETTINGS.ArtPauseTextHint": "Leave blank for default", + "SETTINGS.OverrideSheetArtwork": "Override Sheet Artwork", + "SETTINGS.OverrideSheetArtworkHint": "!!RESTART REQUIRED!! gives access to advance sheet config, leave blank for default", + "SETTINGS.ArtWorkSheetBackground": "Character sheet background", + "SETTINGS.ArtWorkSheetBackgroundHint": "type 'null' to remove background, blank for default", + "SETTINGS.ArtWorkSheetBackgroundType": "Background type", + "SETTINGS.BackgroundSlice": "Background image will be sliced (css:border-image)", + "SETTINGS.BackgroundAuto": "Scales the image maintening proportions (css:auto)", + "SETTINGS.BackgroundContain": "Scales to fill without croping/stretching (css:contain)", + "SETTINGS.BackgroundCover": "Scales to fill with croping/stretching (css:cover)", + "SETTINGS.ArtWorkOtherSheetBackground": "Other sheet background", + "SETTINGS.ArtWorkOtherSheetBackgroundHint": "type 'null' to remove background. Only for items and vehicle for now", + "SETTINGS.ArtworkSheetImage": "Character sheet image", + "SETTINGS.ArtworkSheetImageHint": "type 'null' to remove image", + "SETTINGS.ArtworkFrontColor": "Main color", + "SETTINGS.ArtworkFrontColorHint": "Used for all elements", + "SETTINGS.ArtworkBackgroundColor": "Secondary color", + "SETTINGS.ArtworkBackgroundColorHint": "Used for background and inputs", + "SETTINGS.ArtworkInteractiveColor": "Interactive elements color", + "SETTINGS.ArtworkInteractiveColorHint": "Used for interactives/rollables elements", + "SETTINGS.ArtworkFixedSkillLength": "Limit skill name length", + "SETTINGS.ArtworkFixedSkillLengthHint": "The skill length in the skill tab will be limited for a more compact sheet", + "SETTINGS.ArtworkMainFont": "Main font", + "SETTINGS.ArtworkMainFontBold": "Main font (bold)", + "SETTINGS.ArtworkMainFontSize": "Default font size (px)", + "SETTINGS.BoutOfMadnessSummaryTable": "Bout of madness (Summary) table", + "SETTINGS.BoutOfMadnessRealTimeTable": "Bout of madness (Real Time) table", + "SETTINGS.LetKeeperDecide": "Let keeper decide", + "SETTINGS.DisplayResultType": "Display dice result type (text)", + "SETTINGS.DisplayCheckSuccessLevel": "Display check level of success (stars)", + "SETTINGS.PlayerUnlockSheetMode": "Player can unlock sheet", + "SETTINGS.AlwaysEditable": "always", + "SETTINGS.CreationModeOnly": "in creation mode only", + "SETTINGS.NeverEditable": "never (Keeper only)", + "SETTINGS.StanbyGMRolls": "Standby Keeper rolls", + "SETTINGS.StanbyGMRollsHint": "When the Keeper is making a roll from an assigned character sheet, display a roll button instead of rolling", + "SETTINGS.AllowFlatDiceModifier": "Flat dice modifier", + "SETTINGS.AllowFlatDiceModifierHint": "Allows dice roll results to be modified by a flat value.", + "SETTINGS.AllowFlatThresholdModifier": "Flat value modifier", + "SETTINGS.AllowFlatThresholdModifierHint": "Allows checks success value to be modified by a flat value.", + "SETTINGS.OpposedRollTieBreaker": "Opposed rolls Viriato139ac tie breaker", + "SETTINGS.OpposedRollTieBreakerHint": "In case of a tie during opposed roll, winner is determined by highest rolled value, not higher skill.", + "SETTINGS.SelfRollWhisperTarget": "Self roll notification:", + "SETTINGS.SelfRollWhisperTargetHint": "As a GM, when doing self check roll, who do you want to send a notification to.", + "SETTINGS.DoNotAdvise": "Keep it for yourself.", + "SETTINGS.AdviseOwnersOnly": "Notify actor's owner", + "SETTINGS.AdviseAllPlayer": "Notify all players", + "SETTINGS.OneBlockBackStory": "One block backstory", + "SETTINGS.OneBlockBackStoryHint": "Turn backstory to one editor block, but you can format/add links.", + "SETTINGS.EnableStatusIcons": "Enable status icons", + "SETTINGS.EnableStatusIconsHint": "Set if combat and sanity effects icons are shown in tokens.", + "SETTINGS.ShowExperimentalFeatures": "Show Experimental Features", + "SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds", + "CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.", + "SETTINGS.CheckElevation": "Include elevation in distance", + "SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations", + "CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never" + } diff --git a/system.json b/system.json index 02b8b89d..784e5c0a 100644 --- a/system.json +++ b/system.json @@ -105,6 +105,11 @@ "lang": "cs", "name": "Čeština", "path": "lang/cs.json" + }, + { + "lang": "ko", + "name": "한국어", + "path": "lang/ko.json" } ], "socket": true, From eae3dbe011a6ca2590762d68d06cd2fff50942e1 Mon Sep 17 00:00:00 2001 From: Grischa Brockhaus Date: Sun, 31 Oct 2021 13:45:09 +0100 Subject: [PATCH 283/726] German translation: * Added many missing entries * Changed some old entries in order to have the magic book tab design more smooth. --- lang/de.json | 216 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 193 insertions(+), 23 deletions(-) diff --git a/lang/de.json b/lang/de.json index 9f31954e..98bf99ad 100644 --- a/lang/de.json +++ b/lang/de.json @@ -1,6 +1,24 @@ { "CoC7.title": "Call of Cthulhu 7te Edition (Inoffiziell)", + "CoC7.Entities.Character": "Character", + "CoC7.Entities.Container": "Container", + "CoC7.Entities.Creature": "Kreatur", + "CoC7.Entities.Npc": "NSC", + "CoC7.Entities.Vehicle": "Fahrzeug", + + "CoC7.Entities.Archetype": "Archetyp", + "CoC7.Entities.Book": "Buch", + "CoC7.Entities.Chase": "Verfolgungsjagd", + "CoC7.Entities.Item": "Gegenstand", + "CoC7.Entities.Occupation": "Beruf", + "CoC7.Entities.Setup": "Setup", + "CoC7.Entities.Skill": "Fertigkeit", + "CoC7.Entities.Spell": "Zauberspruch", + "CoC7.Entities.Status": "Status", + "CoC7.Entities.Talent": "Talent", + "CoC7.Entities.Weapon": "Waffe", + "CHARAC.STR": "ST", "CHARAC.Strengh": "Stärke", "CHARAC.Strength": "Stärke", @@ -18,7 +36,7 @@ "CHARAC.Power": "Mana", "CHARAC.EDU": "BI", "CHARAC.Education": "Bildung", - + "CoC7.PlayerName": "Spieler", "CoC7.Name": "Name", "CoC7.Archetype": "Archetyp", "CoC7.Occupation": "Beruf", @@ -72,6 +90,7 @@ "CoC7.Spells": "Zaubersprüche", "CoC7.Spell": "Zauberspruch", "CoC7.Spells&Notes": "Zaubersprüche & Notizen", + "CoC7.Weapons": "Waffen", "CoC7.Effects": "Effekte", "CoC7.Cost": "Kosten", "CoC7.Source": "Quelle", @@ -80,6 +99,7 @@ "CoC7.Other": "Weitere", "CoC7.rounds": "Runde(n)", "CoC7.hours": "Stunde(n)", + "CoC7.weeks": "Woche(n)", "CoC7.remove": "Entfernen", "CoC7.Any": "Eine", "CoC7.All": "Alle", @@ -93,12 +113,20 @@ "CoC7.Attribute": "Merkmal", "CoC7.Collapse": "Einklappen", "CoC7.Expand": "Ausklappen", - "CoC7.Blind": "Blind", "CoC7.Label": "Label", "CoC7.Icon": "Icon", "CoC7.Check": "Probe", "CoC7.ItemWeapon": "Gegenstand (Waffe)", + "CoC7.AttacksPerRound": "Angriffe pro Runde", + + "CoC7.Cast": "Ausführen", + "CoC7.SanityCost": "Stabilitätskosten", + "CoC7.PowerCost": "Mana Kosten", + "CoC7.HitPointsCost": "Trefferpunkte Kosten", + "CoC7.MagicPointsCost": "Magiepunkte Kosten", + "CoC7.OtherCosts": "Andere Kosten", + "CoC7.CastingSpell": "Führt {spell} aus.", "CoC7.CopyToClipboard": "In Zwischenablage kopieren", "CoC7.WhisperToSelection": "An ausgewählte Tokens flüstern", @@ -186,6 +214,7 @@ "CoC7.ImpaleTitle": "Die Waffe kann den Gegner aufpsießen", "CoC7.Target": "Ziel", "CoC7.TargetOutOfRange": "Ziel außerhalb der Reichweite", + "CoC7.NoTargetToDamage": "Es gibt kein Ziel, dem der Schaden zugefügt werden kann.", "CoC7.ShotIsImpossible": "Der Schuss ist unmöglich", "CoC7.OutOfAmmo": "Keine Munition mehr vorhanden", "CoC7.OutOfShots": "Das Magazin ist leer", @@ -195,6 +224,7 @@ "CoC7.FightBack": "Zurückschlagen", "CoC7.Dodge": "Ausweichen", "CoC7.Maneuver": "Kampfmanöver", + "CoC7.NoResponse": "Keine Reaktion", "CoC7.OutNumbered": "In der Unterzahl", "CoC7.combatCard.surprised": "Überrascht", "CoC7.combatCard.autoSuccess": "Automatischer Erfolg", @@ -206,6 +236,7 @@ "CoC7.TitleSurprised": "Einen Bonuswürfel hinzufügen wenn das Ziel überrascht ist", "CoC7.TitleAutoSuccess": "Angriff trifft automatisch", "CoC7.WinnerRollDamage": "{name} gewinnt das Kräftemessen. Würfle den Schaden.", + "CoC7.InitiatorMissed": "{name} verfehlt.", "CoC7.NoWinner": "Keine Seite gewinnt das Kräftemessen.", "CoC7.DodgeSuccess": "{name} ist ausgewichen!", "CoC7.ManeuverSuccess": "Das Kampfmanöver von {name} war erfolgreich.", @@ -221,6 +252,7 @@ "CoC7.rangeCombatCard.SingleShot": "Einzelschuss", "CoC7.rangeCombatCard.MultipleShots": "mehrere Schüsse", + "CoC7.AutomaticFire": "Automatisches Feuer", "CoC7.rangeCombatCard.Burst": "Feuerstoß", "CoC7.rangeCombatCard.FullAuto": "Vollautomatisch", "CoC7.rangeCombatCard.BaseRange": "Basisreichweite", @@ -241,7 +273,8 @@ "CoC7.BulletsFired": "verschossene Kugeln", "CoC7.Shots": "Schüsse", "CoC7.Shoot": "schießen", - + "CoC7.ShotBullets": "Schoß {bullets} Kugeln auf {actor}.", + "CoC7.ShotVoley": "Schoß einen Hagel von {bullets} Kugeln auf {actor}.", "CoC7.rangeCombatCard.AimingTitle": "Füge einen Bonuswürfel für den ersten Schuss hinzu.", "CoC7.rangeCombatCard.CoverTitle": "Füge einen Strafwürfel hinzu. Das Ziel ist in Deckung oder hat es erfolgreich geschafft sich in Deckung zu werfen.", "CoC7.rangeCombatCard.PointBlankRangeTitle": "Füge einen Bünuswürfel hinzu. Das Ziel befindet sich direkt vor dir.", @@ -251,6 +284,11 @@ "CoC7.rangeCombatCard.InMeleeTitle": "Füge einen Strafwürfel hinzu. Das Ziel befindet sich im Nahkampf.", "CoC7.rangeCombatCard.FastMovingTargetTitle": "Füge einen Strafwürfel hinzu. Das Ziel ist schnell (BW > 8) und bewegt sich mit voller Geschwindigkeit.", + "CoC7.meleeCombatDamageTakes": "nimmt", + "CoC7.meleeCombatDamageFrom": "von", + "CoC7.meleeCombatDamageDeals": "verarbeitet", + "CoC7.meleeCombatDamageWith": "mit", + "CoC7.DropZone": "Ablage Bereich", "CoC7.Value": "Wert", @@ -261,8 +299,8 @@ "CoC7.SkillArchetype": "Archetyp", "CoC7.SkillOccupation": "Beruf", "CoC7.SkillPersonal": "Hobby", - "CoC7.SkillTotalExperience": "Erfahrungspunkte", + "CoC7.SkillTotalArchetype": "Archetyp Punkte", "CoC7.SkillTotalOccupation": "Berufspunkte", "CoC7.SkillTotalPersonal": "Hobbypunkte", @@ -340,8 +378,11 @@ "CoC7.DodgeSkillName": "Ausweichen", "CoC7.CthulhuMythosName": "Cthulhu Mythos", "CoC7.CreditRatingSkillName": "Finanzkraft", + "CoC7.DriveAutoSkillName": "Drive Auto", "CoC7.FightingSpecializationName": "Nahkampf", "CoC7.FirearmSpecializationName": "Fernkampf", + "CoC7.DriveSpecializationName": "Fahren", + "CoC7.PilotSpecializationName": "Steuern", "CoC7.AnySpecName": "Eine", "CoC7.BoutOfMadnessName": "Am Rande des Wahnsinns", "CoC7.InsanityName": "Wahnsinnig", @@ -349,15 +390,21 @@ "CoC7.NewSkillName": "neue Fertigkeit", "CoC7.AddSkill": "Fertigkeit hinzufügen", "CoC7.DevelopemmentPhase": "Phase der Charakterentwicklung", + "CoC7.RecoverLuckPoints": "Glückspunkte wiederherstellen", "CoC7.SkillCantGainXp": "Fertigkeit kann nicht automatisch an Erfahrung gewinnen", "CoC7.SkillUnflagForDevelopement": "nicht mehr für die Charakterentwicklung markieren", "CoC7.SkillFlagForDevelopement": "für die Charakterentwicklung markieren", "CoC7.RollAll4Dev": "Auf alle Fertigkeiten für die Charakterentwicklung würfeln", + "CoC7.RollLuck4Dev": "Würfele Glück für die Charakterentwicklung", "CoC7.DevRollTitle": "Würfle {item} für die Charakterentwicklung: {die}/{score}%", "CoC7.DevSuccessDetails": "{item} wurde um {augment}% verbessert", + "CoC7.SanGained": "Erhielt 2d6 ({results} = {sanGained}) Stabilität, nach Meisterung von {skill} mit einer {skillValue}%", "CoC7.DevFailureDetails": "{item} wurde nicht verbessert", "CoC7.DevSuccess": "{item} hat sich verbessert ({die}/{score}%) um {augment}%", "CoC7.DevFailure": "{item} hat sicht nicht verbessert ({die}/{score}%)", + "CoC7.LuckIncreased": "Glück wiederhergestellt ({die}/{score}) mit {augment} Punkten", + "CoC7.LuckNotIncreased": "Glück NICHT wiederhergestellt ({die}/{score})", + "CoC7.DevelopAttribWarn": "Auf einige Attribute kannst Du während der Charaktererstellung/-entwicklung nicht zugreifen.", "CoC7.SkillDetail": "Details", "CoC7.EditSkill": "Fertigkeit bearbeiten", "CoC7.DeleteSkill": "Fertigkeit entfernen", @@ -367,6 +414,17 @@ "CoC7.AddItem": "Gegenstand hinzufügen", "CoC7.EditItem": "Gegenstand bearbeiten", "CoC7.DeleteItem": "Gegenstand löschen", + "CoC7.TradeItem": "Handle / Speichere Gegenstand", + "CoC7.SortBySkillName": "Nach Fertigkeitsnamen sortieren", + "CoC7.SortBySkillValue": "Nach Fertigkeitsprozentwert sortieren", + "CoC7.UncommonSkillsShow": "Ungewöhnliche Fertigkeiten zeigen", + "CoC7.UncommonSkillsHide": "Ungewöhnliche Fertigkeiten verstecken", + + "CoC7.NewBookName": "Neues Buch", + "CoC7.AddBook": "Buch hinzufügen", + "CoC7.NewSpellName": "Neuer Zauberspruch", + "CoC7.AddSpell": "Zauberspruch hinzufügen", + "CoC7.AddWeapon": "Waffen hinzufügen", "CoC7.NewWeaponName": "neue Waffe", "CoC7.EditWeapon": "Waffe bearbeiten", @@ -377,6 +435,7 @@ "CoC7.WeaponSkill": "Waffen Fertigkeit", "CoC7.WeaponSkillAlt": "Alternative Waffen Fertigkeit", "CoC7.Inventory": "Inventar", + "CoC7.InventoryIsCurrentlyEmpty": "Das Inventar ist derzeit leer.", "CoC7.CharacterDevelopment": "Charakterentwicklung", "CoC7.OccupationSkill": "Berufsfertigkeit", "CoC7.ArchetypeSkill": "Archetypenfertigkeit", @@ -469,13 +528,6 @@ "CoC7.YouGainedCthulhuMythos": "Dein Bewusstsein erzittert vor der unheimlichen Manifestation kosmischen Schreckens (+{value}% Cthulhu-Mythos)", "CoC7.CardResolved": "Karte aufgelöst", - "CoC7.CMI": "CMQ", - "CoC7.CthulhuMythosInitial": "Cthulhu-Mythos Wert durch Querlesen", - "CoC7.CMF": "CMS", - "CoC7.CthulhuMythosFinal": "Cthulhu-Mythos Wert durch eingehendes Studium", - "CoC7.Occult": "Okkult", - "CoC7.MythosRating": "Mythoswert", - "CoC7.StudyTime": "Studierzeit", "CoC7.SpellCastingTime": "Zauberdauer", "CoC7.SpellCastingCost": "Zauberkosten", "CoC7.CallSpell": "Rufe", @@ -487,14 +539,39 @@ "CoC7.GateSpell": "Reise- und Transportzauber", "CoC7.CombatSpell": "Kampfzauber", "CoC7.SpellType": "Zaubertyp", + + "CoC7.BookHasNothingMoreToTeach": "{book} kann nichts mehr lehren. Cthulhu Mythos Fertigkeit von {actor} ist größer als der Mythoswert.", "CoC7.BookType": "Buch Typ", - "CoC7.MythosBook": "Mythos Buch", - "CoC7.OccultBook": "Okkulter Foliant", - "CoC7.Unidentified": "Unidentifizierte Beschreibung", + "CoC7.Content": "Inhalt", + "CoC7.CthulhuMythosFinal": "Cthulhu-Mythos durch Studium", + "CoC7.CthulhuMythosInitial": "Cthulhu-Mythos durch Querlesen", + "CoC7.Development": "Entwicklung", + "CoC7.DifficultyLevel": "Schwierigkeitsgrad", + "CoC7.DragSpell": "Ziehe Zaubersprüche hier rein, um sie dem Buch hinzuzufügen...", + "CoC7.FullStudies": "Eingehendes Studium", + "CoC7.Gains": "Zugewinne", + "CoC7.GainsForReading": "Fertigkeitn Zugewinne durch lesen des {book}.", + "CoC7.InitialReading": "Querlesen", + "CoC7.InitialReadingNeeded": "{actor} muss {book} erst querlesen, um mit eingehenden Studien weiterzukommen.", + "CoC7.LearnSpellAttempt": "Versuch, den Zauberspruch {spell} aus {book} zu lernen.", + "CoC7.MarkedForDevelopment": "In Entwicklung markiert", + "CoC7.Mythos": "Mythos", + "CoC7.MythosRating": "Mythoswert", + "CoC7.NotOwned": "Der Gegenstand muss sich im Besitz eines Spielers befinden, damit diese Aktion ausgeführt werden kann.", + "CoC7.Occult": "Okkult", + "CoC7.Points": "Punkt(e)", + "CoC7.Progress": "Fortschritt", + "CoC7.RedoFullStudy": "Eingehendes Studium wiederholen", + "CoC7.ReadAttempt": "Versuch, {book} in ({language}) zu lesen, {difficulty} Schwierigkeit.", + "CoC7.ReadingMythosTome": "Lese {book}.", + "CoC7.Specific": "Spezifisch", + "CoC7.SpellsLearned": "Zaubersprüche gelernt", + "CoC7.StudyTime": "Studierzeit", + "CoC7.UnknownLanguage": "{actor} kennt die Sprache nicht, in der das Buch geschrieben ist.", + "CoC7.Unreadable": "Nicht lesbar", - "CoC7.Crew": "Crew", + "CoC7.Crew": "Besatzung", "CoC7.Origin": "Herkunftsort", - "CoC7.Model": "Modell", "CoC7.ArmedVehicle": "Bewaffnetes Fahrzeug", "CoC7.PulpTalents": "Pulp Fertigkeiten", @@ -532,6 +609,7 @@ "CoC7.Chosen": "ausgewählt", "CoC7.EmptySkillList": "Füge eine Fertigkeit hinzu indem du sie hier ablegst.", "CoC7.EmptyItemList": "Füge einen Gegenstand hinzu indem du ihn hier ablegst.", + "CoC7.EmptyCharacterSkillList": "Füge ein Setuo, einen Beruf oder eine Fertigkeit hinzu, indem Du sie hier ablegst.", "CoC7.PersonalSpeciality": "Anzahl der Hobby- oder Ära-Spezialisierungen", "CoC7.AdditionalSkills": "zusätzliche Fertigkeiten", "CoC7.SkillSelectionWindow": "wähle zusätzliche Fertigkeiten", @@ -551,8 +629,8 @@ "CoC7.SelectSkill": "wähle eine bestehende Fertigkeit", "CoC7.CreateNewSkill": "erstelle eine neue Fertigkeit", - "CoC7.Characteristic": "Charaktereigenschaft", "CoC7.Characteristics": "Charaktereigenschaften", + "CoC7.Characteristic": "Charaktereigenschaft", "CoC7.EnableCharacteristics": "Charaktereigenschaften aktivieren", "CoC7.UsePoints": "verwende die Punkteverteilung", "CoC7.UseRolls": "verwende Zufallswürfe", @@ -588,6 +666,7 @@ "CoC7.healthRecovered": "Ein Trefferpunkt wurde wiederhergestellt", "CoC7.pulpHealthRecovered": "{number} Trefferpunkte wurden wiederhergestellt", "CoC7.dailySanLossRestarted": "Der tägliche Stabilitätsverlust-Tracker wurde neugestartet", + "CoC7.magicPointsRecovered": "Magiepunkte wiederhergestellt", "CoC7.hasCriticalWounds": "Eine Wiederherstellung von Lebenspunkten ist durch die schweren Wunden unmöglich.", "CoC7.quickHealer": "schneller Heiler", @@ -596,16 +675,24 @@ "CoC7.ErrorManeuverNotPossible": "Dein Gegner ist zu stark um ein Kampfmanöver auszuführen", "CoC7.ErrorNotFound": "{missing} nicht gefunden!", "CoC7.ErrorNotFoundForActor": "{missing} wurde nicht für Investigator {actor} gefunden!", - "CoC7.InfoLessSkillThanOptions": "Es gibt nur {skillCount} und {optionsCount} Optionen, füge alle hinzu.", - "CoC7.InfoAllSkillsAlreadySelected": "Alle Fertigkeiten sind bereits ausgewählt.", + "CoC7.InfoAllSkillsAlreadySelected": "Alle Fertigkeiten sind bereits ausgewählt.", "CoC7.MessageCheckRequestedWait": "Dein Spielleiter verlangt eine Probe für {check}.
                  Warte bevor du würfelst!
                  ", "CoC7.MessageTargetCheckRequested": "Dein Spielleiter verlangt für {name} eine Probe für {check}.", - + "CoC7.MessageTitleSelectSingleUserForTarget": "Welcher Nutzer auf diesen Angriff reagieren soll", + "CoC7.MessageSelectSingleUserForTarget": "Dieses Token wird von mehreren Nutzern kontrolliert. Bitte wähle aus, welcher Nutzer auf den Angriff reagieren soll.", + "CoC7.MessageBoutOfMadnessTableNotFound": "The result from the madness table was not found, please check all your roll tables are created", + "CoC7.MessageBoutOfMadnessItemNotFound": "The result from the madness table was not found, please check all your statuses are created", + "CoC7.DealDamage": "{damage} Schadenspunkte {target} zufügen?", + "CoC7.NoTargetSelected": "Du hast kein Ziel für Deinen {weapon} Check ausgewählt. Möchtest Du trotzdem fortfahren?", + "CoC7.Import": "Importieren", + "CoC7.Proceed": "Forfahren", + "CoC7.Cancel": "Abbrechen", "CoC7.ActorImporter": "Investigatoren Import", "CoC7.ActorImporterSummary": "Importiere einen NSC oder Kreatur basierende auf ihrer Beschreibung und den Werten. Füge einfach den Text hier ein.", "CoC7.PasteTheDataBelow": "Den Text hier einfügen", + "CoC7.TextFieldInvalidCharacters": "Es gibt ungültige Buchstaben im Text, bitte verbessere sie, ansonsten werden sie einfach entfernt.", "CoC7.SelectActorType": "Typ der Figur auswählen", "CoC7.NonPlayingCharacter": "Nicht Spieler Charakter (NSC)", "CoC7.Creature": "Kreatur", @@ -616,12 +703,65 @@ "CoC7.English": "Englisch", "CoC7.Spanish": "Spanisch", "CoC7.French": "Französisch", + "CoC7.TraditionalChinese": "Traditionelles Chinesisch", "CoC7.SelectSourceLanguage": "Wähle die Originalsprache aus", - + "CoC7.ImportedUnnamedCharacter": "Importiere unbenannten Charakter", + "CoC7.CreatedImportedCharactersFolder": "Erzeuge 'Importierte Charaktere' Ordner", + "CoC7.ImportedCharactersFolder": "Importierte Charaktere", + "CoC7.ImportSkillItemLocations": "Nach Fertigkeiten/Zaubersprüchen/Waffen nachschauen in", + "CoC7.ImportActorItemsNone": "Keine", + "CoC7.ImportActorItemsItem": "Gegenstände", + "CoC7.ImportActorItemsItemWorldModuleSystem": "Gegenstände / Welt / Module / System", + "CoC7.ImportActorItemsWorldModuleItemSystem": "Welt / Module / Gegenstände / System", + "CoC7.HowToTranslateTitle": "Wie übersetzen?", + "CoC7.HowToTranslateWarning": "Bitte installiere keine Module, denen Du nicht vertraust.", + "CoC7.HowToTranslateInstallBabele": "Install/Update Babele module from Foundry's module manager.", + "CoC7.HowToTranslateInstallTranslation": "Install/Update Translation from Foundry's module manager.", + "CoC7.HowToTranslateEnableTranslation": "Inside the Game World, under Configuration/Manage Modules activate both Babele and the translations.", + "CoC7.HowToTranslateNoTranslation": "Instructions for creating new language translations are available on existing translation modules.", + "CoC7.Migrate.Title": "Update erforderlich", + "CoC7.Migrate.Message": "

                  Deine Welt benötigt ein Update, um die Version {version} auszuführen.

                  Bitte sichere Deinen Welten Ordner bevor Du das Update startest.

                  Wenn Du Deine Welt nicht erneuerst, könnte sie nicht mehr korrekt funktionieren.

                  Die Welt sollte nach dem Update neu gestartet werden.

                  ", + "CoC7.Migrate.WithModulesMessage": "

                  Your world or modules may require an update to run version {version}.

                  Please backup your world and module folders listed below before starting the upgrade.

                  If you do not update your world the system will not work correctly.

                  The following modules contain actors or items so will also be checked.

                  {modules}

                  The world may be restarted when completed.

                  ", + "CoC7.Migrate.GMRequired": "

                  Your world requires an update to run version {version}.

                  Please wait for your GM to update the system then refresh (F5) this page.

                  ", + "CoC7.Migrate.RestartRequired": "

                  Die Welt wird nun neu gestartet, um diese Änderungen zu übernehmen

                  ", + "CoC7.Migrate.ButtonUpdate": "Update", + "CoC7.Migrate.ButtonSkip": "Überspringen", + "CoC7.Migrate.ButtonOkay": "Okay", + "CoC7.Maximize": "Maximieren", + "CoC7.Summarize": "Zusammenfassen", + "CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you", + "CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", + "CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2", + "CoC7.MessageTitleSelectUserToGiveTo": "Gegenstand einem anderen Charakter geben", + "CoC7.MessageSelectUserToGiveTo": "Welchem Charakter soll der Gegenstand gegeben werden?", + "CoC7.MessageDistanceCalculationFailure": "Distanzberechnung zwischen Tokens nicht möglich, bitte nutze das Token Chrakterblatt.", + "CoC7.ToolTipSkill": "
                  1. Left click roll check with options
                  2. Shift + Left click Immediate regular difficulty roll
                  1. Right click Opposed check with options
                  2. Shift + Right click Immediate opposed check
                  1. Alt/Option + Right click Combined check with options
                  ", + "CoC7.ToolTipKeeperSkill": "
                  1. CTRL + Left click Create roll link
                  2. {other}
                  ", + "CoC7.ToolTipKeeperStandbySkill": "
                3. Left click Request a roll from {name}
                4. ", + "CoC7.ToolTipDB": "
                  1. Left click Immediate regular difficulty roll
                  ", + "CoC7.ToolTipKeeperSanity": "
                5. CTRL + Alt/Option Create sanity check roll link
                6. ", + "CoC7.ToolTipAutoToggle": "
                  1. Left click Toggle automatic calculation / manual entry
                  2. ", + "CoC7.ToolTipSkillFlagToggle": "
                    1. Double Click Toggle flag status
                    2. ", + "CoC7.ToolTipSkillFlagged": "Flagged for development", + "CoC7.ToolTipSkillUnflagged": "Not flagged for development", + "SETTINGS.TitleRules": "Regeln", + "SETTINGS.TitleInitiative": "Initiative Einstellungen", + "SETTINGS.TitleRoll": "Würfel Einstellungen", + "SETTINGS.TitleChatCards": "Chat Karten Einstellungen", + "SETTINGS.TitleScene": "Szenen Einstellungen", + "SETTINGS.TitleSheet": "Charakterblatt Einstellungen", + "SETTINGS.TitleGameArtwork": "Game Artwork Einstellungen", + "SETTINGS.TitleWeapon": "Waffen Einstellungen", + "SETTINGS.TitleDiceSoNice": "Dice So Nice Einstellungen", + "SETTINGS.TitleDeveloperDebug": "Entwickler und Debug Einstellungen", + "SETTINGS.TitleRollTable": "Würfeltabellen Einstellungen", + "SETTINGS.DebugMode": "System Debug Mode", + "SETTINGS.DebugModeHint": "!!NEUSTART ERFORDERLICH!!", "SETTINGS.DefaultDifficulty": "Standard Proben Schwierigkeitsstufe", "SETTINGS.DefaultDifficultyHint": "Du kannst die Standardschwierigkeit für Proben wählen. Der Eintrag Unbekannte Schwierigkeit wird den Spielern die Schwierigkeit der Probe vorenthalten.", "SETTINGS.CheckDifficultyRegular": "Standard Schwierigkeit", "SETTINGS.CheckDifficultyUnknown": "Unbekannte Schwierigkeit", + "SETTINGS.showIconsOnly": "Zeige auf dem zusammengefassten Charakterblatt nur Icons in der Fertigkeitenliste.", "SETTINGS.UseToken": "Nutze Tokenbild", "SETTINGS.UseTokenHint": "Nutze Tokenbild anstatt des Portraits in Chat-Karten", "SETTINGS.DisplayActorOnCard": "Zeige Figur auf der Chat-Karte", @@ -636,6 +776,9 @@ "SETTINGS.displayInitAsTextHint": "Zeige Initiative als Text anstatt als Zahl an (Nur bei Verwendung der Optionalen Regel).", "SETTINGS.PulpRules": "Pulp-Cthulhu Regeln", "SETTINGS.PulpRulesHint": "BETA IMPLEMENTIERUNGSPHASE:
                      Erlaube die Verwendung der Pulp-Cthulhu Regeln (Archetypen, Talente, Lebensenergie)", + "SETTINGS.developmentRollForLuck": "Glückspunkte wiederherstellem", + "SETTINGS.developmentRollForLuckHint": "Jeder Spieler darf in der Entwicklungsphase einen Verbesserungswurf auf seine Glückspunkte machen", + "SETTINGS.displayPlayerNameOnSheet": "Spielernamen auf Charakterblatt darstellen", "SETTINGS.DisregardAmmo": "Munitionsmenge ignorieren", "SETTINGS.DisregardAmmoHint": "Die Aktivierung wird die Menge der in der Waffe geladenen Kugeln ignorieren.", "SETTINGS.DisregardUsePerRound": "Maximale Verwendung pro Runde ignorieren.", @@ -654,10 +797,21 @@ "SETTINGS.TenDieBonusHint": "Farbschema das bei der Benutzung von DsN für die Zehner Stellen Bonuswürfel verwendet werden soll. (frei lassen für den Standard Wert der Spieler)", "SETTINGS.TenDiePenalty": "[DsN] Zehner Stellen Strafwürfel Farbschema", "SETTINGS.TenDiePenaltyHint": "Farbschema das bei der Benutzung von DsN für die Zehner Stellen Strafwürfel verwendet werden soll. (frei lassen für den Standard Wert der Spieler)", + "SETTINGS.OverrideGameArtwork": "Game Artwork überschreiben", + "SETTINGS.OverrideGameArtworkHint": "!!NEUSTART ERFORDERLICH!! Erlaubt den Zugriff auf erweiterte Spiel Features, leer lassen für Standard", + "SETTINGS.ArtPauseImage": "Pausen Bild", + "SETTINGS.ArtPauseImageHint": ". Tippe 'null' ein, um das Bild zu entfernen", + "SETTINGS.ArtPauseText": "Pausen Text", + "SETTINGS.ArtPauseTextHint": "Leer lassen für Standard", "SETTINGS.OverrideSheetArtwork": "Design des Bogens überschreiben", - "SETTINGS.OverrideSheetArtworkHint": "BENÖTIGT NEUSTART:
                      Bietet Zugriff auf die erweiterte Konfiguration des Bogens. Frei lassen für die Standardkonfiguration.", + "SETTINGS.OverrideSheetArtworkHint": "BENÖTIGT NEUSTART: Bietet Zugriff auf die erweiterte Konfiguration des Bogens. Frei lassen für die Standardkonfiguration.", "SETTINGS.ArtWorkSheetBackground": "Investigatorenbogen Hintergrund", "SETTINGS.ArtWorkSheetBackgroundHint": "Tippe 'null' ein um den Hintergrund zu entfernen", + "SETTINGS.ArtWorkSheetBackgroundType": "Hintergrund Typ", + "SETTINGS.BackgroundSlice": "Background image will be sliced (css:border-image)", + "SETTINGS.BackgroundAuto": "Scales the image maintening proportions (css:auto)", + "SETTINGS.BackgroundContain": "Scales to fill without croping/stretching (css:contain)", + "SETTINGS.BackgroundCover": "Scales to fill with croping/stretching (css:cover)", "SETTINGS.ArtWorkOtherSheetBackground": "Weiterer Bogen Hintergrund", "SETTINGS.ArtWorkOtherSheetBackgroundHint": "Tippe 'null' um den Hintergrund zu entfernen. Aktuell nur für Gegenstände und Fahrzeuge.", "SETTINGS.ArtworkSheetImage": "Investigatorenbogen Bild", @@ -682,6 +836,8 @@ "SETTINGS.AlwaysEditable": "Immer", "SETTINGS.CreationModeOnly": "Nur wenn die Investigatorenerstellung aktiv ist", "SETTINGS.NeverEditable": "Nie (Nur der Spielleiter kann entsperren)", + "SETTINGS.StanbyGMRolls": "Standby Keeper rolls", + "SETTINGS.StanbyGMRollsHint": "When the Keeper is making a roll from an assigned character sheet, display a roll button instead of rolling", "SETTINGS.AllowFlatDiceModifier": "Numerischer Probenmodifikator", "SETTINGS.AllowFlatDiceModifierHint": "Erlaubt es Proben um einen beliebigen numerischen Wert zu modifizieren.", "SETTINGS.AllowFlatThresholdModifier": "Numerischer Grenzwert Modifikator", @@ -694,5 +850,19 @@ "SETTINGS.AdviseOwnersOnly": "Benachrichtige den Spieler des Investigators", "SETTINGS.AdviseAllPlayer": "Benachrichtige alle Spieler", "SETTINGS.OneBlockBackStory": "Hintergrundgeschichte in einem Textblock", - "SETTINGS.OneBlockBackStoryHint": "Wandle den Bereich für die Hintergrundgeschichte in einen Textblock. Dies erlaubt es zu formatieren und Links hinzuzufügen." + "SETTINGS.OneBlockBackStoryHint": "Wandle den Bereich für die Hintergrundgeschichte in einen Textblock. Dies erlaubt es zu formatieren und Links hinzuzufügen.", + "SETTINGS.EnableStatusIcons": "Status Icons anschalten", + "SETTINGS.EnableStatusIconsHint": "Bestimmt, ob Kampf- und Stabilitätsicons beim Token dargestellt werden.", + "SETTINGS.ShowExperimentalFeatures": "Experimentelle Features zeigen", + "SETTINGS.ShowExperimentalFeaturesHint": "Deine Welt könnte in zukünftigen Releases unbenutzbar werden, wenn Du diese Features benutzt. Diese sind nur für Tests, nutze sie NICHT in Deinen Spielwelten", + "CoC7.ExperimentalFeaturesWarning": "Dieses Feature ist 'work in progress' und es wird nicht empfohlen, es in Deinen Spielwelten zu nutzen.", + "SETTINGS.CheckElevation": "Höhe in die Entfernung mit einrechnen", + "SETTINGS.CheckElevationHint": "Höhe bei der Berechnung von Kampfentfernungen mit einrechnen", + "CoC7.toolTipDelay": "Verzögerung in Millisekunden, bis Tooltips angezeigt werden. 0 für 'niemals'", + "CoC7.CMI": "CMQ", + "CoC7.CMF": "CMS", + "CoC7.MythosBook": "Mythos Buch", + "CoC7.OccultBook": "Okkulter Foliant", + "CoC7.Unidentified": "Unidentifizierte Beschreibung", + "CoC7.Model": "Modell" } From f22b9f394f86431fb8e52c08f5135c14a6a5527d Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 31 Oct 2021 13:41:50 +0000 Subject: [PATCH 284/726] Updated translations list --- .github/TRANSLATIONS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index c523f50c..657bbd06 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,6 +2,6 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **es**, **fr**, **ja**, **pl**, **pt-BR**, **sv**, **zh-TW** +The following translations are currently up to date **de**, **es**, **fr**, **ja**, **pl**, **pt-BR**, **sv**, **zh-TW** -The following translations have been abandoned **cn**, **cs**, **de**, [are you able to help?](./ABANDONED.md) +The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) From 64db7a7df6716846cb9842fa5840cccfb3555ebd Mon Sep 17 00:00:00 2001 From: castanhocorreia Date: Sun, 31 Oct 2021 13:41:51 +0000 Subject: [PATCH 285/726] [create-pull-request] automated change --- .github/ABANDONED.md | 180 +------------------------------------------ 1 file changed, 2 insertions(+), 178 deletions(-) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index aba3ec77..f2c3bad3 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -6,8 +6,6 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry [cs.json](#csjson) -[de.json](#dejson) - ## cn.json ``` @@ -209,7 +207,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.LearnSpellAttempt": "Attempt to learn spell {spell}, from {book}.", "CoC7.MarkedForDevelopment": "Marked for development", "CoC7.Mythos": "Mythos", -"CoC7.NotOwned": "This Book needs to be owned by an Actor to perform this action.", +"CoC7.NotOwned": "This Item needs to be owned by an Actor to perform this action.", "CoC7.Points": "point(s)", "CoC7.Progress": "Progress", "CoC7.RedoFullStudy": "Redo Full Study", @@ -454,7 +452,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.LearnSpellAttempt": "Attempt to learn spell {spell}, from {book}.", "CoC7.MarkedForDevelopment": "Marked for development", "CoC7.Mythos": "Mythos", -"CoC7.NotOwned": "This Book needs to be owned by an Actor to perform this action.", +"CoC7.NotOwned": "This Item needs to be owned by an Actor to perform this action.", "CoC7.Points": "point(s)", "CoC7.Progress": "Progress", "CoC7.RedoFullStudy": "Redo Full Study", @@ -545,177 +543,3 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations", "CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never" ``` - -## de.json - -``` -"CoC7.Entities.Character": "Character", -"CoC7.Entities.Container": "Container", -"CoC7.Entities.Creature": "Creature", -"CoC7.Entities.Npc": "NPC", -"CoC7.Entities.Vehicle": "Vehicle", -"CoC7.Entities.Archetype": "Archetype", -"CoC7.Entities.Book": "Book", -"CoC7.Entities.Chase": "Chase", -"CoC7.Entities.Item": "Item", -"CoC7.Entities.Occupation": "Occupation", -"CoC7.Entities.Setup": "Setup", -"CoC7.Entities.Skill": "Skill", -"CoC7.Entities.Spell": "Spell", -"CoC7.Entities.Status": "Status", -"CoC7.Entities.Talent": "Talent", -"CoC7.Entities.Weapon": "Weapon", -"CoC7.PlayerName": "Player", -"CoC7.Weapons": "Weapons", -"CoC7.weeks": "week(s)", -"CoC7.AttacksPerRound": "Attacks per round", -"CoC7.Cast": "Cast", -"CoC7.SanityCost": "Sanity Cost", -"CoC7.PowerCost": "Power Cost", -"CoC7.HitPointsCost": "Hit Points Cost", -"CoC7.MagicPointsCost": "Magic Points Cost", -"CoC7.OtherCosts": "Other Costs", -"CoC7.CastingSpell": "Casting {spell}.", -"CoC7.NoTargetToDamage": "There is no target to apply the damage to", -"CoC7.NoResponse": "No Response", -"CoC7.InitiatorMissed": "{name} missed.", -"CoC7.AutomaticFire": "Automatic Fire", -"CoC7.ShotBullets": "Shot {bullets} bullets at target {actor}.", -"CoC7.ShotVoley": "Shooting a voley of {bullets} bullets at target {actor}.", -"CoC7.meleeCombatDamageTakes": "takes", -"CoC7.meleeCombatDamageFrom": "from", -"CoC7.meleeCombatDamageDeals": "deals", -"CoC7.meleeCombatDamageWith": "with", -"CoC7.DriveAutoSkillName": "Drive Auto", -"CoC7.DriveSpecializationName": "Drive", -"CoC7.PilotSpecializationName": "Pilot", -"CoC7.RecoverLuckPoints": "Recover Luck Points", -"CoC7.RollLuck4Dev": "Rolling Luck for development", -"CoC7.SanGained": "Gained 2d6 ({results} = {sanGained}) Sanity after mastering {skill} with a {skillValue}%", -"CoC7.LuckIncreased": "Luck recovered ({die}/{score}) by {augment} points", -"CoC7.LuckNotIncreased": "Luck NOT recovered ({die}/{score})", -"CoC7.DevelopAttribWarn": "You can not access some attributes in development/creation.", -"CoC7.TradeItem": "Trade / Store Item", -"CoC7.SortBySkillName": "Sort by skill name", -"CoC7.SortBySkillValue": "Sort by skill percent", -"CoC7.UncommonSkillsShow": "Show uncommon skills", -"CoC7.UncommonSkillsHide": "Hide uncommon skills", -"CoC7.NewBookName": "new book", -"CoC7.AddBook": "Add book", -"CoC7.NewSpellName": "new spell", -"CoC7.AddSpell": "Add spell", -"CoC7.InventoryIsCurrentlyEmpty": "Inventory is currently empty.", -"CoC7.BookHasNothingMoreToTeach": "{book} has nothing more to teach. Cthulhu Mythos skill of {actor} is greater than this Mythos Rating.", -"CoC7.Content": "Content", -"CoC7.Development": "Development", -"CoC7.DifficultyLevel": "Difficulty Level", -"CoC7.DragSpell": "Drag spells here to insert them into the book...", -"CoC7.FullStudies": "Full Studies", -"CoC7.Gains": "Gains", -"CoC7.GainsForReading": "Skill gains for reading {book}.", -"CoC7.InitialReading": "Initial Reading", -"CoC7.InitialReadingNeeded": "{actor} needs to perform an Initial Reading on {book} to be able to advance through Full Study progress.", -"CoC7.LearnSpellAttempt": "Attempt to learn spell {spell}, from {book}.", -"CoC7.MarkedForDevelopment": "Marked for development", -"CoC7.Mythos": "Mythos", -"CoC7.NotOwned": "This Book needs to be owned by an Actor to perform this action.", -"CoC7.Points": "point(s)", -"CoC7.Progress": "Progress", -"CoC7.RedoFullStudy": "Redo Full Study", -"CoC7.ReadAttempt": "Attempt to read {book} ({language}), {difficulty} difficulty.", -"CoC7.ReadingMythosTome": "Reading {book}.", -"CoC7.Specific": "Specific", -"CoC7.SpellsLearned": "Spells Learned", -"CoC7.UnknownLanguage": "{actor} do not know the language in which this book is written.", -"CoC7.Unreadable": "Unreadable", -"CoC7.EmptyCharacterSkillList": "Add a setup, occupation, or skill by dropping it here.", -"CoC7.magicPointsRecovered": "Magic Points recovered", -"CoC7.MessageTitleSelectSingleUserForTarget": "Which user can respond to this attack", -"CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.", -"CoC7.MessageBoutOfMadnessTableNotFound": "The result from the madness table was not found, please check all your roll tables are created", -"CoC7.MessageBoutOfMadnessItemNotFound": "The result from the madness table was not found, please check all your statuses are created", -"CoC7.DealDamage": "Deal {damage} damage points to {target}?", -"CoC7.NoTargetSelected": "You have not selected a target for your {weapon} check. Do you want to proceed anyway?", -"CoC7.Import": "Import", -"CoC7.Proceed": "Proceed", -"CoC7.Cancel": "Cancel", -"CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed", -"CoC7.TraditionalChinese": "Traditional Chinese", -"CoC7.ImportedUnnamedCharacter": "Imported unnamed character", -"CoC7.CreatedImportedCharactersFolder": "Created 'Imported Characters' folder", -"CoC7.ImportedCharactersFolder": "Imported characters", -"CoC7.ImportSkillItemLocations": "Look for skills/spells/weapons in", -"CoC7.ImportActorItemsNone": "None", -"CoC7.ImportActorItemsItem": "Items", -"CoC7.ImportActorItemsItemWorldModuleSystem": "Items / World / Modules / System", -"CoC7.ImportActorItemsWorldModuleItemSystem": "World / Modules / Items / System", -"CoC7.HowToTranslateTitle": "How to translate?", -"CoC7.HowToTranslateWarning": "Do not install any modules you do not trust.", -"CoC7.HowToTranslateInstallBabele": "Install/Update Babele module from Foundry's module manager.", -"CoC7.HowToTranslateInstallTranslation": "Install/Update Translation from Foundry's module manager.", -"CoC7.HowToTranslateEnableTranslation": "Inside the Game World, under Configuration/Manage Modules activate both Babele and the translations.", -"CoC7.HowToTranslateNoTranslation": "Instructions for creating new language translations are available on existing translation modules.", -"CoC7.Migrate.Title": "Update required", -"CoC7.Migrate.Message": "

                      Your world requires an update to run version {version}.

                      Please backup your world folder before starting the upgrade.

                      If you do not update your world the system will not work correctly.

                      The world may be restarted when completed.

                      ", -"CoC7.Migrate.WithModulesMessage": "

                      Your world or modules may require an update to run version {version}.

                      Please backup your world and module folders listed below before starting the upgrade.

                      If you do not update your world the system will not work correctly.

                      The following modules contain actors or items so will also be checked.

                      {modules}

                      The world may be restarted when completed.

                      ", -"CoC7.Migrate.GMRequired": "

                      Your world requires an update to run version {version}.

                      Please wait for your GM to update the system then refresh (F5) this page.

                      ", -"CoC7.Migrate.RestartRequired": "

                      Your world will now restart to enable these changes

                      ", -"CoC7.Migrate.ButtonUpdate": "Update", -"CoC7.Migrate.ButtonSkip": "Skip", -"CoC7.Migrate.ButtonOkay": "Okay", -"CoC7.Maximize": "Maximize", -"CoC7.Summarize": "Summarize", -"CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you", -"CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", -"CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2", -"CoC7.MessageTitleSelectUserToGiveTo": "Give item to another character", -"CoC7.MessageSelectUserToGiveTo": "Which character would you like to give this item to?", -"CoC7.MessageDistanceCalculationFailure": "Unable to calculate distance between tokens, please use the token character sheet.", -"CoC7.ToolTipSkill": "
                      1. Left click roll check with options
                      2. Shift + Left click Immediate regular difficulty roll
                      1. Right click Opposed check with options
                      2. Shift + Right click Immediate opposed check
                      1. Alt/Option + Right click Combined check with options
                      ", -"CoC7.ToolTipKeeperSkill": "
                      1. CTRL + Left click Create roll link
                      2. {other}
                      ", -"CoC7.ToolTipKeeperStandbySkill": "
                    3. Left click Request a roll from {name}
                    4. ", -"CoC7.ToolTipDB": "
                      1. Left click Immediate regular difficulty roll
                      ", -"CoC7.ToolTipKeeperSanity": "
                    5. CTRL + Alt/Option Create sanity check roll link
                    6. ", -"CoC7.ToolTipAutoToggle": "
                      1. Left click Toggle automatic calculation / manual entry
                      2. ", -"CoC7.ToolTipSkillFlagToggle": "
                        1. Double Click Toggle flag status
                        2. ", -"CoC7.ToolTipSkillFlagged": "Flagged for development", -"CoC7.ToolTipSkillUnflagged": "Not flagged for development", -"SETTINGS.TitleRules": "Rules", -"SETTINGS.TitleInitiative": "Initiative Settings", -"SETTINGS.TitleRoll": "Roll Settings", -"SETTINGS.TitleChatCards": "Chat Cards Settings", -"SETTINGS.TitleScene": "Scene Settings", -"SETTINGS.TitleSheet": "Sheet Settings", -"SETTINGS.TitleGameArtwork": "Game Artwork Settings", -"SETTINGS.TitleWeapon": "Weapon Settings", -"SETTINGS.TitleDiceSoNice": "Dice So Nice Settings", -"SETTINGS.TitleDeveloperDebug": "Developer And Debug Settings", -"SETTINGS.TitleRollTable": "Roll Table Settings", -"SETTINGS.DebugMode": "System Debug Mode", -"SETTINGS.DebugModeHint": "!!RESTART REQUIRED!!", -"SETTINGS.showIconsOnly": "On summarized sheet, show only icons on skills list.", -"SETTINGS.developmentRollForLuck": "Recoverable Luck points", -"SETTINGS.developmentRollForLuckHint": "Each player can make an improvement check for their Luck on Development Phase", -"SETTINGS.displayPlayerNameOnSheet": "Display player's name on sheet", -"SETTINGS.OverrideGameArtwork": "Override game Artwork", -"SETTINGS.OverrideGameArtworkHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default", -"SETTINGS.ArtPauseImage": "Pause image", -"SETTINGS.ArtPauseImageHint": ". Type 'null' to remove image", -"SETTINGS.ArtPauseText": "Pause text", -"SETTINGS.ArtPauseTextHint": "Leave blank for default", -"SETTINGS.ArtWorkSheetBackgroundType": "Background type", -"SETTINGS.BackgroundSlice": "Background image will be sliced (css:border-image)", -"SETTINGS.BackgroundAuto": "Scales the image maintening proportions (css:auto)", -"SETTINGS.BackgroundContain": "Scales to fill without croping/stretching (css:contain)", -"SETTINGS.BackgroundCover": "Scales to fill with croping/stretching (css:cover)", -"SETTINGS.StanbyGMRolls": "Standby Keeper rolls", -"SETTINGS.StanbyGMRollsHint": "When the Keeper is making a roll from an assigned character sheet, display a roll button instead of rolling", -"SETTINGS.EnableStatusIcons": "Enable status icons", -"SETTINGS.EnableStatusIconsHint": "Set if combat and sanity effects icons are shown in tokens.", -"SETTINGS.ShowExperimentalFeatures": "Show Experimental Features", -"SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds", -"CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.", -"SETTINGS.CheckElevation": "Include elevation in distance", -"SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations", -"CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never" -``` From 2c4c7ca31d1b91010af4fa58d2e60e12fe739174 Mon Sep 17 00:00:00 2001 From: Castanho Date: Sun, 31 Oct 2021 11:33:50 -0300 Subject: [PATCH 286/726] Add GitHub Action to validate JSON changes on PRs A GitHub Action that validates JSON files based on en.json schema. It will accuse when there is any synthax error, missing columns, quotes, braces, etc. --- .github/workflows/validate-json.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/validate-json.yml diff --git a/.github/workflows/validate-json.yml b/.github/workflows/validate-json.yml new file mode 100644 index 00000000..70fb9158 --- /dev/null +++ b/.github/workflows/validate-json.yml @@ -0,0 +1,17 @@ +name: Validate JSONs +on: + pull_request: + branches: + - develop + paths: + - 'lang/*.json' +jobs: + verify-json-validation: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Validate JSON + uses: docker://orrosenblatt/validate-json-action:latest + env: + INPUT_SCHEMA: ./lang/en.json + INPUT_JSONS: ./lang/cn.json,./lang/cs.json,./lang/de.json,./lang/en.json,./lang/es.json,./lang/fr.json,./lang/ja.json,./lang/pl.json,./lang/pt-BR.json,./lang/sv.json,./lang/zh-TW.json From 016d4fb9cfc3c6f32088f440bd2ebf1f3079b94d Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 1 Nov 2021 21:19:10 +0000 Subject: [PATCH 287/726] Move keeperNotes into description.keeper and render spell sheet every time it is edited --- module/items/spell/data.js | 11 +++++------ module/updater.js | 12 ++++++++++-- template.json | 8 ++++---- templates/items/book/main.html | 7 +++---- templates/items/spell/main.html | 3 +-- 5 files changed, 23 insertions(+), 18 deletions(-) diff --git a/module/items/spell/data.js b/module/items/spell/data.js index 3dcf4f8f..9382ce79 100644 --- a/module/items/spell/data.js +++ b/module/items/spell/data.js @@ -123,16 +123,15 @@ export class CoC7Spell extends CoC7Item { } } if (this.context.parent === null) { - item.update({ + await item.update({ 'data.spells': book.data.spells }) + this.sheet.object = new CoC7Spell(book.data.spells.find(spell => spell._id === this.id), this.context) } else { - this.context.parent.updateEmbeddedDocuments('Item', [book]) + await this.context.parent.updateEmbeddedDocuments('Item', [book]) + this.sheet.object = new CoC7Spell(book.data.spells.find(spell => spell._id === this.id), this.context) } - // const parent = book.actor ? book.actor : null - // const spell = new CoC7Spell(spellData, { parent, bookId: book.id }) - // await this.sheet.close(true) - // await spell.sheet.render(true) + this.sheet.render(true) } else { super.update(data, context) } diff --git a/module/updater.js b/module/updater.js index 139a5021..fcffedda 100644 --- a/module/updater.js +++ b/module/updater.js @@ -404,7 +404,7 @@ export class Updater { updateData['data.mythosRating'] = Number(item.data.mythosRating) || 0 /** Renamed/moved fields */ updateData['data.content'] = item.data.description.unidentified - updateData['data.keeperNotes'] = item.data.description.notes + updateData['data.description.keeper'] = item.data.description.notes /** New fields set default values */ updateData['data.difficultyLevel'] = 'regular' updateData['data.fullStudies'] = 0 @@ -437,7 +437,7 @@ export class Updater { } static _migrateItemKeeperNotesMerge (item, updateData) { - if (item.type === 'spell') { + if (item.type === 'spell' || item.type === 'book') { if (typeof item.data.notes !== 'undefined') { if (typeof item.data.description.keeper !== 'undefined') { updateData['data.description.keeper'] = @@ -447,6 +447,14 @@ export class Updater { } updateData['data.-=notes'] = null } + if (typeof item.data.keeperNotes !== 'undefined') { + if (typeof updateData['data.description.keeper'] !== 'undefined') { + updateData['data.description.keeper'] = item.data.keeperNotes + updateData['data.description.keeper'] + } else { + updateData['data.description.keeper'] = item.data.keeperNotes + } + updateData['data.-=keeperNotes'] = null + } } } diff --git a/template.json b/template.json index b0dfc720..1001222a 100644 --- a/template.json +++ b/template.json @@ -552,10 +552,10 @@ }, "description": { "chat": "", - "value": "" + "value": "", + "keeper": "" }, "effects": [], - "keeperNotes": "", "source": "", "type": { "bind": false, @@ -575,7 +575,8 @@ "date": "", "description": { "chat": "", - "value": "" + "value": "", + "keeper": "" }, "difficultyLevel": "", "fullStudies": 0, @@ -588,7 +589,6 @@ "others": [] }, "initialReading": false, - "keeperNotes": "", "language": "", "mythosRating": 0, "sanityLoss": 0, diff --git a/templates/items/book/main.html b/templates/items/book/main.html index 5f76d3b8..51940664 100644 --- a/templates/items/book/main.html +++ b/templates/items/book/main.html @@ -183,10 +183,9 @@
              {{editor - content=data.notes - target="data.notes" - button=true - owner=owner + content=data.description.keeper + target="data.description.keeper" + button=true owner=owner editable=editable }}
              diff --git a/templates/items/spell/main.html b/templates/items/spell/main.html index cfb0d622..a4f37176 100644 --- a/templates/items/spell/main.html +++ b/templates/items/spell/main.html @@ -69,8 +69,7 @@ {{editor content=data.description.keeper target="data.description.keeper" - button=true - owner=owner + button=true owner=owner editable=editable }}
              From 78052a32b202e456800f97c65de119a9e2be42ed Mon Sep 17 00:00:00 2001 From: castanho Date: Tue, 2 Nov 2021 15:32:36 -0300 Subject: [PATCH 288/726] Add logic for convert MP into HP for Spells Resolve #911 --- module/items/spell/data.js | 65 ++++++++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 7 deletions(-) diff --git a/module/items/spell/data.js b/module/items/spell/data.js index 9382ce79..824d3cba 100644 --- a/module/items/spell/data.js +++ b/module/items/spell/data.js @@ -1,4 +1,4 @@ -/* global ChatMessage, game, mergeObject, Roll, renderTemplate, ui */ +/* global ChatMessage, Dialog, game, mergeObject, Roll, renderTemplate, ui */ import { CoC7Utilities } from '../../utilities.js' import { CoC7Item } from '../item.js' @@ -20,6 +20,53 @@ export class CoC7Spell extends CoC7Item { } const costs = this.data.data.costs const losses = [] + let convertSurplusIntoHitPoints + costs.magicPoints = CoC7Utilities.isFormula(costs.magicPoints) + ? (await new Roll(costs.magicPoints).roll({ async: true })).total + : parseInt(costs.magicPoints) + if ( + costs.magicPoints && + costs.magicPoints > this.actor.data.data.attribs.mp.value + ) { + convertSurplusIntoHitPoints = await new Promise(resolve => { + const convertedHitPoints = + costs.magicPoints - this.actor.data.data.attribs.mp.value + const convertedMagicPoints = costs.magicPoints - convertedHitPoints + const data = { + title: ' ', + content: game.i18n.format('CoC7.NotEnoughMagicPoints', { + actorMagicPoints: this.actor.data.data.attribs.mp.value, + convertedHitPoints, + convertedMagicPoints, + originalMagicPoints: costs.magicPoints, + spell: this.name + }), + buttons: { + cancel: { + icon: '', + label: game.i18n.localize('CoC7.Cancel'), + callback: () => { + return resolve(false) + } + }, + proceed: { + icon: '', + label: game.i18n.localize('CoC7.Proceed'), + callback: () => { + costs.hitPoints = convertedHitPoints + costs.magicPoints = convertedMagicPoints + return resolve(true) + } + } + }, + default: 'cancel', + classes: ['coc7', 'dialog'] + } + new Dialog(data).render(true) + }) + if (!convertSurplusIntoHitPoints) return + } + console.log(costs) for (const [key, value] of Object.entries(costs)) { if (!value || Number(value) === 0) continue losses.push(await this.resolveLosses(key, value)) @@ -47,7 +94,7 @@ export class CoC7Spell extends CoC7Item { switch (characteristic) { case 'hitPoints': characteristicName = game.i18n.localize('CoC7.HitPoints') - this.actor.dealDamage(loss) + this.actor.dealDamage(loss, { ignoreArmor: true }) break case 'sanity': characteristicName = game.i18n.localize('CoC7.SanityPoints') @@ -55,9 +102,7 @@ export class CoC7Spell extends CoC7Item { break case 'magicPoints': characteristicName = game.i18n.localize('CoC7.MagicPoints') - this.actor.update({ - 'data.attribs.mp.value': actorData.attribs.mp.value - loss - }) + this.actor.setMp(actorData.attribs.mp.value - loss) break case 'power': characteristicName = game.i18n.localize('CHARAC.Power') @@ -126,10 +171,16 @@ export class CoC7Spell extends CoC7Item { await item.update({ 'data.spells': book.data.spells }) - this.sheet.object = new CoC7Spell(book.data.spells.find(spell => spell._id === this.id), this.context) + this.sheet.object = new CoC7Spell( + book.data.spells.find(spell => spell._id === this.id), + this.context + ) } else { await this.context.parent.updateEmbeddedDocuments('Item', [book]) - this.sheet.object = new CoC7Spell(book.data.spells.find(spell => spell._id === this.id), this.context) + this.sheet.object = new CoC7Spell( + book.data.spells.find(spell => spell._id === this.id), + this.context + ) } this.sheet.render(true) } else { From 29b7cf22fd14de2b884e49886b5e26374fbae4a3 Mon Sep 17 00:00:00 2001 From: castanho Date: Tue, 2 Nov 2021 15:32:55 -0300 Subject: [PATCH 289/726] Update en.json --- lang/en.json | 1 + 1 file changed, 1 insertion(+) diff --git a/lang/en.json b/lang/en.json index c98b41f4..dce1d6e1 100644 --- a/lang/en.json +++ b/lang/en.json @@ -127,6 +127,7 @@ "CoC7.MagicPointsCost": "Magic Points Cost", "CoC7.OtherCosts": "Other Costs", "CoC7.CastingSpell": "Casting {spell}.", + "CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would like to convert the remaining Magic Points into Hit Points? If yes, you will take {convertedHitPoints} damage.", "CoC7.CopyToClipboard": "Copy to clipboard", "CoC7.WhisperToSelection": "Whisper to selected tokens", From 0accb7551f852ecdfc061dc1744978951a7cf3db Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 2 Nov 2021 18:42:31 +0000 Subject: [PATCH 290/726] Updated translations list --- .github/TRANSLATIONS.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 657bbd06..a73efb5f 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -1,7 +1,14 @@ # Translating. -Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Feel free to create a new `*.json` file for a language that is not shown here! - -The following translations are currently up to date **de**, **es**, **fr**, **ja**, **pl**, **pt-BR**, **sv**, **zh-TW** +Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) + +| Key | de | es | fr | ja | pl | pt-BR | sv | zh-TW | +| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **1** | **1** | **1** | **1** | **1** | **1** | **1** | **1** | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | + +##### CoC7.NotEnoughMagicPoints + +`"CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would like to convert the remaining Magic Points into Hit Points? If yes, you will take {convertedHitPoints} damage.",` From f9fc119cfb966d4111ffbf543b842dbe0f3da232 Mon Sep 17 00:00:00 2001 From: castanhocorreia Date: Tue, 2 Nov 2021 18:42:31 +0000 Subject: [PATCH 291/726] [create-pull-request] automated change --- .github/ABANDONED.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index f2c3bad3..3bb27d8f 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -60,6 +60,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.MagicPointsCost": "Magic Points Cost", "CoC7.OtherCosts": "Other Costs", "CoC7.CastingSpell": "Casting {spell}.", +"CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would like to convert the remaining Magic Points into Hit Points? If yes, you will take {convertedHitPoints} damage.", "CoC7.CopyToClipboard": "Copy to clipboard", "CoC7.WhisperToSelection": "Whisper to selected tokens", "CoC7.WhisperTo": "Whisper to", @@ -417,6 +418,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.MagicPointsCost": "Magic Points Cost", "CoC7.OtherCosts": "Other Costs", "CoC7.CastingSpell": "Casting {spell}.", +"CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would like to convert the remaining Magic Points into Hit Points? If yes, you will take {convertedHitPoints} damage.", "CoC7.NoTargetToDamage": "There is no target to apply the damage to", "CoC7.NoResponse": "No Response", "CoC7.InitiatorMissed": "{name} missed.", From 8ff0ca38d7b9efcaced01e3e0c2e6627fa428ebb Mon Sep 17 00:00:00 2001 From: castanho Date: Tue, 2 Nov 2021 15:47:38 -0300 Subject: [PATCH 292/726] Improve English message for spell points conversion --- lang/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/en.json b/lang/en.json index dce1d6e1..7683e355 100644 --- a/lang/en.json +++ b/lang/en.json @@ -127,7 +127,7 @@ "CoC7.MagicPointsCost": "Magic Points Cost", "CoC7.OtherCosts": "Other Costs", "CoC7.CastingSpell": "Casting {spell}.", - "CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would like to convert the remaining Magic Points into Hit Points? If yes, you will take {convertedHitPoints} damage.", + "CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would you like to take the remaining {convertedHitPoints} from your Hit Points? You will take {convertedHitPoints} damage if you proceed.", "CoC7.CopyToClipboard": "Copy to clipboard", "CoC7.WhisperToSelection": "Whisper to selected tokens", From 76e6454b33ed69efcf920b677b0c0e109dd9dcad Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 2 Nov 2021 18:48:23 +0000 Subject: [PATCH 293/726] Updated translations list --- .github/TRANSLATIONS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index a73efb5f..8a084a08 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -11,4 +11,4 @@ The following translations have been abandoned **cn**, **cs**, [are you able to ##### CoC7.NotEnoughMagicPoints -`"CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would like to convert the remaining Magic Points into Hit Points? If yes, you will take {convertedHitPoints} damage.",` +`"CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would you like to take the remaining {convertedHitPoints} from your Hit Points? You will take {convertedHitPoints} damage if you proceed.",` From d9de5f229aa5e7c1dc73ffaef456ef2625c851b0 Mon Sep 17 00:00:00 2001 From: castanhocorreia Date: Tue, 2 Nov 2021 18:48:24 +0000 Subject: [PATCH 294/726] [create-pull-request] automated change --- .github/ABANDONED.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index 3bb27d8f..613098b2 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -60,7 +60,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.MagicPointsCost": "Magic Points Cost", "CoC7.OtherCosts": "Other Costs", "CoC7.CastingSpell": "Casting {spell}.", -"CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would like to convert the remaining Magic Points into Hit Points? If yes, you will take {convertedHitPoints} damage.", +"CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would you like to take the remaining {convertedHitPoints} from your Hit Points? You will take {convertedHitPoints} damage if you proceed.", "CoC7.CopyToClipboard": "Copy to clipboard", "CoC7.WhisperToSelection": "Whisper to selected tokens", "CoC7.WhisperTo": "Whisper to", @@ -418,7 +418,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.MagicPointsCost": "Magic Points Cost", "CoC7.OtherCosts": "Other Costs", "CoC7.CastingSpell": "Casting {spell}.", -"CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would like to convert the remaining Magic Points into Hit Points? If yes, you will take {convertedHitPoints} damage.", +"CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would you like to take the remaining {convertedHitPoints} from your Hit Points? You will take {convertedHitPoints} damage if you proceed.", "CoC7.NoTargetToDamage": "There is no target to apply the damage to", "CoC7.NoResponse": "No Response", "CoC7.InitiatorMissed": "{name} missed.", From d5b08828975b48eb9a3f7589ccdcf082f5c7576a Mon Sep 17 00:00:00 2001 From: castanho Date: Tue, 2 Nov 2021 16:40:31 -0300 Subject: [PATCH 295/726] Change isOwned to isOwner on book and spell templates --- module/items/book/sheet.js | 2 +- module/items/spell/sheet.js | 1 + templates/items/book/main.html | 2 +- templates/items/spell/main.html | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/module/items/book/sheet.js b/module/items/book/sheet.js index 20607ff4..c1429dac 100644 --- a/module/items/book/sheet.js +++ b/module/items/book/sheet.js @@ -27,7 +27,7 @@ export class CoC7BookSheet extends ItemSheet { data.data = itemData.data data.initialReading = this.item.data.data.initialReading data.isKeeper = game.user.isGM - data.isOwned = this.item.isOwned + data.isOwner = this.item.isOwner data.spellsLearned = this.spellsLearned data.exhausted = (await this.item.checkExhaustion()) !== false data.studyCompleted = diff --git a/module/items/spell/sheet.js b/module/items/spell/sheet.js index 692a5e92..82a09898 100644 --- a/module/items/spell/sheet.js +++ b/module/items/spell/sheet.js @@ -24,6 +24,7 @@ export class CoC7SpellSheet extends ItemSheet { const itemData = data.data data.data = itemData.data data.isKeeper = game.user.isGM + data.isOwner = this.item.isOwner return data } diff --git a/templates/items/book/main.html b/templates/items/book/main.html index 51940664..488ea2cc 100644 --- a/templates/items/book/main.html +++ b/templates/items/book/main.html @@ -51,7 +51,7 @@
              {{else}}
              - {{#if (or isKeeper isOwned)}} + {{#if (or isKeeper isOwner)}}
              - {{#if (or isKeeper isOwned)}} + {{#if (or isKeeper isOwner)}}
              From 6ab0f5d954705a878fcbcf0f5e5cd05b455de67f Mon Sep 17 00:00:00 2001 From: HavlockV Date: Tue, 9 Nov 2021 23:41:27 +0300 Subject: [PATCH 304/726] action redesign --- module/items/sheets/chase.js | 144 ++++++++++++++++++++--------------- styles/sheets/chase.less | 70 +++++++++-------- templates/items/chase.html | 13 +--- 3 files changed, 126 insertions(+), 101 deletions(-) diff --git a/module/items/sheets/chase.js b/module/items/sheets/chase.js index ba7e40fc..53dea099 100644 --- a/module/items/sheets/chase.js +++ b/module/items/sheets/chase.js @@ -355,9 +355,9 @@ export class CoC7ChaseSheet extends ItemSheet { get activeParticipant () { if (!this.item.data.data.participants) return undefined - const participant = this.item.data.data.participants.find( p => p.active) - if( !participant) return undefined - return new _participant( participant) + const participant = this.item.data.data.participants.find(p => p.active) + if (!participant) return undefined + return new _participant(participant) } get previousLocation () { @@ -545,14 +545,22 @@ export class CoC7ChaseSheet extends ItemSheet { html.find('.button').click(this._onButtonClick.bind(this)) html.find('.name-container').click(this._onLocationClick.bind(this)) - html.find('.chase-location .chase-participant').click(this._onChaseParticipantClick.bind(this)) + html + .find('.chase-location .chase-participant') + .click(this._onChaseParticipantClick.bind(this)) html.find('.obstacle-type').click(this._onObstacleTypeClick.bind(this)) html.find('.obstacle-toggle').click(this._onObstacleToggleClick.bind(this)) html.find('.toggle').click(this._onToggle.bind(this)) - html.find('.participant-control').click(this._onParticipantControlClicked.bind(this)) - html.find('.movement-action .decrease').click(this._onChangeMovementActions.bind( this, -1)) - html.find('.movement-action .increase').click(this._onChangeMovementActions.bind( this, 1)) + html + .find('.participant-control') + .click(this._onParticipantControlClicked.bind(this)) + // html + // .find('.movement-action .decrease') + // .click(this._onChangeMovementActions.bind(this, -1)) + // html + // .find('.movement-action .increase') + // .click(this._onChangeMovementActions.bind(this, 1)) const participantDragDrop = new DragDrop({ dropSelector: '.participant', @@ -690,8 +698,10 @@ export class CoC7ChaseSheet extends ItemSheet { const element = $(track).find('.active') if (!element.length) return - const originalPosition = html[0].classList.contains('window-app')?-1:data.data.trackScrollPosition //If first opening always scroll to - // const originalPosition = data.data.trackScrollPosition //If first opening always scroll to + const originalPosition = html[0].classList.contains('window-app') + ? -1 + : data.data.trackScrollPosition //If first opening always scroll to + // const originalPosition = data.data.trackScrollPosition //If first opening always scroll to const elementleft = element[0].offsetLeft const divWidth = track[0].clientWidth @@ -759,7 +769,7 @@ export class CoC7ChaseSheet extends ItemSheet { return this.item.data.data.locations.list.findIndex(p => p.uuid == uuid) } - findLocation( uuid){ + findLocation (uuid) { return this.item.data.data.locations.list.find(p => p.uuid == uuid) } @@ -891,52 +901,58 @@ export class CoC7ChaseSheet extends ItemSheet { } } - async _onChaseParticipantClick (event){ + async _onChaseParticipantClick (event) { const target = event.currentTarget - if( !target.closest('.chase-location')?.classList?.contains('active')){ - await this._onLocationClick( event) + if (!target.closest('.chase-location')?.classList?.contains('active')) { + await this._onLocationClick(event) } const pUuid = event.currentTarget.dataset?.uuid - if(!pUuid){ + if (!pUuid) { ui.notifications.error('No participant ID found') return } const participants = this.item.data.data.participants - ? duplicate(this.item.data.data.participants) - : [] - participants.forEach( p => { + ? duplicate(this.item.data.data.participants) + : [] + participants.forEach(p => { delete p.active - if( pUuid == p.uuid) p.active = true + if (pUuid == p.uuid) p.active = true }) - await this.updateParticipants( participants) + await this.updateParticipants(participants) ui.notifications.info('participant clicked') } - async _onParticipantControlClicked(event){ - event.preventDefault(); - event.stopPropagation(); - const target = event.currentTarget; + async _onParticipantControlClicked (event) { + event.preventDefault() + event.stopPropagation() + const target = event.currentTarget const participantUuid = target.closest('.initiative-block')?.dataset?.uuid - if( !participantUuid) return + if (!participantUuid) return switch (target.dataset.control) { case 'drawGun': - return await this.toggleParticipantGun( participantUuid) + return await this.toggleParticipantGun(participantUuid) + case 'decreaseActions': + return await this._onChangeMovementActions(-1, event) + case 'increaseActions': + return await this._onChangeMovementActions(1, event) } } - async _onChangeMovementActions( count, event){ - event.preventDefault(); - event.stopPropagation(); - const target = event.currentTarget; + async _onChangeMovementActions (count, event) { + event.preventDefault() + event.stopPropagation() + const target = event.currentTarget const participantUuid = target.closest('.initiative-block')?.dataset?.uuid - if( !participantUuid) return + if (!participantUuid) return const participants = this.participants - const participant = participants.find( p => participantUuid == p.uuid) - participant.alterMovementActions( count) + const participant = participants.find(p => participantUuid == p.uuid) + if(participant.hasMaxMvtActions && count>0) return + participant.alterMovementActions(count) const sheet = target.closest('.coc7.item.chase') const track = sheet.querySelector('.track') - if( track) await this.item.update({ 'data.trackScrollPosition': track.scrollLeft }) + if (track) + await this.item.update({ 'data.trackScrollPosition': track.scrollLeft }) await this.updateParticipants(participants) } @@ -1029,9 +1045,9 @@ export class CoC7ChaseSheet extends ItemSheet { const locationUuid = target.dataset.uuid const dataString = dragEvent.dataTransfer.getData('text/plain') const data = JSON.parse(dataString) - const oldLocation = this.findLocation( locationUuid) - if( oldLocation){ - if( oldLocation.participants?.includes( data.uuid)) return + const oldLocation = this.findLocation(locationUuid) + if (oldLocation) { + if (oldLocation.participants?.includes(data.uuid)) return } ui.notifications.info( `dragged particpant ${data.uuid} onto location ${locationUuid}` @@ -1388,14 +1404,14 @@ export class CoC7ChaseSheet extends ItemSheet { await this.updateLocationsList(locations) } - async toggleParticipantGun(participantUuid ){ + async toggleParticipantGun (participantUuid) { const participants = this.item.data.data.participants - ? duplicate(this.item.data.data.participants) - : [] - const participant = participants.find( p => participantUuid == p.uuid) - if( !participant) return + ? duplicate(this.item.data.data.participants) + : [] + const participant = participants.find(p => participantUuid == p.uuid) + if (!participant) return participant.hasAGunReady = !participant.hasAGunReady - await this.updateParticipants( participants) + await this.updateParticipants(participants) } } @@ -1441,7 +1457,7 @@ export class _participant { return this.hasActor || this.hasVehicle } - get isActive() { + get isActive () { return this.data.active || false } @@ -1529,13 +1545,13 @@ export class _participant { return this.data.dex } - get hasAGunReady (){ + get hasAGunReady () { return this.data.hasAGunReady || false } get initiative () { - let init = this.dex; - if( this.hasAGunReady){ + let init = this.dex + if (this.hasAGunReady) { init += 50 } // if( this.speedCheck){ @@ -1652,33 +1668,41 @@ export class _participant { return this.data.currentMovementActions || 0 } - addMovementActions (x=1) { + get hasMaxMvtActions () { + return this.currentMovementActions >= this.movementAction + } + + addMovementActions (x = 1) { this.currentMovementActions += x - if( this.currentMovementActions > this.movementAction) this.currentMovementActions = this.movementAction + if (this.currentMovementActions > this.movementAction) + this.currentMovementActions = this.movementAction } - addMovementActions (x=1) { + addMovementActions (x = 1) { this.currentMovementActions -= x } - alterMovementActions (x){ + alterMovementActions (x) { this.currentMovementActions += x - if( this.currentMovementActions > this.movementAction) this.currentMovementActions = this.movementAction + if (this.currentMovementActions > this.movementAction) + this.currentMovementActions = this.movementAction } get movementActionArray () { - const array = Array( Math.max( this.movementAction, Math.abs(this.currentMovementActions))) - for (let i = 0; i < array.length; i++) { - if( i < this.movementAction){ - array[i] = 'base' - } - - if( i < Math.abs(this.currentMovementActions)){ - array[i] = ((undefined == array[i])?'':`${array[i]} `) + (this.currentMovementActions > 0?'available':'deficit') + const baseArray = Array(this.movementAction).fill('base') + if (this.currentMovementActions >= 0) { + for (let i = 0; i < this.currentMovementActions; i++) { + baseArray[i] = 'base available' } + return baseArray } - return this.currentMovementActions>0?array:array.reverse() + if (this.currentMovementActions < 0) { + const deficitArray = Array(Math.abs(this.currentMovementActions)).fill( + 'deficit' + ) + return deficitArray.concat(baseArray) + } } get cssClass () { diff --git a/styles/sheets/chase.less b/styles/sheets/chase.less index 9027714b..9d4316dd 100644 --- a/styles/sheets/chase.less +++ b/styles/sheets/chase.less @@ -78,52 +78,58 @@ } } -.initiative-track{ - .initiative-block{ +.initiative-track { + .initiative-block { border: 2px solid lightgray; margin: 0 1rem 0 0.2rem; border-radius: 0.5rem; - &.prey{ - background-color: rgba(60,128,60,0.1); + &.prey { + background-color: rgba(60, 128, 60, 0.1); } - &.chaser{ - background-color: rgba(128,60,60,0.1); + &.chaser { + background-color: rgba(128, 60, 60, 0.1); } - &.active{ + &.active { border-color: #ff6400; } - - .participant-control{ - color:#666; - &.active{ - color: #EEE; + + .participant-control { + color: #666; + flex: 0; + margin-right: 0.5rem; + &.active { + color: #eee; + } + &.inactive { + color: red; + &:hover{ + text-shadow: none; + cursor: default; + } } } - .participant{ - .portrait{ - img{ + .participant { + .portrait { + img { border: none; } } + } - .movement-action{ - .deficit{ - color:red; + .movement-action { + .deficit { + color: red; + text-shadow: 0 0 8px red; + } + .base { + color: gray; + &.deficit { text-shadow: 0 0 8px red; } - .base{ - color: gray; - - &.deficit{ - text-shadow: 0 0 8px red; - } - - &.available{ - color: goldenrod; - } + &.available { + color: goldenrod; } - } } } @@ -166,9 +172,9 @@ .chase-participant { width: 2rem; - &.active{ - img{ - border: 1px solid #ff6400 + &.active { + img { + border: 1px solid #ff6400; } } } diff --git a/templates/items/chase.html b/templates/items/chase.html index dd919484..7c1cf96c 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -90,25 +90,20 @@
              INIT: {{p.initiative}}
              ADJ. MOV: {{p.adjustedMov}}
              -
              Mov Actions: {{p.movementAction}}
              - {{#each movementActionArray as |actionClass|}} {{/each}} -
              {{/each}} From 0edc64bba8f09c4a89a530705c55158c18f420e9 Mon Sep 17 00:00:00 2001 From: Rangertheman <81484515+Rangertheman@users.noreply.github.com> Date: Tue, 9 Nov 2021 23:11:06 +0100 Subject: [PATCH 305/726] Update sv.json --- lang/sv.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lang/sv.json b/lang/sv.json index 87ed8a40..7f54ef48 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -129,7 +129,7 @@ "CoC7.MagicPointsCost": "Kostnad Magipoäng", "CoC7.OtherCosts": "Annan kostnad", "CoC7.CastingSpell": "Kastar {spell}.", - + "CoC7.NotEnoughMagicPoints": "{spell} kostar {originalMagicPoints} Magipoäng, men du har bara {actorMagicPoints}. Vill du att resten {convertedHitPoints} ska dras från din kroppspoäng? Du kommer att ta {convertedHitPoints} i skada om du fortsätter.", "CoC7.CopyToClipboard": "Kopiera till urklipp", "CoC7.WhisperToSelection": "Viska till den valda markören", "CoC7.WhisperTo": "Viska till", @@ -716,6 +716,7 @@ "CoC7.English": "Engelska", "CoC7.Spanish": "Spanska", "CoC7.French": "Franska", + "CoC7.German": "Tyska", "CoC7.TraditionalChinese": "Traditionell kinesiska", "CoC7.SelectSourceLanguage": "Välj ursprungstextens språk", "CoC7.ImportedUnnamedCharacter": "Importerad icke namngiven karaktär", From ddcabed8dfef48690285c0e633f451cc3d552c2f Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 10 Nov 2021 00:47:04 +0000 Subject: [PATCH 306/726] Updated translations list --- .github/TRANSLATIONS.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 5d4176fa..ef336884 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,13 +2,15 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! +The **sv** translation is currently up to date + The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | ja | pl | pt-BR | sv | zh-TW | -| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **1** | **2** | **2** | **2** | **2** | **2** | **2** | **2** | -| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| Key | de | es | fr | ja | pl | pt-BR | zh-TW | +| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **1** | **2** | **2** | **2** | **2** | **2** | **2** | +| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ##### CoC7.German From 94a7569eb4c821c28c0363eab9daf704693fbeaa Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 10 Nov 2021 08:41:56 +0100 Subject: [PATCH 307/726] Move chase item and sheet --- module/coc7.js | 2 +- module/items/chase/data.js | 11 +++ .../items/{sheets/chase.js => chase/sheet.js} | 78 ++++++++++++++----- module/items/item.js | 4 +- module/scripts/configure-documents.js | 4 +- module/scripts/register-sheets.js | 2 +- styles/sheets/chase.less | 2 +- templates/items/chase.html | 6 +- 8 files changed, 82 insertions(+), 27 deletions(-) create mode 100644 module/items/chase/data.js rename module/items/{sheets/chase.js => chase/sheet.js} (96%) diff --git a/module/coc7.js b/module/coc7.js index d1590343..f1b13674 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -19,7 +19,7 @@ import { CoC7ActorDirectory } from './actor-directory.js' import { CoC7Hooks } from './hooks/index.js' import * as DiceBot from './dicebot.js' import '../styles/system/index.less' -import { CoC7ChaseSheet } from './items/sheets/chase.js' +import { CoC7ChaseSheet } from './items/chase/sheet.js' import { CoC7Socket, CoC7ChatCards } from './hooks/socket.js' import { DropActorSheetData } from './hooks/drop-actor-sheet-data.js' import { testCard } from './chat/cards/test.js' diff --git a/module/items/chase/data.js b/module/items/chase/data.js new file mode 100644 index 00000000..06526d2d --- /dev/null +++ b/module/items/chase/data.js @@ -0,0 +1,11 @@ +import { CoC7Item } from '../item.js' + +export class CoC7Chase extends CoC7Item { + constructor (data, context) { + if (typeof data.img === 'undefined') { + data.img = 'systems/CoC7/assets/icons/running-solid.svg' + } + super(data, context) + this.context = context + } +} \ No newline at end of file diff --git a/module/items/sheets/chase.js b/module/items/chase/sheet.js similarity index 96% rename from module/items/sheets/chase.js rename to module/items/chase/sheet.js index 53dea099..a87a8f00 100644 --- a/module/items/sheets/chase.js +++ b/module/items/chase/sheet.js @@ -360,6 +360,12 @@ export class CoC7ChaseSheet extends ItemSheet { return new _participant(participant) } + get activeParticipantLocation () { + if (!this.item.data.data.participants) return undefined + const participant = this.item.data.data.participants.find(p => p.active) + + } + get previousLocation () { if (!this.locations) return undefined const activeIndex = this.locations.findIndex(l => l.active) @@ -427,7 +433,7 @@ export class CoC7ChaseSheet extends ItemSheet { // } //Build starting track - const track = [] + const chaseTrack = [] const chasersMinMov = this.findMinMov(chasers) const chasersMaxMov = this.findMaxMov(chasers) @@ -449,12 +455,12 @@ export class CoC7ChaseSheet extends ItemSheet { locationParticipantsList.forEach(p => location.participants.push(p.uuid) ) - track.push(location) + chaseTrack.push(location) } // Add space between chasers and preys. for (let index = 0; index < this.item.data.data.startingRange; index++) { - track.push({ + chaseTrack.push({ uuid: this.generateNewUuid(), init: true, participants: [] @@ -477,11 +483,11 @@ export class CoC7ChaseSheet extends ItemSheet { locationParticipantsList.forEach(p => location.participants.push(p.uuid) ) - track.push(location) + chaseTrack.push(location) } } - return track + return chaseTrack } generateNewUuid () { @@ -503,7 +509,7 @@ export class CoC7ChaseSheet extends ItemSheet { activateListeners (html) { super.activateListeners(html) - // html.find('.track').ready(async html => await this._onSheetReady(html)) + // html.find('.chase-track').ready(async html => await this._onSheetReady(html)) html.on('dblclick', '.open-actor', CoC7Chat._onOpenActor.bind(this)) @@ -693,9 +699,9 @@ export class CoC7ChaseSheet extends ItemSheet { } static /**async */ setScroll (app, html, data) { - const track = html.find('.track') - if (!track.length) return - const element = $(track).find('.active') + const chaseTrack = html.find('.chase-track') + if (!chaseTrack.length) return + const element = $(chaseTrack).find('.active') if (!element.length) return const originalPosition = html[0].classList.contains('window-app') @@ -704,11 +710,11 @@ export class CoC7ChaseSheet extends ItemSheet { // const originalPosition = data.data.trackScrollPosition //If first opening always scroll to const elementleft = element[0].offsetLeft - const divWidth = track[0].clientWidth + const divWidth = chaseTrack[0].clientWidth let elementCenterRelativeLeft = elementleft - divWidth / 2 if (elementCenterRelativeLeft < 0) elementCenterRelativeLeft = 0 - const trackElement = track[0] + const trackElement = chaseTrack[0] if (-1 != originalPosition) { trackElement.scrollTo({ @@ -732,7 +738,7 @@ export class CoC7ChaseSheet extends ItemSheet { } // async _onSheetReady (html) { - // const track = html.find('.track') + // const track = html.find('.chase-track') // const element = $(track).find('.active') // const elementleft = element[0].offsetLeft @@ -817,6 +823,11 @@ export class CoC7ChaseSheet extends ItemSheet { return } + async saveScrollLocation () { + if( !this._element) return + const chaseTrack = this._element.find('.chase-track') + } + async _onToggle (event) { const target = event.currentTarget // const locationElement = target.closest('.location.obstacle') @@ -887,8 +898,8 @@ export class CoC7ChaseSheet extends ItemSheet { async _onLocationClick (event) { const target = event.currentTarget - const track = target.closest('.track') - await this.item.update({ 'data.trackScrollPosition': track.scrollLeft }) + const chaseTrack = target.closest('.chase-track') + await this.item.update({ 'data.trackScrollPosition': chaseTrack.scrollLeft }) const active = target.classList.contains('active') const locations = duplicate(this.item.data.data.locations.list) locations.forEach(l => (l.active = false)) @@ -901,6 +912,29 @@ export class CoC7ChaseSheet extends ItemSheet { } } + async activateLocation (locationUuid, scrollToLocation = true) { + const locations = duplicate(this.item.data.data.locations.list) + locations.forEach(l => (l.active = false)) + const locationIndex = this.findIndex(locations, uuid) + if (-1 != locationIndex) { + locations[locationIndex].active = true + await this.updateLocationsList(locations) + if( scrollToLocation) await this.item.update({ 'data.trackScrollPosition': -1 }) + + } + } + + async activateParticipant (participantUuid, scrollToLocation = true){ + const participants = this.item.data.data.participants + ? duplicate(this.item.data.data.participants) + : [] + participants.forEach(p => { + delete p.active + if (participantUuid == p.uuid) p.active = true + }) + await this.updateParticipants(participants) + } + async _onChaseParticipantClick (event) { const target = event.currentTarget if (!target.closest('.chase-location')?.classList?.contains('active')) { @@ -935,6 +969,8 @@ export class CoC7ChaseSheet extends ItemSheet { return await this._onChangeMovementActions(-1, event) case 'increaseActions': return await this._onChangeMovementActions(1, event) + case 'activateParticipant': + } } @@ -950,9 +986,9 @@ export class CoC7ChaseSheet extends ItemSheet { participant.alterMovementActions(count) const sheet = target.closest('.coc7.item.chase') - const track = sheet.querySelector('.track') - if (track) - await this.item.update({ 'data.trackScrollPosition': track.scrollLeft }) + const chaseTrack = sheet.querySelector('.chase-track') + if (chaseTrack) + await this.item.update({ 'data.trackScrollPosition': chaseTrack.scrollLeft }) await this.updateParticipants(participants) } @@ -1041,7 +1077,7 @@ export class CoC7ChaseSheet extends ItemSheet { this._onDragLeave(dragEvent) const target = dragEvent.currentTarget - const track = target.closest('.track') + const chaseTrack = target.closest('.chase-track') const locationUuid = target.dataset.uuid const dataString = dragEvent.dataTransfer.getData('text/plain') const data = JSON.parse(dataString) @@ -1052,7 +1088,7 @@ export class CoC7ChaseSheet extends ItemSheet { ui.notifications.info( `dragged particpant ${data.uuid} onto location ${locationUuid}` ) - await this.item.update({ 'data.trackScrollPosition': track.scrollLeft }) + await this.item.update({ 'data.trackScrollPosition': chaseTrack.scrollLeft }) await this.moveParticipant(data.uuid, locationUuid) } @@ -1672,6 +1708,10 @@ export class _participant { return this.currentMovementActions >= this.movementAction } + get isActive () { + return this.data.active || false + } + addMovementActions (x = 1) { this.currentMovementActions += x if (this.currentMovementActions > this.movementAction) diff --git a/module/items/item.js b/module/items/item.js index d4bf16eb..bfc4d741 100644 --- a/module/items/item.js +++ b/module/items/item.js @@ -22,9 +22,7 @@ export class CoC7Item extends Item { }) } if (typeof data.img === 'undefined') { - if (data.type === 'chase') { - data.img = 'systems/CoC7/assets/icons/running-solid.svg' - } else if (data.type === 'skill') { + if (data.type === 'skill') { data.img = 'systems/CoC7/assets/icons/skills.svg' } else if (data.type === 'status') { data.img = 'icons/svg/aura.svg' diff --git a/module/scripts/configure-documents.js b/module/scripts/configure-documents.js index 33159cea..e217b74e 100644 --- a/module/scripts/configure-documents.js +++ b/module/scripts/configure-documents.js @@ -4,6 +4,7 @@ import { CoCActor } from '../actors/actor.js' import { CoC7Book } from '../items/book/data.js' import { CoC7Item } from '../items/item.js' import { CoC7Spell } from '../items/spell/data.js' +import { CoC7Chase } from '../items/chase/data.js' export function configureDocuments () { CONFIG.Actor.documentClass = CoCActor @@ -11,6 +12,7 @@ export function configureDocuments () { CONFIG.Item.documentClass = CoC7Item CONFIG.Item.documentClasses = { book: CoC7Book, - spell: CoC7Spell + spell: CoC7Spell, + chase: CoC7Chase } } diff --git a/module/scripts/register-sheets.js b/module/scripts/register-sheets.js index caa3bcb5..8ef57f88 100644 --- a/module/scripts/register-sheets.js +++ b/module/scripts/register-sheets.js @@ -5,7 +5,7 @@ import { CoC7BookSheet } from '../items/book/sheet.js' import { CoC7CharacterSheet } from '../actors/sheets/character-v1.js' import { CoC7CharacterSheetV2 } from '../actors/sheets/character.js' import { CoC7ContainerSheet } from '../actors/sheets/container.js' -import { CoC7ChaseSheet } from '../items/sheets/chase.js' +import { CoC7ChaseSheet } from '../items/chase/sheet.js' import { CoC7CreatureSheet } from '../actors/sheets/creature-sheet.js' import { CoC7ItemSheet } from '../items/sheets/item-sheet.js' import { CoC7ItemSheetV2 } from '../items/sheets/item-sheetV2.js' diff --git a/styles/sheets/chase.less b/styles/sheets/chase.less index 9d4316dd..f7991ea6 100644 --- a/styles/sheets/chase.less +++ b/styles/sheets/chase.less @@ -135,7 +135,7 @@ } } -.track { +.chase-track { display: flex; flex-direction: row; flex-wrap: nowrap; diff --git a/templates/items/chase.html b/templates/items/chase.html index 7c1cf96c..358badc1 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -100,6 +100,10 @@
              + {{#unless p.isActive}} + + + {{/unless}} @@ -110,7 +114,7 @@
              {{/if}} -
              +
              {{#each locations as |location i|}}
              From 32f0d1c852f302ca2096acf7c335c86bb4e4870f Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 10 Nov 2021 13:36:29 +0100 Subject: [PATCH 308/726] split item and sheet --- module/items/chase/data.js | 49 +++- module/items/chase/participant.js | 409 ++++++++++++++++++++++++++ module/items/chase/sheet.js | 467 +----------------------------- templates/items/chase.html | 2 +- 4 files changed, 465 insertions(+), 462 deletions(-) create mode 100644 module/items/chase/participant.js diff --git a/module/items/chase/data.js b/module/items/chase/data.js index 06526d2d..d1dac301 100644 --- a/module/items/chase/data.js +++ b/module/items/chase/data.js @@ -1,11 +1,46 @@ import { CoC7Item } from '../item.js' +import { _participant } from './participant.js' export class CoC7Chase extends CoC7Item { - constructor (data, context) { - if (typeof data.img === 'undefined') { - data.img = 'systems/CoC7/assets/icons/running-solid.svg' - } - super(data, context) - this.context = context - } + constructor (data, context) { + if (typeof data.img === 'undefined') { + data.img = 'systems/CoC7/assets/icons/running-solid.svg' + } + super(data, context) + this.context = context + } + + + //Handle participants + get participants () { + const pList = [] + this.data.data.participants.forEach(p => { + pList.push(new _participant(p)) + p.index = pList.length - 1 + }) + return pList + } + + get participantsByAdjustedMov () { + return this.participants.sort((a, b) => a.adjustedMov - b.adjustedMov) + } + + get participantsByInitiative () { + return this.participants.sort((a, b) => b.initiative - a.initiative) + } + + get preys () { + return ( + this.participants + .filter(p => !p.isChaser && p.isValid) || [] + ) + } + + get chasers () { + return ( + this.participants + .filter(p => p.isChaser && p.isValid) || [] + ) + } + //handle locations } \ No newline at end of file diff --git a/module/items/chase/participant.js b/module/items/chase/participant.js new file mode 100644 index 00000000..a5a5b266 --- /dev/null +++ b/module/items/chase/participant.js @@ -0,0 +1,409 @@ + +import { chatHelper } from '../../chat/helper.js' +import { CoC7Check } from '../../check.js' + +export class _participant { + constructor (data = {}) { + this.data = data + } + + get actor () { + if (!this._actor) { + this._actor = chatHelper.getActorFromKey(this.data.actorKey) + } + return this._actor + } + + get isActor () { + return this.hasActor || this.hasVehicle + } + + get isActive () { + return this.data.active || false + } + + get key () { + if (this.hasVehicle) return this.vehicle.actorKey + if (this.hasActor) return this.actor.actorKey + return undefined + } + + get icon () { + if (!this.isActor) { + return 'systems/CoC7/assets/icons/question-circle-regular.svg' + } + if (this.hasVehicle) return this.vehicle.img + if (this.hasActor) return this.actor.img + return undefined + } + + get driver () { + if (!this._driver) { + this._driver = chatHelper.getActorFromKey(this.data.actorKey) + } + return this._driver + } + + get vehicle () { + if (this.data.vehicleKey) { + this._vehicle = chatHelper.getActorFromKey(this.data.vehicleKey) + } + return this._vehicle + } + + get hasActor () { + return !!this.actor + } + + get hasVehicle () { + return !!this.vehicle + } + + get name () { + if (this.hasVehicle) return this.vehicle.name + if (this.hasActor) return this.actor.name + return this.data.name || undefined + } + + get mov () { + if (!this.data.mov) { + if (this.hasVehicle) this.data.mov = this.vehicle.mov + else if (this.hasActor) this.data.mov = this.actor.mov + } + + if (this.data.mov) { + if (!isNaN(Number(this.data.mov))) this.data.hasValidMov = true + else { + this.data.hasValidMov = false + this.data.mov = undefined + } + } + + return this.data.mov + } + + get uuid () { + return this.data.uuid + } + + get dex () { + if (!this.data.dex) { + if (this.hasVehicle && this.hasDriver) { + this.data.dex = this.driver.characteristics.dex.value + } else if (this.hasActor) { + this.data.dex = this.actor.characteristics.dex.value + } + } + + if (this.data.dex) { + if (!isNaN(Number(this.data.dex))) this.data.hasValidDex = true + else { + this.data.hasValidDex = false + this.data.dex = 0 + } + } + + return this.data.dex + } + + get hasAGunReady () { + return this.data.hasAGunReady || false + } + + get initiative () { + let init = this.dex + if (this.hasAGunReady) { + init += 50 + } + // if( this.speedCheck){ + // if(this.speedCheck.score) init += this.speedCheck.score/100 + // } + + return init + } + + get isChaser () { + return !!this.data.chaser + } + + get isValid () { + return this.hasValidDex && this.hasValidMov + } + + get hasValidDex () { + return !isNaN(Number(this.data.dex)) + } + + get hasValidMov () { + return !isNaN(Number(this.data.mov)) + } + + get hasDriver () { + return this.hasVehicle && this.hasActor + } + + get movAdjustment () { + if (this.data.speedCheck?.rollDataString) { + const roll = CoC7Check.fromRollString(this.data.speedCheck.rollDataString) + if (roll) { + if (!roll.standby) { + if (roll.successLevel >= CoC7Check.successLevel.extreme) return 1 + else if (roll.failed) return -1 + } + } + } + return 0 + } + + get adjustedMov () { + if (typeof this.mov === 'undefined') return undefined + if (isNaN(Number(this.mov))) return undefined + return Number(this.mov) + this.movAdjustment + } + + get hasMovAdjustment () { + return this.hasBonusMov || this.hasMalusMov + } + + get hasBonusMov () { + if (this.data.movAdjustment > 0) return true + return false + } + + get hasMalusMov () { + if (this.data.movAdjustment < 0) return true + return false + } + + // get options(){ + // return { + // exclude: [], + // excludeStartWith: '_' + // }; + // } + + // get dataString(){ + // return JSON.stringify(this, (key,value)=>{ + // if( null === value) return undefined; + // if( this.options.exclude?.includes(key)) return undefined; + // if( key.startsWith(this.options.excludeStartWith)) return undefined; + // return value; + // }); + // } + + tooSlow () { + this.data.excluded = true + } + + includeInChase () { + this.data.excluded = false + this.data.escaped = false + } + + escaped () { + this.data.escaped = true + } + + set slowest (x) { + this.data.slowest = x + } + + set fastest (x) { + this.data.fastest = x + } + + set movementAction (x) { + this.data.movementAction = x + } + + get movementAction () { + return 2 + // return this.data.movementAction + } + + set currentMovementActions (x) { + this.data.currentMovementActions = x + } + + get currentMovementActions () { + return this.data.currentMovementActions || 0 + } + + get hasMaxMvtActions () { + return this.currentMovementActions >= this.movementAction + } + + get isActive () { + return this.data.active || false + } + + addMovementActions (x = 1) { + this.currentMovementActions += x + if (this.currentMovementActions > this.movementAction) + this.currentMovementActions = this.movementAction + } + + addMovementActions (x = 1) { + this.currentMovementActions -= x + } + + alterMovementActions (x) { + this.currentMovementActions += x + if (this.currentMovementActions > this.movementAction) + this.currentMovementActions = this.movementAction + } + + get movementActionArray () { + const baseArray = Array(this.movementAction).fill('base') + if (this.currentMovementActions >= 0) { + for (let i = 0; i < this.currentMovementActions; i++) { + baseArray[i] = 'base available' + } + return baseArray + } + + if (this.currentMovementActions < 0) { + const deficitArray = Array(Math.abs(this.currentMovementActions)).fill( + 'deficit' + ) + return deficitArray.concat(baseArray) + } + } + + get cssClass () { + const cssClasses = [] + if (this.isChaser) cssClasses.push('chaser') + else cssClasses.push('prey') + if (this.data.excluded) cssClasses.push('excluded', 'too_slow') + if (this.data.escaped) cssClasses.push('escaped') + if (this.data.fastest) cssClasses.push('fastest') + if (this.data.slowest) cssClasses.push('slowest') + if (this.data.active) cssClasses.push('active') + return cssClasses.join(' ') + } + + get speedCheck () { + const check = {} + if (this.data.speedCheck?.name) check.name = this.data.speedCheck.name + if (this.data.speedCheck?.score) check.score = this.data.speedCheck.score + check.cssClasses = '' + if (this.data.speedCheck?.rollDataString) { + check.roll = CoC7Check.fromRollString(this.data.speedCheck.rollDataString) + if (check.roll) { + if (!check.roll.standby || check.roll.hasCard) { + check.rolled = true + check.inlineRoll = check.roll.inlineCheck.outerHTML + check.cssClasses += 'rolled' + if (!check.roll.standby) { + if (check.roll.successLevel >= CoC7Check.successLevel.extreme) { + check.modifierCss = 'upgrade' + } else if (check.roll.failed) check.modifierCss = 'downgrade' + if ( + check.roll.successLevel >= CoC7Check.successLevel.extreme || + check.roll.failed + ) { + check.hasModifier = true + } + } + } + } + } + if (this.hasActor) { + check.options = [] + for (const c of ['con']) { + const characterisitc = this.actor.getCharacteristic(c) + if (characterisitc?.value) check.options.push(characterisitc.label) + } + + for (const s of this.actor.driveSkills) { + check.options.push(s.name) + } + + for (const s of this.actor.pilotSkills) { + check.options.push(s.name) + } + check.hasOptions = !!check.options.length + + if (this.data.speedCheck?.id) { + let item = this.actor.find(this.data.speedCheck.id) + if (!item) { + const gameItem = game.items.get(this.data.speedCheck.id) + if (gameItem) item = this.actor.find(gameItem.name) + } + + if (item) { + if (item.type === 'item' && item.value.data?.type === 'skill') { + check.ref = item.value + check.name = item.value.name + check.type = 'skill' + check.isSkill = true + check.refSet = true + check.score = item.value.value + } + if (item.type === 'characteristic') { + check.ref = item.value + check.name = item.value.label + check.type = 'characteristic' + check.isCharacteristic = true + check.refSet = true + check.score = item.value.value + } + if (item.type === 'attribute') { + check.ref = item.value + check.name = item.value.label + check.type = 'attribute' + check.isAttribute = true + check.refSet = true + check.score = item.value.value + } + } + } else if (this.data.speedCheck?.name) { + const item = this.actor.find(this.data.speedCheck.name) + if (item) { + if (item.type === 'item' && item.value.data?.type === 'skill') { + check.ref = item.value + check.name = item.value.name + check.type = 'skill' + check.isSkill = true + check.refSet = true + check.score = item.value.value + } + if (item.type === 'characteristic') { + check.ref = item.value + check.name = item.value.label + check.type = 'characteristic' + check.isCharacteristic = true + check.refSet = true + check.score = item.value.value + } + if (item.type === 'attribute') { + check.ref = item.value + check.name = item.value.label + check.type = 'attribute' + check.isAttribute = true + check.refSet = true + check.score = item.value.value + } + } + } + } else if (this.data.speedCheck?.id) { + const item = game.items.get(this.data.speedCheck.id) + if (item) { + if (item.data?.type === 'skill') { + check.ref = item + check.name = item.name + check.type = 'skill' + check.isSkill = true + check.refSet = false + check.score = item.base + } + } + } + + if (!check.rolled && !check.score) check.cssClasses += ' invalid' + check.isValid = check.rolled && !isNaN(check.score) + + return check + } + } + \ No newline at end of file diff --git a/module/items/chase/sheet.js b/module/items/chase/sheet.js index a87a8f00..0b8c7e9b 100644 --- a/module/items/chase/sheet.js +++ b/module/items/chase/sheet.js @@ -4,6 +4,7 @@ import { CoCActor } from '../../actors/actor.js' import { CoC7Chat } from '../../chat.js' import { chatHelper } from '../../chat/helper.js' import { CoC7Check } from '../../check.js' +import { _participant } from './participant.js' export class CoC7ChaseSheet extends ItemSheet { // constructor( ...args) { @@ -72,10 +73,10 @@ export class CoC7ChaseSheet extends ItemSheet { data.data = itemData.data // MODIF: 0.8.x data.data /*****************/ - data.participants = this.participants - data.participantsByInitiative = this.participantsByInitiative - data.preys = this.preys - data.chasers = this.chasers + data.participants = this.item.participants + data.participantsByInitiative = this.item.participantsByInitiative + data.preys = this.item.preys + data.chasers = this.item.chasers // data.byDex = duplicate(data.participants).sort((a, b) => a.dex - b.dex) @@ -129,27 +130,6 @@ export class CoC7ChaseSheet extends ItemSheet { return data } - get participants () { - const pList = [] - this.item.data.data.participants.forEach(p => { - pList.push(new _participant(p)) - p.index = pList.length - 1 - }) - pList.sort((a, b) => a.adjustedMov - b.adjustedMov) - return pList - // return this.item.data.data.participants - } - - get participantsByInitiative () { - const pList = [] - this.item.data.data.participants.forEach(p => { - pList.push(new _participant(p)) - p.index = pList.length - 1 - }) - pList.sort((a, b) => b.initiative - a.initiative) - return pList - } - get allSkillsAndCharacteristics () { const list = [] CoCActor.getCharacteristicDefinition().forEach(c => @@ -177,7 +157,7 @@ export class CoC7ChaseSheet extends ItemSheet { ) list.push(s.fullName) }) // TODO: Remove ?? - this.participants.forEach(p => { + this.item.participants.forEach(p => { if (p.actor) { p.actor.skills.forEach(s => { if (!list.includes(s.fullName)) list.push(s.fullName) @@ -187,22 +167,6 @@ export class CoC7ChaseSheet extends ItemSheet { return list.sort(Intl.Collator().compare) } - get preys () { - return ( - this.participants - .filter(p => !p.isChaser && p.isValid) - .sort((a, b) => a.adjustedMov - b.adjustedMov) || [] - ) - } - - get chasers () { - return ( - this.participants - .filter(p => p.isChaser && p.isValid) - .sort((a, b) => a.adjustedMov - b.adjustedMov) || [] - ) - } - findMinMov (list) { if (!list?.length) return -1 return list.reduce((prev, current) => @@ -383,11 +347,11 @@ export class CoC7ChaseSheet extends ItemSheet { } get allHaveValidMov () { - return this.participants.every(e => e.hasValidMov) + return this.item.participants.every(e => e.hasValidMov) } get allHaveSpeedRoll () { - return this.participants.every(p => p.speedCheck?.rolled) + return this.item.participants.every(p => p.speedCheck?.rolled) } get started () { @@ -403,7 +367,7 @@ export class CoC7ChaseSheet extends ItemSheet { //TODO : Check for speed roll ?? //Calculate movement actions - const participants = this.participants + const participants = this.item.participants const minMov = this.findMinMov(participants) participants.forEach(p => { p.data.movementAction = 1 + (p.adjustedMov - minMov) @@ -417,10 +381,10 @@ export class CoC7ChaseSheet extends ItemSheet { get startingLine () { //Get preys and check for escaped const preys = this.item.data.data.includeEscaped - ? this.preys - : this.preys?.filter(p => !p.data.escaped) + ? this.item.preys + : this.item.preys?.filter(p => !p.data.escaped) //Get chasers - const chasers = this.chasers + const chasers = this.item.chasers //If no prey or no chasser // if (0 == chasers.length) { @@ -980,7 +944,7 @@ export class CoC7ChaseSheet extends ItemSheet { const target = event.currentTarget const participantUuid = target.closest('.initiative-block')?.dataset?.uuid if (!participantUuid) return - const participants = this.participants + const participants = this.item.participants const participant = participants.find(p => participantUuid == p.uuid) if(participant.hasMaxMvtActions && count>0) return participant.alterMovementActions(count) @@ -1476,408 +1440,3 @@ export function clean (obj) { } return obj } - -export class _participant { - constructor (data = {}) { - this.data = data - } - - get actor () { - if (!this._actor) { - this._actor = chatHelper.getActorFromKey(this.data.actorKey) - } - return this._actor - } - - get isActor () { - return this.hasActor || this.hasVehicle - } - - get isActive () { - return this.data.active || false - } - - get key () { - if (this.hasVehicle) return this.vehicle.actorKey - if (this.hasActor) return this.actor.actorKey - return undefined - } - - get icon () { - if (!this.isActor) { - return 'systems/CoC7/assets/icons/question-circle-regular.svg' - } - if (this.hasVehicle) return this.vehicle.img - if (this.hasActor) return this.actor.img - return undefined - } - - get driver () { - if (!this._driver) { - this._driver = chatHelper.getActorFromKey(this.data.actorKey) - } - return this._driver - } - - get vehicle () { - if (this.data.vehicleKey) { - this._vehicle = chatHelper.getActorFromKey(this.data.vehicleKey) - } - return this._vehicle - } - - get hasActor () { - return !!this.actor - } - - get hasVehicle () { - return !!this.vehicle - } - - get name () { - if (this.hasVehicle) return this.vehicle.name - if (this.hasActor) return this.actor.name - return this.data.name || undefined - } - - get mov () { - if (!this.data.mov) { - if (this.hasVehicle) this.data.mov = this.vehicle.mov - else if (this.hasActor) this.data.mov = this.actor.mov - } - - if (this.data.mov) { - if (!isNaN(Number(this.data.mov))) this.data.hasValidMov = true - else { - this.data.hasValidMov = false - this.data.mov = undefined - } - } - - return this.data.mov - } - - get uuid () { - return this.data.uuid - } - - get dex () { - if (!this.data.dex) { - if (this.hasVehicle && this.hasDriver) { - this.data.dex = this.driver.characteristics.dex.value - } else if (this.hasActor) { - this.data.dex = this.actor.characteristics.dex.value - } - } - - if (this.data.dex) { - if (!isNaN(Number(this.data.dex))) this.data.hasValidDex = true - else { - this.data.hasValidDex = false - this.data.dex = 0 - } - } - - return this.data.dex - } - - get hasAGunReady () { - return this.data.hasAGunReady || false - } - - get initiative () { - let init = this.dex - if (this.hasAGunReady) { - init += 50 - } - // if( this.speedCheck){ - // if(this.speedCheck.score) init += this.speedCheck.score/100 - // } - - return init - } - - get isChaser () { - return !!this.data.chaser - } - - get isValid () { - return this.hasValidDex && this.hasValidMov - } - - get hasValidDex () { - return !isNaN(Number(this.data.dex)) - } - - get hasValidMov () { - return !isNaN(Number(this.data.mov)) - } - - get hasDriver () { - return this.hasVehicle && this.hasActor - } - - get movAdjustment () { - if (this.data.speedCheck?.rollDataString) { - const roll = CoC7Check.fromRollString(this.data.speedCheck.rollDataString) - if (roll) { - if (!roll.standby) { - if (roll.successLevel >= CoC7Check.successLevel.extreme) return 1 - else if (roll.failed) return -1 - } - } - } - return 0 - } - - get adjustedMov () { - if (typeof this.mov === 'undefined') return undefined - if (isNaN(Number(this.mov))) return undefined - return Number(this.mov) + this.movAdjustment - } - - get hasMovAdjustment () { - return this.hasBonusMov || this.hasMalusMov - } - - get hasBonusMov () { - if (this.data.movAdjustment > 0) return true - return false - } - - get hasMalusMov () { - if (this.data.movAdjustment < 0) return true - return false - } - - // get options(){ - // return { - // exclude: [], - // excludeStartWith: '_' - // }; - // } - - // get dataString(){ - // return JSON.stringify(this, (key,value)=>{ - // if( null === value) return undefined; - // if( this.options.exclude?.includes(key)) return undefined; - // if( key.startsWith(this.options.excludeStartWith)) return undefined; - // return value; - // }); - // } - - tooSlow () { - this.data.excluded = true - } - - includeInChase () { - this.data.excluded = false - this.data.escaped = false - } - - escaped () { - this.data.escaped = true - } - - set slowest (x) { - this.data.slowest = x - } - - set fastest (x) { - this.data.fastest = x - } - - set movementAction (x) { - this.data.movementAction = x - } - - get movementAction () { - return 2 - // return this.data.movementAction - } - - set currentMovementActions (x) { - this.data.currentMovementActions = x - } - - get currentMovementActions () { - return this.data.currentMovementActions || 0 - } - - get hasMaxMvtActions () { - return this.currentMovementActions >= this.movementAction - } - - get isActive () { - return this.data.active || false - } - - addMovementActions (x = 1) { - this.currentMovementActions += x - if (this.currentMovementActions > this.movementAction) - this.currentMovementActions = this.movementAction - } - - addMovementActions (x = 1) { - this.currentMovementActions -= x - } - - alterMovementActions (x) { - this.currentMovementActions += x - if (this.currentMovementActions > this.movementAction) - this.currentMovementActions = this.movementAction - } - - get movementActionArray () { - const baseArray = Array(this.movementAction).fill('base') - if (this.currentMovementActions >= 0) { - for (let i = 0; i < this.currentMovementActions; i++) { - baseArray[i] = 'base available' - } - return baseArray - } - - if (this.currentMovementActions < 0) { - const deficitArray = Array(Math.abs(this.currentMovementActions)).fill( - 'deficit' - ) - return deficitArray.concat(baseArray) - } - } - - get cssClass () { - const cssClasses = [] - if (this.isChaser) cssClasses.push('chaser') - else cssClasses.push('prey') - if (this.data.excluded) cssClasses.push('excluded', 'too_slow') - if (this.data.escaped) cssClasses.push('escaped') - if (this.data.fastest) cssClasses.push('fastest') - if (this.data.slowest) cssClasses.push('slowest') - if (this.data.active) cssClasses.push('active') - return cssClasses.join(' ') - } - - get speedCheck () { - const check = {} - if (this.data.speedCheck?.name) check.name = this.data.speedCheck.name - if (this.data.speedCheck?.score) check.score = this.data.speedCheck.score - check.cssClasses = '' - if (this.data.speedCheck?.rollDataString) { - check.roll = CoC7Check.fromRollString(this.data.speedCheck.rollDataString) - if (check.roll) { - if (!check.roll.standby || check.roll.hasCard) { - check.rolled = true - check.inlineRoll = check.roll.inlineCheck.outerHTML - check.cssClasses += 'rolled' - if (!check.roll.standby) { - if (check.roll.successLevel >= CoC7Check.successLevel.extreme) { - check.modifierCss = 'upgrade' - } else if (check.roll.failed) check.modifierCss = 'downgrade' - if ( - check.roll.successLevel >= CoC7Check.successLevel.extreme || - check.roll.failed - ) { - check.hasModifier = true - } - } - } - } - } - if (this.hasActor) { - check.options = [] - for (const c of ['con']) { - const characterisitc = this.actor.getCharacteristic(c) - if (characterisitc?.value) check.options.push(characterisitc.label) - } - - for (const s of this.actor.driveSkills) { - check.options.push(s.name) - } - - for (const s of this.actor.pilotSkills) { - check.options.push(s.name) - } - check.hasOptions = !!check.options.length - - if (this.data.speedCheck?.id) { - let item = this.actor.find(this.data.speedCheck.id) - if (!item) { - const gameItem = game.items.get(this.data.speedCheck.id) - if (gameItem) item = this.actor.find(gameItem.name) - } - - if (item) { - if (item.type === 'item' && item.value.data?.type === 'skill') { - check.ref = item.value - check.name = item.value.name - check.type = 'skill' - check.isSkill = true - check.refSet = true - check.score = item.value.value - } - if (item.type === 'characteristic') { - check.ref = item.value - check.name = item.value.label - check.type = 'characteristic' - check.isCharacteristic = true - check.refSet = true - check.score = item.value.value - } - if (item.type === 'attribute') { - check.ref = item.value - check.name = item.value.label - check.type = 'attribute' - check.isAttribute = true - check.refSet = true - check.score = item.value.value - } - } - } else if (this.data.speedCheck?.name) { - const item = this.actor.find(this.data.speedCheck.name) - if (item) { - if (item.type === 'item' && item.value.data?.type === 'skill') { - check.ref = item.value - check.name = item.value.name - check.type = 'skill' - check.isSkill = true - check.refSet = true - check.score = item.value.value - } - if (item.type === 'characteristic') { - check.ref = item.value - check.name = item.value.label - check.type = 'characteristic' - check.isCharacteristic = true - check.refSet = true - check.score = item.value.value - } - if (item.type === 'attribute') { - check.ref = item.value - check.name = item.value.label - check.type = 'attribute' - check.isAttribute = true - check.refSet = true - check.score = item.value.value - } - } - } - } else if (this.data.speedCheck?.id) { - const item = game.items.get(this.data.speedCheck.id) - if (item) { - if (item.data?.type === 'skill') { - check.ref = item - check.name = item.name - check.type = 'skill' - check.isSkill = true - check.refSet = false - check.score = item.base - } - } - } - - if (!check.rolled && !check.score) check.cssClasses += ' invalid' - check.isValid = check.rolled && !isNaN(check.score) - - return check - } -} diff --git a/templates/items/chase.html b/templates/items/chase.html index 358badc1..978fd5ed 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -81,7 +81,7 @@ {{#if started}}
              - {{#each participantsByInitiative as |p i|}} + {{#each item.participantsByInitiative as |p i|}}
              From 10fa045e729ed2baa4d95d8ff406cedb813bd650 Mon Sep 17 00:00:00 2001 From: Grischa Brockhaus Date: Thu, 11 Nov 2021 13:48:56 +0100 Subject: [PATCH 309/726] Added more German translation Added one new translation and updated the German importer regey file --- lang/de.json | 1 + module/apps/actor-importer-regexp.js | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lang/de.json b/lang/de.json index f77a15af..763be9cb 100644 --- a/lang/de.json +++ b/lang/de.json @@ -127,6 +127,7 @@ "CoC7.MagicPointsCost": "Magiepunkte Kosten", "CoC7.OtherCosts": "Andere Kosten", "CoC7.CastingSpell": "Führt {spell} aus.", + "CoC7.NotEnoughMagicPoints": "{spell} kostet {originalMagicPoints} Magiepunte, Du hast aber nur {actorMagicPoints}. Möchtest Du die fehlenden {convertedHitPoints} Punkte von Deinen Trefferpunkten nehmen? Du wirst {convertedHitPoints} Schaden nehmen, wenn Du das tust.", "CoC7.CopyToClipboard": "In Zwischenablage kopieren", "CoC7.WhisperToSelection": "An ausgewählte Tokens flüstern", diff --git a/module/apps/actor-importer-regexp.js b/module/apps/actor-importer-regexp.js index f34d7898..a5b7ff62 100644 --- a/module/apps/actor-importer-regexp.js +++ b/module/apps/actor-importer-regexp.js @@ -93,7 +93,7 @@ const keys = { sanLossNone: 'none', diceShort: 'w|d', fulldb: '(' + 'Schadensbonus|Sb' + ')', - halfdb: '(' + '½|half' + ')', + halfdb: '(' + '½|1/2 Schadensbonus|Sb/2' + ')', sectionCombats: '\n(?:' + 'Kampf|Angriff:|ANGRIFFE' + ')[:\n]', newCombatHeader: '\n' + 'Kampf' + '\n', sectionSkills: '\n(?:' + 'Fertigkeiten' + '(?:\\s*\\([^\\)]+\\))?)[:\n]', @@ -347,7 +347,7 @@ const translations = { ']+(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,;]?\\s*', - guessStartCombat: '(^|(?[\\.\\s' + nameCharacters + ']+)[,\\s\n]+', sections: '(' + From 4580ec0d269b608427c11a5d039217b24cccbcef Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 11 Nov 2021 20:35:29 +0000 Subject: [PATCH 310/726] Updated translations list --- .github/TRANSLATIONS.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index ef336884..4513123c 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,15 +2,15 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The **sv** translation is currently up to date +The following translations are currently up to date **de**, **sv** The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | ja | pl | pt-BR | zh-TW | -| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **1** | **2** | **2** | **2** | **2** | **2** | **2** | -| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| Key | es | fr | ja | pl | pt-BR | zh-TW | +| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **2** | **2** | **2** | **2** | **2** | **2** | +| [CoC7.German](#coc7german) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ##### CoC7.German From 818f816413f5bd3102d62bee47a60200e5b34468 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Sun, 14 Nov 2021 17:04:46 +0100 Subject: [PATCH 311/726] Init track theming --- module/items/chase/data.js | 616 +++++++++++++++++++++++-- module/items/chase/participant.js | 744 +++++++++++++++--------------- module/items/chase/sheet.js | 591 +++--------------------- styles/sheets/chase.less | 21 +- templates/items/chase.html | 29 +- 5 files changed, 1062 insertions(+), 939 deletions(-) diff --git a/module/items/chase/data.js b/module/items/chase/data.js index d1dac301..340a7946 100644 --- a/module/items/chase/data.js +++ b/module/items/chase/data.js @@ -1,46 +1,586 @@ +import { CoC7Check } from '../../check.js' import { CoC7Item } from '../item.js' -import { _participant } from './participant.js' +import { _participant, sortByRoleAndDex } from './participant.js' export class CoC7Chase extends CoC7Item { - constructor (data, context) { - if (typeof data.img === 'undefined') { - data.img = 'systems/CoC7/assets/icons/running-solid.svg' - } - super(data, context) - this.context = context - } - - - //Handle participants - get participants () { - const pList = [] - this.data.data.participants.forEach(p => { - pList.push(new _participant(p)) - p.index = pList.length - 1 - }) - return pList - } - - get participantsByAdjustedMov () { - return this.participants.sort((a, b) => a.adjustedMov - b.adjustedMov) - } - - get participantsByInitiative () { - return this.participants.sort((a, b) => b.initiative - a.initiative) - } - - get preys () { - return ( - this.participants - .filter(p => !p.isChaser && p.isValid) || [] - ) + constructor (data, context) { + if (typeof data.img === 'undefined') { + data.img = 'systems/CoC7/assets/icons/running-solid.svg' + } + super(data, context) + this.context = context + } + + //Handle participants + get participants () { + const pList = [] + this.data.data.participants.forEach(p => { + pList.push(new _participant(p)) + p.index = pList.length - 1 + }) + return pList + } + + get participantsByAdjustedMov () { + return this.participants.sort((a, b) => a.adjustedMov - b.adjustedMov) + } + + get participantsByInitiative () { + return this.participants.sort((a, b) => b.initiative - a.initiative) + } + + get preys () { + return this.participants.filter(p => !p.isChaser && p.isValid) || [] } get chasers () { - return ( - this.participants - .filter(p => p.isChaser && p.isValid) || [] + return this.participants.filter(p => p.isChaser && p.isValid) || [] + } + + get allHaveValidMov () { + return this.participants.every(e => e.hasValidMov) + } + + get allHaveSpeedRoll () { + return this.participants.every(p => p.speedCheck?.rolled) + } + + async updateParticipants (list) { + const participantsData = this.data.data.participants + ? duplicate(this.data.data.participants) + : [] + list.forEach(p => { + let data + if (p.constructor.name == '_participant') { + data = p.data + } else data = p + const index = this.findIndex(participantsData, data.uuid) + if (-1 === index) { + participantsData.push(data) + ui.notifications.warn('Participant data missing') + } else { + participantsData[index] = data + } + }) + await this.update({ 'data.participants': participantsData }) + return + } + + async activateParticipant ( + participantUuid, + { scrollToLocation = true, activateLocation = true } = {} + ) { + const participants = this.data.data.participants + ? duplicate(this.data.data.participants) + : [] + participants.forEach(p => { + delete p.active + if (participantUuid == p.uuid) p.active = true + }) + await this.updateParticipants(participants) + } + + /** @override */ + async updateRoll (rollString) { + if (game.user.isGM) { + const roll = CoC7Check.fromRollString(rollString) + const participants = this.data.data.participants + ? duplicate(this.data.data.participants) + : [] + const index = participants.findIndex(p => p.rollUuid === roll.uuid) + if (index >= 0) { + participants[index].speedCheck.rollDataString = roll.JSONRollString + await this.update({ 'data.participants': participants }) + } + } else { + const data = { + data: rollString, + type: 'invoke', + method: 'updateRoll', + item: this.uuid + } + game.socket.emit('system.CoC7', data) + } + } + + //handle locations + get locations () { + const locations = this.started + ? this.data.data.locations.list + ? duplicate(this.data.data.locations.list) + : [] + : this.initTrack + this.processLocations(locations) + return locations + } + + processLocations (locations) { + if (!locations?.length) return + locations[0].first = true + + for (let index = 0; index < locations.length; index++) { + const classes = [] + const location = locations[index] + if (!location.name) classes.push('empty') + if (location.active) classes.push('active') + if (location.init && !this.started) classes.push('init') + location.cssClasses = classes.join(' ') + } + + if (locations.length > 1) locations[locations.length - 1].last = true + + locations.forEach(l => { + if (l.participants && l.participants.length) { + for (let i = 0; i < l.participants.length; i++) { + const elem = l.participants[i] // Init track = only uuid, update location list change for uuid + + // ui.notifications.error(`Type : ${typeof elem}`) + let p + if (typeof elem === 'string' || elem instanceof String) { + p = this.data.data.participants.find(p => elem == p.uuid) //Retrieve participant data from list. + } else if (elem.constructor.name == '_participant') { + p = undefined // participant is already processed. + ui.notifications.warn('Participant was already processed.') + } else p = undefined + + if (undefined != p) { + l.participants[i] = new _participant(p) // replace uuid with _participant + } else { + // participants.push( null) + console.error( + 'Undefined paticipant while processing participants array' + ) + } + } + l.participants.sort(sortByRoleAndDex) // TODO : test if sorting works + } + }) + } + + get initTrack () { + if ( + !this.data.data.locations.list || + 0 === this.data.data.locations.list.length + ) + return undefined + + const locations = [] // !!!!!!! locations vs init locations !!! + + const init = this.startingLine + let locationsIndexStart, initIndexStart, locationsLength + if (0 >= init.length) locationsIndexStart = 0 + else if (this.data.data.startingIndex >= init.length) + locationsIndexStart = 0 + else locationsIndexStart = init.length - this.data.data.startingIndex + + if (this.data.data.startingIndex <= 0) initIndexStart = 0 + else if (this.data.data.startingIndex <= init.length) initIndexStart = 0 + else initIndexStart = this.data.data.startingIndex - init.length + + if (0 == locationsIndexStart) + locationsLength = this.data.data.locations.list.length + else + locationsLength = + this.data.data.locations.list.length + locationsIndexStart + + if (0 != init.length) { + if (this.data.data.startingIndex < 0) { + for ( + let index = 0; + index < Math.abs(this.data.data.startingIndex); + index++ + ) { + init.push({ + uuid: this.generateNewUuid(), + init: true, + participants: [] + }) + } + } + } + + const chaseLocations = duplicate(this.data.data.locations) + for (let index = 0; index < locationsLength; index++) { + let location = {} + const participants = [] + if ( + index >= locationsIndexStart && + index - locationsIndexStart < chaseLocations.list.length + ) { + location = duplicate(chaseLocations.list[index - locationsIndexStart]) + location.init = false + location.participants?.forEach(p => { + if (null != p) participants.push(p) + }) + } + if (index >= initIndexStart && index - initIndexStart < init.length) { + mergeObject(location, init[index - initIndexStart], { + overwrite: false + }) + + init[index - initIndexStart].participants?.forEach(p => { + if (null != p) participants.push(p) + }) + + location.participants = participants + } + location.first = false + location.end = false + locations.push(location) + } + + return locations + } + + get startingLine () { + //Get preys and check for escaped + const preys = this.data.data.includeEscaped + ? this.preys + : this.preys?.filter(p => !p.data.escaped) + //Get chasers + const chasers = this.chasers + + //If no prey or no chasser + // if (0 == chasers.length) { + // ui.notifications.warn('No chasers') + // return undefined + // } + // if (0 == preys.length) { + // ui.notifications.warn('No preys') + // return undefined + // } + + //Build starting track + const chaseTrack = [] + + const chasersMinMov = this.findMinMov(chasers) + const chasersMaxMov = this.findMaxMov(chasers) + const preysMinMov = this.findMinMov(preys) + const preysMaxMov = this.findMaxMov(preys) + + if (-1 != chasersMinMov && -1 != chasersMaxMov) { + // Add chasers to the track. + for (let mov = chasersMinMov; mov <= chasersMaxMov; mov++) { + //Find all with that mov + const location = { + uuid: this.generateNewUuid(), + init: true, + participants: [] + } + const locationParticipantsList = chasers + .filter(p => mov == p.adjustedMov) + .sort((a, b) => a.dex - b.dex) + locationParticipantsList.forEach(p => + location.participants.push(p.uuid) + ) + chaseTrack.push(location) + } + + // Add space between chasers and preys. + for (let index = 0; index < this.data.data.startingRange; index++) { + chaseTrack.push({ + uuid: this.generateNewUuid(), + init: true, + participants: [] + }) + } + } + + if (-1 != preysMinMov && -1 != preysMaxMov) { + // Add preys to the track. + for (let mov = preysMinMov; mov <= preysMaxMov; mov++) { + //Find all with that mov + const location = { + uuid: this.generateNewUuid(), + init: true, + participants: [] + } + const locationParticipantsList = preys + .filter(p => mov == p.adjustedMov) + .sort((a, b) => a.dex - b.dex) + locationParticipantsList.forEach(p => + location.participants.push(p.uuid) + ) + chaseTrack.push(location) + } + } + + return chaseTrack + } + + async updateLocationsList (list) { + //Remove all unnecessary items (cssClass, ) + const updatedList = this.cleanLocationsList(list) + await this.update({ 'data.locations.list': updatedList }) + } + + cleanLocationsList (list) { + const updatedList = duplicate(list) + const partipantsUuidArray = this.data.data.participants.map(p => p.uuid) + + updatedList.forEach(l => { + // delete l.active + delete l.cssClasses + delete l.first + delete l.last + delete l.end + if (l.participants && l.participants.length) { + for (let i = 0; i < l.participants.length; i++) { + //Replace _Participants by uuid + if (l.participants[i].data?.uuid) + l.participants[i] = l.participants[i].data.uuid + } + + //Remove unkown particicpants + l.participants = l.participants.filter(uuid => + partipantsUuidArray.includes(uuid) + ) + } + }) + + return updatedList + } + + async activateLocation (locationUuid, { scrollToLocation = true } = {}) { + const updateData = {} + const locations = this.data.data.locations.list + ? duplicate(this.data.data.locations.list) + : [] + locations.forEach(l => { + delete l.active + if (locationUuid == l.uuid) l.active = true + }) + updateData['data.locations.list'] = this.cleanLocationsList( locations) + // await this.updateLocationsList(locations, { render: false }) + if (scrollToLocation){ + updateData['data.scroll.chaseTrack.from'] = this.chaseTrackCurrentScrollPosition + updateData['data.scroll.chaseTrack.to'] = this.getChaseTrackLocationScrollPosition(locationUuid) + // await this.setchaseTrackScroll({ + // from: this.chaseTrackCurrentScrollPosition, + // to: this.chaseTrackActiveLocationScrollPosition + // }) + } + await this.update( updateData) + } + + //Locations navigation + get activeLocation () { + if (!this.locations) return undefined + return this.locations.find(l => l.active) + } + + get previousLocation () { + if (!this.locations) return undefined + const activeIndex = this.locations.findIndex(l => l.active) + if (-1 == activeIndex) return undefined + if (0 == activeIndex) return undefined + return this.locations[activeIndex - 1] + } + + get nextLocation () { + if (!this.locations) return undefined + const activeIndex = this.locations.findIndex(l => l.active) + if (-1 == activeIndex) return undefined + if (activeIndex == this.locations.length - 1) return undefined + return this.locations[activeIndex + 1] + } + + //Handle mechanics + async cutToTheChase () { + if (!this.allHaveSpeedRoll) { + ui.notifications.warn('Speed roll missing') + return + } + if (this.allHaveValidMov) { + //TODO : Check for speed roll ?? + + //Calculate movement actions + const participants = this.participants + const minMov = this.findMinMov(participants) + participants.forEach(p => { + p.data.movementAction = 1 + (p.adjustedMov - minMov) + }) + await this.updateParticipants(participants) + await this.updateLocationsList(this.locations) + await this.start() + } + } + + async restart () { + // await this.cleanLocations() //Transferred in updateLocationList + const locations = this.locations.filter(l => !l.init) + for (let i = 0; i < locations.length; i++) { + if (locations[i].participants) locations[i].participants = [] + } + await this.updateLocationsList(locations) + await this.stop() + } + + async moveParticipant ( + participantUuid, + locationMoved, + { checkMovementActions = true } = {} + ) { + const locations = duplicate(this.data.data.locations.list) + + const originIndex = locations.findIndex(l => + l.participants?.includes(participantUuid) ) + let destinationIndex = originIndex + locationMoved + if (destinationIndex > locations.length - 1) { + destinationIndex = locations.length - 1 + } + + if (destinationIndex < 0) { + destinationIndex = 0 + } + + const totalMove = destinationIndex - originIndex + + if (0 != totalMove) { + await this.moveParticipantToLocation( + participantUuid, + locations[destinationIndex].uuid + ) + } + return totalMove } - //handle locations -} \ No newline at end of file + + async moveParticipantToLocation (participantUuid, locationUuid) { + const locations = duplicate(this.data.data.locations.list) + + //Find destination location. + const destination = locations.find(l => locationUuid == l.uuid) + if (!destination) { + console.error( + `Failed to move ${participantUuid}. Location ${locationUuid} unknown` + ) + return + } + + //Find origin location + const origin = locations.find(l => + l.participants?.includes(participantUuid) + ) + + if (!origin) { + console.error(`Failed to find ${participantUuid} in locations`) + return + } + + if (!destination.participants) destination.participants = [] + destination.participants.push(participantUuid) + // destination.participants.sort(sortByRoleAndDex) + + const oldParticipantsList = origin.participants.filter( + p => participantUuid != p + ) + origin.participants = oldParticipantsList + + await this.updateLocationsList(locations) + } + + //Handle scrolling + async setchaseTrackScroll ({ from = -1, to = -1 } = {}) { + await this.update({ + 'data.scroll.chaseTrack.from': from, + 'data.scroll.chaseTrack.to': to + }, { render: true }) + } + + get chaseTrackCurrentScrollPosition () { + const html = this.sheet?.element + if (!html) return -1 + const chaseTrack = html[0].querySelector('.chase-track') + if (!chaseTrack) return -1 + return chaseTrack.scrollLeft + } + + /** + * Return the offset position of the active location + * the center of the active location will be centered + * in the parent. + */ + get chaseTrackActiveLocationScrollPosition () { + if (!this.activeLocation) return -1 + return this.getChaseTrackLocationScrollPosition( this.activeLocation.uuid) + } + + getChaseTrackLocationScrollPosition( locationUuid){ + const html = this.sheet?.element + if (!html) return -1 + const chaseTrack = html[0].querySelector('.chase-track') + if (!chaseTrack) return -1 + const activeLocationElement = chaseTrack.querySelector( + `.chase-location[data-uuid="${locationUuid}"]` + ) + if (!activeLocationElement) return -1 + const leftScroll = + activeLocationElement.offsetLeft + + activeLocationElement.clientWidth / 2 + - chaseTrack.clientWidth / 2 + return leftScroll < 0 ? 0 : Math.floor(leftScroll) + } + + // Should be removed + findMinMov (list) { + if (!list?.length) return -1 + return list.reduce((prev, current) => + prev.adjustedMov < current.adjustedMov ? prev : current + ).adjustedMov + } + + findMaxMov (list) { + if (!list?.length) return -1 + return list.reduce((prev, current) => + prev.adjustedMov > current.adjustedMov ? prev : current + ).adjustedMov + } + + //Utilities + findIndex (list, uuid) { + return list.findIndex(p => p.uuid == uuid) + } + + get started () { + return this.getFlag('CoC7', 'started') + } + + async start () { + return this.setFlag('CoC7', 'started', true) + } + + async stop () { + return this.unsetFlag('CoC7', 'started') + } + + generateNewUuid () { + let unique = false + let uuid + while (!unique) { + uuid = foundry.utils.randomID(16) + unique = + 0 === this.data.data.participants.filter(p => p.uuid == uuid).length && + 0 === this.data.data.locations.list.filter(p => p.uuid == uuid).length + } + + return uuid + } + + /** + * Clean the data of all parasite participants in locations. + * Should never happen + */ + // async cleanLocations () { + // const locations = duplicate(this.data.data.locations.list) + // locations.forEach(l => { + // const partipantsUuidArray = this.data.data.participants.map(p => p.uuid) + // if (l.participants) { + // l.participants = l.participants.filter(uuid => + // partipantsUuidArray.includes(uuid) + // ) + // } + // }) + // this.updateLocationsList(locations) + // } +} diff --git a/module/items/chase/participant.js b/module/items/chase/participant.js index a5a5b266..d09f7d87 100644 --- a/module/items/chase/participant.js +++ b/module/items/chase/participant.js @@ -1,409 +1,419 @@ - import { chatHelper } from '../../chat/helper.js' import { CoC7Check } from '../../check.js' export class _participant { - constructor (data = {}) { - this.data = data - } - - get actor () { - if (!this._actor) { - this._actor = chatHelper.getActorFromKey(this.data.actorKey) - } - return this._actor + constructor (data = {}) { + this.data = data + } + + get actor () { + if (!this._actor) { + this._actor = chatHelper.getActorFromKey(this.data.actorKey) } - - get isActor () { - return this.hasActor || this.hasVehicle + return this._actor + } + + get isActor () { + return this.hasActor || this.hasVehicle + } + + get isActive () { + return this.data.active || false + } + + get key () { + if (this.hasVehicle) return this.vehicle.actorKey + if (this.hasActor) return this.actor.actorKey + return undefined + } + + get icon () { + if (!this.isActor) { + return 'systems/CoC7/assets/icons/question-circle-regular.svg' } - - get isActive () { - return this.data.active || false + if (this.hasVehicle) return this.vehicle.img + if (this.hasActor) return this.actor.img + return undefined + } + + get driver () { + if (!this._driver) { + this._driver = chatHelper.getActorFromKey(this.data.actorKey) } - - get key () { - if (this.hasVehicle) return this.vehicle.actorKey - if (this.hasActor) return this.actor.actorKey - return undefined + return this._driver + } + + get vehicle () { + if (this.data.vehicleKey) { + this._vehicle = chatHelper.getActorFromKey(this.data.vehicleKey) } - - get icon () { - if (!this.isActor) { - return 'systems/CoC7/assets/icons/question-circle-regular.svg' - } - if (this.hasVehicle) return this.vehicle.img - if (this.hasActor) return this.actor.img - return undefined + return this._vehicle + } + + get hasActor () { + return !!this.actor + } + + get hasVehicle () { + return !!this.vehicle + } + + get name () { + if (this.hasVehicle) return this.vehicle.name + if (this.hasActor) return this.actor.name + return this.data.name || undefined + } + + get mov () { + if (!this.data.mov) { + if (this.hasVehicle) this.data.mov = this.vehicle.mov + else if (this.hasActor) this.data.mov = this.actor.mov } - - get driver () { - if (!this._driver) { - this._driver = chatHelper.getActorFromKey(this.data.actorKey) + + if (this.data.mov) { + if (!isNaN(Number(this.data.mov))) this.data.hasValidMov = true + else { + this.data.hasValidMov = false + this.data.mov = undefined } - return this._driver } - - get vehicle () { - if (this.data.vehicleKey) { - this._vehicle = chatHelper.getActorFromKey(this.data.vehicleKey) + + return this.data.mov + } + + get uuid () { + return this.data.uuid + } + + get dex () { + if (!this.data.dex) { + if (this.hasVehicle && this.hasDriver) { + this.data.dex = this.driver.characteristics.dex.value + } else if (this.hasActor) { + this.data.dex = this.actor.characteristics.dex.value } - return this._vehicle - } - - get hasActor () { - return !!this.actor - } - - get hasVehicle () { - return !!this.vehicle - } - - get name () { - if (this.hasVehicle) return this.vehicle.name - if (this.hasActor) return this.actor.name - return this.data.name || undefined } - - get mov () { - if (!this.data.mov) { - if (this.hasVehicle) this.data.mov = this.vehicle.mov - else if (this.hasActor) this.data.mov = this.actor.mov - } - - if (this.data.mov) { - if (!isNaN(Number(this.data.mov))) this.data.hasValidMov = true - else { - this.data.hasValidMov = false - this.data.mov = undefined - } + + if (this.data.dex) { + if (!isNaN(Number(this.data.dex))) this.data.hasValidDex = true + else { + this.data.hasValidDex = false + this.data.dex = 0 } - - return this.data.mov } - - get uuid () { - return this.data.uuid + + return this.data.dex + } + + get hasAGunReady () { + return this.data.hasAGunReady || false + } + + get initiative () { + let init = this.dex + if (this.hasAGunReady) { + init += 50 } - - get dex () { - if (!this.data.dex) { - if (this.hasVehicle && this.hasDriver) { - this.data.dex = this.driver.characteristics.dex.value - } else if (this.hasActor) { - this.data.dex = this.actor.characteristics.dex.value - } - } - - if (this.data.dex) { - if (!isNaN(Number(this.data.dex))) this.data.hasValidDex = true - else { - this.data.hasValidDex = false - this.data.dex = 0 + // if( this.speedCheck){ + // if(this.speedCheck.score) init += this.speedCheck.score/100 + // } + + return init + } + + get isChaser () { + return !!this.data.chaser + } + + get isValid () { + return this.hasValidDex && this.hasValidMov + } + + get hasValidDex () { + return !isNaN(Number(this.data.dex)) + } + + get hasValidMov () { + return !isNaN(Number(this.data.mov)) + } + + get hasDriver () { + return this.hasVehicle && this.hasActor + } + + get movAdjustment () { + if (this.data.speedCheck?.rollDataString) { + const roll = CoC7Check.fromRollString(this.data.speedCheck.rollDataString) + if (roll) { + if (!roll.standby) { + if (roll.successLevel >= CoC7Check.successLevel.extreme) return 1 + else if (roll.failed) return -1 } } - - return this.data.dex - } - - get hasAGunReady () { - return this.data.hasAGunReady || false } - - get initiative () { - let init = this.dex - if (this.hasAGunReady) { - init += 50 + return 0 + } + + get adjustedMov () { + if (typeof this.mov === 'undefined') return undefined + if (isNaN(Number(this.mov))) return undefined + return Number(this.mov) + this.movAdjustment + } + + get hasMovAdjustment () { + return this.hasBonusMov || this.hasMalusMov + } + + get hasBonusMov () { + if (this.data.movAdjustment > 0) return true + return false + } + + get hasMalusMov () { + if (this.data.movAdjustment < 0) return true + return false + } + + // get options(){ + // return { + // exclude: [], + // excludeStartWith: '_' + // }; + // } + + // get dataString(){ + // return JSON.stringify(this, (key,value)=>{ + // if( null === value) return undefined; + // if( this.options.exclude?.includes(key)) return undefined; + // if( key.startsWith(this.options.excludeStartWith)) return undefined; + // return value; + // }); + // } + + tooSlow () { + this.data.excluded = true + } + + includeInChase () { + this.data.excluded = false + this.data.escaped = false + } + + escaped () { + this.data.escaped = true + } + + set slowest (x) { + this.data.slowest = x + } + + set fastest (x) { + this.data.fastest = x + } + + set movementAction (x) { + this.data.movementAction = x + } + + get movementAction () { + return this.data.movementAction + } + + set currentMovementActions (x) { + this.data.currentMovementActions = x + } + + get currentMovementActions () { + return this.data.currentMovementActions || 0 + } + + get hasMaxMvtActions () { + return this.currentMovementActions >= this.movementAction + } + + get hasNoMvtActions () { + return this.currentMovementActions <= 0 + } + + get isActive () { + return this.data.active || false + } + + addMovementActions (x = 1) { + this.currentMovementActions += x + if (this.currentMovementActions > this.movementAction) + this.currentMovementActions = this.movementAction + } + + addMovementActions (x = 1) { + this.currentMovementActions -= x + } + + alterMovementActions (x) { + this.currentMovementActions += x + if (this.currentMovementActions > this.movementAction) + this.currentMovementActions = this.movementAction + } + + get movementActionArray () { + const baseArray = Array(this.movementAction).fill('base') + if (this.currentMovementActions >= 0) { + for (let i = 0; i < this.currentMovementActions; i++) { + baseArray[i] = 'base available' } - // if( this.speedCheck){ - // if(this.speedCheck.score) init += this.speedCheck.score/100 - // } - - return init - } - - get isChaser () { - return !!this.data.chaser - } - - get isValid () { - return this.hasValidDex && this.hasValidMov - } - - get hasValidDex () { - return !isNaN(Number(this.data.dex)) + return baseArray } - - get hasValidMov () { - return !isNaN(Number(this.data.mov)) - } - - get hasDriver () { - return this.hasVehicle && this.hasActor + + if (this.currentMovementActions < 0) { + const deficitArray = Array(Math.abs(this.currentMovementActions)).fill( + 'deficit' + ) + return deficitArray.concat(baseArray) } - - get movAdjustment () { - if (this.data.speedCheck?.rollDataString) { - const roll = CoC7Check.fromRollString(this.data.speedCheck.rollDataString) - if (roll) { - if (!roll.standby) { - if (roll.successLevel >= CoC7Check.successLevel.extreme) return 1 - else if (roll.failed) return -1 + } + + get cssClass () { + const cssClasses = [] + if (this.isChaser) cssClasses.push('chaser') + else cssClasses.push('prey') + if (this.data.excluded) cssClasses.push('excluded', 'too_slow') + if (this.data.escaped) cssClasses.push('escaped') + if (this.data.fastest) cssClasses.push('fastest') + if (this.data.slowest) cssClasses.push('slowest') + if (this.data.active) cssClasses.push('active') + if (this.data.currentMovementActions <= 0) cssClasses.push('no-actions') + return cssClasses.join(' ') + } + + get speedCheck () { + const check = {} + if (this.data.speedCheck?.name) check.name = this.data.speedCheck.name + if (this.data.speedCheck?.score) check.score = this.data.speedCheck.score + check.cssClasses = '' + if (this.data.speedCheck?.rollDataString) { + check.roll = CoC7Check.fromRollString(this.data.speedCheck.rollDataString) + if (check.roll) { + if (!check.roll.standby || check.roll.hasCard) { + check.rolled = true + check.inlineRoll = check.roll.inlineCheck.outerHTML + check.cssClasses += 'rolled' + if (!check.roll.standby) { + if (check.roll.successLevel >= CoC7Check.successLevel.extreme) { + check.modifierCss = 'upgrade' + } else if (check.roll.failed) check.modifierCss = 'downgrade' + if ( + check.roll.successLevel >= CoC7Check.successLevel.extreme || + check.roll.failed + ) { + check.hasModifier = true + } } } } - return 0 - } - - get adjustedMov () { - if (typeof this.mov === 'undefined') return undefined - if (isNaN(Number(this.mov))) return undefined - return Number(this.mov) + this.movAdjustment - } - - get hasMovAdjustment () { - return this.hasBonusMov || this.hasMalusMov - } - - get hasBonusMov () { - if (this.data.movAdjustment > 0) return true - return false - } - - get hasMalusMov () { - if (this.data.movAdjustment < 0) return true - return false - } - - // get options(){ - // return { - // exclude: [], - // excludeStartWith: '_' - // }; - // } - - // get dataString(){ - // return JSON.stringify(this, (key,value)=>{ - // if( null === value) return undefined; - // if( this.options.exclude?.includes(key)) return undefined; - // if( key.startsWith(this.options.excludeStartWith)) return undefined; - // return value; - // }); - // } - - tooSlow () { - this.data.excluded = true - } - - includeInChase () { - this.data.excluded = false - this.data.escaped = false } - - escaped () { - this.data.escaped = true - } - - set slowest (x) { - this.data.slowest = x - } - - set fastest (x) { - this.data.fastest = x - } - - set movementAction (x) { - this.data.movementAction = x - } - - get movementAction () { - return 2 - // return this.data.movementAction - } - - set currentMovementActions (x) { - this.data.currentMovementActions = x - } - - get currentMovementActions () { - return this.data.currentMovementActions || 0 - } - - get hasMaxMvtActions () { - return this.currentMovementActions >= this.movementAction - } - - get isActive () { - return this.data.active || false - } - - addMovementActions (x = 1) { - this.currentMovementActions += x - if (this.currentMovementActions > this.movementAction) - this.currentMovementActions = this.movementAction - } - - addMovementActions (x = 1) { - this.currentMovementActions -= x - } - - alterMovementActions (x) { - this.currentMovementActions += x - if (this.currentMovementActions > this.movementAction) - this.currentMovementActions = this.movementAction - } - - get movementActionArray () { - const baseArray = Array(this.movementAction).fill('base') - if (this.currentMovementActions >= 0) { - for (let i = 0; i < this.currentMovementActions; i++) { - baseArray[i] = 'base available' - } - return baseArray + if (this.hasActor) { + check.options = [] + for (const c of ['con']) { + const characterisitc = this.actor.getCharacteristic(c) + if (characterisitc?.value) check.options.push(characterisitc.label) } - - if (this.currentMovementActions < 0) { - const deficitArray = Array(Math.abs(this.currentMovementActions)).fill( - 'deficit' - ) - return deficitArray.concat(baseArray) + + for (const s of this.actor.driveSkills) { + check.options.push(s.name) } - } - - get cssClass () { - const cssClasses = [] - if (this.isChaser) cssClasses.push('chaser') - else cssClasses.push('prey') - if (this.data.excluded) cssClasses.push('excluded', 'too_slow') - if (this.data.escaped) cssClasses.push('escaped') - if (this.data.fastest) cssClasses.push('fastest') - if (this.data.slowest) cssClasses.push('slowest') - if (this.data.active) cssClasses.push('active') - return cssClasses.join(' ') - } - - get speedCheck () { - const check = {} - if (this.data.speedCheck?.name) check.name = this.data.speedCheck.name - if (this.data.speedCheck?.score) check.score = this.data.speedCheck.score - check.cssClasses = '' - if (this.data.speedCheck?.rollDataString) { - check.roll = CoC7Check.fromRollString(this.data.speedCheck.rollDataString) - if (check.roll) { - if (!check.roll.standby || check.roll.hasCard) { - check.rolled = true - check.inlineRoll = check.roll.inlineCheck.outerHTML - check.cssClasses += 'rolled' - if (!check.roll.standby) { - if (check.roll.successLevel >= CoC7Check.successLevel.extreme) { - check.modifierCss = 'upgrade' - } else if (check.roll.failed) check.modifierCss = 'downgrade' - if ( - check.roll.successLevel >= CoC7Check.successLevel.extreme || - check.roll.failed - ) { - check.hasModifier = true - } - } - } - } + + for (const s of this.actor.pilotSkills) { + check.options.push(s.name) } - if (this.hasActor) { - check.options = [] - for (const c of ['con']) { - const characterisitc = this.actor.getCharacteristic(c) - if (characterisitc?.value) check.options.push(characterisitc.label) - } - - for (const s of this.actor.driveSkills) { - check.options.push(s.name) - } - - for (const s of this.actor.pilotSkills) { - check.options.push(s.name) + check.hasOptions = !!check.options.length + + if (this.data.speedCheck?.id) { + let item = this.actor.find(this.data.speedCheck.id) + if (!item) { + const gameItem = game.items.get(this.data.speedCheck.id) + if (gameItem) item = this.actor.find(gameItem.name) } - check.hasOptions = !!check.options.length - - if (this.data.speedCheck?.id) { - let item = this.actor.find(this.data.speedCheck.id) - if (!item) { - const gameItem = game.items.get(this.data.speedCheck.id) - if (gameItem) item = this.actor.find(gameItem.name) + + if (item) { + if (item.type === 'item' && item.value.data?.type === 'skill') { + check.ref = item.value + check.name = item.value.name + check.type = 'skill' + check.isSkill = true + check.refSet = true + check.score = item.value.value } - - if (item) { - if (item.type === 'item' && item.value.data?.type === 'skill') { - check.ref = item.value - check.name = item.value.name - check.type = 'skill' - check.isSkill = true - check.refSet = true - check.score = item.value.value - } - if (item.type === 'characteristic') { - check.ref = item.value - check.name = item.value.label - check.type = 'characteristic' - check.isCharacteristic = true - check.refSet = true - check.score = item.value.value - } - if (item.type === 'attribute') { - check.ref = item.value - check.name = item.value.label - check.type = 'attribute' - check.isAttribute = true - check.refSet = true - check.score = item.value.value - } + if (item.type === 'characteristic') { + check.ref = item.value + check.name = item.value.label + check.type = 'characteristic' + check.isCharacteristic = true + check.refSet = true + check.score = item.value.value } - } else if (this.data.speedCheck?.name) { - const item = this.actor.find(this.data.speedCheck.name) - if (item) { - if (item.type === 'item' && item.value.data?.type === 'skill') { - check.ref = item.value - check.name = item.value.name - check.type = 'skill' - check.isSkill = true - check.refSet = true - check.score = item.value.value - } - if (item.type === 'characteristic') { - check.ref = item.value - check.name = item.value.label - check.type = 'characteristic' - check.isCharacteristic = true - check.refSet = true - check.score = item.value.value - } - if (item.type === 'attribute') { - check.ref = item.value - check.name = item.value.label - check.type = 'attribute' - check.isAttribute = true - check.refSet = true - check.score = item.value.value - } + if (item.type === 'attribute') { + check.ref = item.value + check.name = item.value.label + check.type = 'attribute' + check.isAttribute = true + check.refSet = true + check.score = item.value.value } } - } else if (this.data.speedCheck?.id) { - const item = game.items.get(this.data.speedCheck.id) + } else if (this.data.speedCheck?.name) { + const item = this.actor.find(this.data.speedCheck.name) if (item) { - if (item.data?.type === 'skill') { - check.ref = item - check.name = item.name + if (item.type === 'item' && item.value.data?.type === 'skill') { + check.ref = item.value + check.name = item.value.name check.type = 'skill' check.isSkill = true - check.refSet = false - check.score = item.base + check.refSet = true + check.score = item.value.value + } + if (item.type === 'characteristic') { + check.ref = item.value + check.name = item.value.label + check.type = 'characteristic' + check.isCharacteristic = true + check.refSet = true + check.score = item.value.value + } + if (item.type === 'attribute') { + check.ref = item.value + check.name = item.value.label + check.type = 'attribute' + check.isAttribute = true + check.refSet = true + check.score = item.value.value } } } - - if (!check.rolled && !check.score) check.cssClasses += ' invalid' - check.isValid = check.rolled && !isNaN(check.score) - - return check + } else if (this.data.speedCheck?.id) { + const item = game.items.get(this.data.speedCheck.id) + if (item) { + if (item.data?.type === 'skill') { + check.ref = item + check.name = item.name + check.type = 'skill' + check.isSkill = true + check.refSet = false + check.score = item.base + } + } } + + if (!check.rolled && !check.score) check.cssClasses += ' invalid' + check.isValid = check.rolled && !isNaN(check.score) + + return check } - \ No newline at end of file +} + +export function sortByRoleAndDex (a, b) { + //Put chasers first + if (b.chaser && !a.chaser) return 1 + if (a.chaser && !b.chaser) return -1 + //If sametype sort by dex + return a.dex - b.dex +} diff --git a/module/items/chase/sheet.js b/module/items/chase/sheet.js index 0b8c7e9b..86c2d4f1 100644 --- a/module/items/chase/sheet.js +++ b/module/items/chase/sheet.js @@ -7,14 +7,8 @@ import { CoC7Check } from '../../check.js' import { _participant } from './participant.js' export class CoC7ChaseSheet extends ItemSheet { - // constructor( ...args) { - // super( ...args); - // } - - static get flags () { - return { - started: 'started' - } + constructor (...args) { + super(...args) } /** @@ -65,8 +59,7 @@ export class CoC7ChaseSheet extends ItemSheet { // game.i18n.localize('CoC7.ExperimentalFeaturesWarning') // ) const data = super.getData(options) - // if( this.started) options.tabs[0].initial = 'setup' - if (this.started) this._tabs[0].active = 'setup' + // if (this.item.started) this._tabs[0].active = 'setup' /** MODIF: 0.8.x **/ const itemData = data.data @@ -118,12 +111,12 @@ export class CoC7ChaseSheet extends ItemSheet { p.slowest = p.adjustedMov == data.preysMinMov }) - data.locations = this.locations + data.locations = this.item.locations data.allHaveValidMov = this.allHaveValidMov - data.activeLocation = this.activeLocation - data.previousLocation = this.previousLocation - data.nextLocation = this.nextLocation - data.started = this.started + data.activeLocation = this.item.activeLocation + data.previousLocation = this.item.previousLocation + data.nextLocation = this.item.nextLocation + data.started = this.item.started data.dataListCheckOptions = this.allSkillsAndCharacteristics data.isKeeper = game.user.isGM @@ -167,307 +160,17 @@ export class CoC7ChaseSheet extends ItemSheet { return list.sort(Intl.Collator().compare) } - findMinMov (list) { - if (!list?.length) return -1 - return list.reduce((prev, current) => - prev.adjustedMov < current.adjustedMov ? prev : current - ).adjustedMov - } - - findMaxMov (list) { - if (!list?.length) return -1 - return list.reduce((prev, current) => - prev.adjustedMov > current.adjustedMov ? prev : current - ).adjustedMov - } - - processLocations (locations) { - if (!locations?.length) return - locations[0].first = true - - for (let index = 0; index < locations.length; index++) { - const classes = [] - const location = locations[index] - if (!location.name) classes.push('empty') - if (location.active) classes.push('active') - if (location.init && !this.started) classes.push('init') - location.cssClasses = classes.join(' ') - } - - if (locations.length > 1) locations[locations.length - 1].last = true - - locations.forEach(l => { - if (l.participants && l.participants.length) { - // ui.notifications.error(`Length : ${l.participants.length}`) - - for (let i = 0; i < l.participants.length; i++) { - const elem = l.participants[i] // Init track = only uuid, update location list change for uuid - - // ui.notifications.error(`Type : ${typeof elem}`) - let p - if (typeof elem === 'string' || elem instanceof String) { - p = this.item.data.data.participants.find(p => elem == p.uuid) //Retrieve participant data from list. - } else if (elem.constructor.name == '_participant') { - p = undefined // participant is already processed. - ui.notifications.warn('Participant was already processed.') - } else p = undefined - - if (undefined != p) { - l.participants[i] = new _participant(p) // replace uuid with _participant - } else { - // participants.push( null) - console.error( - 'Undefined paticipant while processing participants array' - ) - } - } - l.participants.sort(sortByRoleAndDex) // TODO : test if sorting works - } - }) - } - - get locations () { - const locations = this.started - ? this.item.data.data.locations.list - ? duplicate(this.item.data.data.locations.list) - : [] - : this.initTrack - this.processLocations(locations) - return locations - } - - get initTrack () { - if ( - !this.item.data.data.locations.list || - 0 === this.item.data.data.locations.list.length - ) - return undefined - - const locations = [] // !!!!!!! locations vs init locations !!! - - const init = this.startingLine - let locationsIndexStart, initIndexStart, locationsLength - if (0 >= init.length) locationsIndexStart = 0 - else if (this.item.data.data.startingIndex >= init.length) - locationsIndexStart = 0 - else locationsIndexStart = init.length - this.item.data.data.startingIndex - - if (this.item.data.data.startingIndex <= 0) initIndexStart = 0 - else if (this.item.data.data.startingIndex <= init.length) - initIndexStart = 0 - else initIndexStart = this.item.data.data.startingIndex - init.length - - if (0 == locationsIndexStart) - locationsLength = this.item.data.data.locations.list.length - else - locationsLength = - this.item.data.data.locations.list.length + locationsIndexStart - - if (0 != init.length) { - if (this.item.data.data.startingIndex < 0) { - for ( - let index = 0; - index < Math.abs(this.item.data.data.startingIndex); - index++ - ) { - init.push({ - uuid: this.generateNewUuid(), - init: true, - participants: [] - }) - } - } - } - - const chaseLocations = duplicate(this.item.data.data.locations) - for (let index = 0; index < locationsLength; index++) { - let location = {} - const participants = [] - if ( - index >= locationsIndexStart && - index - locationsIndexStart < chaseLocations.list.length - ) { - location = duplicate(chaseLocations.list[index - locationsIndexStart]) - location.init = false - location.participants?.forEach(p => { - if (null != p) participants.push(p) - }) - } - if (index >= initIndexStart && index - initIndexStart < init.length) { - mergeObject(location, init[index - initIndexStart], { - overwrite: false - }) - - init[index - initIndexStart].participants?.forEach(p => { - if (null != p) participants.push(p) - }) - - location.participants = participants - } - location.first = false - location.end = false - locations.push(location) - } - - return locations - } - - get activeLocation () { - if (!this.locations) return undefined - return this.locations.find(l => l.active) - } - - get activeParticipant () { - if (!this.item.data.data.participants) return undefined - const participant = this.item.data.data.participants.find(p => p.active) - if (!participant) return undefined - return new _participant(participant) - } - - get activeParticipantLocation () { - if (!this.item.data.data.participants) return undefined - const participant = this.item.data.data.participants.find(p => p.active) - - } - - get previousLocation () { - if (!this.locations) return undefined - const activeIndex = this.locations.findIndex(l => l.active) - if (-1 == activeIndex) return undefined - if (0 == activeIndex) return undefined - return this.locations[activeIndex - 1] - } - - get nextLocation () { - if (!this.locations) return undefined - const activeIndex = this.locations.findIndex(l => l.active) - if (-1 == activeIndex) return undefined - if (activeIndex == this.locations.length - 1) return undefined - return this.locations[activeIndex + 1] - } - - get allHaveValidMov () { - return this.item.participants.every(e => e.hasValidMov) - } - - get allHaveSpeedRoll () { - return this.item.participants.every(p => p.speedCheck?.rolled) - } - - get started () { - return this.item.getFlag('CoC7', CoC7ChaseSheet.flags.started) - } - - async cutToTheChase () { - if (!this.allHaveSpeedRoll) { - ui.notifications.warn('Speed roll missing') - return - } - if (this.allHaveValidMov) { - //TODO : Check for speed roll ?? - - //Calculate movement actions - const participants = this.item.participants - const minMov = this.findMinMov(participants) - participants.forEach(p => { - p.data.movementAction = 1 + (p.adjustedMov - minMov) - }) - await this.updateParticipants(participants) - await this.updateLocationsList(this.locations) - await this.item.setFlag('CoC7', CoC7ChaseSheet.flags.started, true) - } - } - - get startingLine () { - //Get preys and check for escaped - const preys = this.item.data.data.includeEscaped - ? this.item.preys - : this.item.preys?.filter(p => !p.data.escaped) - //Get chasers - const chasers = this.item.chasers - - //If no prey or no chasser - // if (0 == chasers.length) { - // ui.notifications.warn('No chasers') - // return undefined - // } - // if (0 == preys.length) { - // ui.notifications.warn('No preys') - // return undefined - // } - - //Build starting track - const chaseTrack = [] - - const chasersMinMov = this.findMinMov(chasers) - const chasersMaxMov = this.findMaxMov(chasers) - const preysMinMov = this.findMinMov(preys) - const preysMaxMov = this.findMaxMov(preys) - - if (-1 != chasersMinMov && -1 != chasersMaxMov) { - // Add chasers to the track. - for (let mov = chasersMinMov; mov <= chasersMaxMov; mov++) { - //Find all with that mov - const location = { - uuid: this.generateNewUuid(), - init: true, - participants: [] - } - const locationParticipantsList = chasers - .filter(p => mov == p.adjustedMov) - .sort((a, b) => a.dex - b.dex) - locationParticipantsList.forEach(p => - location.participants.push(p.uuid) - ) - chaseTrack.push(location) - } - - // Add space between chasers and preys. - for (let index = 0; index < this.item.data.data.startingRange; index++) { - chaseTrack.push({ - uuid: this.generateNewUuid(), - init: true, - participants: [] - }) - } - } - - if (-1 != preysMinMov && -1 != preysMaxMov) { - // Add preys to the track. - for (let mov = preysMinMov; mov <= preysMaxMov; mov++) { - //Find all with that mov - const location = { - uuid: this.generateNewUuid(), - init: true, - participants: [] - } - const locationParticipantsList = preys - .filter(p => mov == p.adjustedMov) - .sort((a, b) => a.dex - b.dex) - locationParticipantsList.forEach(p => - location.participants.push(p.uuid) - ) - chaseTrack.push(location) - } - } - - return chaseTrack - } - - generateNewUuid () { - let unique = false - let uuid - while (!unique) { - uuid = foundry.utils.randomID(16) - unique = - 0 === - this.item.data.data.participants.filter(p => p.uuid == uuid).length && - 0 === - this.item.data.data.locations.list.filter(p => p.uuid == uuid).length - } + // get activeParticipant () { + // if (!this.item.data.data.participants) return undefined + // const participant = this.item.data.data.participants.find(p => p.active) + // if (!participant) return undefined + // return new _participant(participant) + // } - return uuid - } + // get activeParticipantLocation () { + // if (!this.item.data.data.participants) return undefined + // const participant = this.item.data.data.participants.find(p => p.active) + // } /** @override */ activateListeners (html) { @@ -544,7 +247,7 @@ export class CoC7ChaseSheet extends ItemSheet { }) newParticipantDragDrop.bind(html[0]) - if (this.started) { + if (this.item.started) { const chaseParticipantDragpDrop = new DragDrop({ dragSelector: '.chase-participant', dropSelector: '.chase-location', @@ -663,34 +366,32 @@ export class CoC7ChaseSheet extends ItemSheet { } static /**async */ setScroll (app, html, data) { - const chaseTrack = html.find('.chase-track') - if (!chaseTrack.length) return - const element = $(chaseTrack).find('.active') - if (!element.length) return - - const originalPosition = html[0].classList.contains('window-app') - ? -1 - : data.data.trackScrollPosition //If first opening always scroll to - // const originalPosition = data.data.trackScrollPosition //If first opening always scroll to - - const elementleft = element[0].offsetLeft - const divWidth = chaseTrack[0].clientWidth - let elementCenterRelativeLeft = elementleft - divWidth / 2 - if (elementCenterRelativeLeft < 0) elementCenterRelativeLeft = 0 - - const trackElement = chaseTrack[0] + const initialOpening = html[0].classList.contains('window-app') + const chaseTrack = html[0].querySelector('.chase-track') + if (!chaseTrack) return + + let start = data.data.scroll.chaseTrack.from + let end = data.data.scroll.chaseTrack.to + if (initialOpening) { + if (end > 0) { + start = 0 + } else if (start > 0) { + end = start + start = 0 + } + } - if (-1 != originalPosition) { - trackElement.scrollTo({ + if (start) { + chaseTrack.scrollTo({ top: 0, - left: originalPosition, + left: start, behavior: 'instant' }) } - trackElement.scrollTo({ + chaseTrack.scrollTo({ top: 0, - left: elementCenterRelativeLeft, + left: end, behavior: 'smooth' }) @@ -747,48 +448,8 @@ export class CoC7ChaseSheet extends ItemSheet { return list.findIndex(p => p.uuid == uuid) } - async updateLocationsList (list) { - //Remove all unnecessary items (cssClass, ) - const updatedList = duplicate(list) - updatedList.forEach(l => { - // delete l.active - delete l.cssClasses - delete l.first - delete l.last - delete l.end - if (l.participants && l.participants.length) { - for (let i = 0; i < l.participants.length; i++) { - if (l.participants[i].data?.uuid) - l.participants[i] = l.participants[i].data.uuid - } - } - }) - await this.item.update({ 'data.locations.list': updatedList }) - } - - async updateParticipants (list) { - const participantsData = this.item.data.data.participants - ? duplicate(this.item.data.data.participants) - : [] - list.forEach(p => { - let data - if (p.constructor.name == '_participant') { - data = p.data - } else data = p - const index = this.findIndex(participantsData, data.uuid) - if (-1 === index) { - participantsData.push(data) - ui.notifications.warn('Participant data missing') - } else { - participantsData[index] = data - } - }) - await this.item.update({ 'data.participants': participantsData }) - return - } - async saveScrollLocation () { - if( !this._element) return + if (!this._element) return const chaseTrack = this._element.find('.chase-track') } @@ -815,7 +476,7 @@ export class CoC7ChaseSheet extends ItemSheet { locations[locationIndex] = originalLocation } } - await this.updateLocationsList(locations) + await this.item.updateLocationsList(locations) } } @@ -831,7 +492,7 @@ export class CoC7ChaseSheet extends ItemSheet { barrier: true } } - await this.updateLocationsList(locations) + await this.item.updateLocationsList(locations) } async _onObstacleTypeClick (event) { @@ -857,67 +518,20 @@ export class CoC7ChaseSheet extends ItemSheet { locationIndex ].obstacleDetails.hazard } - await this.updateLocationsList(locations) + await this.item.updateLocationsList(locations) } async _onLocationClick (event) { const target = event.currentTarget - const chaseTrack = target.closest('.chase-track') - await this.item.update({ 'data.trackScrollPosition': chaseTrack.scrollLeft }) - const active = target.classList.contains('active') - const locations = duplicate(this.item.data.data.locations.list) - locations.forEach(l => (l.active = false)) const locationElement = target.closest('.chase-location') - const uuid = locationElement.dataset.uuid - const locationIndex = this.findIndex(locations, uuid) - if (-1 != locationIndex) { - if (!active) locations[locationIndex].active = true - await this.updateLocationsList(locations) - } - } - - async activateLocation (locationUuid, scrollToLocation = true) { - const locations = duplicate(this.item.data.data.locations.list) - locations.forEach(l => (l.active = false)) - const locationIndex = this.findIndex(locations, uuid) - if (-1 != locationIndex) { - locations[locationIndex].active = true - await this.updateLocationsList(locations) - if( scrollToLocation) await this.item.update({ 'data.trackScrollPosition': -1 }) - - } - } - - async activateParticipant (participantUuid, scrollToLocation = true){ - const participants = this.item.data.data.participants - ? duplicate(this.item.data.data.participants) - : [] - participants.forEach(p => { - delete p.active - if (participantUuid == p.uuid) p.active = true - }) - await this.updateParticipants(participants) + const lUuid = locationElement.dataset.uuid + await this.item.activateLocation(lUuid) } async _onChaseParticipantClick (event) { const target = event.currentTarget - if (!target.closest('.chase-location')?.classList?.contains('active')) { - await this._onLocationClick(event) - } const pUuid = event.currentTarget.dataset?.uuid - if (!pUuid) { - ui.notifications.error('No participant ID found') - return - } - const participants = this.item.data.data.participants - ? duplicate(this.item.data.data.participants) - : [] - participants.forEach(p => { - delete p.active - if (pUuid == p.uuid) p.active = true - }) - await this.updateParticipants(participants) - ui.notifications.info('participant clicked') + await this.item.activateParticipant(pUuid) } async _onParticipantControlClicked (event) { @@ -933,8 +547,10 @@ export class CoC7ChaseSheet extends ItemSheet { return await this._onChangeMovementActions(-1, event) case 'increaseActions': return await this._onChangeMovementActions(1, event) - case 'activateParticipant': - + case 'moveBackward': + return await this.item.moveParticipant(participantUuid, -1) + case 'moveForward': + return await this.item.moveParticipant(participantUuid, 1) } } @@ -946,15 +562,17 @@ export class CoC7ChaseSheet extends ItemSheet { if (!participantUuid) return const participants = this.item.participants const participant = participants.find(p => participantUuid == p.uuid) - if(participant.hasMaxMvtActions && count>0) return + if (participant.hasMaxMvtActions && count > 0) return participant.alterMovementActions(count) - const sheet = target.closest('.coc7.item.chase') - const chaseTrack = sheet.querySelector('.chase-track') - if (chaseTrack) - await this.item.update({ 'data.trackScrollPosition': chaseTrack.scrollLeft }) + // const sheet = target.closest('.coc7.item.chase') + // const chaseTrack = sheet.querySelector('.chase-track') + // if (chaseTrack) + // await this.item.update({ + // 'data.trackScrollPosition': chaseTrack.scrollLeft + // }) - await this.updateParticipants(participants) + await this.item.updateParticipants(participants) } async _onButtonClick (event) { @@ -975,7 +593,7 @@ export class CoC7ChaseSheet extends ItemSheet { }) locations[0].name = 'Start' if (locations.length > 1) locations[locations.length - 1].name = 'End' - await this.updateLocationsList(locations) + await this.item.updateLocationsList(locations) } break @@ -984,8 +602,8 @@ export class CoC7ChaseSheet extends ItemSheet { title: `${game.i18n.localize('CoC7.ConfirmResetChase')}`, content: `

              ${game.i18n.localize('CoC7.ConfirmResetChaseHint')}

              `, yes: async () => { - await this.updateLocationsList([]) - await this.item.unsetFlag('CoC7', CoC7ChaseSheet.flags.started) + await this.item.updateLocationsList([]) + await this.item.stop() } }) break @@ -994,7 +612,7 @@ export class CoC7ChaseSheet extends ItemSheet { Dialog.confirm({ title: `${game.i18n.localize('CoC7.ConfirmCut2Chase')}`, content: `

              ${game.i18n.localize('CoC7.ConfirmCut2ChaseHint')}

              `, - yes: () => this.cutToTheChase() + yes: () => this.item.cutToTheChase() }) break @@ -1004,14 +622,7 @@ export class CoC7ChaseSheet extends ItemSheet { content: `

              ${game.i18n.localize( 'CoC7.ConfirmRestartChaseHint' )}

              `, - yes: async () => { - const locations = this.locations.filter(l => !l.init) - for (let i = 0; i < locations.length; i++) { - if (locations[i].participants) locations[i].participants = [] - } - await this.updateLocationsList(locations) - await this.item.unsetFlag('CoC7', CoC7ChaseSheet.flags.started) - } + yes: () => this.item.restart() }) break @@ -1052,9 +663,12 @@ export class CoC7ChaseSheet extends ItemSheet { ui.notifications.info( `dragged particpant ${data.uuid} onto location ${locationUuid}` ) - await this.item.update({ 'data.trackScrollPosition': chaseTrack.scrollLeft }) - await this.moveParticipant(data.uuid, locationUuid) + // await this.item.update({ + // 'data.trackScrollPosition': chaseTrack.scrollLeft + // }) + await this.item.moveParticipantToLocation(data.uuid, locationUuid) + await this.item.setScroll() } _onDragOver (dragEvent) { @@ -1343,67 +957,6 @@ export class CoC7ChaseSheet extends ItemSheet { await this.item.update({ 'data.participants': participants }) } - async updateRoll (rollString) { - if (game.user.isGM) { - const roll = CoC7Check.fromRollString(rollString) - const participants = this.item.data.data.participants - ? duplicate(this.item.data.data.participants) - : [] - const index = participants.findIndex(p => p.rollUuid === roll.uuid) - if (index >= 0) { - participants[index].speedCheck.rollDataString = roll.JSONRollString - await this.item.update({ 'data.participants': participants }) - } - } else { - const data = { - data: rollString, - type: 'invoke', - method: 'updateRoll', - item: this.item.uuid - } - game.socket.emit('system.CoC7', data) - } - } - - async moveParticipant (participantUuid, locationUuid) { - const locations = duplicate(this.item.data.data.locations.list) - - //Find destination location. - const destination = locations.find(l => locationUuid == l.uuid) - if (!destination) { - console.error( - `Failed to move ${participantUuid}. Location ${locationUuid} unknown` - ) - return - } - - //Find origin location - const origin = locations.find(l => - l.participants?.includes(participantUuid) - ) - // if (l.participants) { - // if (-1 != l.participants.findIndex(p => participantUuid == p.uuid || p == participantUuid)) - // return true - // } - // return false - // }) - if (!origin) { - console.error(`Failed to find ${participantUuid} in locations`) - return - } - - if (!destination.participants) destination.participants = [] - destination.participants.push(participantUuid) - // destination.participants.sort(sortByRoleAndDex) - - const oldParticipantsList = origin.participants.filter( - p => participantUuid != p - ) - origin.participants = oldParticipantsList - - await this.updateLocationsList(locations) - } - async toggleParticipantGun (participantUuid) { const participants = this.item.data.data.participants ? duplicate(this.item.data.data.participants) @@ -1411,18 +964,10 @@ export class CoC7ChaseSheet extends ItemSheet { const participant = participants.find(p => participantUuid == p.uuid) if (!participant) return participant.hasAGunReady = !participant.hasAGunReady - await this.updateParticipants(participants) + await this.item.updateParticipants(participants) } } -export function sortByRoleAndDex (a, b) { - //Put chasers first - if (b.chaser && !a.chaser) return 1 - if (a.chaser && !b.chaser) return -1 - //If sametype sort by dex - return a.dex - b.dex -} - export function clean (obj) { for (const propName in obj) { const tp = getType(obj[propName]) diff --git a/styles/sheets/chase.less b/styles/sheets/chase.less index f7991ea6..b8fd742c 100644 --- a/styles/sheets/chase.less +++ b/styles/sheets/chase.less @@ -85,24 +85,39 @@ border-radius: 0.5rem; &.prey { background-color: rgba(60, 128, 60, 0.1); + &.no-actions { + background-color: rgba(60, 60, 60, 0.1); + } } &.chaser { background-color: rgba(128, 60, 60, 0.1); + &.no-actions { + background-color: rgba(60, 60, 60, 0.1); + } } &.active { border-color: #ff6400; } + .header { + .participant-controls { + flex: 0 0 auto; + } + } + .participant-control { color: #666; flex: 0; margin-right: 0.5rem; &.active { + color: #666; + } + &.disabled { color: #eee; } &.inactive { - color: red; - &:hover{ + color: #eee; + &:hover { text-shadow: none; cursor: default; } @@ -118,6 +133,8 @@ } .movement-action { + display: flex; + justify-content: center; .deficit { color: red; text-shadow: 0 0 8px red; diff --git a/templates/items/chase.html b/templates/items/chase.html index 978fd5ed..d79076a7 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -83,6 +83,13 @@
              {{#each item.participantsByInitiative as |p i|}}
              +
              +
              {{p.name}}
              +
              + + +
              +
              @@ -90,24 +97,28 @@
              INIT: {{p.initiative}}
              ADJ. MOV: {{p.adjustedMov}}
              -
              - {{#each movementActionArray as |actionClass|}} - - {{/each}} -
              - {{/each}} From 588aaa91fa8f94da3e5b080426d5fc1bec3becce Mon Sep 17 00:00:00 2001 From: zeteticl Date: Tue, 16 Nov 2021 15:27:06 +0800 Subject: [PATCH 312/726] Update zh-TW.json --- lang/zh-TW.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lang/zh-TW.json b/lang/zh-TW.json index b738ca17..2b74a9ee 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -824,5 +824,7 @@ "SETTINGS.ArtPauseTextHint": "留空為默認", "SETTINGS.CheckElevation": "在距離中包括高度", "SETTINGS.CheckElevationHint": "在範圍戰鬥距離計算中使用高度", - "CoC7.toolTipDelay": "顯示提示前的毫秒延遲,0表示從不顯示" -} + "CoC7.toolTipDelay": "顯示提示前的毫秒延遲,0表示從不顯示", + "CoC7.NotEnoughMagicPoints": "{spell}需要消耗{originalMagicPoints}點MP,但你只有{actorMagicPoints}點。你希望轉換你{convertedHitPoints}點的HP嗎?這樣的話,你將會受到{convertedHitPoints}點的HP傷害。", + "CoC7.German": "德文" +} \ No newline at end of file From 1b642efc9a349e0bb2fb2a67d10cb3c7598e09c1 Mon Sep 17 00:00:00 2001 From: zeteticl Date: Tue, 16 Nov 2021 17:03:34 +0800 Subject: [PATCH 313/726] update --- lang/en.json | 6 +++++- lang/zh-TW.json | 4 +++- module/apps/actor-importer-dialog.js | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lang/en.json b/lang/en.json index 20b6d428..008c53e3 100644 --- a/lang/en.json +++ b/lang/en.json @@ -871,5 +871,9 @@ "CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.", "SETTINGS.CheckElevation": "Include elevation in distance", "SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations", - "CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never" + "CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never", + + "CoC7.getTheExample": "Copy Example", + "CoC7.Copied": "Copied the Example Text" + } diff --git a/lang/zh-TW.json b/lang/zh-TW.json index b738ca17..af6ad94d 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -824,5 +824,7 @@ "SETTINGS.ArtPauseTextHint": "留空為默認", "SETTINGS.CheckElevation": "在距離中包括高度", "SETTINGS.CheckElevationHint": "在範圍戰鬥距離計算中使用高度", - "CoC7.toolTipDelay": "顯示提示前的毫秒延遲,0表示從不顯示" + "CoC7.toolTipDelay": "顯示提示前的毫秒延遲,0表示從不顯示", + "CoC7.getTheExample": "複製示範文字", + "CoC7.Copied": "已複製示範文字" } diff --git a/module/apps/actor-importer-dialog.js b/module/apps/actor-importer-dialog.js index 7b1a80bc..9d7f6efe 100644 --- a/module/apps/actor-importer-dialog.js +++ b/module/apps/actor-importer-dialog.js @@ -99,6 +99,19 @@ export class CoC7ActorImporterDialog extends Dialog { } submit (button) { + if(button.cssClass=="getExampleNow"){ + var content = CoC7ActorImporterRegExp.getExampleText(game.i18n.lang); + navigator.clipboard.writeText(content) + .then(() => { + return ui.notifications.warn( + game.i18n.localize('CoC7.Copied') + ) + }) + .catch(err => { + console.log('Something went wrong', err); + }) + return + } if ( $('#coc-pasted-character-data') .val() @@ -135,6 +148,10 @@ export class CoC7ActorImporterDialog extends Dialog { no: { icon: '', label: game.i18n.localize('CoC7.Cancel') + }, + getExampleNow: { + icon: '', + label: game.i18n.localize('CoC7.getTheExample') } } }, From bfad544a9300bd87209a8e6355b827af21666d63 Mon Sep 17 00:00:00 2001 From: zeteticl Date: Tue, 16 Nov 2021 17:31:33 +0800 Subject: [PATCH 314/726] Update actor-importer-dialog.js --- module/apps/actor-importer-dialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/apps/actor-importer-dialog.js b/module/apps/actor-importer-dialog.js index 9d7f6efe..c2281ed3 100644 --- a/module/apps/actor-importer-dialog.js +++ b/module/apps/actor-importer-dialog.js @@ -100,7 +100,7 @@ export class CoC7ActorImporterDialog extends Dialog { submit (button) { if(button.cssClass=="getExampleNow"){ - var content = CoC7ActorImporterRegExp.getExampleText(game.i18n.lang); + var content = CoC7ActorImporterRegExp.getExampleText($("#coc-entity-lang :selected").val()); navigator.clipboard.writeText(content) .then(() => { return ui.notifications.warn( From 6a22d62b269551845529fb9151ebcecc4f80c2d4 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 16 Nov 2021 12:18:15 +0000 Subject: [PATCH 315/726] Updated translations list --- .github/TRANSLATIONS.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 4513123c..70f9e94d 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,15 +2,15 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **de**, **sv** +The following translations are currently up to date **de**, **sv**, **zh-TW** The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | es | fr | ja | pl | pt-BR | zh-TW | -| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **2** | **2** | **2** | **2** | **2** | **2** | -| [CoC7.German](#coc7german) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| Key | es | fr | ja | pl | pt-BR | +| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **2** | **2** | **2** | **2** | **2** | +| [CoC7.German](#coc7german) | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ❌ | ❌ | ❌ | ❌ | ❌ | ##### CoC7.German From 95866c65ed255d34bc83af970bf0390ef4bea659 Mon Sep 17 00:00:00 2001 From: Sad Date: Tue, 16 Nov 2021 23:34:00 +0800 Subject: [PATCH 316/726] Update actor-importer-dialog.js --- module/apps/actor-importer-dialog.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/apps/actor-importer-dialog.js b/module/apps/actor-importer-dialog.js index c2281ed3..9ad5c8ae 100644 --- a/module/apps/actor-importer-dialog.js +++ b/module/apps/actor-importer-dialog.js @@ -99,9 +99,9 @@ export class CoC7ActorImporterDialog extends Dialog { } submit (button) { - if(button.cssClass=="getExampleNow"){ + if(button.cssClass === "getExampleNow"){ var content = CoC7ActorImporterRegExp.getExampleText($("#coc-entity-lang :selected").val()); - navigator.clipboard.writeText(content) + CoC7Utilities.copyToClipboard(content) .then(() => { return ui.notifications.warn( game.i18n.localize('CoC7.Copied') From df6ae3464276facaf62db55079053a9ba68d9278 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 16 Nov 2021 22:59:27 +0000 Subject: [PATCH 317/726] Add filters to Item compendiums Update setup, skills, and weapons to use same eras systems Update skills compendium using https://www.chaosium.com/cthulhu-character-sheets/ Once a skill is owned hide era information --- assets/icons/skills/cartwheel.svg | 1 + assets/icons/skills/lasso.svg | 1 + assets/icons/skills/laurel_crown.svg | 1 + assets/icons/skills/poker-hand.svg | 1 + assets/icons/skills/shaking-hands.svg | 1 + assets/icons/skills/wolf-trap.svg | 1 + module/coc7.js | 2 +- module/hooks/init.js | 2 + module/items/item.js | 10 ++- module/items/sheets/setup.js | 30 ++++--- module/scripts/compendium-filter.js | 100 ++++++++++++++++++++++ module/updater.js | 11 +++ packs/skills.db | 116 ++++++++++++++------------ styles/system/compendiums.less | 14 ++++ styles/system/index.less | 1 + templates/items/setup.html | 12 ++- templates/items/skill-sheet.html | 27 +++--- templates/items/weapon-sheet.html | 5 +- 18 files changed, 240 insertions(+), 96 deletions(-) create mode 100644 assets/icons/skills/cartwheel.svg create mode 100644 assets/icons/skills/lasso.svg create mode 100644 assets/icons/skills/laurel_crown.svg create mode 100644 assets/icons/skills/poker-hand.svg create mode 100644 assets/icons/skills/shaking-hands.svg create mode 100644 assets/icons/skills/wolf-trap.svg create mode 100644 module/scripts/compendium-filter.js create mode 100644 styles/system/compendiums.less diff --git a/assets/icons/skills/cartwheel.svg b/assets/icons/skills/cartwheel.svg new file mode 100644 index 00000000..2fc8af6f --- /dev/null +++ b/assets/icons/skills/cartwheel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/lasso.svg b/assets/icons/skills/lasso.svg new file mode 100644 index 00000000..f0dbe251 --- /dev/null +++ b/assets/icons/skills/lasso.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/laurel_crown.svg b/assets/icons/skills/laurel_crown.svg new file mode 100644 index 00000000..2e987a33 --- /dev/null +++ b/assets/icons/skills/laurel_crown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/poker-hand.svg b/assets/icons/skills/poker-hand.svg new file mode 100644 index 00000000..92a3740b --- /dev/null +++ b/assets/icons/skills/poker-hand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/shaking-hands.svg b/assets/icons/skills/shaking-hands.svg new file mode 100644 index 00000000..811d35e3 --- /dev/null +++ b/assets/icons/skills/shaking-hands.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/skills/wolf-trap.svg b/assets/icons/skills/wolf-trap.svg new file mode 100644 index 00000000..c8c04432 --- /dev/null +++ b/assets/icons/skills/wolf-trap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/module/coc7.js b/module/coc7.js index d1590343..26ecb88f 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -20,7 +20,7 @@ import { CoC7Hooks } from './hooks/index.js' import * as DiceBot from './dicebot.js' import '../styles/system/index.less' import { CoC7ChaseSheet } from './items/sheets/chase.js' -import { CoC7Socket, CoC7ChatCards } from './hooks/socket.js' +import { CoC7Socket } from './hooks/socket.js' import { DropActorSheetData } from './hooks/drop-actor-sheet-data.js' import { testCard } from './chat/cards/test.js' import { initECC } from './common/chatcardlib/src/chatcardlib.js' diff --git a/module/hooks/init.js b/module/hooks/init.js index 555f708e..461e726b 100644 --- a/module/hooks/init.js +++ b/module/hooks/init.js @@ -4,6 +4,7 @@ import { preloadHandlebarsTemplates } from '../scripts/load-templates.js' import { registerSettings } from '../scripts/register-settings.js' import { registerSheets } from '../scripts/register-sheets.js' import { handlebarsHelper } from '../scripts/handlebars-helper.js' +import { compendiumFilter } from '../scripts/compendium-filter.js' export function listen () { Hooks.once('init', async () => { @@ -12,5 +13,6 @@ export function listen () { registerSettings() registerSheets() handlebarsHelper() + compendiumFilter() }) } diff --git a/module/items/item.js b/module/items/item.js index d4bf16eb..6f31fd2a 100644 --- a/module/items/item.js +++ b/module/items/item.js @@ -54,7 +54,11 @@ export class CoC7Item extends Item { let checkedProps = {} let fighting let firearms - if (this.type === 'weapon' && !override) { + if (typeof COC7.eras[propertyId] !== 'undefined') { + checkedProps = { + ['data.eras.' + propertyId]: !(this.data.data.eras[propertyId] ?? false) + } + } else if (this.type === 'weapon' && !override) { if (propertyId === 'ahdb') { if (!this.data.data.properties.ahdb) { checkedProps = { @@ -129,9 +133,7 @@ export class CoC7Item extends Item { } } } - } - - if (this.type === 'skill' && !override) { + } else if (this.type === 'skill' && !override) { let modif = false if (propertyId === 'combat') { if (!this.data.data.properties.combat) { diff --git a/module/items/sheets/setup.js b/module/items/sheets/setup.js index 0da261f4..ebf7dc22 100644 --- a/module/items/sheets/setup.js +++ b/module/items/sheets/setup.js @@ -25,6 +25,7 @@ export class CoC7SetupSheet extends ItemSheet { html.find('.item-delete').click(event => this._onItemDelete(event, 'items')) html.find('.add-bio').click(async () => await this._onAddBio()) html.find('.remove-section').click(this._onRemoveSection.bind(this)) + html.find('.toggle-switch').click(this._onClickToggle.bind(this)) // html.find('.item-edit').click(async ev => { // const li = $(ev.currentTarget).parents('.item'); @@ -36,6 +37,19 @@ export class CoC7SetupSheet extends ItemSheet { // }); } + async _onClickToggle (event) { + event.preventDefault() + const propertyId = event.currentTarget.closest('.toggle-switch').dataset + .property + await this.item.toggleProperty( + propertyId, + event.metaKey || + event.ctrlKey || + event.keyCode === 91 || + event.keyCode === 224 + ) + } + async _onDrop (event, collectionName = 'items') { event.preventDefault() event.stopPropagation() @@ -194,17 +208,13 @@ export class CoC7SetupSheet extends ItemSheet { data.eras = {} data.itemProperties = [] + data._eras = [] for (const [key, value] of Object.entries(COC7.eras)) { - if (!data.data.eras[key]) { - data.data.eras[key] = {} - data.data.eras[key].selected = false - } - data.data.eras[key].name = game.i18n.localize(value) - data.data.eras[key].internalName = value - } - - for (const entry of Object.entries(data.data.eras)) { - if (entry[1].selected) data.itemProperties.push(entry[1].name) + const era = {} + era.id = key + era.name = value + era.isEnabled = this.item.data.data.eras[key] === true + data._eras.push(era) } data.oneBlockBackStory = game.settings.get('CoC7', 'oneBlockBackstory') diff --git a/module/scripts/compendium-filter.js b/module/scripts/compendium-filter.js new file mode 100644 index 00000000..b1f46356 --- /dev/null +++ b/module/scripts/compendium-filter.js @@ -0,0 +1,100 @@ +/* global game, Hooks */ +import { COC7 } from '../config.js' + +async function performFilter (e) { + const appId = e.currentTarget.name.replace(/^coc7[^0-9]+(\d+)$/, '$1') + const app = $('#app-' + appId) + const type = app.find('select[name=coc7type' + appId + ']').val() + const name = app.find('input[name=coc7name' + appId + ']').val() + const eraElement = app.find('select[name=coc7era' + appId + ']') + let era = '' + switch (type) { + case 'setup': + case 'skill': + case 'weapon': + eraElement.closest('div.era_select').show() + era = eraElement.val() + break + default: + eraElement.closest('div.era_select').hide() + } + const items = await game.packs.get(app.data('packId'))?.getDocuments() + if (typeof items === 'undefined') { + return + } + const show = [] + const nameFilter = new RegExp(RegExp.escape(name), 'i') + for (const [, item] of Object.entries(items)) { + let filter = true + if (filter && name !== '') { + filter = item.name.match(nameFilter) + } + if (filter && type !== '') { + filter = item.type === type + } + if (filter && era !== '') { + if (item.data.data.eras[era] === false || item.data.data.eras[era] === true) { + filter = item.data.data.eras[era] + } else { + filter = (item.data.data.eras[era]?.selected ?? false) + } + } + if (filter) { + show.push(item.id) + } + } + app.find('ol.directory-list li').each(function () { + this.style.display = show.includes(this.dataset.documentId) ? 'flex' : 'none' + }) +} + +export function compendiumFilter () { + Hooks.on('renderCompendium', async (app, html, data) => { + if (app.metadata.entity === 'Item') { + console.log(app, html, data) + const types = [...new Set(data.index.map(item => item.type))] + const select = [] + select.push('') + if (types.includes('archetype')) { + select.push('') + } + if (types.includes('book')) { + select.push('') + } + if (types.includes('item')) { + select.push('') + } + if (types.includes('occupation')) { + select.push('') + } + if (types.includes('setup')) { + select.push('') + } + if (types.includes('skill')) { + select.push('') + } + if (types.includes('spell')) { + select.push('') + } + if (types.includes('status')) { + select.push('') + } + if (types.includes('talent')) { + select.push('') + } + if (types.includes('weapon')) { + select.push('') + } + const eras = [] + eras.push('') + for (const [key, value] of Object.entries(COC7.eras)) { + eras.push('') + } + html.data('packId', app.metadata.package + '.' + app.metadata.name) + html.find('header.directory-header').remove() + html.find('div.compendium.directory').before('
              ') + html.find('select').change(performFilter.bind(this)) + html.find('input').keyup(performFilter.bind(this)) + } + }) +} diff --git a/module/updater.js b/module/updater.js index fcffedda..73663401 100644 --- a/module/updater.js +++ b/module/updater.js @@ -240,6 +240,7 @@ export class Updater { Updater._migrateItemKeeperNotes(item, updateData) Updater._migrateItemSpellAutomated(item, updateData) Updater._migrateItemKeeperNotesMerge(item, updateData) + Updater._migrateItemSetupEras(item, updateData) return updateData } @@ -458,6 +459,16 @@ export class Updater { } } + static _migrateItemSetupEras (item, updateData) { + if (item.type === 'setup') { + for (const [key, value] of Object.entries(item.data.eras)) { + if (typeof value.selected !== 'undefined') { + updateData['data.eras.' + key] = value.selected + } + } + } + } + static _migrateActorArtwork (actor, updateData) { const regEx = new RegExp(/systems\/CoC7\/artwork\/icons\/(.+)/) let image = String(actor.img).match(regEx) diff --git a/packs/skills.db b/packs/skills.db index 055aca01..5b74dd6e 100644 --- a/packs/skills.db +++ b/packs/skills.db @@ -1,85 +1,93 @@ -{"name":"Mechanical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"0qCTuRFUCACSEsWj"} +{"_id":"0qCTuRFUCACSEsWj","name":"Mechanical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Science (Zoology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_zoology.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"0rlp7EuZDzQGjIYf"} -{"name":"Navigate","type":"skill","img":"systems/CoC7/assets/icons/skills/navigate.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"1c3fdvpQtvZf5YXK"} -{"name":"Swim","type":"skill","img":"systems/CoC7/assets/icons/skills/swim.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"1zSIeY0eat2AxQok"} +{"_id":"1c3fdvpQtvZf5YXK","name":"Navigate","type":"skill","img":"systems/CoC7/assets/icons/skills/navigate.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"1zSIeY0eat2AxQok","name":"Swim","type":"skill","img":"systems/CoC7/assets/icons/skills/swim.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Firearms (Heavy Weapons)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_heavy_weapons.svg","data":{"specialization":"Firearms","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"23vdyJDDfjyneH3I"} {"name":"Firearms (Flamethrower)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_flamethrower.svg","data":{"specialization":"Firearms","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"35dvJDsrY8JipXRU"} -{"name":"Diving","type":"skill","img":"systems/CoC7/assets/icons/skills/diving_helmet.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"rarity":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"4lN6yD6zwbjX6BFp"} -{"name":"Law","type":"skill","img":"systems/CoC7/assets/icons/skills/law.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"64hnBZNC8FM7oTkg"} -{"name":"Occult","type":"skill","img":"systems/CoC7/assets/icons/skills/occult.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"6pSfZVS68jSHxa5T"} +{"_id":"4lN6yD6zwbjX6BFp","name":"Diving","type":"skill","img":"systems/CoC7/assets/icons/skills/diving_helmet.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"rarity":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"64hnBZNC8FM7oTkg","name":"Law","type":"skill","img":"systems/CoC7/assets/icons/skills/law.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"6pSfZVS68jSHxa5T","name":"Occult","type":"skill","img":"systems/CoC7/assets/icons/skills/occult.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Science (Chemistry)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_chemistry.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"8twBT7nbyh5dEp3J"} -{"name":"Track","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"AcUIbZFhfoXqQP2m"} -{"name":"Library Use","type":"skill","img":"systems/CoC7/assets/icons/skills/library_use.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"BcWHh8EhmyKj7bNk"} -{"name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"DcV524K0jNfjDEZC"} +{"name":"Science (Engineering)","type":"skill","img":"systems/CoC7/assets/icons/skills/spanner.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"dlPHDbfKH31liGgB":3},"flags":{"core":{"sourceId":"Item.Ib9GlNN6XslsALb5"}},"_id":"9zy7PLmTLXknFce4"} +{"_id":"AcUIbZFhfoXqQP2m","name":"Track","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"BcWHh8EhmyKj7bNk","name":"Library Use","type":"skill","img":"systems/CoC7/assets/icons/skills/library_use.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"DcV524K0jNfjDEZC","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Science (Physics)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_physics.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Dh6sHWep0qKQmi3I"} +{"name":"Rope Use","type":"skill","img":"systems/CoC7/assets/icons/skills/lasso.svg","data":{"specialization":"","description":{"value":"

              See Down Darker Trails

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"ddts":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.5FI0WRz1GunnTulZ"}},"_id":"EMA6uEtQBgJtBcPl"} {"name":"Fighting (Chainsaw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_chainsaw.svg","data":{"specialization":"Fighting","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Ed8OShyl7D834Ihk"} -{"name":"Archaeology","type":"skill","img":"systems/CoC7/assets/icons/skills/archaeology.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"GHhkcJUqjcP4lToY"} -{"name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"HAuFBG4ZT2yO9yn7"} +{"_id":"GHhkcJUqjcP4lToY","name":"Archaeology","type":"skill","img":"systems/CoC7/assets/icons/skills/archaeology.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"specialization":"Art/Craft","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"HzOGu2yLcL9obry3","name":"Trap","type":"skill","img":"systems/CoC7/assets/icons/skills/wolf-trap.svg","data":{"specialization":"","description":{"value":"

              See Down Darker Trails

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"ddts":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.FmcnC1p98W3HNBZi"}}} +{"name":"Civics","type":"skill","img":"systems/CoC7/assets/icons/skills/shaking-hands.svg","data":{"specialization":"","description":{"value":"

              See the Cthulhu Invictus

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"nvct":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.46Io2IFPcZcbtH9f"}},"_id":"I80gmmo830LuOBKl"} {"name":"Science (Biology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_biology.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"IBSDR6U4dE1uejVp"} {"name":"Fighting (Spear)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_spear.svg","data":{"specialization":"Fighting","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"IttOdCAGTeE6VU3F"} -{"name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"JgtxiN3KzooOWIQV"} -{"name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"KKFNX5M4LtEtiuxs"} -{"name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","data":{"specialization":"Firearms","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"KmDGtn7ukUFVb265"} -{"name":"Science (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_any.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"KvZuYcg3AmVrwKi2"} -{"name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"MFR4eR79niGaLfph"} -{"name":"Locksmith","type":"skill","img":"systems/CoC7/assets/icons/skills/locksmith.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"MRbFH52Zh9TzhLBh"} -{"name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"MoAB0NRNlpEc2qWr"} -{"name":"Electrical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/electrical_repair.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"NBkq8oCGM1FjmsyF"} +{"_id":"JgtxiN3KzooOWIQV","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"KKFNX5M4LtEtiuxs","name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"KmDGtn7ukUFVb265","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","data":{"specialization":"Firearms","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"KvZuYcg3AmVrwKi2","name":"Science (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_any.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"MFR4eR79niGaLfph","name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"MRbFH52Zh9TzhLBh","name":"Locksmith","type":"skill","img":"systems/CoC7/assets/icons/skills/locksmith.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"MoAB0NRNlpEc2qWr","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"NBkq8oCGM1FjmsyF","name":"Electrical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/electrical_repair.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Science (Forensics)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_forensics.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Nw5tSvi2Knxlqmg1"} {"name":"Fighting (Flail)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_flail.svg","data":{"specialization":"Fighting","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"OcnZzOYWaP4VsjXS"} -{"name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Og2OWQH93aSDWAMZ"} +{"_id":"Og2OWQH93aSDWAMZ","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Fighting (Whip)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_whip.svg","data":{"specialization":"Fighting","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Pb3QI7x9xJVeXi8a"} {"name":"Firearms (Machine Gun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_machine_gun.svg","data":{"specialization":"Firearms","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"QcomAOgmOS5g3dsh"} {"name":"Science (Geology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_geology.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"QwaL3UC3Gvjd3hmF"} -{"name":"Read Lips","type":"skill","img":"systems/CoC7/assets/icons/skills/read_lips.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"rarity":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"SL2OorS0Xx6ty02A"} +{"_id":"SL2OorS0Xx6ty02A","name":"Read Lips","type":"skill","img":"systems/CoC7/assets/icons/skills/read_lips.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"rarity":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"name":"Gambling","type":"skill","img":"systems/CoC7/assets/icons/skills/poker-hand.svg","data":{"specialization":"","description":{"value":"

              See Down Darker Trails

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"ddts":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.w5ueQbbIvTpmjHh9"}},"_id":"SflwB1bbjaQebiPQ"} {"name":"Science (Botany)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_botany.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"ShPoibiLsd07AtZv"} +{"_id":"Sxviv60td6kbS4kp","name":"Drive Carriage","type":"skill","img":"systems/CoC7/assets/icons/skills/cartwheel.svg","data":{"specialization":"","description":{"value":"

              See the Cthulhu by Gaslight

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"glit":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.Yp9weSMp46Mgkfex"}}} {"_id":"T8fSLCwSD8C0iK8t","name":"Fighting (Axe)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_axe.svg","data":{"specialization":"Fighting","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Fighting (Garrote)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_garrote.svg","data":{"specialization":"Fighting","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"TPOu48DT4QIrqE68"} {"name":"Science (Mathematics)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_mathematics.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"TwYYqLHe1PXnOCDF"} {"name":"Science (Cryptography)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_cryptography.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"UASTWOvgCYi8G1QQ"} -{"name":"Accounting","type":"skill","img":"systems/CoC7/assets/icons/skills/accounting.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"UOuN0gESXPp2HXwH"} -{"name":"History","type":"skill","img":"systems/CoC7/assets/icons/skills/history.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"URo2NSSJSNdvOqXU"} +{"_id":"UOuN0gESXPp2HXwH","name":"Accounting","type":"skill","img":"systems/CoC7/assets/icons/skills/accounting.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"URo2NSSJSNdvOqXU","name":"History","type":"skill","img":"systems/CoC7/assets/icons/skills/history.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Science (Pharmacy)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_pharmacy.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"V9ulAwDyLVqqQ0su"} -{"name":"Computer Use","type":"skill","img":"systems/CoC7/assets/icons/skills/computer_use.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"VZSv9eodMQ4ZPcrO"} +{"_id":"VZSv9eodMQ4ZPcrO","name":"Computer Use","type":"skill","img":"systems/CoC7/assets/icons/skills/computer_use.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Firearms (Bow)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_bow.svg","data":{"specialization":"Firearms","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"VwGWZ2LBOwtMaw08"} -{"name":"Cthulhu Mythos","type":"skill","img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noadjustments":true,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"WJky66ezt2ef5ksH"} +{"_id":"WJky66ezt2ef5ksH","name":"Cthulhu Mythos","type":"skill","img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noadjustments":true,"noxpgain":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Art/Craft (Photography)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_photography.svg","data":{"specialization":"Art/Craft","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"WLYZNASZ2YP8zN3g"} -{"name":"Survival (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/survival_any.svg","data":{"specialization":"Survival","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"X99v5MtRlfTNjL3B"} -{"name":"Medicine","type":"skill","img":"systems/CoC7/assets/icons/skills/medicine.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Xmg7oAy70DKpv4kq"} -{"name":"Language (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"Yu3Xk8kZBlz0G82y"} -{"name":"Demolitions","type":"skill","img":"systems/CoC7/assets/icons/skills/demolitions.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"rarity":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"bJt90h73GqdP7ti6"} -{"name":"Jump","type":"skill","img":"systems/CoC7/assets/icons/skills/jump.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"c5utlFbDM7J8TA8b"} -{"name":"Operate Heavy Machinery","type":"skill","img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"cuExWy1130KUwuWz"} -{"name":"Animal Handling","type":"skill","img":"systems/CoC7/assets/icons/skills/animal_handling.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"rarity":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"dQ4zUjSteT3sgwKx"} +{"_id":"X99v5MtRlfTNjL3B","name":"Survival (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/survival_any.svg","data":{"specialization":"Survival","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"Xmg7oAy70DKpv4kq","name":"Medicine","type":"skill","img":"systems/CoC7/assets/icons/skills/medicine.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"Yu3Xk8kZBlz0G82y","name":"Language (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"bJt90h73GqdP7ti6","name":"Demolitions","type":"skill","img":"systems/CoC7/assets/icons/skills/demolitions.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"rarity":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"c5utlFbDM7J8TA8b","name":"Jump","type":"skill","img":"systems/CoC7/assets/icons/skills/jump.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"cuExWy1130KUwuWz","name":"Operate Heavy Machinery","type":"skill","img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"dQ4zUjSteT3sgwKx","name":"Animal Handling","type":"skill","img":"systems/CoC7/assets/icons/skills/animal_handling.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"rarity":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Firearms (Submachine Gun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_submachine_gun.svg","data":{"specialization":"Firearms","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"gRUXG91zIJXOLye1"} -{"name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"gzNPM9gbx0EZffBV"} -{"name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"hDr4eUbS398oniTa"} +{"_id":"gzNPM9gbx0EZffBV","name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"hDr4eUbS398oniTa","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Fighting (Sword)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_sword.svg","data":{"specialization":"Fighting","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"hRPbMl2N0t6aBlyc"} {"name":"Science (Astronomy)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_astronomy.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"hhvqA2BOljk1FHVg"} -{"name":"Natural World","type":"skill","img":"systems/CoC7/assets/icons/skills/natural_world.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"jTcu6Ni2ek7Yz5q3"} -{"name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"ld78TITwKNFPpanQ"} -{"name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"specialization":"Firearms","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"m2pYjKk4Gk3FcEBL"} +{"_id":"jTcu6Ni2ek7Yz5q3","name":"Natural World","type":"skill","img":"systems/CoC7/assets/icons/skills/natural_world.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"ld78TITwKNFPpanQ","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"m2pYjKk4Gk3FcEBL","name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"specialization":"Firearms","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Art/Craft (Acting)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_acting.svg","data":{"specialization":"Art/Craft","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"m6V53lyfz7zh95FE"} {"name":"Art/Craft (Fine Art)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_fine_art.svg","data":{"specialization":"Art/Craft","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"m8sBJxvuUdtQ2mDU"} -{"name":"Hypnosis","type":"skill","img":"systems/CoC7/assets/icons/skills/hypnosis.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"rarity":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"mEblnQjptKvKCeIg"} -{"name":"Spot Hidden","type":"skill","img":"systems/CoC7/assets/icons/skills/spot_hidden.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"nHaWNwtW3Lg0sqYJ"} -{"name":"First Aid","type":"skill","img":"systems/CoC7/assets/icons/skills/first_aid.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"30","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"nZ8rdL4PLb7A7f5B"} -{"name":"Ride","type":"skill","img":"systems/CoC7/assets/icons/skills/ride.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"o7TdzbuSP7ticONf"} +{"_id":"mEblnQjptKvKCeIg","name":"Hypnosis","type":"skill","img":"systems/CoC7/assets/icons/skills/hypnosis.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"rarity":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"nHaWNwtW3Lg0sqYJ","name":"Spot Hidden","type":"skill","img":"systems/CoC7/assets/icons/skills/spot_hidden.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"nZ8rdL4PLb7A7f5B","name":"First Aid","type":"skill","img":"systems/CoC7/assets/icons/skills/first_aid.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"30","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"o7TdzbuSP7ticONf","name":"Ride","type":"skill","img":"systems/CoC7/assets/icons/skills/ride.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Electronics","type":"skill","img":"systems/CoC7/assets/icons/skills/electronics.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"oEfvPMTx0cgyPlgV"} -{"name":"Climb","type":"skill","img":"systems/CoC7/assets/icons/skills/climb.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"oh5eFj00Wohnx1My"} -{"name":"Anthropology","type":"skill","img":"systems/CoC7/assets/icons/skills/anthropology.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"ovIp66Luwfwbq28F"} +{"_id":"oh5eFj00Wohnx1My","name":"Climb","type":"skill","img":"systems/CoC7/assets/icons/skills/climb.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"ovIp66Luwfwbq28F","name":"Anthropology","type":"skill","img":"systems/CoC7/assets/icons/skills/anthropology.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Firearms (Artillery)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_artillery.svg","data":{"specialization":"Firearms","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true,"rarity":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"qET2wCGGdy3z18Gc"} -{"name":"Psychoanalysis","type":"skill","img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"rXBU2GofiO2qOsGv"} -{"name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"rhJ1Q9OB3uTUZmjD"} -{"name":"Fighting (Throw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_throw.svg","data":{"specialization":"Fighting","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true,"push":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"sWt5Q3ZXd6NlwhXU"} -{"name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"uMzSNURmZqjxr7mU"} -{"name":"Pilot (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/pilot_any.svg","data":{"specialization":"Pilot","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"uQsVn8K6XRXQmtaI"} -{"name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"vS8bsPWFlwgOecoB"} -{"name":"Credit Rating","type":"skill","img":"systems/CoC7/assets/icons/skills/credit_rating.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noxpgain":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"vYrJ5h9cIQBzvw8E"} +{"_id":"rAK5soSX1n3jXj2A","name":"Drive Horse / Oxen","type":"skill","img":"systems/CoC7/assets/icons/skills/cartwheel.svg","data":{"specialization":"","description":{"value":"

              See the Cthulhu Invictus

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"nvct":true,"drka":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.LGuvwdjDRA8PwtsI"}}} +{"name":"Lore (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/classical_knowledge.svg","data":{"specialization":"Lore","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"rarity":true,"push":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"dlPHDbfKH31liGgB":3},"flags":{"core":{"sourceId":"Item.5heqjvvagdYUF8LG"}},"_id":"rCJKGay6D0ucqgeg"} +{"_id":"rXBU2GofiO2qOsGv","name":"Psychoanalysis","type":"skill","img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"rhJ1Q9OB3uTUZmjD","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"specialization":"Language","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"sWt5Q3ZXd6NlwhXU","name":"Fighting (Throw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_throw.svg","data":{"specialization":"Fighting","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true,"push":false},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"sqenne0VZoF54W5k","name":"Drive Wagon / Coach","type":"skill","img":"systems/CoC7/assets/icons/skills/cartwheel.svg","data":{"specialization":"","description":{"value":"

              See Down Darker Trails

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"ddts":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.w09bofuMbG6Yu3UB"}}} +{"name":"Empire","type":"skill","img":"systems/CoC7/assets/icons/skills/laurel_crown.svg","data":{"specialization":"","description":{"value":"

              See the Cthulhu Invictus

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"nvct":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.LtUVhOkVCwqJsjrb"}},"_id":"t7uiYybrk8dHFdjp"} +{"_id":"uMzSNURmZqjxr7mU","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"uQsVn8K6XRXQmtaI","name":"Pilot (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/pilot_any.svg","data":{"specialization":"Pilot","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"vS8bsPWFlwgOecoB","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"specialization":"Fighting","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"vYrJ5h9cIQBzvw8E","name":"Credit Rating","type":"skill","img":"systems/CoC7/assets/icons/skills/credit_rating.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noxpgain":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Track (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","data":{"specialization":"Track","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"w0eY2fJe6CEHY9pq"} {"name":"Science (Meteorology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_meteorology.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"w7hWVU14syjweIH2"} -{"name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"wK8XxNj9QwXlGFEb"} -{"name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"wOs3gryeGRPkGoWD"} +{"_id":"wK8XxNj9QwXlGFEb","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"wOs3gryeGRPkGoWD","name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","data":{"specialization":"","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} {"name":"Art/Craft (Forgery)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_forgery.svg","data":{"specialization":"Art/Craft","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{},"_id":"zcvnv8qY4GrVwwTL"} -{"name":"Lore (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/classical_knowledge.svg","data":{"specialization":"Lore","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"rarity":true,"push":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"dlPHDbfKH31liGgB":3},"flags":{"core":{"sourceId":"Item.5heqjvvagdYUF8LG"}},"_id":"rCJKGay6D0ucqgeg"} -{"name":"Science (Engineering)","type":"skill","img":"systems/CoC7/assets/icons/skills/spanner.svg","data":{"specialization":"Science","description":{"value":"

              See the Call of Cthulhu - 7th Ed Core Rulebook

              ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"dlPHDbfKH31liGgB":3},"flags":{"core":{"sourceId":"Item.Ib9GlNN6XslsALb5"}},"_id":"9zy7PLmTLXknFce4"} diff --git a/styles/system/compendiums.less b/styles/system/compendiums.less new file mode 100644 index 00000000..381af849 --- /dev/null +++ b/styles/system/compendiums.less @@ -0,0 +1,14 @@ +.window-app .window-content .compendiumfilter { + line-height: 32px; + flex: none; + border-bottom: 1px dotted #000; + padding-bottom: 3px; + margin-bottom: 6px; + .flexrow { + align-items: center; + margin: 0 0 3px; + i.fas { + flex: 0 0 24px; + } + } +} diff --git a/styles/system/index.less b/styles/system/index.less index a072906b..577eb975 100644 --- a/styles/system/index.less +++ b/styles/system/index.less @@ -29,3 +29,4 @@ @import 'default-override.less'; @import '../sheets/summary.less'; @import 'tooltips.less'; +@import 'compendiums.less'; diff --git a/templates/items/setup.html b/templates/items/setup.html index 6beb0385..5f910a24 100644 --- a/templates/items/setup.html +++ b/templates/items/setup.html @@ -57,13 +57,11 @@

              {{ localize "CoC7.Eras" }}

              -
              - {{#each data.eras as |era key|}} - - {{/each}} -
              +
              + {{#each _eras as |era key|}} + {{localize era.name}} + {{/each}} +
              {{#if oneBlockBackStory}}

              diff --git a/templates/items/skill-sheet.html b/templates/items/skill-sheet.html index 443c848b..22fa6f7f 100644 --- a/templates/items/skill-sheet.html +++ b/templates/items/skill-sheet.html @@ -21,15 +21,22 @@ {{/if}}

              -
              - -
              -
              {{#each _properties as |property key|}} {{localize property.name}} {{/each}}
              + + {{#unless hasOwner}} +
              + +
              + {{#each _eras as |era key|}} + {{localize era.name}} + {{/each}} +
              +
              + {{/unless}}
              @@ -42,18 +49,6 @@ {{/if}} - {{!-- -
              - {{#each _eras as |era key|}} - {{era.name}} -
              - -
              - {{/each}} -
              - --}} - -
              {{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}} diff --git a/templates/items/weapon-sheet.html b/templates/items/weapon-sheet.html index 0c482df3..67254211 100644 --- a/templates/items/weapon-sheet.html +++ b/templates/items/weapon-sheet.html @@ -96,12 +96,9 @@
              -
              +
              {{#each _eras as |era key|}} {{localize era.name}} -
              - -
              {{/each}}
              From b499b63ef6be00845ee0b84f26afbc73e4bb77bd Mon Sep 17 00:00:00 2001 From: Sad Date: Fri, 19 Nov 2021 01:04:12 +0800 Subject: [PATCH 318/726] update the text --- lang/en.json | 2 +- lang/zh-TW.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lang/en.json b/lang/en.json index 008c53e3..02c13449 100644 --- a/lang/en.json +++ b/lang/en.json @@ -874,6 +874,6 @@ "CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never", "CoC7.getTheExample": "Copy Example", - "CoC7.Copied": "Copied the Example Text" + "CoC7.Copied": "Copied the Example Text to Clipboard" } diff --git a/lang/zh-TW.json b/lang/zh-TW.json index 83b1e248..320dca4b 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -826,7 +826,7 @@ "SETTINGS.CheckElevationHint": "在範圍戰鬥距離計算中使用高度", "CoC7.toolTipDelay": "顯示提示前的毫秒延遲,0表示從不顯示", "CoC7.getTheExample": "複製示範文字", - "CoC7.Copied": "已複製示範文字", + "CoC7.Copied": "已複製示範文字到剪貼簿", "CoC7.NotEnoughMagicPoints": "{spell}需要消耗{originalMagicPoints}點MP,但你只有{actorMagicPoints}點。你希望轉換你{convertedHitPoints}點的HP嗎?這樣的話,你將會受到{convertedHitPoints}點的HP傷害。", "CoC7.German": "德文" } From 8408054158cee2d5a3d31204032d72147f1522e4 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Thu, 18 Nov 2021 20:09:36 +0100 Subject: [PATCH 319/726] assist dropdown --- module/actors/actor.js | 47 +++-- module/items/chase/data.js | 335 +++++++++++++++++++++++++++--- module/items/chase/participant.js | 12 ++ module/items/chase/sheet.js | 69 ++++-- styles/interface/dropdown.less | 39 ++++ styles/sheets/chase.less | 6 +- styles/system/index.less | 1 + styles/system/main.less | 39 ---- templates/items/chase.html | 30 ++- 9 files changed, 466 insertions(+), 112 deletions(-) create mode 100644 styles/interface/dropdown.less diff --git a/module/actors/actor.js b/module/actors/actor.js index f3e382e7..aa763bcc 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -237,15 +237,15 @@ export class CoCActor extends Actor { } let boutDurationText = this.isInABoutOfMadness ? boutRealTime - ? `${duration} ${game.i18n.localize('CoC7.rounds')}` - : `${duration} ${game.i18n.localize('CoC7.hours')}` + ? `${duration} ${game.i18n.localize('CoC7.rounds')}` + : `${duration} ${game.i18n.localize('CoC7.hours')}` : null const insanityDurationText = insaneDuration ? this.isInsane - ? indefiniteInstanity - ? null - : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` - : null + ? indefiniteInstanity + ? null + : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` + : null : null if (this.isInsane && !insanityDurationText && !indefiniteInstanity) { indefiniteInstanity = true @@ -272,8 +272,8 @@ export class CoCActor extends Actor { durationText: insanityDurationText || '', hint: this.isInsane ? indefiniteInstanity - ? game.i18n.localize('CoC7.IndefiniteInsanity') - : `${game.i18n.localize( + ? game.i18n.localize('CoC7.IndefiniteInsanity') + : `${game.i18n.localize( 'CoC7.TemporaryInsanity' )} ${insanityDurationText || ''}` : game.i18n.localize('CoC7.NotInsane') @@ -2673,6 +2673,7 @@ export class CoCActor extends Actor { /** Try to find a characteristic, attribute or skill that matches the name */ find (name) { + if (!name) return undefined // Try ID const item = this.items.get(name) if (item) { @@ -2705,13 +2706,22 @@ export class CoCActor extends Actor { for (let i = 0; i < charKey.length; i++) { const char = this.getCharacteristic(charKey[i]) if (char) { - if (char.key?.toLocaleLowerCase() === name.toLowerCase()) { + if ( + char.key?.toLocaleLowerCase() === name.toLowerCase() || + char.key?.toLocaleLowerCase() === shortName?.toLowerCase() + ) { return { type: 'characteristic', value: char } } - if (char.shortName?.toLocaleLowerCase() === name.toLowerCase()) { + if ( + char.shortName?.toLocaleLowerCase() === name.toLowerCase() || + char.shortName?.toLocaleLowerCase() === shortName?.toLowerCase() + ) { return { type: 'characteristic', value: char } } - if (char.label?.toLocaleLowerCase() === name.toLowerCase()) { + if ( + char.label?.toLocaleLowerCase() === name.toLowerCase() || + char.label?.toLocaleLowerCase() === shortName?.toLowerCase() + ) { return { type: 'characteristic', value: char } } } @@ -2722,13 +2732,22 @@ export class CoCActor extends Actor { for (let i = 0; i < attribKey.length; i++) { const attr = this.getAttribute(attribKey[i]) if (attr) { - if (attr.key?.toLocaleLowerCase() === name.toLowerCase()) { + if ( + attr.key?.toLocaleLowerCase() === name.toLowerCase() || + attr.key?.toLocaleLowerCase() === shortName?.toLowerCase() + ) { return { type: 'attribute', value: attr } } - if (attr.shortName?.toLocaleLowerCase() === name.toLowerCase()) { + if ( + attr.shortName?.toLocaleLowerCase() === name.toLowerCase() || + attr.shortName?.toLocaleLowerCase() === shortName?.toLowerCase() + ) { return { type: 'attribute', value: attr } } - if (attr.label?.toLocaleLowerCase() === name.toLowerCase()) { + if ( + attr.label?.toLocaleLowerCase() === name.toLowerCase() || + attr.label?.toLocaleLowerCase() === shortName?.toLowerCase() + ) { return { type: 'attribute', value: attr } } } diff --git a/module/items/chase/data.js b/module/items/chase/data.js index 340a7946..8cbdaba2 100644 --- a/module/items/chase/data.js +++ b/module/items/chase/data.js @@ -1,3 +1,5 @@ +import { CoCActor } from '../../actors/actor.js' +import { chatHelper } from '../../chat/helper.js' import { CoC7Check } from '../../check.js' import { CoC7Item } from '../item.js' import { _participant, sortByRoleAndDex } from './participant.js' @@ -14,13 +16,51 @@ export class CoC7Chase extends CoC7Item { //Handle participants get participants () { const pList = [] + const preys = this.data.data.participants + .filter(p => !p.chaser) + .map(p => { + return new _participant(p) + }) + const chasers = this.data.data.participants + .filter(p => p.chaser) + .map(p => { + return new _participant(p) + }) this.data.data.participants.forEach(p => { - pList.push(new _participant(p)) - p.index = pList.length - 1 + // p.index = pList.length - 1 + p.assist = [] + if (p.chaser) { + p.assist = chasers + .filter(c => c.uuid != p.uuid && !c.hasAssit) + .map(c => { + return { uuid: c.uuid, name: c.name } + }) + } else { + p.assist = preys + .filter(c => c.uuid != p.uuid && !c.hasAssit) + .map(c => { + return { uuid: c.uuid, name: c.name } + }) + } + const particpant = new _participant(p) + pList.push(particpant) }) return pList } + get activeParticipant () { + return this.data.data.participants.find(p => p.active) + } + + get activeActor () { + const p = this.activeParticipant + if (!p) return undefined + if (p.actorKey) { + return chatHelper.getActorFromKey(p.actorKey) + } + return undefined + } + get participantsByAdjustedMov () { return this.participants.sort((a, b) => a.adjustedMov - b.adjustedMov) } @@ -45,7 +85,37 @@ export class CoC7Chase extends CoC7Item { return this.participants.every(p => p.speedCheck?.rolled) } - async updateParticipants (list) { + getParticipantLocation (participantUuid) { + const location = this.data.data.locations?.list?.find(l => + l.participants?.includes(participantUuid) + ) + if (location) return location + return undefined + } + + getParticipantData (participantUuid) { + const participant = this.data.data.participants.find( + p => participantUuid == p.uuid + ) + if (participant) return duplicate(participant) //TODO : check if we need to duplicate + return undefined + } + + getParticipant (participantUuid) { + const participantData = this.getParticipantData(participantUuid) + if (participantData) return new _participant(participantData) + return undefined + } + + async updateParticipants (list, { render = true } = {}) { + const participantsData = this.cleanParticipantList(list) + return await this.update( + { 'data.participants': participantsData }, + { render: render } + ) + } + + cleanParticipantList (list) { const participantsData = this.data.data.participants ? duplicate(this.data.data.participants) : [] @@ -62,14 +132,25 @@ export class CoC7Chase extends CoC7Item { participantsData[index] = data } }) - await this.update({ 'data.participants': participantsData }) - return + return participantsData } async activateParticipant ( + participantUuid, + { scrollToLocation = true, activateLocation = true, render = true } = {} + ) { + const dataUpdate = this.getActivateParticipantUpdateData(participantUuid, { + scrollToLocation: scrollToLocation, + activeLocation: activateLocation + }) + await this.update(dataUpdate, { render: render }) + } + + getActivateParticipantUpdateData ( participantUuid, { scrollToLocation = true, activateLocation = true } = {} ) { + const participantsDataUpdate = {} const participants = this.data.data.participants ? duplicate(this.data.data.participants) : [] @@ -77,7 +158,35 @@ export class CoC7Chase extends CoC7Item { delete p.active if (participantUuid == p.uuid) p.active = true }) - await this.updateParticipants(participants) + participantsDataUpdate['data.participants'] = participants + + const participantLocation = this.getParticipantLocation(participantUuid) + let locationsDataUpdate = null + if (participantLocation) { + if (activateLocation) { + locationsDataUpdate = this.getActivateLocationUpdateData( + participantLocation.uuid, + { scrollToLocation: scrollToLocation } + ) + } else if (scrollToLocation) { + if (scrollToLocation) { + locationsDataUpdate = {} + locationsDataUpdate[ + 'data.scroll.chaseTrack.from' + ] = this.chaseTrackCurrentScrollPosition + locationsDataUpdate[ + 'data.scroll.chaseTrack.to' + ] = this.getChaseTrackLocationScrollPosition(participantLocation.uuid) + } + } + } + + if (locationsDataUpdate) { + return foundry.utils.mergeObject( + participantsDataUpdate, + locationsDataUpdate + ) + } else return participantsDataUpdate } /** @override */ @@ -308,10 +417,13 @@ export class CoC7Chase extends CoC7Item { return chaseTrack } - async updateLocationsList (list) { + async updateLocationsList (list, { render = true } = {}) { //Remove all unnecessary items (cssClass, ) const updatedList = this.cleanLocationsList(list) - await this.update({ 'data.locations.list': updatedList }) + await this.update( + { 'data.locations.list': updatedList }, + { render: render } + ) } cleanLocationsList (list) { @@ -341,7 +453,20 @@ export class CoC7Chase extends CoC7Item { return updatedList } - async activateLocation (locationUuid, { scrollToLocation = true } = {}) { + async activateLocation ( + locationUuid, + { scrollToLocation = true, render = true } = {} + ) { + const updateData = this.getActivateLocationUpdateData(locationUuid, { + scrollToLocation: scrollToLocation + }) + await this.update(updateData, { render: render }) + } + + getActivateLocationUpdateData ( + locationUuid, + { scrollToLocation = true } = {} + ) { const updateData = {} const locations = this.data.data.locations.list ? duplicate(this.data.data.locations.list) @@ -350,23 +475,37 @@ export class CoC7Chase extends CoC7Item { delete l.active if (locationUuid == l.uuid) l.active = true }) - updateData['data.locations.list'] = this.cleanLocationsList( locations) + updateData['data.locations.list'] = this.cleanLocationsList(locations) // await this.updateLocationsList(locations, { render: false }) - if (scrollToLocation){ - updateData['data.scroll.chaseTrack.from'] = this.chaseTrackCurrentScrollPosition - updateData['data.scroll.chaseTrack.to'] = this.getChaseTrackLocationScrollPosition(locationUuid) + if (scrollToLocation) { + updateData[ + 'data.scroll.chaseTrack.from' + ] = this.chaseTrackCurrentScrollPosition + updateData[ + 'data.scroll.chaseTrack.to' + ] = this.getChaseTrackLocationScrollPosition(locationUuid) // await this.setchaseTrackScroll({ // from: this.chaseTrackCurrentScrollPosition, // to: this.chaseTrackActiveLocationScrollPosition // }) } - await this.update( updateData) + return updateData } //Locations navigation get activeLocation () { if (!this.locations) return undefined - return this.locations.find(l => l.active) + const location = this.locations.find(l => l.active) + if (!location) return undefined + const actor = this.activeActor + if (actor) { + const test = actor.find(location.obstacleDetails?.checkName) + if (test) { + location.activeActorHasSkill = true + location.activeActorTest = test + } + } + return location } get previousLocation () { @@ -374,7 +513,16 @@ export class CoC7Chase extends CoC7Item { const activeIndex = this.locations.findIndex(l => l.active) if (-1 == activeIndex) return undefined if (0 == activeIndex) return undefined - return this.locations[activeIndex - 1] + const location = this.locations[activeIndex - 1] + const actor = this.activeActor + if (actor) { + const test = actor.find(location.obstacleDetails?.checkName) + if (test) { + location.activeActorHasSkill = true + location.activeActorTest = test + } + } + return location } get nextLocation () { @@ -382,9 +530,24 @@ export class CoC7Chase extends CoC7Item { const activeIndex = this.locations.findIndex(l => l.active) if (-1 == activeIndex) return undefined if (activeIndex == this.locations.length - 1) return undefined - return this.locations[activeIndex + 1] + const location = this.locations[activeIndex + 1] + const actor = this.activeActor + if (actor) { + const test = actor.find(location.obstacleDetails?.checkName) + if (test) { + location.activeActorHasSkill = true + location.activeActorTest = test + } + } + return location } + // get activeParticipantHaveActiveLocationSkill (){ + // if( !this.activeActor) return false + // if( this.activeActor.find( this.activeLocation.obstacleDetails?.checkName)) return true + // return false + // } + //Handle mechanics async cutToTheChase () { if (!this.allHaveSpeedRoll) { @@ -411,18 +574,35 @@ export class CoC7Chase extends CoC7Item { const locations = this.locations.filter(l => !l.init) for (let i = 0; i < locations.length; i++) { if (locations[i].participants) locations[i].participants = [] + if (locations[i].active) delete locations[i].active + } + const participantsData = this.data.data.participants + ? duplicate(this.data.data.participants) + : [] + for (let i = 0; i < participantsData.length; i++) { + if (participantsData[i].active) delete participantsData[i].active } - await this.updateLocationsList(locations) + await this.setchaseTrackScroll(0, 0, { render: false }) + await this.updateLocationsList(locations, { render: false }) + await this.updateParticipants(participantsData, { render: false }) await this.stop() } async moveParticipant ( participantUuid, locationMoved, - { checkMovementActions = true } = {} + { + useMovementActions = true, + scrollToLocation = true, + activateLocation = true, + activateParticipant = true, + render = true + } = {} ) { + // const selector = `#item-${this.id} .chase-track` + // ui.notifications.info( `moveParticipant : Jquery root: ${$(':root').find(selector).scrollLeft()}`) + let modified = false const locations = duplicate(this.data.data.locations.list) - const originIndex = locations.findIndex(l => l.participants?.includes(participantUuid) ) @@ -436,17 +616,69 @@ export class CoC7Chase extends CoC7Item { } const totalMove = destinationIndex - originIndex + const participant = this.getParticipant(participantUuid) + const participantsData = duplicate(this.data.data.participants) + const participantIndex = participantsData.findIndex( + p => participantUuid == p.uuid + ) + + if (useMovementActions) { + if (!participant) { + ui.notifications.error( + `Particpant ${this.participantUuid} cannot be found` + ) + return undefined + } + if (participant.currentMovementActions < Math.abs(totalMove)) { + ui.notifications.error( + `Particpant ${participantUuid} only have ${participant.currentMovementActions} movement actions` + ) + return undefined + } + participant.alterMovementActions(0 - Math.abs(totalMove)) + participantsData[participantIndex] = duplicate(participant.data) + await this.update( + { 'data.participants': participantsData }, + { render: false } + ) + modified = true + } if (0 != totalMove) { await this.moveParticipantToLocation( participantUuid, - locations[destinationIndex].uuid + locations[destinationIndex].uuid, + { render: false } ) + modified = true + } + + if (activateParticipant) { + await this.activateParticipant(participantUuid, { + scrollToLocation: scrollToLocation, + activateLocation: activateLocation, + render: false + }) + modified = true } + + if (activateLocation && !activateParticipant) { + await this.activateLocation(locations[destinationIndex].uuid, { + scrollToLocation: scrollToLocation, + render: false + }) + modified = true + } + + if (modified && render) await this.sheet.render(true) return totalMove } - async moveParticipantToLocation (participantUuid, locationUuid) { + async moveParticipantToLocation ( + participantUuid, + locationUuid, + { scrollToLocation = true, activateLocation = true, render = true } = {} + ) { const locations = duplicate(this.data.data.locations.list) //Find destination location. @@ -477,15 +709,24 @@ export class CoC7Chase extends CoC7Item { ) origin.participants = oldParticipantsList - await this.updateLocationsList(locations) + await this.updateLocationsList(locations, { render: render }) } //Handle scrolling - async setchaseTrackScroll ({ from = -1, to = -1 } = {}) { - await this.update({ - 'data.scroll.chaseTrack.from': from, - 'data.scroll.chaseTrack.to': to - }, { render: true }) + async setchaseTrackScroll ({ + from = undefined, + to = -1, + render = true + } = {}) { + await this.update( + { + 'data.scroll.chaseTrack.from': + undefined === from ? this.chaseTrackCurrentScrollPosition : from, + 'data.scroll.chaseTrack.to': + undefined === to ? this.chaseTrackCurrentScrollPosition : to + }, + { render: render } + ) } get chaseTrackCurrentScrollPosition () { @@ -493,6 +734,11 @@ export class CoC7Chase extends CoC7Item { if (!html) return -1 const chaseTrack = html[0].querySelector('.chase-track') if (!chaseTrack) return -1 + // const selector = `#item-${this.id} .chase-track` + // ui.notifications.info( `DATA : Jquery root: ${$(':root').find(selector).scrollLeft()}`) + // return $(':root').find(selector).scrollLeft() + + // ui.notifications.info( `DATA : Jquery root: ${$(':root').find('#item-VNhtqxA2wJJnWStT .chase-track').scrollLeft()}.Chase track offset: ${chaseTrack.scrollLeft}, Document offset:${document.querySelector('#item-VNhtqxA2wJJnWStT').querySelector('.chase-track').scrollLeft}`) return chaseTrack.scrollLeft } @@ -503,10 +749,10 @@ export class CoC7Chase extends CoC7Item { */ get chaseTrackActiveLocationScrollPosition () { if (!this.activeLocation) return -1 - return this.getChaseTrackLocationScrollPosition( this.activeLocation.uuid) + return this.getChaseTrackLocationScrollPosition(this.activeLocation.uuid) } - getChaseTrackLocationScrollPosition( locationUuid){ + getChaseTrackLocationScrollPosition (locationUuid) { const html = this.sheet?.element if (!html) return -1 const chaseTrack = html[0].querySelector('.chase-track') @@ -516,9 +762,9 @@ export class CoC7Chase extends CoC7Item { ) if (!activeLocationElement) return -1 const leftScroll = - activeLocationElement.offsetLeft - + activeLocationElement.clientWidth / 2 - - chaseTrack.clientWidth / 2 + activeLocationElement.offsetLeft + + activeLocationElement.clientWidth / 2 - + chaseTrack.clientWidth / 2 return leftScroll < 0 ? 0 : Math.floor(leftScroll) } @@ -567,6 +813,29 @@ export class CoC7Chase extends CoC7Item { return uuid } + get activeActorSkillsAndCharacteristics () { + const actor = this.activeActor + if (!actor) return undefined + const list = [] + CoCActor.getCharacteristicDefinition().forEach(c => + list.push( + `${game.i18n.localize('CoC7.Characteristics')} (${c.shortName})` + ) + ) + list.push( + `${game.i18n.localize('CoC7.Attribute')} (${game.i18n.localize( + 'CoC7.Luck' + )})` + ) + list.push( + `${game.i18n.localize('CoC7.Attribute')} (${game.i18n.localize( + 'CoC7.SAN' + )})` + ) + actor.skills.forEach(s => list.push(s.fullName)) + return list + } + /** * Clean the data of all parasite participants in locations. * Should never happen diff --git a/module/items/chase/participant.js b/module/items/chase/participant.js index d09f7d87..fc6b7488 100644 --- a/module/items/chase/participant.js +++ b/module/items/chase/participant.js @@ -85,6 +85,18 @@ export class _participant { return this.data.uuid } + get hasAssit () { + return this.data.hasAssit || false + } + + get canAssist () { + return this.assist?.length > 0 + } + + get assist () { + return this.data.assist || [] + } + get dex () { if (!this.data.dex) { if (this.hasVehicle && this.hasDriver) { diff --git a/module/items/chase/sheet.js b/module/items/chase/sheet.js index 86c2d4f1..f48280af 100644 --- a/module/items/chase/sheet.js +++ b/module/items/chase/sheet.js @@ -178,6 +178,25 @@ export class CoC7ChaseSheet extends ItemSheet { // html.find('.chase-track').ready(async html => await this._onSheetReady(html)) + //Handle Droprown + html + .find('.dropdown-element') + .on('click', event => this._onDropDownElementSelected(event)) + + html.find('.dropbtn').click(event => { + const target = event.currentTarget + const dropdown = target.closest('.dropdown') + const dropdownContent = dropdown.querySelector('.dropdown-content') + dropdownContent.classList.toggle('show') + }) + html + .find('.dropdown') + .mouseleave(event => + event.currentTarget + .querySelector('.dropdown-content') + .classList.remove('show') + ) + html.on('dblclick', '.open-actor', CoC7Chat._onOpenActor.bind(this)) html @@ -218,9 +237,6 @@ export class CoC7ChaseSheet extends ItemSheet { html.find('.button').click(this._onButtonClick.bind(this)) html.find('.name-container').click(this._onLocationClick.bind(this)) - html - .find('.chase-location .chase-participant') - .click(this._onChaseParticipantClick.bind(this)) html.find('.obstacle-type').click(this._onObstacleTypeClick.bind(this)) html.find('.obstacle-toggle').click(this._onObstacleToggleClick.bind(this)) @@ -248,6 +264,10 @@ export class CoC7ChaseSheet extends ItemSheet { newParticipantDragDrop.bind(html[0]) if (this.item.started) { + html + .find('.chase-location .chase-participant') + .click(this._onChaseParticipantClick.bind(this)) + const chaseParticipantDragpDrop = new DragDrop({ dragSelector: '.chase-participant', dropSelector: '.chase-location', @@ -372,6 +392,7 @@ export class CoC7ChaseSheet extends ItemSheet { let start = data.data.scroll.chaseTrack.from let end = data.data.scroll.chaseTrack.to + if (initialOpening) { if (end > 0) { start = 0 @@ -381,7 +402,7 @@ export class CoC7ChaseSheet extends ItemSheet { } } - if (start) { + if (start && -1 != start) { chaseTrack.scrollTo({ top: 0, left: start, @@ -389,11 +410,13 @@ export class CoC7ChaseSheet extends ItemSheet { }) } - chaseTrack.scrollTo({ - top: 0, - left: end, - behavior: 'smooth' - }) + if (-1 != end) { + chaseTrack.scrollTo({ + top: 0, + left: end, + behavior: 'smooth' + }) + } // await app.item.update({ 'data.trackScrollPosition': elementCenterRelativeLeft }) } @@ -453,6 +476,13 @@ export class CoC7ChaseSheet extends ItemSheet { const chaseTrack = this._element.find('.chase-track') } + async _onDropDownElementSelected (event) { + event.preventDefault() + event.stopPropagation() + event.currentTarget.closest('.dropdown-content').classList.toggle('show') + ui.notifications.info('Drop down clicked') + } + async _onToggle (event) { const target = event.currentTarget // const locationElement = target.closest('.location.obstacle') @@ -536,8 +566,10 @@ export class CoC7ChaseSheet extends ItemSheet { async _onParticipantControlClicked (event) { event.preventDefault() - event.stopPropagation() const target = event.currentTarget + if (target.classList.contains('.dropdown')) return + event.stopPropagation() + const participantUuid = target.closest('.initiative-block')?.dataset?.uuid if (!participantUuid) return switch (target.dataset.control) { @@ -548,9 +580,13 @@ export class CoC7ChaseSheet extends ItemSheet { case 'increaseActions': return await this._onChangeMovementActions(1, event) case 'moveBackward': + // ui.notifications.info( `SHEET : Jquery root: ${$(':root').find('#item-VNhtqxA2wJJnWStT .chase-track').scrollLeft()}`) return await this.item.moveParticipant(participantUuid, -1) case 'moveForward': + // ui.notifications.info( `SHEET : Jquery root: ${$(':root').find('#item-VNhtqxA2wJJnWStT .chase-track').scrollLeft()}`) return await this.item.moveParticipant(participantUuid, 1) + case 'activateParticipant': + return await this.item.activateParticipant(participantUuid) } } @@ -571,7 +607,7 @@ export class CoC7ChaseSheet extends ItemSheet { // await this.item.update({ // 'data.trackScrollPosition': chaseTrack.scrollLeft // }) - + await this.item.setchaseTrackScroll({ render: false }) await this.item.updateParticipants(participants) } @@ -648,7 +684,7 @@ export class CoC7ChaseSheet extends ItemSheet { } async _onChaseParticipantDragDrop (dragEvent) { - ui.notifications.info('Dropped') + // ui.notifications.info('Dropped') this._onDragLeave(dragEvent) const target = dragEvent.currentTarget @@ -660,15 +696,15 @@ export class CoC7ChaseSheet extends ItemSheet { if (oldLocation) { if (oldLocation.participants?.includes(data.uuid)) return } - ui.notifications.info( - `dragged particpant ${data.uuid} onto location ${locationUuid}` - ) + // ui.notifications.info( + // `dragged particpant ${data.uuid} onto location ${locationUuid}` + // ) // await this.item.update({ // 'data.trackScrollPosition': chaseTrack.scrollLeft // }) + await this.item.setchaseTrackScroll({ render: false }) await this.item.moveParticipantToLocation(data.uuid, locationUuid) - await this.item.setScroll() } _onDragOver (dragEvent) { @@ -964,6 +1000,7 @@ export class CoC7ChaseSheet extends ItemSheet { const participant = participants.find(p => participantUuid == p.uuid) if (!participant) return participant.hasAGunReady = !participant.hasAGunReady + await this.item.setchaseTrackScroll({ render: false }) await this.item.updateParticipants(participants) } } diff --git a/styles/interface/dropdown.less b/styles/interface/dropdown.less new file mode 100644 index 00000000..d48ce27f --- /dev/null +++ b/styles/interface/dropdown.less @@ -0,0 +1,39 @@ +.dropbtn { + font-size: 10px; + border: none; + cursor: pointer; + display: inline-block; + width: 100%; + height: 100%; +} +.dropdown { + &:hover { + background-color: lightgray; + } + position: relative; + display: inline-block; + a { + &:hover { + background-color: #ddd; + text-shadow: 0 0 8px red; + } + } +} +.dropdown-content { + display: block; + visibility: hidden; + position: absolute; + background-color: #f1f1f1; + min-width: 126px; + overflow: auto; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); + z-index: 1; + a { + color: black; + text-decoration: none; + display: block; + } +} +.show { + visibility: visible; +} \ No newline at end of file diff --git a/styles/sheets/chase.less b/styles/sheets/chase.less index b8fd742c..7add0c6b 100644 --- a/styles/sheets/chase.less +++ b/styles/sheets/chase.less @@ -36,6 +36,10 @@ text-align: center; } } + + .no-skill { + color: red; + } } .sheet-body { @@ -108,7 +112,7 @@ .participant-control { color: #666; flex: 0; - margin-right: 0.5rem; + margin-right: 0.1rem; &.active { color: #666; } diff --git a/styles/system/index.less b/styles/system/index.less index a072906b..61f96b0d 100644 --- a/styles/system/index.less +++ b/styles/system/index.less @@ -12,6 +12,7 @@ @import '../interface/combat-tracker.less'; @import '../interface/compendium.less'; @import '../interface/controls.less'; +@import '../interface/dropdown.less'; @import 'main.less'; @import '../sheets/actor.less'; @import '../sheets/book.less'; diff --git a/styles/system/main.less b/styles/system/main.less index 9504c231..2a9dd842 100644 --- a/styles/system/main.less +++ b/styles/system/main.less @@ -554,50 +554,11 @@ } } .coc7.chat-card { - .dropbtn { - font-size: 10px; - border: none; - cursor: pointer; - display: inline-block; - width: 100%; - height: 100%; - } - .dropdown { - &:hover { - background-color: lightgray; - } - position: relative; - display: inline-block; - a { - &:hover { - background-color: #ddd; - text-shadow: 0 0 8px red; - } - } - } .toggle-switch { &:hover { background-color: lightgray; } } - .dropdown-content { - display: block; - visibility: hidden; - position: absolute; - background-color: #f1f1f1; - min-width: 126px; - overflow: auto; - box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); - z-index: 1; - a { - color: black; - text-decoration: none; - display: block; - } - } - .show { - visibility: visible; - } label { text-align: left; margin-bottom: 0; diff --git a/templates/items/chase.html b/templates/items/chase.html index d79076a7..2fadd02b 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -16,6 +16,11 @@ {{/each}} + + {{#each item.activeActorSkillsAndCharacteristics as |o|}} + + {{/each}} +
              @@ -30,7 +35,7 @@
              hazard
              - +
              @@ -68,8 +73,8 @@
              {{/unless}} -
              +
              {{#if activeLocation}} @@ -21,30 +21,37 @@ {{/each}} -
              - +
              +
              -
              +
              {{#unless activeLocation.first}} -
              {{ localize "CoC7.Obstacle"}}
              +
              +
              {{ localize "CoC7.Obstacle"}}
              +
              {{/unless}} {{#if activeLocation.obstacle}} -
              +
              barrier
              hazard
              - - - -
              +
              + +
              +
              + + + + +
              +
              {{ localize "CoC7.Damage"}}
              {{#if activeLocation.obstacleDetails.hasDamage}} {{/if}}
              -
              +
              {{ localize "CoC7.ActionCost"}}
              {{#if activeLocation.obstacleDetails.hasActionCost}} @@ -52,8 +59,7 @@
              {{/if}}
              -
              -
              +
              {{#unless activeLocation.last}}
              {{ localize "CoC7.Obstacle"}}
              {{/unless}} @@ -85,9 +91,9 @@ {{#if locations}} {{#if started}} -
              +
              {{#each item.participantsByInitiative as |p i|}} -
              +
              {{p.name}}
              @@ -98,7 +104,7 @@
              - +
              INIT: {{p.initiative}}
              @@ -111,12 +117,19 @@ {{/each}}
              - + + + + + +
              + {{#unless p.hasNoMvtActions}} +
              @@ -125,12 +138,17 @@ {{/if}} + {{#if p.canBeCautious}} + + + {{/if}} + {{/unless}}
              {{/each}} From be8a897b384bf93a95335eb81ab8ca990fb11072 Mon Sep 17 00:00:00 2001 From: Rangertheman <81484515+Rangertheman@users.noreply.github.com> Date: Mon, 22 Nov 2021 23:18:33 +0100 Subject: [PATCH 324/726] Update sv.json --- lang/sv.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lang/sv.json b/lang/sv.json index 7f54ef48..7046ce11 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -879,5 +879,9 @@ "CoC7.ExperimentalFeaturesWarning": "Den här funktionen är under utveckling och rekommenderas inte för användning i dina spelvärldar.", "SETTINGS.CheckElevation": "Räkna in höjdskillnad i avstånd", "SETTINGS.CheckElevationHint": "Använder höjdskillnad vid beräkningar för avståndsstrid", - "CoC7.toolTipDelay": "Fördröjning i millisekunder innan tips visas, ange 0 om du aldrig vill att de ska visas" + "CoC7.toolTipDelay": "Fördröjning i millisekunder innan tips visas, ange 0 om du aldrig vill att de ska visas", + + "CoC7.getTheExample": "Kopiera exempel", + "CoC7.Copied": "Kopierade exempeltexten till Urklipp" + } From ad2fa2d0e6abc0036935bcd3b8a66200daf77d60 Mon Sep 17 00:00:00 2001 From: Grischa Brockhaus Date: Tue, 23 Nov 2021 02:08:36 +0100 Subject: [PATCH 325/726] Small additions for the German Char Importer. Tested with "Masken des Nyarlathotep" character cards. --- module/apps/actor-importer-regexp.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/apps/actor-importer-regexp.js b/module/apps/actor-importer-regexp.js index a5b7ff62..e36407e1 100644 --- a/module/apps/actor-importer-regexp.js +++ b/module/apps/actor-importer-regexp.js @@ -305,14 +305,14 @@ const translations = { ')(\\s*:)?\\s+(?[+-]?\\d+(?:d\\d+|D|W\\d+)?|' + keys.de.dbNone + ')[,\\s\n]*', - build: '(?[+-]?\\d+)[,\\s\n]*', + build: '(?[+-]?\\d+)[,\\s\n]*', armor: '(?' + keys.de.armorNone + '|\\d+)[,\\s\n]*', - mov: '(?\\d+)[,\\s\n]*', + mov: '(?\\d+)[,\\s\n]*', lck: '(?\\d+|-)[,\\s\n]*', attacksPerRound: '(? Date: Tue, 23 Nov 2021 02:07:02 +0000 Subject: [PATCH 326/726] Updated translations list --- .github/TRANSLATIONS.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index bcef4c7d..934df6dd 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,17 +2,17 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The **zh-TW** translation is currently up to date +The following translations are currently up to date **sv**, **zh-TW** The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | ja | pl | pt-BR | sv | -| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **2** | **4** | **4** | **4** | **4** | **4** | **2** | -| [CoC7.Copied](#coc7copied) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| Key | de | es | fr | ja | pl | pt-BR | +| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **2** | **4** | **4** | **4** | **4** | **4** | +| [CoC7.Copied](#coc7copied) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ##### CoC7.Copied From 6635b978fb9b4fa31f2355c3dd0e27b2f92279ea Mon Sep 17 00:00:00 2001 From: zeteticl Date: Thu, 25 Nov 2021 17:52:29 +0800 Subject: [PATCH 327/726] update --- lang/en.json | 2 ++ lang/zh-TW.json | 3 +++ module/menu.js | 2 +- module/utilities.js | 47 +++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/lang/en.json b/lang/en.json index 02c13449..dcb90487 100644 --- a/lang/en.json +++ b/lang/en.json @@ -662,6 +662,8 @@ "CoC7.WarnFastTargetWithWrongMOV": "Fast selected on a target with less than 8 MOV. (MOV: {mov})", "CoC7.WarnTooManyTarget": "Too many target selected. Keeping only last selected target", + "CoC7.allActor": "All Actor", + "CoC7.whoGoToDream": "Rest Target: ", "CoC7.startRest": "Start Rest", "CoC7.dreaming": "The Investigators wait dreaming", "CoC7.healthRecovered": "Recovered one Hit Point", diff --git a/lang/zh-TW.json b/lang/zh-TW.json index 320dca4b..c5a2e3e4 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -597,6 +597,9 @@ "CoC7.toggleXP": "獲得 成長標記", "CoC7.XPGainEnabled": "角色現在可以獲得成長標記", "CoC7.XPGainDisabled": "角色現在無法獲得成長標記", + + "CoC7.allActor": "所有角色", + "CoC7.whoGoToDream": "休息對象: ", "CoC7.startRest": "開始休息", "CoC7.dreaming": "調查員在夢境中等待", "CoC7.healthRecovered": "恢復 1 點生命值", diff --git a/module/menu.js b/module/menu.js index c7a671da..85ce1976 100644 --- a/module/menu.js +++ b/module/menu.js @@ -85,7 +85,7 @@ export class CoC7Menu { icon: 'fas fa-moon', name: 'startrest', title: 'CoC7.startRest', - onClick: async () => await CoC7Utilities.startRest() + onClick: async () => await CoC7Utilities.getTarget() } ] }) diff --git a/module/utilities.js b/module/utilities.js index 9097b9fa..b1f853d6 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -416,9 +416,52 @@ export class CoC7Utilities { CoC7Utilities.updateCharSheets() Hooks.call('toggleCharCreation', toggle) } + + static async getTarget() { + let users = game.users.filter(user => user.active); + let actors = game.actors; + let checkOptions = `\n + ` + let playerTokenIds = users.map(u => u.character?.id).filter(id => id !== undefined); + let selectedPlayerIds = canvas.tokens.controlled.map(token => { + return token.actor.id; + }); + + // Build checkbox list for all active players + actors.forEach(actor => { + let checked = (selectedPlayerIds.includes(actor.id) || playerTokenIds.includes(actor.id)) && 'checked'; + checkOptions += ` +
              + \n + + ` + }); + + new Dialog({ + title: `${game.i18n.localize('CoC7.dreaming')}`, + content: `${game.i18n.localize('CoC7.whoGoToDream')}: ${checkOptions}
              `, + buttons: { + whisper: { + label: `${game.i18n.localize('CoC7.startRest')}`, + callback: async (html) => { + let targets = []; + let all = false; + let users = html.find('[type="checkbox"]') + for (let user of users) { + if (user.name === "COCCheckAllPC" && user.checked) all = true; + if (user.checked || all) + targets.push(user.id); + } + await CoC7Utilities.startRest(targets)} + } + } + }).render(true); + +} - static async startRest () { - const actors = game.actors.filter(actor => actor.hasPlayerOwner) + static async startRest (targets) { + if(!targets.length)return; + const actors = game.actors.filter(actor => targets.includes(actor.id)) let chatContent = `${game.i18n.localize('CoC7.dreaming')}...
              ` for (const actor of actors) { if (['character', 'npc', 'creature'].includes(actor.type)) { From 7b72bcc22c7ec5f875ee2e2760ecf22f84704bfc Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Fri, 26 Nov 2021 07:39:13 +0100 Subject: [PATCH 328/726] Scroll Init (NW) --- module/items/chase/data.js | 74 ++++++++++++++++++++++++++++--------- module/items/chase/sheet.js | 27 +++++++++----- templates/items/chase.html | 4 +- 3 files changed, 77 insertions(+), 28 deletions(-) diff --git a/module/items/chase/data.js b/module/items/chase/data.js index f25bdc38..60184a87 100644 --- a/module/items/chase/data.js +++ b/module/items/chase/data.js @@ -43,11 +43,20 @@ export class CoC7Chase extends CoC7Item { }) } const particpant = new _participant(p) + // particpant.location = this.getParticipantLocation( particpant.uuid) // Recursivity pList.push(particpant) }) return pList } + get participantsObject (){ + const participants = this.participants + participants.forEach( p => { + p.location = this.getParticipantLocation( p.uuid) + }) + return participants + } + get activeParticipant () { return this.data.data.participants.find(p => p.active) } @@ -86,10 +95,20 @@ export class CoC7Chase extends CoC7Item { } getParticipantLocation (participantUuid) { - const location = this.data.data.locations?.list?.find(l => - l.participants?.includes(participantUuid) + if( !this.data.data.locations?.list?.length){ + return undefined + } + if( !this.started) return undefined + const locations = this.locations + + const location = locations.find(l =>{ + const lp = l.participants?.find(p => participantUuid == p.uuid) + return !!lp + } ) - if (location) return location + if (location) { + return location + } return undefined } @@ -106,6 +125,10 @@ export class CoC7Chase extends CoC7Item { if (participantData) return new _participant(participantData) return undefined } + + get nextActiveParticipant (){ + return this.participantsByInitiative.find( p => p.data.currentMovementActions > 0) + } async updateParticipants (list, { render = true } = {}) { const participantsData = this.cleanParticipantList(list) @@ -235,38 +258,49 @@ export class CoC7Chase extends CoC7Item { ) } + async activateNexParticpantTurn ( + { scrollToLocation = true, activateLocation = true, render = true, html = null } = {} + ) { + const activeParticipant = this.nextActiveParticipant + const options = { scrollToLocation: scrollToLocation, activateLocation: activateLocation, render: render, html: html} + if( !activeParticipant) return this.activateParticipant( null, options) + return( this.activateParticipant( activeParticipant.uuid, options)) + } + async activateParticipant ( participantUuid, - { scrollToLocation = true, activateLocation = true, render = true } = {} + { scrollToLocation = true, activateLocation = true, render = true, html = null } = {} ) { const dataUpdate = this.getActivateParticipantUpdateData(participantUuid, { scrollToLocation: scrollToLocation, - activeLocation: activateLocation + activeLocation: activateLocation, + html: html }) await this.update(dataUpdate, { render: render }) } getActivateParticipantUpdateData ( participantUuid, - { scrollToLocation = true, activateLocation = true } = {} + { scrollToLocation = true, activateLocation = true, html = null } = {} ) { + const pUuid = participantUuid?participantUuid:this.participantsByInitiative[0].uuid const participantsDataUpdate = {} const participants = this.data.data.participants ? duplicate(this.data.data.participants) : [] participants.forEach(p => { delete p.active - if (participantUuid == p.uuid) p.active = true + if (pUuid == p.uuid) p.active = true }) participantsDataUpdate['data.participants'] = participants - const participantLocation = this.getParticipantLocation(participantUuid) + const participantLocation = this.getParticipantLocation(pUuid) let locationsDataUpdate = null if (participantLocation) { if (activateLocation) { locationsDataUpdate = this.getActivateLocationUpdateData( participantLocation.uuid, - { scrollToLocation: scrollToLocation } + { scrollToLocation: scrollToLocation, html: html } ) } else if (scrollToLocation) { if (scrollToLocation) { @@ -276,7 +310,7 @@ export class CoC7Chase extends CoC7Item { ] = this.chaseTrackCurrentScrollPosition locationsDataUpdate[ 'data.scroll.chaseTrack.to' - ] = this.getChaseTrackLocationScrollPosition(participantLocation.uuid) + ] = this.getChaseTrackLocationScrollPosition(participantLocation.uuid, {html:html}) } } } @@ -447,7 +481,7 @@ export class CoC7Chase extends CoC7Item { ? this.preys : this.preys?.filter(p => !p.data.escaped) //Get chasers - const chasers = this.chasers + const chasers = this.chasers // Recursivity !! with getParticipantLocation and get participants //If no prey or no chasser // if (0 == chasers.length) { @@ -565,7 +599,7 @@ export class CoC7Chase extends CoC7Item { getActivateLocationUpdateData ( locationUuid, - { scrollToLocation = true } = {} + { scrollToLocation = true, html = null } = {} ) { const updateData = {} const locations = this.data.data.locations.list @@ -583,7 +617,7 @@ export class CoC7Chase extends CoC7Item { ] = this.chaseTrackCurrentScrollPosition updateData[ 'data.scroll.chaseTrack.to' - ] = this.getChaseTrackLocationScrollPosition(locationUuid) + ] = this.getChaseTrackLocationScrollPosition(locationUuid, { html: html}) // await this.setchaseTrackScroll({ // from: this.chaseTrackCurrentScrollPosition, // to: this.chaseTrackActiveLocationScrollPosition @@ -855,10 +889,10 @@ export class CoC7Chase extends CoC7Item { return this.getChaseTrackLocationScrollPosition(this.activeLocation.uuid) } - getChaseTrackLocationScrollPosition (locationUuid) { - const html = this.sheet?.element - if (!html) return -1 - const chaseTrack = html[0].querySelector('.chase-track') + getChaseTrackLocationScrollPosition (locationUuid, {html = null}) { + const htmlElement = html?html:this.sheet?.element + if (!htmlElement) return -1 + const chaseTrack = htmlElement[0].querySelector('.chase-track') if (!chaseTrack) return -1 const activeLocationElement = chaseTrack.querySelector( `.chase-location[data-uuid="${locationUuid}"]` @@ -896,6 +930,12 @@ export class CoC7Chase extends CoC7Item { } async start () { + const remString = $(':root').css('font-size') + const remSize = Number(remString.replace('px', '')) + const pCount = this.data.data.participants.length + const width = (pCount * 11.2 + 3) * remSize + this.sheet._tabs[0].active = 'setup' + this.sheet.position.width = width return this.setFlag('CoC7', 'started', true) } diff --git a/module/items/chase/sheet.js b/module/items/chase/sheet.js index b91869da..de45bf3c 100644 --- a/module/items/chase/sheet.js +++ b/module/items/chase/sheet.js @@ -66,7 +66,7 @@ export class CoC7ChaseSheet extends ItemSheet { data.data = itemData.data // MODIF: 0.8.x data.data /*****************/ - data.participants = this.item.participants + data.participants = this.item.participantsObject data.participantsByInitiative = this.item.participantsByInitiative data.preys = this.item.preys data.chasers = this.item.chasers @@ -387,7 +387,7 @@ export class CoC7ChaseSheet extends ItemSheet { super._updateObject(event, formData) } - static /**async */ setScroll (app, html, data) { + static async setScroll (app, html, data) { const initialOpening = html[0].classList.contains('window-app') const chaseTrack = html[0].querySelector('.chase-track') if (!chaseTrack) return @@ -398,12 +398,22 @@ export class CoC7ChaseSheet extends ItemSheet { if (undefined == end) end = -1 if (initialOpening) { - if (end > 0) { - start = 0 - } else if (start > 0) { - end = start - start = 0 + if( app.item.started){ + const remString = $(':root').css('font-size') + const remSize = Number(remString.replace('px', '')) + const pCount = data.participants.length + const width = (pCount * 11.2 + 3) * remSize + app._tabs[0].active = 'setup' + app.position.width = width + // html.css('width', `${width}px`) } + return await app.item.activateNexParticpantTurn({html: html}) //html is not rendered, element haze size = 0 + // if (end > 0) { + // start = 0 + // } else if (start > 0) { + // end = start + // start = 0 + // } } if (start && -1 != start) { @@ -574,6 +584,7 @@ export class CoC7ChaseSheet extends ItemSheet { async _onParticipantControlClicked (event) { event.preventDefault() const target = event.currentTarget + if( target.classList.contains('inactive')) return if (target.classList.contains('dropdown')) return event.stopPropagation() @@ -587,10 +598,8 @@ export class CoC7ChaseSheet extends ItemSheet { case 'increaseActions': return await this._onChangeMovementActions(1, event) case 'moveBackward': - // ui.notifications.info( `SHEET : Jquery root: ${$(':root').find('#item-VNhtqxA2wJJnWStT .chase-track').scrollLeft()}`) return await this.item.moveParticipant(participantUuid, -1) case 'moveForward': - // ui.notifications.info( `SHEET : Jquery root: ${$(':root').find('#item-VNhtqxA2wJJnWStT .chase-track').scrollLeft()}`) return await this.item.moveParticipant(participantUuid, 1) case 'activateParticipant': return await this.item.activateParticipant(participantUuid) diff --git a/templates/items/chase.html b/templates/items/chase.html index eeafa907..03d077e4 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -130,9 +130,9 @@ {{#unless p.hasNoMvtActions}}
              - + - + {{#if p.canAssist}} From c7838ecbf315c5579e04653b5bdfc37d49664763 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Thu, 2 Dec 2021 00:15:30 +0100 Subject: [PATCH 330/726] card innit --- module/actors/sheets/base.js | 8 ----- module/chat/cards/chase-obstacle.js | 27 +++++++++++---- module/coc7.js | 9 ++--- module/common/chatcardlib/src/chatcardlib.js | 35 ++++++++++++-------- module/items/chase/data.js | 6 +++- 5 files changed, 52 insertions(+), 33 deletions(-) diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index e52c1683..46c73d9b 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -15,7 +15,6 @@ import { OpposedCheckCard } from '../../chat/cards/opposed-roll.js' import { CombinedCheckCard } from '../../chat/cards/combined-roll.js' import { DamageCard } from '../../chat/cards/damage.js' import { CoC7LinkCreationDialog } from '../../apps/link-creation-dialog.js' -import { testCard } from '../../chat/cards/test.js' /** * Extend the basic ActorSheet with some very simple modifications @@ -882,8 +881,6 @@ export class CoC7ActorSheet extends ActorSheet { .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) html.find('.test-trigger').click(async event => { - const test = new testCard({}) - test.toMessage() // await OpposedCheckCard.dispatch({ // type: OpposedCheckCard.defaultConfig.type, // combat: false, @@ -893,7 +890,6 @@ export class CoC7ActorSheet extends ActorSheet { // actor: this.actor.actorKey // } // }) - // await OpposedCheckCard.dispatch({ // type: OpposedCheckCard.defaultConfig.type, // combat: false, @@ -904,23 +900,19 @@ export class CoC7ActorSheet extends ActorSheet { // } // }) // const val = getProperty( this.actor, 'data.data.attribs.san.value'); - // this.actor.enterBoutOfMadness( true, 10); - // const roll = new CoC7Check(); // roll.actor = this.actorKey; // roll.attribute = 'san'; // roll.difficulty = this.options.sanDifficulty || CoC7Check.difficultyLevel.regular; // roll.diceModifier = this.options.sanModifier || 0; // await roll._perform(); - // for (const effect of this.actor.effects) { // await effect.sheet.render(true); // // effect.delete(); // } // for (const e of this.actor.effects) { e.delete() } // await setProperty( this.actor, 'data.data.encounteredCreatures', []); - // await this.actor.update( {['data.encounteredCreatures'] : []}); // if (event.shiftKey) ui.notifications.info('Shift cliecked') // SanCheckCard.create( this.actor.actorKey, {min:'1D10',max:'1D12'}, {fastForward:event.shiftKey}); diff --git a/module/chat/cards/chase-obstacle.js b/module/chat/cards/chase-obstacle.js index 26cdb6fe..55aeaf44 100644 --- a/module/chat/cards/chase-obstacle.js +++ b/module/chat/cards/chase-obstacle.js @@ -1,10 +1,25 @@ -import { EnhancedChatCard } from "../../common/chatcardlib/src/chatcardlib"; +import { EnhancedChatCard } from '../../common/chatcardlib/src/chatcardlib.js' export class ChaseObstacleCard extends EnhancedChatCard { + /** @override */ + static get defaultOptions () { + return mergeObject(super.defaultOptions, { + template: 'systems/CoC7/templates/chat/cards/test.html' + }) + } - static get defaultOptions () { - return mergeObject(super.defaultOptions, { - template: 'systems/CoC7/templates/chat/cards/test.html' - }) - } + /** @override */ + async getData () { + const data = await super.getData() + data.mySelectOptions = { + 0: 'option 1', + 1: 'option 2' + } + + return data + } + + // activateListeners (html) { + // super.activateListeners(html) + // } } diff --git a/module/coc7.js b/module/coc7.js index f1b13674..5acc0539 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -22,8 +22,11 @@ import '../styles/system/index.less' import { CoC7ChaseSheet } from './items/chase/sheet.js' import { CoC7Socket, CoC7ChatCards } from './hooks/socket.js' import { DropActorSheetData } from './hooks/drop-actor-sheet-data.js' -import { testCard } from './chat/cards/test.js' + +// Card init import { initECC } from './common/chatcardlib/src/chatcardlib.js' +import { ChaseObstacleCard } from './chat/cards/chase-obstacle.js' +// import { testCard } from './chat/cards/test.js' Hooks.on('renderSettingsConfig', (app, html, options) => { const systemTab = $(app.form).find('.tab[data-tab=system]') @@ -141,10 +144,9 @@ Hooks.once('init', async function () { } } Combat.prototype.rollInitiative = rollInitiative - }) -initECC(testCard) //TO BE REMOVED FOR PROD +initECC(ChaseObstacleCard) Hooks.on('renderCombatTracker', (app, html, data) => CoC7Combat.renderCombatTracker(app, html, data) @@ -156,7 +158,6 @@ CoC7Hooks.listen() Hooks.once('socketlib.ready', CoC7Socket) Hooks.once('setup', function () { - // Localize CONFIG objects once up-front const toLocalize = [ 'spellProperties', diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 02453929..1aff7cce 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -55,13 +55,14 @@ class EnhancedChatCardLib { static injectCSS () { let style = $('head').find('style') - if( !style?.length){ - $('head').append( $('')) + if (!style?.length) { + $('head').append($('')) style = $('head').find('style') } style.append( `.ecc-restricted {color: red} - .ecc-restricted:hover {cursor: not-allowed}`) + .ecc-restricted:hover {cursor: not-allowed}` + ) return } @@ -122,6 +123,10 @@ export class EnhancedChatCard { return mergeObject(this.constructor.defaultOptions, this._options) } + set options (x) { + this._options = x + } + get template () { return this.options.template } @@ -140,7 +145,7 @@ export class EnhancedChatCard { return game.user } - getData () { + async getData () { return { card: this, flags: this.flags, @@ -169,7 +174,8 @@ export class EnhancedChatCard { // this.registerECCClass() //Publish by current user by default unless options.GMchatCard - const html = await renderTemplate(this.template, this.getData()) + const data = await this.getData() + const html = await renderTemplate(this.template, data) const htmlCardElement = $(html)[0] if (this.options.attachObject) htmlCardElement.dataset.object = escape(this.objectDataString) @@ -206,7 +212,8 @@ export class EnhancedChatCard { if (!this.messageId) { this.toMessage() } else { - const html = await renderTemplate(this.template, this.getData()) + const data = await this.getData() + const html = await renderTemplate(this.template, data) const htmlCardElement = $.parseHTML(html)[0] // Attach the sanCheckCard object to the message. @@ -290,14 +297,14 @@ export class EnhancedChatCard { async setPermission (element) { if (!element.dataset.eccPermissions) return const canYouMod = await this.hasPerm(element.dataset.eccPermissions) - if (!canYouMod){ + if (!canYouMod) { element.classList.add('ecc-restricted') - if( $(element).is('input')){ - if( 'range' == element.type) $(element).attr('disabled', true) - else $(element).attr('readonly', true) + if ($(element).is('input')) { + if ('range' == element.type) $(element).attr('disabled', true) + else $(element).attr('readonly', true) + } + if ($(element).is('select')) $(element).attr('disabled', true) } - if( $(element).is('select')) $(element).attr('disabled', true) - } } /** @@ -426,8 +433,8 @@ export class EnhancedChatCard { /** * Retrieve the form from the card and update the data structure - * @param {HTMLElement} card - * @returns + * @param {HTMLElement} card + * @returns */ _update (card) { const forms = card.querySelectorAll('form') diff --git a/module/items/chase/data.js b/module/items/chase/data.js index 507bc8e5..86ecfa83 100644 --- a/module/items/chase/data.js +++ b/module/items/chase/data.js @@ -1,4 +1,5 @@ import { CoCActor } from '../../actors/actor.js' +import { ChaseObstacleCard } from '../../chat/cards/chase-obstacle.js' import { chatHelper } from '../../chat/helper.js' import { CoC7Check } from '../../check.js' import { CoC7Item } from '../item.js' @@ -348,7 +349,10 @@ export class CoC7Chase extends CoC7Item { async activeParticipantObstacleCheck ( locationUuid, { moveParticipant = true } = {} - ) {} + ) { + const card = new ChaseObstacleCard() + card.toMessage() + } /** @override */ async updateRoll (rollString) { From 6bed460785edb0ac7f2ba197ab04480c6df48774 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Tue, 7 Dec 2021 00:28:33 +0100 Subject: [PATCH 331/726] cardlib integration --- module/chat/cards/chase-obstacle.js | 2 + module/common/chatcardlib/src/chatcardlib.js | 18 ++++- module/items/chase/data.js | 77 ++++++++++++++------ 3 files changed, 69 insertions(+), 28 deletions(-) diff --git a/module/chat/cards/chase-obstacle.js b/module/chat/cards/chase-obstacle.js index 55aeaf44..6aa5d80f 100644 --- a/module/chat/cards/chase-obstacle.js +++ b/module/chat/cards/chase-obstacle.js @@ -15,6 +15,8 @@ export class ChaseObstacleCard extends EnhancedChatCard { 0: 'option 1', 1: 'option 2' } + const chaseItem = await fromUuid(this._data.chaseUuid) + await chaseItem.activateLocation('szb0qfp1oehux6be') return data } diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 1aff7cce..456b98b8 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -146,6 +146,7 @@ export class EnhancedChatCard { } async getData () { + await this.assignObject() return { card: this, flags: this.flags, @@ -187,8 +188,11 @@ export class EnhancedChatCard { ? ChatMessage.getSpeaker(this.options.speaker) : {} + // const userId = this.options.userId ? this.options.userId : game.user.id + const chatData = foundry.utils.mergeObject( { + // user: userId, user: game.user.id, speaker: speaker, flavor: game.i18n.localize(this.options.title), @@ -208,7 +212,8 @@ export class EnhancedChatCard { } async updateChatCard (options = {}) { - if (options.compute) this.compute() + //TODO the whole function has to be executed by GM if options.GMchatCard + if (options.compute) await this.compute() if (!this.messageId) { this.toMessage() } else { @@ -371,7 +376,6 @@ export class EnhancedChatCard { if (!htmlCardElement) return const card = await EnhancedChatCard.fromHTMLCardElement(htmlCardElement) - card.assignObject() card.activateListeners(html) } @@ -383,7 +387,13 @@ export class EnhancedChatCard { * Override to reassign object from the data structure. * @returns */ - assignObject () {} + async assignObject () {} + + /** + * Override to update object after data change. + * @returns + */ + async compute () {} /** * @@ -548,7 +558,7 @@ export class EnhancedChatCard { const card = new cardClass(data) if (messageId) card.messageId = messageId - await card.assignObject() + // await card.assignObject() return card } diff --git a/module/items/chase/data.js b/module/items/chase/data.js index 86ecfa83..571b536a 100644 --- a/module/items/chase/data.js +++ b/module/items/chase/data.js @@ -116,7 +116,7 @@ export class CoC7Chase extends CoC7Item { const participant = this.data.data.participants.find( p => participantUuid == p.uuid ) - if (participant) return duplicate(participant) //TODO : check if we need to duplicate + if (participant) return foundry.utils.duplicate(participant) //TODO : check if we need to duplicate return undefined } @@ -142,7 +142,7 @@ export class CoC7Chase extends CoC7Item { cleanParticipantList (list) { const participantsData = this.data.data.participants - ? duplicate(this.data.data.participants) + ? foundry.utils.duplicate(this.data.data.participants) : [] list.forEach(p => { let data @@ -167,7 +167,9 @@ export class CoC7Chase extends CoC7Item { ) { const assistant = this.getParticipant(assistantUuid) const beneficiary = this.getParticipant(beneficiaryUuid) - const participantsData = duplicate(this.data.data.participants) + const participantsData = foundry.utils.duplicate( + this.data.data.participants + ) const assistantIndex = participantsData.findIndex( p => assistantUuid == p.uuid ) @@ -195,11 +197,13 @@ export class CoC7Chase extends CoC7Item { return undefined } assistant.alterMovementActions(-1) - participantsData[assistantIndex] = duplicate(assistant.data) + participantsData[assistantIndex] = foundry.utils.duplicate(assistant.data) } beneficiary.addBonusDice() - participantsData[beneficiaryIndex] = duplicate(beneficiary.data) + participantsData[beneficiaryIndex] = foundry.utils.duplicate( + beneficiary.data + ) await this.update( { 'data.participants': participantsData }, { render: render } @@ -214,13 +218,17 @@ export class CoC7Chase extends CoC7Item { return undefined } - const participantsData = duplicate(this.data.data.participants) + const participantsData = foundry.utils.duplicate( + this.data.data.participants + ) const participantIndex = participantsData.findIndex( p => participantUuid == p.uuid ) if (participant.bonusDice >= diceNumber) participant.removeBonusDice() else participant.addBonusDice() - participantsData[participantIndex] = duplicate(participant.data) + participantsData[participantIndex] = foundry.utils.duplicate( + participant.data + ) await this.update( { 'data.participants': participantsData }, { render: render } @@ -238,7 +246,9 @@ export class CoC7Chase extends CoC7Item { return undefined } - const participantsData = duplicate(this.data.data.participants) + const participantsData = foundry.utils.duplicate( + this.data.data.participants + ) const participantIndex = participantsData.findIndex( p => participantUuid == p.uuid ) @@ -256,7 +266,9 @@ export class CoC7Chase extends CoC7Item { participant.alterMovementActions(-1) } participant.addBonusDice() - participantsData[participantIndex] = duplicate(participant.data) + participantsData[participantIndex] = foundry.utils.duplicate( + participant.data + ) await this.update( { 'data.participants': participantsData }, { render: render } @@ -306,7 +318,7 @@ export class CoC7Chase extends CoC7Item { : this.participantsByInitiative[0].uuid const participantsDataUpdate = {} const participants = this.data.data.participants - ? duplicate(this.data.data.participants) + ? foundry.utils.duplicate(this.data.data.participants) : [] participants.forEach(p => { delete p.active @@ -350,7 +362,11 @@ export class CoC7Chase extends CoC7Item { locationUuid, { moveParticipant = true } = {} ) { + const location = this.getLocationData(locationUuid) const card = new ChaseObstacleCard() + + // card.initialize( location?.obstacleDetails) + card.initialize({ chaseUuid: this.uuid }) card.toMessage() } @@ -359,7 +375,7 @@ export class CoC7Chase extends CoC7Item { if (game.user.isGM) { const roll = CoC7Check.fromRollString(rollString) const participants = this.data.data.participants - ? duplicate(this.data.data.participants) + ? foundry.utils.duplicate(this.data.data.participants) : [] const index = participants.findIndex(p => p.rollUuid === roll.uuid) if (index >= 0) { @@ -381,13 +397,20 @@ export class CoC7Chase extends CoC7Item { get locations () { const locations = this.started ? this.data.data.locations.list - ? duplicate(this.data.data.locations.list) + ? foundry.utils.duplicate(this.data.data.locations.list) : [] : this.initTrack this.processLocations(locations) return locations } + getLocationData (locationUuid, { duplicateData = true } = {}) { + const locations = duplicate + ? foundry.utils.duplicate(this.locations) + : this.locations + return locations.find(l => locationUuid == l.uuid) + } + processLocations (locations) { if (!locations?.length) return locations[0].first = true @@ -473,7 +496,7 @@ export class CoC7Chase extends CoC7Item { } } - const chaseLocations = duplicate(this.data.data.locations) + const chaseLocations = foundry.utils.duplicate(this.data.data.locations) for (let index = 0; index < locationsLength; index++) { let location = {} const participants = [] @@ -481,7 +504,9 @@ export class CoC7Chase extends CoC7Item { index >= locationsIndexStart && index - locationsIndexStart < chaseLocations.list.length ) { - location = duplicate(chaseLocations.list[index - locationsIndexStart]) + location = foundry.utils.duplicate( + chaseLocations.list[index - locationsIndexStart] + ) location.init = false location.participants?.forEach(p => { if (null != p) participants.push(p) @@ -592,7 +617,7 @@ export class CoC7Chase extends CoC7Item { } cleanLocationsList (list) { - const updatedList = duplicate(list) + const updatedList = foundry.utils.duplicate(list) const partipantsUuidArray = this.data.data.participants.map(p => p.uuid) updatedList.forEach(l => { @@ -634,7 +659,7 @@ export class CoC7Chase extends CoC7Item { ) { const updateData = {} const locations = this.data.data.locations.list - ? duplicate(this.data.data.locations.list) + ? foundry.utils.duplicate(this.data.data.locations.list) : [] locations.forEach(l => { delete l.active @@ -745,7 +770,7 @@ export class CoC7Chase extends CoC7Item { if (locations[i].active) delete locations[i].active } const participantsData = this.data.data.participants - ? duplicate(this.data.data.participants) + ? foundry.utils.duplicate(this.data.data.participants) : [] for (let i = 0; i < participantsData.length; i++) { if (participantsData[i].active) delete participantsData[i].active @@ -770,7 +795,7 @@ export class CoC7Chase extends CoC7Item { // const selector = `#item-${this.id} .chase-track` // ui.notifications.info( `moveParticipant : Jquery root: ${$(':root').find(selector).scrollLeft()}`) let modified = false - const locations = duplicate(this.data.data.locations.list) + const locations = foundry.utils.duplicate(this.data.data.locations.list) const originIndex = locations.findIndex(l => l.participants?.includes(participantUuid) ) @@ -785,7 +810,9 @@ export class CoC7Chase extends CoC7Item { const totalMove = destinationIndex - originIndex const participant = this.getParticipant(participantUuid) - const participantsData = duplicate(this.data.data.participants) + const participantsData = foundry.utils.duplicate( + this.data.data.participants + ) const participantIndex = participantsData.findIndex( p => participantUuid == p.uuid ) @@ -804,7 +831,9 @@ export class CoC7Chase extends CoC7Item { return undefined } participant.alterMovementActions(0 - Math.abs(totalMove)) - participantsData[participantIndex] = duplicate(participant.data) + participantsData[participantIndex] = foundry.utils.duplicate( + participant.data + ) await this.update( { 'data.participants': participantsData }, { render: false } @@ -847,7 +876,7 @@ export class CoC7Chase extends CoC7Item { locationUuid, { scrollToLocation = true, activateLocation = true, render = true } = {} ) { - const locations = duplicate(this.data.data.locations.list) + const locations = foundry.utils.duplicate(this.data.data.locations.list) //Find destination location. const destination = locations.find(l => locationUuid == l.uuid) @@ -898,7 +927,7 @@ export class CoC7Chase extends CoC7Item { } get chaseTrackCurrentScrollPosition () { - const html = this.sheet?.element + const html = this.sheet?._element if (!html) return -1 const chaseTrack = html[0].querySelector('.chase-track') if (!chaseTrack) return -1 @@ -921,8 +950,8 @@ export class CoC7Chase extends CoC7Item { } getChaseTrackLocationScrollPosition (locationUuid, { html = null }) { - const htmlElement = html ? html : this.sheet?.element - if (!htmlElement) return -1 + const htmlElement = html ? html : this.sheet?._element + if (!htmlElement || !htmlElement[0]) return -1 const chaseTrack = htmlElement[0].querySelector('.chase-track') if (!chaseTrack) return -1 const activeLocationElement = chaseTrack.querySelector( From e545e553307ae6b152f8092755947019c42985b7 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 9 Dec 2021 05:11:14 +0000 Subject: [PATCH 332/726] Updated translations list --- .github/TRANSLATIONS.md | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 934df6dd..0508d370 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,17 +2,19 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **sv**, **zh-TW** +The **zh-TW** translation is currently up to date The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | ja | pl | pt-BR | -| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **2** | **4** | **4** | **4** | **4** | **4** | -| [CoC7.Copied](#coc7copied) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| Key | de | es | fr | ja | pl | pt-BR | sv | +| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **4** | **6** | **6** | **6** | **6** | **6** | **2** | +| [CoC7.Copied](#coc7copied) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.allActor](#coc7allactor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.whoGoToDream](#coc7whogotodream) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ##### CoC7.Copied @@ -26,6 +28,14 @@ The following translations have been abandoned **cn**, **cs**, [are you able to `"CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would you like to take the remaining {convertedHitPoints} from your Hit Points? You will take {convertedHitPoints} damage if you proceed.",` +##### CoC7.allActor + +`"CoC7.allActor": "All Actor",` + ##### CoC7.getTheExample `"CoC7.getTheExample": "Copy Example",` + +##### CoC7.whoGoToDream + +`"CoC7.whoGoToDream": "Rest Target: ",` From 2d3065cf5731e57f956a3efc520424807eb0b397 Mon Sep 17 00:00:00 2001 From: castanhocorreia Date: Thu, 9 Dec 2021 05:11:15 +0000 Subject: [PATCH 333/726] [create-pull-request] automated change --- .github/ABANDONED.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index 894d6429..82a5f4b7 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -233,6 +233,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.toggleXP": "XP gain", "CoC7.XPGainEnabled": "Character can gain XP", "CoC7.XPGainDisabled": "Character cannot gain XP", +"CoC7.allActor": "All Actor", +"CoC7.whoGoToDream": "Rest Target: ", "CoC7.startRest": "Start Rest", "CoC7.dreaming": "The Investigators wait dreaming", "CoC7.healthRecovered": "Recovered one Hit Point", @@ -468,6 +470,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.UnknownLanguage": "{actor} do not know the language in which this book is written.", "CoC7.Unreadable": "Unreadable", "CoC7.EmptyCharacterSkillList": "Add a setup, occupation, or skill by dropping it here.", +"CoC7.allActor": "All Actor", +"CoC7.whoGoToDream": "Rest Target: ", "CoC7.MessageTitleSelectSingleUserForTarget": "Which user can respond to this attack", "CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.", "CoC7.MessageBoutOfMadnessTableNotFound": "The result from the madness table was not found, please check all your roll tables are created", From caa70c62f73bd653507f0f7843f534584e462bc9 Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Thu, 9 Dec 2021 02:19:07 -0300 Subject: [PATCH 334/726] Clarify localization keys for rest changes --- lang/en.json | 4 ++-- lang/zh-TW.json | 4 ++-- module/utilities.js | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lang/en.json b/lang/en.json index dcb90487..59880138 100644 --- a/lang/en.json +++ b/lang/en.json @@ -662,8 +662,8 @@ "CoC7.WarnFastTargetWithWrongMOV": "Fast selected on a target with less than 8 MOV. (MOV: {mov})", "CoC7.WarnTooManyTarget": "Too many target selected. Keeping only last selected target", - "CoC7.allActor": "All Actor", - "CoC7.whoGoToDream": "Rest Target: ", + "CoC7.allActors": "All Actors", + "CoC7.restTargets": "Rest Targets", "CoC7.startRest": "Start Rest", "CoC7.dreaming": "The Investigators wait dreaming", "CoC7.healthRecovered": "Recovered one Hit Point", diff --git a/lang/zh-TW.json b/lang/zh-TW.json index c5a2e3e4..9fbedce9 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -598,8 +598,8 @@ "CoC7.XPGainEnabled": "角色現在可以獲得成長標記", "CoC7.XPGainDisabled": "角色現在無法獲得成長標記", - "CoC7.allActor": "所有角色", - "CoC7.whoGoToDream": "休息對象: ", + "CoC7.allActors": "所有角色", + "CoC7.restTargets": "休息對象: ", "CoC7.startRest": "開始休息", "CoC7.dreaming": "調查員在夢境中等待", "CoC7.healthRecovered": "恢復 1 點生命值", diff --git a/module/utilities.js b/module/utilities.js index b1f853d6..0820a7a8 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -416,17 +416,17 @@ export class CoC7Utilities { CoC7Utilities.updateCharSheets() Hooks.call('toggleCharCreation', toggle) } - + static async getTarget() { let users = game.users.filter(user => user.active); let actors = game.actors; let checkOptions = `\n - ` + ` let playerTokenIds = users.map(u => u.character?.id).filter(id => id !== undefined); let selectedPlayerIds = canvas.tokens.controlled.map(token => { return token.actor.id; }); - + // Build checkbox list for all active players actors.forEach(actor => { let checked = (selectedPlayerIds.includes(actor.id) || playerTokenIds.includes(actor.id)) && 'checked'; @@ -436,10 +436,10 @@ export class CoC7Utilities { ` }); - + new Dialog({ title: `${game.i18n.localize('CoC7.dreaming')}`, - content: `${game.i18n.localize('CoC7.whoGoToDream')}: ${checkOptions}
              `, + content: `${game.i18n.localize('CoC7.restTargets')}: ${checkOptions}
              `, buttons: { whisper: { label: `${game.i18n.localize('CoC7.startRest')}`, From 423e00c4f8168ed0a897ca49c238d52aa1792fbb Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 9 Dec 2021 05:22:19 +0000 Subject: [PATCH 335/726] Updated translations list --- .github/TRANSLATIONS.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 0508d370..9b9593c9 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -12,9 +12,9 @@ The following translations have been abandoned **cn**, **cs**, [are you able to | [CoC7.Copied](#coc7copied) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | | [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | | [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.allActor](#coc7allactor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.getTheExample](#coc7gettheexample) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.whoGoToDream](#coc7whogotodream) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ##### CoC7.Copied @@ -28,14 +28,14 @@ The following translations have been abandoned **cn**, **cs**, [are you able to `"CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would you like to take the remaining {convertedHitPoints} from your Hit Points? You will take {convertedHitPoints} damage if you proceed.",` -##### CoC7.allActor +##### CoC7.allActors -`"CoC7.allActor": "All Actor",` +`"CoC7.allActors": "All Actors",` ##### CoC7.getTheExample `"CoC7.getTheExample": "Copy Example",` -##### CoC7.whoGoToDream +##### CoC7.restTargets -`"CoC7.whoGoToDream": "Rest Target: ",` +`"CoC7.restTargets": "Rest Targets",` From 5f6f89ea21b2f202e6eeb3c70f82a8e0f93f837e Mon Sep 17 00:00:00 2001 From: castanhocorreia Date: Thu, 9 Dec 2021 05:22:20 +0000 Subject: [PATCH 336/726] [create-pull-request] automated change --- .github/ABANDONED.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index 82a5f4b7..d6f26d18 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -233,8 +233,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.toggleXP": "XP gain", "CoC7.XPGainEnabled": "Character can gain XP", "CoC7.XPGainDisabled": "Character cannot gain XP", -"CoC7.allActor": "All Actor", -"CoC7.whoGoToDream": "Rest Target: ", +"CoC7.allActors": "All Actors", +"CoC7.restTargets": "Rest Targets", "CoC7.startRest": "Start Rest", "CoC7.dreaming": "The Investigators wait dreaming", "CoC7.healthRecovered": "Recovered one Hit Point", @@ -470,8 +470,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.UnknownLanguage": "{actor} do not know the language in which this book is written.", "CoC7.Unreadable": "Unreadable", "CoC7.EmptyCharacterSkillList": "Add a setup, occupation, or skill by dropping it here.", -"CoC7.allActor": "All Actor", -"CoC7.whoGoToDream": "Rest Target: ", +"CoC7.allActors": "All Actors", +"CoC7.restTargets": "Rest Targets", "CoC7.MessageTitleSelectSingleUserForTarget": "Which user can respond to this attack", "CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.", "CoC7.MessageBoutOfMadnessTableNotFound": "The result from the madness table was not found, please check all your roll tables are created", From b13b40c5d4927960cd24d9ba6ccf1f57231d28a3 Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Thu, 9 Dec 2021 02:27:02 -0300 Subject: [PATCH 337/726] Update pt-BR.json --- lang/pt-BR.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lang/pt-BR.json b/lang/pt-BR.json index bcaef976..e7b71e79 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -131,6 +131,7 @@ "CoC7.MagicPointsCost": "Custo em Magia", "CoC7.OtherCosts": "Outros Custos", "CoC7.CastingSpell": "Conjurando {spell}.", + "CoC7.NotEnoughMagicPoints": "{spell} custa {originalMagicPoints} Pontos de Magia, mas você tem apenas {actorMagicPoints}. Gostaria de retirar os restantes {convertedHitPoints} dos seus Pontos de Vida? Você irá levar {convertedHitPoints} de dano se proceder.", "CoC7.CopyToClipboard": "Copiar para Área de Transferência", "CoC7.WhisperToSelection": "Sussurrar aos Tokens Selecionados", @@ -672,6 +673,8 @@ "CoC7.magicPointsRecovered": "Pontos de Magia recuperados", "CoC7.hasCriticalWounds": "Incapaz de recuperar Pontos de Vida por conta de Ferimentos Graves", "CoC7.quickHealer": "Cura Rápida", + "CoC7.allActors": "Todos Atores", + "CoC7.restTargets": "Alvos do Descanso", "CoC7.ErrorNoDodgeSkill": "Ator não tem a Perícia Esquivar", "CoC7.ErrorNotEnoughLuck": "{actor} não teve sorte suficiente para obter sucesso no teste", @@ -710,6 +713,7 @@ "CoC7.English": "Inglês", "CoC7.Spanish": "Espanhol", "CoC7.French": "Francês", + "CoC7.German": "Alemão", "CoC7.TraditionalChinese": "Chinês Tradicional", "CoC7.SelectSourceLanguage": "Selecione o idioma de fonte.", "CoC7.ImportedCharactersFolder": "Personagens importados", @@ -872,5 +876,7 @@ "SETTINGS.CheckElevation": "Incluir elevação em distância.", "SETTINGS.CheckElevationHint": "Usar cálculos de elevação em combates à distância.", "SETTINGS.showIconsOnly": "Na versão resumida da ficha, mostra apenas os ícones das perícias.", - "CoC7.toolTipDelay": "Atraso em milissegundos antes das dicas aparecerem, 0 para nunca." + "CoC7.toolTipDelay": "Atraso em milissegundos antes das dicas aparecerem, 0 para nunca.", + "CoC7.Copied": "Texto de exemplo copiado para a área de transferência.", + "CoC7.getTheExample": "Copy Example" } From 48fa6f124e5fbe808d8b73cbfb8f0acc63f5048f Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 9 Dec 2021 05:29:09 +0000 Subject: [PATCH 338/726] Updated translations list --- .github/TRANSLATIONS.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 9b9593c9..6553fc21 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,19 +2,19 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The **zh-TW** translation is currently up to date +The following translations are currently up to date **pt-BR**, **zh-TW** The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | ja | pl | pt-BR | sv | -| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **4** | **6** | **6** | **6** | **6** | **6** | **2** | -| [CoC7.Copied](#coc7copied) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.allActors](#coc7allactors) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| Key | de | es | fr | ja | pl | sv | +| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **4** | **6** | **6** | **6** | **6** | **2** | +| [CoC7.Copied](#coc7copied) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.allActors](#coc7allactors) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ##### CoC7.Copied From 561a1f849e73e06ac90f17d2e292dc3dfc1b8c55 Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Thu, 9 Dec 2021 02:39:41 -0300 Subject: [PATCH 339/726] Update changelog for 0.7.2 --- .github/CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 460adaf1..98c921d2 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,3 +1,20 @@ +## Version 0.7.2: + +When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. + +- Add filters to Item compendiums +- Fix Keeper notes incongruency and Spell inside Book rendering +- Fix luck recovery rules for 1920 and Pulp +- Fix negative MP bug +- Now Actor Importer support German, thanks to @brockhaus +- Now it is possible to convert remaining MP into HP (KR, pg. 176) +- Now it is possible to copy Actor Importer example, thanks to @zeteticl +- Now it is possible to select specific Actors for Rest feature, thanks to @zeteticl +- Update to German localization, thanks to @brockhaus +- Update to Portuguese localization +- Update to Swedish localization, thanks to @Rangertheman +- Update to Taiwanese localization, thanks to @zeteticl + ## Version 0.7.1: When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. From 93dccfeb051875d33c1e0af82032922fba099302 Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Thu, 9 Dec 2021 03:12:40 -0300 Subject: [PATCH 340/726] Update references to 0.7.2 --- package.json | 2 +- system.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3587ac80..39fecb25 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fvtt-coc7", - "version": "0.7.1", + "version": "0.7.2", "description": "An unofficial implementation of Call of Cthulhu 7th Edition system for Foundry VTT.", "scripts": { "build": "webpack --mode production", diff --git a/system.json b/system.json index 02b8b89d..a2f577df 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "name": "CoC7", "title": "Call of Cthulhu 7th Edition (Unofficial)", "description": "An unofficial implementation of the Call of Cthulhu 7th Edition game system for Foundry Virtual Tabletop.", - "version": "0.7.1", + "version": "0.7.2", "author": "Miskatonic Investigative Society", "minimumCoreVersion": "0.8.6", "compatibleCoreVersion": "0.8.9", From a7a910f36170d4e2ad5b5d2241a0eee571344b74 Mon Sep 17 00:00:00 2001 From: Jose Lozano Date: Thu, 9 Dec 2021 10:27:11 +0100 Subject: [PATCH 341/726] Spanish updated --- lang/es.json | 1760 +++++++++++++++++++++++++------------------------- 1 file changed, 883 insertions(+), 877 deletions(-) diff --git a/lang/es.json b/lang/es.json index 0507a428..f97ac51e 100644 --- a/lang/es.json +++ b/lang/es.json @@ -1,877 +1,883 @@ -{ - "I18N.LANGUAGE": "Español", - "I18N.MAINTAINERS": "@Viriato139ac#0342", - - "CoC7.title": "La Llamada de Cthulhu 7a Edición (no oficial)", - - "CoC7.Entities.Character": "Personaje", - "CoC7.Entities.Container": "Contenedor", - "CoC7.Entities.Creature": "Criatura", - "CoC7.Entities.Npc": "PNJ", - "CoC7.Entities.Vehicle": "Vehículo", - - "CoC7.Entities.Archetype": "Arquetipo", - "CoC7.Entities.Book": "Tomo", - "CoC7.Entities.Chase": "Persecución", - "CoC7.Entities.Item": "Objeto", - "CoC7.Entities.Occupation": "Ocupación", - "CoC7.Entities.Setup": "Configuración", - "CoC7.Entities.Skill": "Habilidad", - "CoC7.Entities.Spell": "Hechizo", - "CoC7.Entities.Status": "Estado", - "CoC7.Entities.Talent": "Talento", - "CoC7.Entities.Weapon": "Arma", - - "CHARAC.STR": "FUE", - "CHARAC.Strengh": "Fuerza", - "CHARAC.Strength": "Fuerza", - "CHARAC.CON": "CON", - "CHARAC.Constitution": "Constitución", - "CHARAC.SIZ": "TAM", - "CHARAC.Size": "Tamaño", - "CHARAC.DEX": "DES", - "CHARAC.Dexterity": "Destreza", - "CHARAC.APP": "APA", - "CHARAC.Appearance": "Apariencia", - "CHARAC.INT": "INT", - "CHARAC.Intelligence": "Inteligencia", - "CHARAC.POW": "POD", - "CHARAC.Power": "Poder", - "CHARAC.EDU": "EDU", - "CHARAC.Education": "Educación", - "CoC7.PlayerName": "Jugador", - "CoC7.Name": "Nombre", - "CoC7.Archetype": "Arquetipo", - "CoC7.Occupation": "Ocupación", - "CoC7.Age": "Edad", - "CoC7.Sex": "Género", - "CoC7.Residence": "Residencia", - "CoC7.Birthplace": "Nacimiento", - "CoC7.Organization": "Organización", - "CoC7.HitPoints": "Puntos de vida", - "CoC7.HP": "PV", - "CoC7.MagicPoints": "Puntos de magia", - "CoC7.MP": "PM", - "CoC7.SanityPoints": "Puntos de cordura", - "CoC7.Sanity": "Cordura", - "CoC7.SAN": "COR", - "CoC7.DailySanLoss": "Pérdida diaria de COR :", - "CoC7.DailyLoss": "Pérdida diaria", - "CoC7.Luck": "Suerte", - "CoC7.Movement": "Movimiento", - "CoC7.Mov": "Mov", - "CoC7.BonusDamage": "Bonif. Daño", - "CoC7.DB": "BD", - "CoC7.Build": "Corpulencia", - "CoC7.Skills": "Habilidades", - "CoC7.Skill": "Habilidad", - "CoC7.Combat": "Combate", - "CoC7.Possessions": "Posesiones", - "CoC7.Background": "Trasfondo", - "CoC7.Notes": "Notas", - "CoC7.DailySanIconOver": "Reiniciar", - "CoC7.Prone": "Caído", - "CoC7.Unconsious": "Inconsciente", - "CoC7.CriticalWounds": "Herida grave", - "CoC7.Dying": "Moribundo", - "CoC7.DyingCheck": "Tirada de CON para evitar la muerte", - "CoC7.Dead": "Muerto", - "CoC7.Resist": "Resistido", - "CoC7.UnderlyingInsanity": "Locura subyacente", - "CoC7.TemporaryInsanity": "Locura temporal", - "CoC7.IndefiniteInsanity": "Locura indefinida", - "CoC7.NotInsane": "Ninguna", - "CoC7.UnlockActor": "Desbloquear Actor", - "CoC7.LockActor": "Bloquear Actor", - "CoC7.NpcRollCharacteristics": "Tirar para características aleatorias", - "CoC7.NpcAvarageCharacteristics": "Características medias", - "CoC7.NpcCharacteristicsFormula": "Fórmula", - "CoC7.NpcCharacteristicsValues": "Valores", - "CoC7.language": "Idioma", - "CoC7.Author": "Autor", - "CoC7.Date": "Fecha", - "CoC7.Spells": "Hechizos", - "CoC7.Spell": "Hechizo", - "CoC7.Spells&Notes": "Hechizos y Notas", - "CoC7.Weapons": "Armas", - "CoC7.Effects": "Efectos", - "CoC7.Cost": "Coste", - "CoC7.Source": "Fuente", - "CoC7.SpellDetails": "Detalles del hechizo", - "CoC7.Details": "Detalles", - "CoC7.Other": "Otros", - "CoC7.rounds": "asalto(s)", - "CoC7.hours": "hora(s)", - "CoC7.weeks": "semana(s)", - "CoC7.remove": "Quitar", - "CoC7.Any": "Cualquiera", - "CoC7.All": "Todos", - "CoC7.Success": "Éxito", - "CoC7.CustomLabel": "Etiqueta personalizada", - "CoC7.SpecificLocations": "Localizaciones específicas", - "CoC7.ArmourPlating": "Blindaje", - "CoC7.Location": "Localizacion", - "CoC7.Properties": "Propiedades", - "CoC7.Attributes": "Atributos", - "CoC7.Attribute": "Atributo", - "CoC7.Collapse": "Encoger", - "CoC7.Expand": "Expandir", - "CoC7.Blind": "Oculta", - "CoC7.Label": "Etiqueta", - "CoC7.Icon": "Icono", - "CoC7.Check": "Prueba", - "CoC7.ItemWeapon": "Objeto (arma)", - "CoC7.AttacksPerRound": "Ataques por asalto", - - "CoC7.Cast": "Lanzamiento", - "CoC7.SanityCost": "Coste COR", - "CoC7.PowerCost": "Coste POD", - "CoC7.HitPointsCost": "Coste PVs", - "CoC7.MagicPointsCost": "Coste PMs", - "CoC7.OtherCosts": "Otro coste", - "CoC7.CastingSpell": "Lanzando {spell}.", - - "CoC7.CopyToClipboard": "Copiar al portapapeles", - "CoC7.WhisperToSelection": "Susurrar a iconos seleccionados", - "CoC7.WhisperTo": "Susurrar a", - "CoC7.SendToChat": "Enviar al chat", - - "CoC7.RegularSuccess": "Éxito normal", - "CoC7.HardSuccess": "Éxito difícil", - "CoC7.ExtremeSuccess": "Éxito extremo", - "CoC7.CriticalSuccess": "Éxito crítico", - "CoC7.Fumble": "Pifia", - "CoC7.Failure": "Fallo", - "CoC7.Malfunction": "{itemName} sufre una avería", - - "CoC7.Dice": "Dados", - "CoC7.DiceModifierBonus": "bonificación", - "CoC7.DiceModifierPenalty": "penalización", - "CoC7.Modifiers": "Modificadores", - "CoC7.BonusDice": "Dados de bonificación", - "CoC7.UnitsDie": "1 dado de unidades", - "CoC7.TensDie": "dado de decenas", - "CoC7.TensDice": "dado(s) de decenas", - "CoC7.SuccessRequired": "se requiere un éxito {successRequired}", - "CoC7.Roll": "Tirar dados", - "CoC7.Pushing": "Forzando... ", - "CoC7.PushingSkill": ": ¡forzando tirada!", - "CoC7.PushSkill": "Forzar tirada", - "CoC7.PushedRoll": "(tirada forzada)", - "CoC7.SpendLuck": "Gastar {luckNeededValue} puntos de Suerte para superar la tirada", - "CoC7.LuckSpent": "{luckAmount} puntos de Suerte gastados para superar la tirada", - "CoC7.LuckSpentAlt": "Suerte gastada", - "CoC7.LuckError": "{actorName} no tiene suficiente Suerte para superar la tirada", - "CoC7.check.AutoSuccess": "Éxito Autom.", - "CoC7.check.AutoFailure": "Fallo Autom.", - "CoC7.RevealCheck": "Mostrar tirada", - "CoC7.RevealSanLoss": "Mostar pérdida de COR", - "CoC7.check.ForcePass": "Forzar éxito", - "CoC7.check.ForceFail": "Forzar fallo", - "CoC7.check.FlagForDevelopment": "Premiar experiencia", - "CoC7.IncreaseSuccessLevel": "Incrementar nivel de éxito", - "CoC7.check.DecreaseSuccessLevel": "Disminuir nivel de éxito", - "CoC7.RollSecretDice": "El Guardián ha hecho una tirada privada", - "CoC7.KeeperSentDecoy": "Se ha enviado a los jugadores una tirada señuelo", - "CoC7.FakeRoll": "Mandar a los jugadores una tirada señuelo", - - "CoC7.ConstitutionCheck": "Tirada de Constitución", - - "CoC7.SanDataSelectionWindow": "Seleccionar pérdidas de COR", - "CoC7.BonusSelectionWindow": "Seleccionar dificultad y bonificación", - "CoC7.BonusSelectionWindowNamed": "Seleccione modificador para la tirada de {name}", - "CoC7.SkillDetailsWindow": "Ventana de detalles de la habilidad", - "CoC7.RegularDifficulty": "normal", - "CoC7.HardDifficulty": "difícil", - "CoC7.ExtremeDifficulty": "extrema", - "CoC7.CriticalDifficulty": "crítica", - "CoC7.UnknownDifficulty": "desconocida", - "CoC7.RollDifficulty": "Dificultad de la tirada", - "CoC7.RollThreshold": "Umbral de éxito", - "CoC7.FlatDiceModifier": "Modificador a la tirada", - "CoC7.FlatModifier": "Modificador al umbral de éxito", - "CoC7.RollDifficultyUnknown": "Desconocida", - "CoC7.RollDifficultyRegular": "Normal", - "CoC7.RollDifficultyHard": "Difícil", - "CoC7.RollDifficultyExtreme": "Extrema", - "CoC7.RollDifficultyCritical": "Crítica", - "CoC7.RollResult.LuckSpendText": "{luckAmount} puntos de Suerte gastados, {successLevel} superado", - "CoC7.RollDice": "¡Tirar dados!", - "CoC7.CreateLink": "Crear enlace a tirada", - "CoC7.SuccesLevelHint": "{value} nivel(es) de éxito", - "CoC7.FailureLevelHint": "Fallo por {value} nivel(es)", - "CoC7.CombinedRollCard": "Tarjeta de tiradas combinadas", - "CoC7.OpposedRollCard": "Tarjeta de tiradas enfrentadas", - "CoC7.CombinedAnyHint": "Solo es necesario que una tirada tenga éxito", - "CoC7.CombinedAllHint": "Todas las tiradas tienen que tener éxito", - "CoC7.CloseCard": "Finalizar tarjeta", - - "CoC7.CheckResult": "Tirada de {name} ({value}%), dificultad {difficulty}", - "CoC7.ItemCheckResult": "{item} - tirada de {skill} ({value}%), dificultad {difficulty}", - "CoC7.CheckRawValue": "({rawvalue}%), dificultad {difficulty}", - - "CoC7.ArmorAbsorbsDamage": "La armadura absorbe el daño", - "CoC7.Critical": "Crítico", - "CoC7.Impale": "Empala", - "CoC7.CriticalTitle": "El impacto ha sido crítico", - "CoC7.ImpaleTitle": "El arma puede empalar", - "CoC7.Target": "Objetivo", - "CoC7.TargetOutOfRange": "Objetivo fuera de alcance", - "CoC7.NoTargetToDamage": "Sin objetivo al que aplicar el daño", - "CoC7.ShotIsImpossible": "Disparo imposible", - "CoC7.OutOfAmmo": "Sin munición", - "CoC7.OutOfShots": "No es posible realizar más disparos", - - "CoC7.BonusDamageRoll": "Tirada de Bonificación de Daño", - "CoC7.Type": "Tipo", - "CoC7.FightBack": "Contraatacar", - "CoC7.Dodge": "Esquivar", - "CoC7.Maneuver": "Maniobra", - "CoC7.NoResponse": "No reaccionar", - "CoC7.OutNumbered": "Superado", - "CoC7.combatCard.surprised": "Sorprendido", - "CoC7.combatCard.autoSuccess": "Éxito Automático", - "CoC7.Advantage": "Ventaja", - "CoC7.Disadvantage": "Desventaja", - "CoC7.TitleAdvantage": "Añadir 1 dado de bonificación (el objetivo está boca abajo, inmovilizado...)", - "CoC7.TitleDisadvantage": "Añadir 1 dado de penalización (por estar boca abajo, inmovilizado...)", - "CoC7.TitleOutNumbered": "Añadir 1 dado de bonificación por objetivo en inferioridad numérica", - "CoC7.TitleSurprised": "Añadir 1 dado de bonificación por objetivo sorprendido", - "CoC7.TitleAutoSuccess": "El ataque impacta automáticamente", - "CoC7.WinnerRollDamage": "{name} ha ganado. Tirar daño", - "CoC7.InitiatorMissed": "{name} falló.", - "CoC7.NoWinner": "Ambas partes han fallado", - "CoC7.DodgeSuccess": "{name} ha esquivado!", - "CoC7.ManeuverSuccess": "La maniobra {name} ha tenido éxito", - "CoC7.AttackSuccess": "{name} landed a blow.", - "CoC7.InflictPain": "Aplicar daño", - "CoC7.AdvantageAttacker": "Ventaja: Atacante", - "CoC7.AdvantageDefender": "Ventaja: Defensor", - "CoC7.Tie": "Empate", - "CoC7.DamageInflicted": "Daño causado", - "CoC7.TotalDamage": "Daño total", - - "CoC7.combatCard.dive4cover": "Ponerse a Cubierto", - - "CoC7.rangeCombatCard.SingleShot": "Disparo único", - "CoC7.rangeCombatCard.MultipleShots": "Disparos múltiples", - "CoC7.AutomaticFire": "Fuego automático", - "CoC7.rangeCombatCard.Burst": "Ráfaga", - "CoC7.rangeCombatCard.FullAuto": "Fuego automático", - "CoC7.rangeCombatCard.BaseRange": "Alcance básico", - "CoC7.rangeCombatCard.LongRange": "Largo alcance", - "CoC7.rangeCombatCard.ExtremeRange": "Muy largo alcance", - "CoC7.rangeCombatCard.OutOfRange": "Fuera del alcance", - "CoC7.rangeCombatCard.Cover": "A cubierto", - "CoC7.rangeCombatCard.PointBlankRange": "A bocajarro", - "CoC7.rangeCombatCard.NormalTarget": "Objetivo normal", - "CoC7.rangeCombatCard.BigTarget": "Objetivo grande", - "CoC7.combatCard.SmallTarget": "Objetivo pequeño", - "CoC7.rangeCombatCard.FastMovingTarget": "Objetivo rápido", - "CoC7.rangeCombatCard.InMelee": "En combate cuerpo a cuerpo", - "CoC7.rangeCombatCard.aiming": "Apuntando", - "CoC7.rangeCombatDamage": "{name} recibe {total} puntos de daño", - "CoC7.rangeCombatDamageArmor": "{name} recibe {total} punto/s de daño. ({armor} absorbido/s)", - "CoC7.RollDamage": "Tirada de daño", - "CoC7.BulletsFired": "Balas disparadas", - "CoC7.Shots": "Disparos", - "CoC7.Shoot": "Disparo", - "CoC7.ShotBullets": "Disparar {bullets} tiros al objetivo {actor}", - "CoC7.ShotVoley": "Disparando una ráfaga de {bullets} tiros al objetivo {actor}", - "CoC7.rangeCombatCard.AimingTitle": "Añade 1 dado de bonificación al primer disparo", - "CoC7.rangeCombatCard.CoverTitle": "1 dado de penalización. El objetivo tiene cobertura o se ha puesto a cubierto", - "CoC7.rangeCombatCard.PointBlankRangeTitle": "1 dado de bonificación. Objetivo a distancia de bocajarro", - "CoC7.rangeCombatCard.BigTargetTitle": "1 dado de bonificación por objetivo grande (corpulencia > 4)", - "CoC7.rangeCombatCard.SmallTargetTitle": "1 dado de penalización por objetivo pequeño", - "CoC7.rangeCombatCard.NormalTargetTitle": "Objetivo de tamaño normal, sin bonificación/penalización", - "CoC7.rangeCombatCard.InMeleeTitle": "1 dado de penalización. Objetivo trabado en combate cuerpo a cuerpo", - "CoC7.rangeCombatCard.FastMovingTargetTitle": "1 dado de penalización. Objetivo veloz (MOV 8+) moviéndose rápido", - - "CoC7.meleeCombatDamageTakes": "recibe", - "CoC7.meleeCombatDamageFrom": "de", - "CoC7.meleeCombatDamageDeals": "inflige", - "CoC7.meleeCombatDamageWith": "con", - - "CoC7.DropZone": "DropZone", - - "CoC7.Value": "Valor", - "CoC7.SkillValue": "Valor Habilidad", - "CoC7.SkillBase": "Base", - "CoC7.BaseSkillValue": "Valor base de la habilidad", - "CoC7.SkillExperience": "Experiencia", - "CoC7.SkillArchetype": "Arquetipo", - "CoC7.SkillOccupation": "Ocupacion", - "CoC7.SkillPersonal": "Particulares", - - "CoC7.SkillTotalExperience": "Puntos de experiencia", - "CoC7.SkillTotalArchetype": "Puntos de arquetipo", - "CoC7.SkillTotalOccupation": "Puntos de ocupación", - "CoC7.SkillTotalPersonal": "Intereses particulares", - "CoC7.CharacteristicsPoints": "Puntos de características", - "CoC7.TotalPoints": "Puntos de ocupación totales", - - "CoC7.ItemQuantity": "Cantidad", - "CoC7.ItemWeight": "Peso", - "CoC7.ItemDetails": "Detalles", - "CoC7.Description": "Descripción", - "CoC7.Reload": "Clic Izqdo/Decho : añade/quita 1 bala\nMayús + clic Izqdo/Decho : recargar/vaciar", - "CoC7.WeaponRange": "Alcance", - "CoC7.WeaponDamage": "Daño", - "CoC7.Weapon.BlastRadius": "Radio de explosión", - "CoC7.WeaponMalfunction": "Avería", - "CoC7.WeaponUsesPerRound": "Asaltos/uso", - "CoC7.WeaponUsesPerRoundHint": "Ataques por asalto (1/3 indica: 1 ataque cada 3 asaltos)", - "CoC7.WeaponSheet.RoundsPerUse.Info": "Número de asaltos de preparación necesarios para disparar el arma de nuevo", - "CoC7.WeaponMax": "Disparos/asalto", - "CoC7.BurstSize": "Balas/ráfaga", - "CoC7.BurstSizeHint": "Numero de balas por cada ráfaga", - "CoC7.WeaponBulletsInMag": "Cargador", - "CoC7.WeaponSpecial": "Especial", - "CoC7.ItemPrice": "Precio", - "CoC7.Armor": "Armadura", - - "CoC7.EraNvct": "Invictus", - "CoC7.EraDrka": "Edad Oscura", - "CoC7.EraDdts": "El Viejo Oeste", - "CoC7.EraGlit": "Luz de Gas", - "CoC7.Era1920": "Años 20", - "CoC7.EraPulp": "Pulp Cthulhu", - "CoC7.EraMdrn": "Época Actual", - "CoC7.Eras": "Épocas Cthulhu", - - "CoC7.SkillNoAdjustments": "Sin ajustes", - "CoC7.SkillNoXpGain": "Sin ganancia de EXP", - "CoC7.SkillSpecial": "Especialización", - "CoC7.SkillRarity": "Infrecuente", - "CoC7.SkillPush": "Forzada", - "CoC7.SkillCombat": "Combate", - "CoC7.SkillFighting": "Combatir", - "CoC7.SkillFirearm": "Armas de fuego", - - "CoC7.WeaponRngd": "Alcance", - "CoC7.WeaponProperyManeuver": "Maniobra", - "CoC7.WeaponTouch": "Toque", - "CoC7.WeaponImpl": "Empala", - "CoC7.WeaponRare": "Rara", - "CoC7.WeaponAhdb": "+BD/2", - "CoC7.WeaponAddb": "+BD", - "CoC7.WeaponSlnt": "Silenciosa", - "CoC7.WeaponXplv": "Explosivos", - "CoC7.WeaponBrst": "Ráfaga", - "CoC7.WeaponAuto": "Fuego automático", - "CoC7.WeaponSpcl": "Especial", - "CoC7.WeaponMont": "Montada", - "CoC7.WeaponDbrl": "Dos cañones", - "CoC7.WeaponBlst": "Explosiva", - "CoC7.WeaponStun": "Aturdimiento", - "CoC7.Weapon.Property.Melee": "Cuerpo a cuerpo", - "CoC7.Weapon.Property.Thrown": "Arrojadiza", - "CoC7.Weapon.Property.Burn": "Fuego", - "CoC7.Weapon.Property.Shotgun": "Escopeta", - - "CoC7.ErrorItem": "No se pudo localizar el ítem", - "CoC7.ErrorActor": "No se pudo localizar al actor", - "CoC7.ErrorInvalidFormula": "{value} no es una fórmula válida", - "CoC7.ErrorInvalid": "inválido", - "CoC7.Validate": "Validar", - "CoC7.Apply": "Aplicar", - - "CoC7.NewBioSectionName": "Nueva Sección", - - "CoC7.DodgeSkillName": "Esquivar", - "CoC7.CthulhuMythosName": "Mitos de Cthulhu", - "CoC7.CreditRatingSkillName": "Crédito", - "CoC7.DriveAutoSkillName": "Conducir automóvil", - "CoC7.FightingSpecializationName": "Combatir", - "CoC7.FirearmSpecializationName": "Armas de fuego", - "CoC7.DriveSpecializationName": "Conducir", - "CoC7.PilotSpecializationName": "Pilotar", - "CoC7.AnySpecName": "Genérica", - "CoC7.BoutOfMadnessName": "Episodio de Locura", - "CoC7.InsanityName": "Locura", - - "CoC7.NewSkillName": "nueva habilidad", - "CoC7.AddSkill": "Añadir habilidad", - "CoC7.DevelopemmentPhase": "Fase de Desarrollo", - "CoC7.RecoverLuckPoints": "Recuperar puntos de suerte", - "CoC7.SkillCantGainXp": "Esta habilidad no puede ganar XP automáticamente", - "CoC7.SkillUnflagForDevelopement": "Desmarcar para desarrollo", - "CoC7.SkillFlagForDevelopement": "Marcar para desarrollo", - "CoC7.RollAll4Dev": "Tirando desarrollo de todas las habilidades", - "CoC7.RollLuck4Dev": "Tirando desarrollo para suerte", - "CoC7.DevRollTitle": "Tirando desarrollo de {item}: {die}/{score}%", - "CoC7.DevSuccessDetails": "{item} se ha aumentado un {augment}%", - "CoC7.SanGained": "Ha recuperado 2d6 ({results} = {sanGained}) de cordura tras dominar la habilidad {skill} con un {skillValue}%", - "CoC7.DevFailureDetails": "{item} NO se ha aumentado", - "CoC7.DevSuccess": "({die}/{score}%), {item} se ha aumentado un {augment}%", - "CoC7.DevFailure": "({die}/{score}%), {item} NO se ha aumentado", - "CoC7.LuckIncreased": "{augment} puntos de suerte recuperados ({die}/{score})", - "CoC7.LuckNotIncreased": "No se ha recuperado suerte ({die}/{score})", - "CoC7.DevelopAttribWarn": "No tiene acceso a algunos atributos en el modo desarrollo/creación", - "CoC7.SkillDetail": "Detalles", - "CoC7.EditSkill": "Editar habilidad", - "CoC7.DeleteSkill": "Eliminar habilidad", - "CoC7.RangeSkills": "Habilidades de combate a distancia", - "CoC7.MeleeSkills": "Habilidades de combate cuerpo a cuerpo", - "CoC7.NewItemName": "nuevo objeto", - "CoC7.AddItem": "Añadir objeto", - "CoC7.EditItem": "Editar objeto", - "CoC7.DeleteItem": "Eliminar objeto", - "CoC7.TradeItem": "Cambiar/almacenar objeto", - "CoC7.SortBySkillName": "Ordenar por nombre de habilidad", - "CoC7.SortBySkillValue": "Ordenar por porcentaje de habilidad", - "CoC7.UncommonSkillsShow": "Mostrar habilidades infrecuentes", - "CoC7.UncommonSkillsHide": "Ocultar habilidades infrecuentes", - - "CoC7.NewBookName": "nuevo tomo", - "CoC7.AddBook": "Añadir tomo", - "CoC7.NewSpellName": "nuevo hechizo", - "CoC7.AddSpell": "Añadir hechizo", - - "CoC7.AddWeapon": "Añadir arma", - "CoC7.NewWeaponName": "nueva arma", - "CoC7.EditWeapon": "Editar arma", - "CoC7.DeleteWeapon": "Eliminar arma", - "CoC7.MeleeWeapons": "Armas cuerpo a cuerpo", - "CoC7.RangeWeapons": "Armas a distancia", - "CoC7.WeaponName": "Nombre", - "CoC7.WeaponSkill": "Habilidad", - "CoC7.WeaponSkillAlt": "Hab. alternativa", - "CoC7.Inventory": "Inventario", - "CoC7.InventoryIsCurrentlyEmpty": "Inventario actualmente vacío", - "CoC7.CharacterDevelopment": "Desarrollo", - "CoC7.OccupationSkill": "Habilidad de ocupación", - "CoC7.ArchetypeSkill": "Habilidad de arquetipo", - "CoC7.UseFormula": "Usar tirada de dados", - "CoC7.EnterFormula": "Introducir fórmula", - "CoC7.SanRollHint": "Tirar Cordura a todos los objetivos seleccionados", - "CoC7.SANCheckTitle": "Pérdida de COR : {name} ({sanMin}/{sanMax})", - "CoC7.NoSkill": "Sin habilidad", - "CoC7.AddWeapontHint": "

              {actor} no dispone de {weapon}.
              ¿Desea crearlo ?

              ", - - "CoC7.LinkCheck": "Tirada de {name}", - "CoC7.LinkCheckDiff": "Tirada [{difficulty}] de {name}", - "CoC7.LinkCheckModif": "Tirada de {name} ({modifier}): ", - "CoC7.LinkCheckDiffModif": "Tirada [{difficulty}] de {name} ({modifier})", - "CoC7.LinkSanLoss": "Tirada de COR, ({sanMin}/{sanMax})", - "CoC7.LinkSanLossDiff": "Tirada [{difficulty}] de COR, ({sanMin}/{sanMax})", - "CoC7.LinkSanLossModif": "Tirada de COR ({modifier}), ({sanMin}/{sanMax})", - "CoC7.LinkSanLossDiffModif": "Tirada [{difficulty}] de COR ({modifier}), ({sanMin}/{sanMax})", - "CoC7.LinkItem": " de {name}", - "CoC7.LinkItemDiff": " [{difficulty}] de {name}", - "CoC7.LinkItemModif": " de {name} ({modifier})", - "CoC7.LinkItemDiffModif": " [{difficulty}] de {name} ({modifier})", - - "CoC7.ManualCreditValues": "Crédito manual", - "CoC7.MonetarySymbol": "Símbolo :", - "CoC7.MonetaryFactor": "Factor :", - "CoC7.AutoCreditValues": "Cambiar a cálculo automático/manual", - "CoC7.MonetarySpendingLevel": "Nivel de gasto :", - "CoC7.MonetaryCash": "Dinero :", - "CoC7.MonetarySpent": "Gastado :", - "CoC7.MonetaryAssets": "Propiedades :", - "CoC7.MonetaryAssetsDetails": "Detalles de las propiedades", - - "CoC7.PossessionsNotes": "Notas :", - "CoC7.PossessionsNotesHolder": "Notas", - - "CoC7.BackgroundNewSection": "Añadir nueva sección", - "CoC7.BackgroundSectionNameHolder": "Título de la sección", - "CoC7.BackgroundDeleteSection": "Eliminar sección", - "CoC7.BackgroundSectionMoveUp": "Subir", - "CoC7.BackgroundSectionMoveDown": "Bajar", - - "CoC7.creatureFightingSkill": "Combatir", - - "CoC7.InvoluntaryAction": "Acción involuntaria", - "CoC7.InvoluntaryActionPerfomed": "Acción involuntaria realizada", - "CoC7.SanityCheck": "Tirada de Cordura", - "CoC7.IntCheck": "Tirada de INT", - "CoC7.NoSanLoss": "Sin pérdida de COR", - "CoC7.SANLoss": "Pérdida de COR", - "CoC7.SanityCheckPerformed": "Has experimentado un evento traumático", - "CoC7.InvoluntaryActionPerformed": "Pierdes el autocontrol durante unos instantes", - "CoC7.SanityLost": "Puntos de COR perdidos", - "CoC7.MemoryRepressed": "Tu mente ha logrado reprimir tus recuerdos y los ha enterrado en el subconsciente", - "CoC7.RememberEverything": "Eres plenamente consciente de lo sucedido", - "CoC7.BoutOfMadnesslasted": "Tu episodio de locula dura", - "CoC7.EnteringBoutOfMadness": "Sufres un episodio de locura", - "CoC7.GrowingAccustomedToAwfulness": "Comienzas a acostumbrarte al horror (se ha limitado la pérdida de COR)", - "CoC7.ImmuneToAwfulness": "Tu mente es inmune a esta atrocidad (no hay perdida de COR)", - "CoC7.InvestigatorPhobiaGained": "El investigador gana una fobia", - "CoC7.PhobiaGained": "Ganas una fobia", - "CoC7.InvestigatorManiaGained": "El investigador gana una manía", - "CoC7.ManiaGained": "Ganas una manía", - "CoC7.AlreadyUnderlyingInsanity": "El investigador se encuentra en estado de locura subyacente", - "CoC7.IndefinitelyInsane": "Has adquirido una locura indefinida", - "CoC7.TemporaryInsane": "Has adquirido una locura temporal", - "CoC7.GoodForAsylum": "Estás listo para que te manden al manicomio", - "CoC7.BoutOfMadness": "Episodio de locura", - "CoC7.BoutRealTime": "Episodio de locura: en tiempo real", - "CoC7.BoutSummary": "Episodio de locura: resumidos", - "CoC7.EndBoutOfMadness": "Fin del episodio de locura", - "CoC7.InsanityType": "Tipe de locura", - "CoC7.Phobia": "Fobia", - "CoC7.Mania": "Manía", - "CoC7.MaxSanloss": "Pérdida máx", - "CoC7.MinSanloss": "Pérdida mín", - "CoC7.AlreadyLost": "Perdidos actualmente", - "CoC7.CreatureMaxLoss": "Pérdida máx por esta criatura", - "CoC7.MaxLossToCreature": "Pérdida restante por esta criatura", - "CoC7.ResetCreatureSan": "Restablecer historial con esta criatura", - "CoC7.ResetSpecieSan": "Restablecer historial con esta especie", - "CoC7.KeepData": "Mantener historial con esta criatura", - "CoC7.BoutActive": "(Episodio) Inmune a pérdida de COR", - "CoC7.AlreadyInABout": "Estás sufriendo un episodio de locura y eres inmune a nuevas pérdidas de COR", - "CoC7.PlayerPermanentlyInsane": "El jugador sufre locura permanente", - "CoC7.MythosFirstEncounter": "Ganancia en Mitos (+5%, al ser la primera vez)", - "CoC7.MythosAlreadyEncountered": "Ganancia en Mitos (+1%)", - "CoC7.DisregardMythosGain": "Sin ganancia en Mitos", - "CoC7.MythosGain": "Ganancia en Mitos", - "CoC7.YouGainedCthulhuMythos": "Tu mente se estremece ante tal manifestación sobrenatural (+{value}% Mitos de Cthulhu)", - "CoC7.CardResolved": "Tarjeta finalizada", - - "CoC7.SpellCastingTime": "Tiempo de ejecución", - "CoC7.SpellCastingCost": "Coste", - "CoC7.CallSpell": "Llamada", - "CoC7.DismissSpell": "Expulsión", - "CoC7.ContactSpell": "Contacto", - "CoC7.SummonSpell": "Convocación", - "CoC7.BindSpell": "Atadura", - "CoC7.EnchantmentSpell": "Encantamiento", - "CoC7.GateSpell": "Portal", - "CoC7.CombatSpell": "Combate", - "CoC7.SpellType": "Tipo de Hechizo", - - "CoC7.BookHasNothingMoreToTeach": "No tiene nada que aprender de {book}. La habilidad de Mitos de Cthulhu de {actor} es mayor que la puntuación de Mitos", - "CoC7.BookType": "Tipo de Libro", - "CoC7.Content": "Contenido", - "CoC7.CthulhuMythosFinal": "Mithos final", - "CoC7.CthulhuMythosInitial": "Mithos inicial", - "CoC7.Development": "Desarrollo", - "CoC7.DifficultyLevel": "Nivel de dificultad", - "CoC7.DragSpell": "Suelte hechizos aquí para incorporarlos al libro...", - "CoC7.FullStudies": "Estudio completo", - "CoC7.Gains": "Ganancia", - "CoC7.GainsForReading": "Ganancia de habilidad por leer {book}.", - "CoC7.InitialReading": "Lectura inicial", - "CoC7.InitialReadingNeeded": "{actor} necesita hacer una lectura inicial de {book} para ser capaz de avanzar por el proceso de estudio completo", - "CoC7.LearnSpellAttempt": "Intento de aprendizaje del hechizo {spell}, de {book}.", - "CoC7.MarkedForDevelopment": "Marcado para desarrollo", - "CoC7.Mythos": "Mitos", - "CoC7.MythosRating": "Puntuación de Mitos", - "CoC7.NotOwned": "Este objeto requiere permisos de propietario de un actor para realizar esta acción", - "CoC7.Occult": "Ciencias ocultas", - "CoC7.Points": "punto(s)", - "CoC7.Progress": "Progreso", - "CoC7.RedoFullStudy": "Volver a realizar estudio completo", - "CoC7.ReadAttempt": "Intento de leer {book} ({language}), dificultad {difficulty}", - "CoC7.ReadingMythosTome": "Leyendo {book}", - "CoC7.Specific": "Específico", - "CoC7.SpellsLearned": "Hechizos aprendidos", - "CoC7.StudyTime": "Tiempo de estudio", - "CoC7.UnknownLanguage": "{actor} no conoce el idioma en el que está escrito el libro", - "CoC7.Unreadable": "No legible", - - "CoC7.Crew": "Tripulación", - "CoC7.Origin": "Origen", - "CoC7.ArmedVehicle": "Vehículo blindado", - - "CoC7.PulpTalents": "Talentos Pulp", - "CoC7.TalentType": "Tipo de talento", - "CoC7.PhysicalTalent": "Físicos", - "CoC7.MentalTalent": "Mentales", - "CoC7.CombatTalent": "De combate", - "CoC7.MiscellaneousTalent": "Varios", - "CoC7.BasicTalent": "Básicos", - "CoC7.InsaneTalent": "De locura", - "CoC7.OtherTalent": "Otros", - - "CoC7.Items": "Objetos", - "CoC7.Vehicle": "Vehículo", - "CoC7.Books": "Tomos", - "CoC7.Status": "Estados", - - "CoC7.Classic": "Clásica", - "CoC7.Lovecraftian": "Lovecraftiana", - "CoC7.Pulp": "Pulp", - "CoC7.Modern": "Contemporánea", - "CoC7.Related": "Ocupación Relacionada", - "CoC7.OccupationType": "Tipo de Ocupación", - "CoC7.OccupationPoints": "Puntos de Ocupación", - "CoC7.Selected": "Seleccionada", - "CoC7.Multiplier": "Multiplicador", - "CoC7.Optional": "A elegir", - "CoC7.Or": "o", - "CoC7.Minimum": "Mínimo", - "CoC7.Maximum": "Máximo", - "CoC7.CommonSkills": "Habilidades comunes", - "CoC7.OptionSkills": "Grupos de habilidades a elegir", - "CoC7.ChoiceNumber": "Opciones", - "CoC7.Choose": "Número a escoger entre", - "CoC7.Chosen": "Escogido", - "CoC7.EmptySkillList": "Añada una habilidad soltándola aquí", - "CoC7.EmptyItemList": "Añada un objeto soltándolo aquí", - "CoC7.EmptyCharacterSkillList": "Añada una configuración, ocupación o habilidad soltándolas aquí", - "CoC7.PersonalSpeciality": "Número de especialidades personales o de la época", - "CoC7.AdditionalSkills": "Habilidades Adicionales", - "CoC7.SkillSelectionWindow": "Seleccione habilidades opcionales", - "CoC7.SelectPersonalSkills": "Seleccione {number} habilidades(s) como intereses personales", - "CoC7.ResetOccupation": "Reiniciar Ocupación", - "CoC7.ResetOccupationHint": "El Actor {name} ya tiene una ocupación. ¿Desea reiniciarla?", - "CoC7.ResetArchetype": "Reiniciar Arquetipo", - "CoC7.ResetArchetypeHint": "El Actor {name} ya tiene un arquetipo. ¿Desea reiniciarlo?", - "CoC7.CreditOutOfRange": "El Crédito debe están comprendido entre {min} y {max}", - "CoC7.BioSections": "Secciones del Trasfondo", - "CoC7.BioSectionName": "Nombre de la Sección del Trasfondo", - "CoC7.SpendPoints": "Asignar puntos de características", - "CoC7.RollCharac": "Tirar características", - "CoC7.SelectCoreCharac": "Seleccione características básicas", - "CoC7.SkillSpecSelectTitle": "Especialización de {specialization}", - "CoC7.SkillSelectBase": "Seleccione el valor base de la habilidad {name}", - "CoC7.SelectSkill": "Seleccione una habilidad existente", - "CoC7.CreateNewSkill": "Cree una habilidad nueva", - - "CoC7.Characteristics": "Características", - "CoC7.Characteristic": "Característica", - "CoC7.EnableCharacteristics": "Habilitar características", - "CoC7.UsePoints": "Usar puntos", - "CoC7.UseRolls": "Usar tiradas", - "CoC7.CoreCharacteristics": "Características Básicas", - "CoC7.BonusPoints": "Puntos Adicionales", - "CoC7.SuggestedOccupations": "Sugerencias de ocupaciones", - "CoC7.SuggestedTraits": "Rasgos Sugeridos", - - "CoC7.PutGunAway": "Bajar el arma", - "CoC7.DrawGun": "Desenfundar el arma", - - "CoC7.GmTools": "Herramientas del Guardián", - "CoC7.GmNotes": "Notas del GM", - "CoC7.DevPhase": "Fase de desarrollo", - "CoC7.DevPhaseEnabled": "Fase de desarrollo habilitada", - "CoC7.DevPhaseDisabled": "Fase de desarrollo deshabilitada", - "CoC7.CharCreationMode": "Modo de creación de personajes", - "CoC7.CharCreationEnabled": "Modo de creación de personajes habilitado", - "CoC7.CharCreationDisabled": "Modo de creación de personajes deshabilitado", - "CoC7.toggleXP": "Ganancia de PX", - "CoC7.XPGainEnabled": "Los personajes pueden ganar PX", - "CoC7.XPGainDisabled": "Los personajes no pueden ganar PX", - "CoC7.WarnNoActorAvailable": "No tiene control ni tiene seleccionado ningún actor", - "CoC7.WarnMacroIncorrectType": "Solo puede crear macros para armas y habilidades", - "CoC7.WarnNoGlobalSpec": "No puede crear macros para especializaciones sin especificar", - "CoC7.WarnMacroNoItemFound": "No se ha encontrado ningún objeto usable", - "CoC7.WarnNoControlledActor": "En estos momentos no controla a ningún actor", - "CoC7.WarnFastTargetWithWrongMOV": "Se ha seleccionado Rápido cuando el objetivo tiene un MOV inferior a 8. (MOV: {mov})", - "CoC7.WarnTooManyTarget": "Seleccionados demasiados objetivos. Solo se guardará el último objetivo seleccionado", - - "CoC7.startRest": "Comenzando descanso", - "CoC7.dreaming": "Los investigadores esperan... soñando", - "CoC7.healthRecovered": "Un PV recuperado", - "CoC7.pulpHealthRecovered": "{number} PVs recuperados", - "CoC7.dailySanLossRestarted": "Contador de pérdida diraria de COR reiniciado", - "CoC7.magicPointsRecovered": "Puntos de magia recuperados", - "CoC7.hasCriticalWounds": "Una herída crítica impide recuperar PVs", - "CoC7.quickHealer": "Curación acelerada", - - "CoC7.ErrorNoDodgeSkill": "El actor no tiene la habilidad Esquivar", - "CoC7.ErrorNotEnoughLuck": "{actor} no tiene suficientes puntos de suerte para mejorar la tirada", - "CoC7.ErrorManeuverNotPossible": "Su oponente es demasiado fuerte como para realizar la maniobra", - "CoC7.ErrorNotFound": "¡No se ha encontrado {missing}!", - "CoC7.ErrorNotFoundForActor": "¡No se ha encontrado {missing} en el actor {actor}!", - - "CoC7.InfoLessSkillThanOptions": "Solo existen {skillCount} y {optionsCount} opciones, anadiéndose todas", - "CoC7.InfoAllSkillsAlreadySelected": "Ya se han seleccionado todas las habilidades", - - "CoC7.MessageCheckRequestedWait": "El guardián ha pedido una tirada de {check}.
              ¡Espere a que se lo confirme antes de tirar!
              ", - "CoC7.MessageTargetCheckRequested": "El guardián ha pedido a {name} una tirada de {check}", - "CoC7.MessageTitleSelectSingleUserForTarget": "Qué usuario podrá responder al ataque", - "CoC7.MessageSelectSingleUserForTarget": "Este icono está controlado por varios usuarios, por favor, seleccione que usuario podrá responder al ataque", - "CoC7.MessageSelectedTargetIsNotControlled": "El icono {name} no está siendo controlado por nadie, de modo que no podrá realizar ninguna reacción en combate cuando le ataquen", - "CoC7.MessageBoutOfMadnessTableNotFound": "No se ha encontrado el resultado de la tabla de locura, por favor, compruebe que se han creado las tablas", - "CoC7.MessageBoutOfMadnessItemNotFound": "No se ha encontrado el resultado de la tabla de locura, por favor, compruebe que se han creado los estatus", - - "CoC7.DealDamage": "¿Causar {damage} puntos de daño a {target}?", - "CoC7.NoTargetSelected": "No ha seleccionado ningún objetivo para la tirada de {weapon}. ¿Desea continuar de todos modos?", - - "CoC7.Import": "Importar", - "CoC7.Proceed": "Proceder", - "CoC7.Cancel": "Cancelar", - - "CoC7.ActorImporter": "Importador de actores", - "CoC7.ActorImporterSummary": "Importa un PNJ o criatura a partir de sus estadísticas y descripción. Solo deberá copiar sus estadísticas en formato texto plano", - "CoC7.PasteTheDataBelow": "Pegue más abajo el texto sin formato", - "CoC7.TextFieldInvalidCharacters": "Caracteres inválidos en el texto, por favor, revíselo o será eliminado", - "CoC7.SelectActorType": "Seleccione tipo de actor", - "CoC7.NonPlayingCharacter": "Personaje no jugador (PNJ)", - "CoC7.Creature": "Criatura", - "CoC7.ConvertFrom6Edition": "Convertir desde 6a edición", - "CoC7.Convert": "Convertir", - "CoC7.NoConvert": "No convertir", - "CoC7.Guess": "Autodetectar", - "CoC7.English": "Inglés", - "CoC7.Spanish": "Español", - "CoC7.French": "Francés", - "CoC7.TraditionalChinese": "Chino tradicional", - "CoC7.SelectSourceLanguage": "Seleccione el idioma del texto original", - "CoC7.ImportedUnnamedCharacter": "Se ha importado personaje 'unnamed'", - "CoC7.CreatedImportedCharactersFolder": "Creada carpeta 'Personajes importados'", - "CoC7.ImportedCharactersFolder": "Personajes importados", - "CoC7.ImportSkillItemLocations": "Buscar habilidades/hechizos/armas en", - "CoC7.ImportActorItemsNone": "Ninguno", - "CoC7.ImportActorItemsItem": "Objetos", - "CoC7.ImportActorItemsItemWorldModuleSystem": "Objetos / Mundo / Módulos / Sistema", - "CoC7.ImportActorItemsWorldModuleItemSystem": "Mundo / Módulos / Objetos / Sistema", - - "CoC7.HowToTranslateTitle": "¿Cómo traducir el sistema?", - "CoC7.HowToTranslateWarning": "No instale ningún módulo que no sea de su confianza", - "CoC7.HowToTranslateInstallBabele": "Instale/actualice el módulo Babele desde el panel de administración de modulos de Foundry", - "CoC7.HowToTranslateInstallTranslation": "Instale/actualice la traducción desde el panel de administración de modulos de Foundry", - "CoC7.HowToTranslateEnableTranslation": "En el mundo de juego, bajo Configuración/Administrar módulos, active tanto Babele como la traducción", - "CoC7.HowToTranslateNoTranslation": "Puede consultar las instrucciones de cómo crear una nueva traducción de un sistema en los módulos de traducción ya creados", - - "CoC7.Migrate.Title": "Se requiere actualizar", - "CoC7.Migrate.Message": "

              Su mundo necesita ser actualizado para funcionar con la versión {version}.

              Por favor, haga una copia de seguridad de la carpeta del mundo antes de actualizar.

              Si no actualiza el mundo el sistema no funcionará correctamente.

              Se puede reiniciar el mundo una vez que se complete el proceso

              ", - "CoC7.Migrate.WithModulesMessage": "

              Es posible que tanto su mundo como sus módulos necesiten una actualización para ejecutar la versión {version}.

              Por favor, haga copia de seguridad de su mundo y los módulos listados más abajo antes de comenzar la actualización.

              Si no actualiza el mundo el sistema no funcionará correctamente.

              Los módulos siguientes contienen actores u objetos, de modo que también se comprobarán.

              {modules}

              El mundo se reiniciará cuando se complete el proceso.

              ", - "CoC7.Migrate.GMRequired": "

              Su mundo necesita ser actualizado para funcionar con la versión {version}.

              Por favor, espere a que su GM realice la actualización del sistema y entonces refresque (F5) la página

              ", - "CoC7.Migrate.RestartRequired": "

              Su mundo se reiniciará para activar los cambios

              ", - "CoC7.Migrate.ButtonUpdate": "Actualizar", - "CoC7.Migrate.ButtonSkip": "Saltar", - "CoC7.Migrate.ButtonOkay": "Ok", - - "CoC7.Maximize": "Maximizar", - "CoC7.Summarize": "Resumen", - - "CoC7.UnableToInteractWithChatCard": "No es posible interactuar con este mensaje, si necesita hacer algún cambio pídaselo al Guardián", - "CoC7.UnableToCopyToClipboard": "No es posible copiar al portapapeles, probablemente debido al nivel de seguridad de su navegador", - "CoC7.WarningCharacterSheetV1Depreciated": "Esta disposición está obsoleta y no funcionará correctamente. Se eliminará cuando salga la versión v9 de FoundryVTT, por favor dígale a su Guardián que cambie la hoja a CoC7.CoC7CharacterSheetV2", - - "CoC7.MessageTitleSelectUserToGiveTo": "Dar objeto a otro personaje", - "CoC7.MessageSelectUserToGiveTo": "¿A qué personaje quiere darle el objeto?", - "CoC7.MessageDistanceCalculationFailure": "No es posible calcular la distancia entre los iconos, por favor, use la hoja de personaje del icono", - - "CoC7.ToolTipSkill": "
              1. Clic izquierdo tirada con opciones
              2. Mayús + clic izquierdo Tirada inmediata a dificultad normal
              1. Clic derecho Tirada enfrentada con opciones
              2. Mayús + clic derecho Tirada enfrentada inmediata
              1. Alt/Opción + clic derecho Tirada combinada con opciones
              ", - "CoC7.ToolTipKeeperSkill": "
              1. CTRL + clic izquierdo Crear enlace a tirada
              2. {other}
              ", - "CoC7.ToolTipKeeperStandbySkill": "
            26. Clic izquierdo Petición de tirada a {name}
            27. ", - "CoC7.ToolTipDB": "
              1. Clic izquierdo Tirada inmediata a dificultad normal
              ", - "CoC7.ToolTipKeeperSanity": "
            28. CTRL + Alt/Opción Crea enlace a tirada de COR
            29. ", - "CoC7.ToolTipAutoToggle": "
              1. Left click Conmuta entre cálculo automático/entrada manual
              2. ", - "CoC7.ToolTipSkillFlagToggle": "
                1. Doble clic Marcar/desmarcar
                2. ", - "CoC7.ToolTipSkillFlagged": "Marcada para desarrollo", - "CoC7.ToolTipSkillUnflagged": "No marcada para desarrollo", - - "SETTINGS.TitleRules": "Reglas", - "SETTINGS.TitleInitiative": "Ajustes de iniciativa", - "SETTINGS.TitleRoll": "Ajustes de tiradas", - "SETTINGS.TitleChatCards": "Ajustes de tarjetas del chat", - "SETTINGS.TitleScene": "Ajustes de escena", - "SETTINGS.TitleSheet": "Ajustes de la hoja", - "SETTINGS.TitleGameArtwork": "Ajustes de arte del juego", - "SETTINGS.TitleWeapon": "Ajustes de armas", - "SETTINGS.TitleDiceSoNice": "Ajustes Dice So Nice", - "SETTINGS.TitleDeveloperDebug": "Ajustes de desarrollo y depuración", - "SETTINGS.TitleRollTable": "Ajustes de tablas dinámicas", - "SETTINGS.DebugMode": "Modo de depuración", - "SETTINGS.DebugModeHint": "!!REQUIERE REINICIAR!!", - "SETTINGS.DefaultDifficulty": "Dificultad por defecto", - "SETTINGS.DefaultDifficultyHint": "Puedes indicar la dificultad por defecto de las tiradas. Desconocida lanzará tiradas sin que el jugador conozca la dificultad", - "SETTINGS.CheckDifficultyRegular": "Dificultad por defecto", - "SETTINGS.CheckDifficultyUnknown": "Dificultad desconocida", - "SETTINGS.showIconsOnly": "En la hoja resumen, mostrar solo los iconos en la lista de habilidades", - "SETTINGS.UseToken": "Usar imagen del icono", - "SETTINGS.UseTokenHint": "Usar la imagen del icono en lugar de los retratos en las cartas del chat", - "SETTINGS.DisplayActorOnCard": "Mostrar actor en carta", - "SETTINGS.DisplayActorOnCardHint": "Mostrar la imagen/icono del actor en las cartas de chat de combate", - "SETTINGS.InitiativeRule": "Mecánica de cálculo de iniciativa", - "SETTINGS.InitiativeRuleHint": "Puedes elegir entre la iniciativa básica (valores de DES) o la regla opcional (tirada de DES)", - "SETTINGS.InitiativeRuleBasic": "Básica", - "SETTINGS.InitiativeRuleOptional": "Opcional", - "SETTINGS.displayInitDices": "Mostrar dado de iniciativa", - "SETTINGS.displayInitDicesHint": "Mostrar los dados cuando se tire iniciativa (solo cuando se usa la regla opcional)", - "SETTINGS.displayInitAsText": "Mostrar iniciativa como texto", - "SETTINGS.displayInitAsTextHint": "Mostrar la iniciativa como texto en lugar de un número (solo en las reglas opcionales)", - "SETTINGS.PulpRules": "Reglas Pulp", - "SETTINGS.PulpRulesHint": "Permite usar las reglas de Pulp Cthulhu (Arquetipos, Talentos, PV), ¡en fase de desarrollo!", - "SETTINGS.developmentRollForLuck": "Recuperación de puntos de suerte", - "SETTINGS.developmentRollForLuckHint": "Cada jugador puede hacer una tirada para recuperar suerte en la fase de desarrollo", - "SETTINGS.displayPlayerNameOnSheet": "Mostrar nombre del jugador en la hoja de personaje", - "SETTINGS.DisregardAmmo": "Ignorar la munición", - "SETTINGS.DisregardAmmoHint": "Al activar esta opción no se tendrán en cuenta la munición cargada en el arma a la hora de disparar", - "SETTINGS.DisregardUsePerRound": "Ignorar el número de usos por asalto", - "SETTINGS.DisregardUsePerRoundHint": "Al activar esta opción, se podrá disparar sin restricciones, ignorando el número de disparos que un arma puede realizar por asalto", - "SETTINGS.RestrictGridSpaces": "Medir usando espacios de rejilla", - "SETTINGS.RestrictGridSpacesHint": "En el combate a distancia, si se selecciona esta opción las distancias se medirán usando espacios de rejilla (cuadrados o hexágonos) en lugar de la distancia 'real' (euclidiana)", - "SETTINGS.StatusPlayerEditable": "Los jugadores pueden modificar estados", - "SETTINGS.StatusPlayerEditableHint": "Permite que el jugador modifique sus estados (caído, inconsciente, moribundo, muerto) y reinicie su perdida diaria de COR", - "SETTINGS.SyncDice3D": "[DsN] Sincronizar dados", - "SETTINGS.SyncDice3DHint": "Cuando se usa Dice so Nice (DsN), permite sincronizar los dados entre clientes", - "SETTINGS.UnitDieColorset": "[DsN] Configuración de dado de unidades", - "SETTINGS.UnitDieColorsetHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de unidades (si no se especifica otra cosa, usa los valores por defecto del jugador)", - "SETTINGS.TenDieNoMod": "[DsN] Configuración de dado de decenas", - "SETTINGS.TenDieNoModHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de decenas (si no se especifica otra cosa, usa los valores por defecto del jugador)", - "SETTINGS.TenDieBonus": "[DsN] Configuración de dado de bonificación", - "SETTINGS.TenDieBonusHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de bonificación (si no se especifica otra cosa, usa los valores por defecto del jugador)", - "SETTINGS.TenDiePenalty": "[DsN] Configuración de dado de penalización", - "SETTINGS.TenDiePenaltyHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de penalización (si no se especifica otra cosa, usa los valores por defecto del jugador)", - "SETTINGS.OverrideGameArtwork": "Sobrescribir arte del juego", - "SETTINGS.OverrideGameArtworkHint": "!!REQUIERE REINICIAR!! da acceso al modo de configuración avanzada, deje en blanco para usar la configuración por defecto", - "SETTINGS.ArtPauseImage": "Imagen de pausa", - "SETTINGS.ArtPauseImageHint": ". Escriba 'null' para quitar la imagen", - "SETTINGS.ArtPauseText": "Texto de pausa", - "SETTINGS.ArtPauseTextHint": "Deje en blanco para usar el texto por defecto", - "SETTINGS.OverrideSheetArtwork": "Sobrescribir arte de la hoja de PJ", - "SETTINGS.OverrideSheetArtworkHint": "!!REQUIERE REINICIAR!! Da acceso a la configuración avanzada de la hoja de personaje, deje las opciones en blanco para usar los valores por defecto", - "SETTINGS.ArtWorkSheetBackground": "Fondo de la hoja de PJ", - "SETTINGS.ArtWorkSheetBackgroundHint": "escriba 'null' para quitar el fondo", - "SETTINGS.ArtWorkSheetBackgroundType": "Tipo de fondo", - "SETTINGS.BackgroundSlice": "La imagen de fondo será recortada (css:border-image)", - "SETTINGS.BackgroundAuto": "Redimensiona la imagen manteniendo proporciones (css:auto)", - "SETTINGS.BackgroundContain": "Redimensiona y rellena sin recortar/estirar (css:contain)", - "SETTINGS.BackgroundCover": "Redimensiona y rellena recortando/estirando (css:cover)", - "SETTINGS.ArtWorkOtherSheetBackground": "Fondo del resto de hojas", - "SETTINGS.ArtWorkOtherSheetBackgroundHint": "escriba 'null' para quitar el fondo. Por ahora, solo se aplica a objetos y vehículos", - "SETTINGS.ArtworkSheetImage": "Imagen de la hoja de PJ", - "SETTINGS.ArtworkSheetImageHint": "escriba 'null' para quitar la imagen", - "SETTINGS.ArtworkFrontColor": "Color principal", - "SETTINGS.ArtworkFrontColorHint": "Se usa para todos los elementos", - "SETTINGS.ArtworkBackgroundColor": "Color secundario", - "SETTINGS.ArtworkBackgroundColorHint": "Se usa para fondos y campos de entrada", - "SETTINGS.ArtworkInteractiveColor": "Color de elementos interactivos", - "SETTINGS.ArtworkInteractiveColorHint": "Se usa para elementos interactivos/tablas dinámicas", - "SETTINGS.ArtworkFixedSkillLength": "Limitar la longitud de las habilidades", - "SETTINGS.ArtworkFixedSkillLengthHint": "La longitud de las habilidades se limitará para que la pestaña de habilidades tenga un aspecto más compacto", - "SETTINGS.ArtworkMainFont": "Fuente principal", - "SETTINGS.ArtworkMainFontBold": "Fuente principal (negrita)", - "SETTINGS.ArtworkMainFontSize": "Tamaño de fuente por defecto (px)", - "SETTINGS.BoutOfMadnessSummaryTable": "Tabla de episodios de locura (resumidos)", - "SETTINGS.BoutOfMadnessRealTimeTable": "Tabla de episodios de locura (en tiempo real)", - "SETTINGS.LetKeeperDecide": "A decisión del Guardián", - "SETTINGS.DisplayResultType": "Mostrar el resultado de la tirada (texto)", - "SETTINGS.DisplayCheckSuccessLevel": "Mostrar el nivel de éxito de la tirada (estrellas/arañas)", - "SETTINGS.PlayerUnlockSheetMode": "Los jugadores pueden desbloquear la hoja de personaje", - "SETTINGS.AlwaysEditable": "Siempre", - "SETTINGS.CreationModeOnly": "Solo en modo de creación de personajes", - "SETTINGS.NeverEditable": "Nunca (solo el Guardián)", - "SETTINGS.StanbyGMRolls": "Pausar tiradas del Guardián", - "SETTINGS.StanbyGMRollsHint": "Cuando el Guardián haga una tirada desde una hoja de personaje, mostrar un botón de tirada en lugar de hacer la tirada", - "SETTINGS.AllowFlatDiceModifier": "Modificador simple a las tiradas", - "SETTINGS.AllowFlatDiceModifierHint": "Permite aplicar un modificadores simple a las tiradas de dados", - "SETTINGS.AllowFlatThresholdModifier": "Modificador simple a los umbrales de éxito", - "SETTINGS.AllowFlatThresholdModifierHint": "Permite aplicar un modificador simple al umbral de éxito en la tirada", - "SETTINGS.OpposedRollTieBreaker": "Método alternativo Viriato139ac para deshacer empates", - "SETTINGS.OpposedRollTieBreakerHint": "Si en una tirada enfrentada ambos contendientes sacan el mismo grado de éxito, se declarará ganador al haya sacado un resultado mayor en la tirada, no el que tenga la habilidad más alta", - "SETTINGS.SelfRollWhisperTarget": "Notificación de tirada propia:", - "SETTINGS.SelfRollWhisperTargetHint": "Cuando se haga una tirada propia como GM quiere que se envíe notificación a", - "SETTINGS.DoNotAdvise": "Solo a ti mismo", - "SETTINGS.AdviseOwnersOnly": "Al propietario del actor", - "SETTINGS.AdviseAllPlayer": "A todos los jugadores", - "SETTINGS.OneBlockBackStory": "Trasfondo en un solo bloque", - "SETTINGS.OneBlockBackStoryHint": "Convertir el transfondo en un solo bloque de edición, se pueden añadir formateo y pegar enlaces", - "SETTINGS.EnableStatusIcons": "Activar iconos de estado", - "SETTINGS.EnableStatusIconsHint": "Determina si se deben mostrar de los efectos de combate y cordura en los iconos", - "SETTINGS.ShowExperimentalFeatures": "Mostrar características experimentales", - "SETTINGS.ShowExperimentalFeaturesHint": "Su mundo puede corromperse en próximas versiones si usa estas características. Solo para pruebas, no las use en sus mundos de juego", - "CoC7.ExperimentalFeaturesWarning": "Esta característica está en desarrollo y no se recomienda su uso en sus mundos de juego", - "SETTINGS.CheckElevation": "Incluir elevación en la distancia", - "SETTINGS.CheckElevationHint": "Usa la elevación en el combate a distancia para medir alcances", - "CoC7.toolTipDelay": "Retraso en milisegundos que tarda en aparecer los mensajes emergentes, ajustar a 0 para no mostrarlos nunca" -} +{ + "I18N.LANGUAGE": "Español", + "I18N.MAINTAINERS": "@Viriato139ac#0342", + + "CoC7.title": "La Llamada de Cthulhu 7a Edición (no oficial)", + + "CoC7.Entities.Character": "Personaje", + "CoC7.Entities.Container": "Contenedor", + "CoC7.Entities.Creature": "Criatura", + "CoC7.Entities.Npc": "PNJ", + "CoC7.Entities.Vehicle": "Vehículo", + + "CoC7.Entities.Archetype": "Arquetipo", + "CoC7.Entities.Book": "Tomo", + "CoC7.Entities.Chase": "Persecución", + "CoC7.Entities.Item": "Objeto", + "CoC7.Entities.Occupation": "Ocupación", + "CoC7.Entities.Setup": "Configuración", + "CoC7.Entities.Skill": "Habilidad", + "CoC7.Entities.Spell": "Hechizo", + "CoC7.Entities.Status": "Estado", + "CoC7.Entities.Talent": "Talento", + "CoC7.Entities.Weapon": "Arma", + + "CHARAC.STR": "FUE", + "CHARAC.Strengh": "Fuerza", + "CHARAC.Strength": "Fuerza", + "CHARAC.CON": "CON", + "CHARAC.Constitution": "Constitución", + "CHARAC.SIZ": "TAM", + "CHARAC.Size": "Tamaño", + "CHARAC.DEX": "DES", + "CHARAC.Dexterity": "Destreza", + "CHARAC.APP": "APA", + "CHARAC.Appearance": "Apariencia", + "CHARAC.INT": "INT", + "CHARAC.Intelligence": "Inteligencia", + "CHARAC.POW": "POD", + "CHARAC.Power": "Poder", + "CHARAC.EDU": "EDU", + "CHARAC.Education": "Educación", + "CoC7.PlayerName": "Jugador", + "CoC7.Name": "Nombre", + "CoC7.Archetype": "Arquetipo", + "CoC7.Occupation": "Ocupación", + "CoC7.Age": "Edad", + "CoC7.Sex": "Género", + "CoC7.Residence": "Residencia", + "CoC7.Birthplace": "Nacimiento", + "CoC7.Organization": "Organización", + "CoC7.HitPoints": "Puntos de vida", + "CoC7.HP": "PV", + "CoC7.MagicPoints": "Puntos de magia", + "CoC7.MP": "PM", + "CoC7.SanityPoints": "Puntos de cordura", + "CoC7.Sanity": "Cordura", + "CoC7.SAN": "COR", + "CoC7.DailySanLoss": "Pérdida diaria de COR :", + "CoC7.DailyLoss": "Pérdida diaria", + "CoC7.Luck": "Suerte", + "CoC7.Movement": "Movimiento", + "CoC7.Mov": "Mov", + "CoC7.BonusDamage": "Bonif. Daño", + "CoC7.DB": "BD", + "CoC7.Build": "Corpulencia", + "CoC7.Skills": "Habilidades", + "CoC7.Skill": "Habilidad", + "CoC7.Combat": "Combate", + "CoC7.Possessions": "Posesiones", + "CoC7.Background": "Trasfondo", + "CoC7.Notes": "Notas", + "CoC7.DailySanIconOver": "Reiniciar", + "CoC7.Prone": "Caído", + "CoC7.Unconsious": "Inconsciente", + "CoC7.CriticalWounds": "Herida grave", + "CoC7.Dying": "Moribundo", + "CoC7.DyingCheck": "Tirada de CON para evitar la muerte", + "CoC7.Dead": "Muerto", + "CoC7.Resist": "Resistido", + "CoC7.UnderlyingInsanity": "Locura subyacente", + "CoC7.TemporaryInsanity": "Locura temporal", + "CoC7.IndefiniteInsanity": "Locura indefinida", + "CoC7.NotInsane": "Ninguna", + "CoC7.UnlockActor": "Desbloquear Actor", + "CoC7.LockActor": "Bloquear Actor", + "CoC7.NpcRollCharacteristics": "Tirar para características aleatorias", + "CoC7.NpcAvarageCharacteristics": "Características medias", + "CoC7.NpcCharacteristicsFormula": "Fórmula", + "CoC7.NpcCharacteristicsValues": "Valores", + "CoC7.language": "Idioma", + "CoC7.Author": "Autor", + "CoC7.Date": "Fecha", + "CoC7.Spells": "Hechizos", + "CoC7.Spell": "Hechizo", + "CoC7.Spells&Notes": "Hechizos y Notas", + "CoC7.Weapons": "Armas", + "CoC7.Effects": "Efectos", + "CoC7.Cost": "Coste", + "CoC7.Source": "Fuente", + "CoC7.SpellDetails": "Detalles del hechizo", + "CoC7.Details": "Detalles", + "CoC7.Other": "Otros", + "CoC7.rounds": "asalto(s)", + "CoC7.hours": "hora(s)", + "CoC7.weeks": "semana(s)", + "CoC7.remove": "Quitar", + "CoC7.Any": "Cualquiera", + "CoC7.All": "Todos", + "CoC7.Success": "Éxito", + "CoC7.CustomLabel": "Etiqueta personalizada", + "CoC7.SpecificLocations": "Localizaciones específicas", + "CoC7.ArmourPlating": "Blindaje", + "CoC7.Location": "Localizacion", + "CoC7.Properties": "Propiedades", + "CoC7.Attributes": "Atributos", + "CoC7.Attribute": "Atributo", + "CoC7.Collapse": "Encoger", + "CoC7.Expand": "Expandir", + "CoC7.Blind": "Oculta", + "CoC7.Label": "Etiqueta", + "CoC7.Icon": "Icono", + "CoC7.Check": "Prueba", + "CoC7.ItemWeapon": "Objeto (arma)", + "CoC7.AttacksPerRound": "Ataques por asalto", + + "CoC7.Cast": "Lanzamiento", + "CoC7.SanityCost": "Coste COR", + "CoC7.PowerCost": "Coste POD", + "CoC7.HitPointsCost": "Coste PVs", + "CoC7.MagicPointsCost": "Coste PMs", + "CoC7.OtherCosts": "Otro coste", + "CoC7.CastingSpell": "Lanzando {spell}.", + "CoC7.NotEnoughMagicPoints": "El hechizo {spell} cuesta {originalMagicPoints} PMs, pero solo dispone de {actorMagicPoints}. ¿Desea tomar los restantes {convertedHitPoints} de sus PVs? Se le causará un daño de {convertedHitPoints} PVs si continúa", + + "CoC7.CopyToClipboard": "Copiar al portapapeles", + "CoC7.WhisperToSelection": "Susurrar a iconos seleccionados", + "CoC7.WhisperTo": "Susurrar a", + "CoC7.SendToChat": "Enviar al chat", + + "CoC7.RegularSuccess": "Éxito normal", + "CoC7.HardSuccess": "Éxito difícil", + "CoC7.ExtremeSuccess": "Éxito extremo", + "CoC7.CriticalSuccess": "Éxito crítico", + "CoC7.Fumble": "Pifia", + "CoC7.Failure": "Fallo", + "CoC7.Malfunction": "{itemName} sufre una avería", + + "CoC7.Dice": "Dados", + "CoC7.DiceModifierBonus": "bonificación", + "CoC7.DiceModifierPenalty": "penalización", + "CoC7.Modifiers": "Modificadores", + "CoC7.BonusDice": "Dados de bonificación", + "CoC7.UnitsDie": "1 dado de unidades", + "CoC7.TensDie": "dado de decenas", + "CoC7.TensDice": "dado(s) de decenas", + "CoC7.SuccessRequired": "se requiere un éxito {successRequired}", + "CoC7.Roll": "Tirar dados", + "CoC7.Pushing": "Forzando... ", + "CoC7.PushingSkill": ": ¡forzando tirada!", + "CoC7.PushSkill": "Forzar tirada", + "CoC7.PushedRoll": "(tirada forzada)", + "CoC7.SpendLuck": "Gastar {luckNeededValue} puntos de Suerte para superar la tirada", + "CoC7.LuckSpent": "{luckAmount} puntos de Suerte gastados para superar la tirada", + "CoC7.LuckSpentAlt": "Suerte gastada", + "CoC7.LuckError": "{actorName} no tiene suficiente Suerte para superar la tirada", + "CoC7.check.AutoSuccess": "Éxito Autom.", + "CoC7.check.AutoFailure": "Fallo Autom.", + "CoC7.RevealCheck": "Mostrar tirada", + "CoC7.RevealSanLoss": "Mostar pérdida de COR", + "CoC7.check.ForcePass": "Forzar éxito", + "CoC7.check.ForceFail": "Forzar fallo", + "CoC7.check.FlagForDevelopment": "Premiar experiencia", + "CoC7.IncreaseSuccessLevel": "Incrementar nivel de éxito", + "CoC7.check.DecreaseSuccessLevel": "Disminuir nivel de éxito", + "CoC7.RollSecretDice": "El Guardián ha hecho una tirada privada", + "CoC7.KeeperSentDecoy": "Se ha enviado a los jugadores una tirada señuelo", + "CoC7.FakeRoll": "Mandar a los jugadores una tirada señuelo", + + "CoC7.ConstitutionCheck": "Tirada de Constitución", + + "CoC7.SanDataSelectionWindow": "Seleccionar pérdidas de COR", + "CoC7.BonusSelectionWindow": "Seleccionar dificultad y bonificación", + "CoC7.BonusSelectionWindowNamed": "Seleccione modificador para la tirada de {name}", + "CoC7.SkillDetailsWindow": "Ventana de detalles de la habilidad", + "CoC7.RegularDifficulty": "normal", + "CoC7.HardDifficulty": "difícil", + "CoC7.ExtremeDifficulty": "extrema", + "CoC7.CriticalDifficulty": "crítica", + "CoC7.UnknownDifficulty": "desconocida", + "CoC7.RollDifficulty": "Dificultad de la tirada", + "CoC7.RollThreshold": "Umbral de éxito", + "CoC7.FlatDiceModifier": "Modificador a la tirada", + "CoC7.FlatModifier": "Modificador al umbral de éxito", + "CoC7.RollDifficultyUnknown": "Desconocida", + "CoC7.RollDifficultyRegular": "Normal", + "CoC7.RollDifficultyHard": "Difícil", + "CoC7.RollDifficultyExtreme": "Extrema", + "CoC7.RollDifficultyCritical": "Crítica", + "CoC7.RollResult.LuckSpendText": "{luckAmount} puntos de Suerte gastados, {successLevel} superado", + "CoC7.RollDice": "¡Tirar dados!", + "CoC7.CreateLink": "Crear enlace a tirada", + "CoC7.SuccesLevelHint": "{value} nivel(es) de éxito", + "CoC7.FailureLevelHint": "Fallo por {value} nivel(es)", + "CoC7.CombinedRollCard": "Tarjeta de tiradas combinadas", + "CoC7.OpposedRollCard": "Tarjeta de tiradas enfrentadas", + "CoC7.CombinedAnyHint": "Solo es necesario que una tirada tenga éxito", + "CoC7.CombinedAllHint": "Todas las tiradas tienen que tener éxito", + "CoC7.CloseCard": "Finalizar tarjeta", + + "CoC7.CheckResult": "Tirada de {name} ({value}%), dificultad {difficulty}", + "CoC7.ItemCheckResult": "{item} - tirada de {skill} ({value}%), dificultad {difficulty}", + "CoC7.CheckRawValue": "({rawvalue}%), dificultad {difficulty}", + + "CoC7.ArmorAbsorbsDamage": "La armadura absorbe el daño", + "CoC7.Critical": "Crítico", + "CoC7.Impale": "Empala", + "CoC7.CriticalTitle": "El impacto ha sido crítico", + "CoC7.ImpaleTitle": "El arma puede empalar", + "CoC7.Target": "Objetivo", + "CoC7.TargetOutOfRange": "Objetivo fuera de alcance", + "CoC7.NoTargetToDamage": "Sin objetivo al que aplicar el daño", + "CoC7.ShotIsImpossible": "Disparo imposible", + "CoC7.OutOfAmmo": "Sin munición", + "CoC7.OutOfShots": "No es posible realizar más disparos", + + "CoC7.BonusDamageRoll": "Tirada de Bonificación de Daño", + "CoC7.Type": "Tipo", + "CoC7.FightBack": "Contraatacar", + "CoC7.Dodge": "Esquivar", + "CoC7.Maneuver": "Maniobra", + "CoC7.NoResponse": "No reaccionar", + "CoC7.OutNumbered": "Superado", + "CoC7.combatCard.surprised": "Sorprendido", + "CoC7.combatCard.autoSuccess": "Éxito Automático", + "CoC7.Advantage": "Ventaja", + "CoC7.Disadvantage": "Desventaja", + "CoC7.TitleAdvantage": "Añadir 1 dado de bonificación (el objetivo está boca abajo, inmovilizado...)", + "CoC7.TitleDisadvantage": "Añadir 1 dado de penalización (por estar boca abajo, inmovilizado...)", + "CoC7.TitleOutNumbered": "Añadir 1 dado de bonificación por objetivo en inferioridad numérica", + "CoC7.TitleSurprised": "Añadir 1 dado de bonificación por objetivo sorprendido", + "CoC7.TitleAutoSuccess": "El ataque impacta automáticamente", + "CoC7.WinnerRollDamage": "{name} ha ganado. Tirar daño", + "CoC7.InitiatorMissed": "{name} falló.", + "CoC7.NoWinner": "Ambas partes han fallado", + "CoC7.DodgeSuccess": "{name} ha esquivado!", + "CoC7.ManeuverSuccess": "La maniobra {name} ha tenido éxito", + "CoC7.AttackSuccess": "{name} landed a blow.", + "CoC7.InflictPain": "Aplicar daño", + "CoC7.AdvantageAttacker": "Ventaja: Atacante", + "CoC7.AdvantageDefender": "Ventaja: Defensor", + "CoC7.Tie": "Empate", + "CoC7.DamageInflicted": "Daño causado", + "CoC7.TotalDamage": "Daño total", + + "CoC7.combatCard.dive4cover": "Ponerse a Cubierto", + + "CoC7.rangeCombatCard.SingleShot": "Disparo único", + "CoC7.rangeCombatCard.MultipleShots": "Disparos múltiples", + "CoC7.AutomaticFire": "Fuego automático", + "CoC7.rangeCombatCard.Burst": "Ráfaga", + "CoC7.rangeCombatCard.FullAuto": "Fuego automático", + "CoC7.rangeCombatCard.BaseRange": "Alcance básico", + "CoC7.rangeCombatCard.LongRange": "Largo alcance", + "CoC7.rangeCombatCard.ExtremeRange": "Muy largo alcance", + "CoC7.rangeCombatCard.OutOfRange": "Fuera del alcance", + "CoC7.rangeCombatCard.Cover": "A cubierto", + "CoC7.rangeCombatCard.PointBlankRange": "A bocajarro", + "CoC7.rangeCombatCard.NormalTarget": "Objetivo normal", + "CoC7.rangeCombatCard.BigTarget": "Objetivo grande", + "CoC7.combatCard.SmallTarget": "Objetivo pequeño", + "CoC7.rangeCombatCard.FastMovingTarget": "Objetivo rápido", + "CoC7.rangeCombatCard.InMelee": "En combate cuerpo a cuerpo", + "CoC7.rangeCombatCard.aiming": "Apuntando", + "CoC7.rangeCombatDamage": "{name} recibe {total} puntos de daño", + "CoC7.rangeCombatDamageArmor": "{name} recibe {total} punto/s de daño. ({armor} absorbido/s)", + "CoC7.RollDamage": "Tirada de daño", + "CoC7.BulletsFired": "Balas disparadas", + "CoC7.Shots": "Disparos", + "CoC7.Shoot": "Disparo", + "CoC7.ShotBullets": "Disparar {bullets} tiros al objetivo {actor}", + "CoC7.ShotVoley": "Disparando una ráfaga de {bullets} tiros al objetivo {actor}", + "CoC7.rangeCombatCard.AimingTitle": "Añade 1 dado de bonificación al primer disparo", + "CoC7.rangeCombatCard.CoverTitle": "1 dado de penalización. El objetivo tiene cobertura o se ha puesto a cubierto", + "CoC7.rangeCombatCard.PointBlankRangeTitle": "1 dado de bonificación. Objetivo a distancia de bocajarro", + "CoC7.rangeCombatCard.BigTargetTitle": "1 dado de bonificación por objetivo grande (corpulencia > 4)", + "CoC7.rangeCombatCard.SmallTargetTitle": "1 dado de penalización por objetivo pequeño", + "CoC7.rangeCombatCard.NormalTargetTitle": "Objetivo de tamaño normal, sin bonificación/penalización", + "CoC7.rangeCombatCard.InMeleeTitle": "1 dado de penalización. Objetivo trabado en combate cuerpo a cuerpo", + "CoC7.rangeCombatCard.FastMovingTargetTitle": "1 dado de penalización. Objetivo veloz (MOV 8+) moviéndose rápido", + + "CoC7.meleeCombatDamageTakes": "recibe", + "CoC7.meleeCombatDamageFrom": "de", + "CoC7.meleeCombatDamageDeals": "inflige", + "CoC7.meleeCombatDamageWith": "con", + + "CoC7.DropZone": "DropZone", + + "CoC7.Value": "Valor", + "CoC7.SkillValue": "Valor Habilidad", + "CoC7.SkillBase": "Base", + "CoC7.BaseSkillValue": "Valor base de la habilidad", + "CoC7.SkillExperience": "Experiencia", + "CoC7.SkillArchetype": "Arquetipo", + "CoC7.SkillOccupation": "Ocupacion", + "CoC7.SkillPersonal": "Particulares", + + "CoC7.SkillTotalExperience": "Puntos de experiencia", + "CoC7.SkillTotalArchetype": "Puntos de arquetipo", + "CoC7.SkillTotalOccupation": "Puntos de ocupación", + "CoC7.SkillTotalPersonal": "Intereses particulares", + "CoC7.CharacteristicsPoints": "Puntos de características", + "CoC7.TotalPoints": "Puntos de ocupación totales", + + "CoC7.ItemQuantity": "Cantidad", + "CoC7.ItemWeight": "Peso", + "CoC7.ItemDetails": "Detalles", + "CoC7.Description": "Descripción", + "CoC7.Reload": "Clic Izqdo/Decho : añade/quita 1 bala\nMayús + clic Izqdo/Decho : recargar/vaciar", + "CoC7.WeaponRange": "Alcance", + "CoC7.WeaponDamage": "Daño", + "CoC7.Weapon.BlastRadius": "Radio de explosión", + "CoC7.WeaponMalfunction": "Avería", + "CoC7.WeaponUsesPerRound": "Asaltos/uso", + "CoC7.WeaponUsesPerRoundHint": "Ataques por asalto (1/3 indica: 1 ataque cada 3 asaltos)", + "CoC7.WeaponSheet.RoundsPerUse.Info": "Número de asaltos de preparación necesarios para disparar el arma de nuevo", + "CoC7.WeaponMax": "Disparos/asalto", + "CoC7.BurstSize": "Balas/ráfaga", + "CoC7.BurstSizeHint": "Numero de balas por cada ráfaga", + "CoC7.WeaponBulletsInMag": "Cargador", + "CoC7.WeaponSpecial": "Especial", + "CoC7.ItemPrice": "Precio", + "CoC7.Armor": "Armadura", + + "CoC7.EraNvct": "Invictus", + "CoC7.EraDrka": "Edad Oscura", + "CoC7.EraDdts": "El Viejo Oeste", + "CoC7.EraGlit": "Luz de Gas", + "CoC7.Era1920": "Años 20", + "CoC7.EraPulp": "Pulp Cthulhu", + "CoC7.EraMdrn": "Época Actual", + "CoC7.Eras": "Épocas Cthulhu", + + "CoC7.SkillNoAdjustments": "Sin ajustes", + "CoC7.SkillNoXpGain": "Sin ganancia de EXP", + "CoC7.SkillSpecial": "Especialización", + "CoC7.SkillRarity": "Infrecuente", + "CoC7.SkillPush": "Forzada", + "CoC7.SkillCombat": "Combate", + "CoC7.SkillFighting": "Combatir", + "CoC7.SkillFirearm": "Armas de fuego", + + "CoC7.WeaponRngd": "Alcance", + "CoC7.WeaponProperyManeuver": "Maniobra", + "CoC7.WeaponTouch": "Toque", + "CoC7.WeaponImpl": "Empala", + "CoC7.WeaponRare": "Rara", + "CoC7.WeaponAhdb": "+BD/2", + "CoC7.WeaponAddb": "+BD", + "CoC7.WeaponSlnt": "Silenciosa", + "CoC7.WeaponXplv": "Explosivos", + "CoC7.WeaponBrst": "Ráfaga", + "CoC7.WeaponAuto": "Fuego automático", + "CoC7.WeaponSpcl": "Especial", + "CoC7.WeaponMont": "Montada", + "CoC7.WeaponDbrl": "Dos cañones", + "CoC7.WeaponBlst": "Explosiva", + "CoC7.WeaponStun": "Aturdimiento", + "CoC7.Weapon.Property.Melee": "Cuerpo a cuerpo", + "CoC7.Weapon.Property.Thrown": "Arrojadiza", + "CoC7.Weapon.Property.Burn": "Fuego", + "CoC7.Weapon.Property.Shotgun": "Escopeta", + + "CoC7.ErrorItem": "No se pudo localizar el ítem", + "CoC7.ErrorActor": "No se pudo localizar al actor", + "CoC7.ErrorInvalidFormula": "{value} no es una fórmula válida", + "CoC7.ErrorInvalid": "inválido", + "CoC7.Validate": "Validar", + "CoC7.Apply": "Aplicar", + + "CoC7.NewBioSectionName": "Nueva Sección", + + "CoC7.DodgeSkillName": "Esquivar", + "CoC7.CthulhuMythosName": "Mitos de Cthulhu", + "CoC7.CreditRatingSkillName": "Crédito", + "CoC7.DriveAutoSkillName": "Conducir automóvil", + "CoC7.FightingSpecializationName": "Combatir", + "CoC7.FirearmSpecializationName": "Armas de fuego", + "CoC7.DriveSpecializationName": "Conducir", + "CoC7.PilotSpecializationName": "Pilotar", + "CoC7.AnySpecName": "Genérica", + "CoC7.BoutOfMadnessName": "Episodio de Locura", + "CoC7.InsanityName": "Locura", + + "CoC7.NewSkillName": "nueva habilidad", + "CoC7.AddSkill": "Añadir habilidad", + "CoC7.DevelopemmentPhase": "Fase de Desarrollo", + "CoC7.RecoverLuckPoints": "Recuperar puntos de suerte", + "CoC7.SkillCantGainXp": "Esta habilidad no puede ganar XP automáticamente", + "CoC7.SkillUnflagForDevelopement": "Desmarcar para desarrollo", + "CoC7.SkillFlagForDevelopement": "Marcar para desarrollo", + "CoC7.RollAll4Dev": "Tirando desarrollo de todas las habilidades", + "CoC7.RollLuck4Dev": "Tirando desarrollo para suerte", + "CoC7.DevRollTitle": "Tirando desarrollo de {item}: {die}/{score}%", + "CoC7.DevSuccessDetails": "{item} se ha aumentado un {augment}%", + "CoC7.SanGained": "Ha recuperado 2d6 ({results} = {sanGained}) de cordura tras dominar la habilidad {skill} con un {skillValue}%", + "CoC7.DevFailureDetails": "{item} NO se ha aumentado", + "CoC7.DevSuccess": "({die}/{score}%), {item} se ha aumentado un {augment}%", + "CoC7.DevFailure": "({die}/{score}%), {item} NO se ha aumentado", + "CoC7.LuckIncreased": "{augment} puntos de suerte recuperados ({die}/{score})", + "CoC7.LuckNotIncreased": "No se ha recuperado suerte ({die}/{score})", + "CoC7.DevelopAttribWarn": "No tiene acceso a algunos atributos en el modo desarrollo/creación", + "CoC7.SkillDetail": "Detalles", + "CoC7.EditSkill": "Editar habilidad", + "CoC7.DeleteSkill": "Eliminar habilidad", + "CoC7.RangeSkills": "Habilidades de combate a distancia", + "CoC7.MeleeSkills": "Habilidades de combate cuerpo a cuerpo", + "CoC7.NewItemName": "nuevo objeto", + "CoC7.AddItem": "Añadir objeto", + "CoC7.EditItem": "Editar objeto", + "CoC7.DeleteItem": "Eliminar objeto", + "CoC7.TradeItem": "Cambiar/almacenar objeto", + "CoC7.SortBySkillName": "Ordenar por nombre de habilidad", + "CoC7.SortBySkillValue": "Ordenar por porcentaje de habilidad", + "CoC7.UncommonSkillsShow": "Mostrar habilidades infrecuentes", + "CoC7.UncommonSkillsHide": "Ocultar habilidades infrecuentes", + + "CoC7.NewBookName": "nuevo tomo", + "CoC7.AddBook": "Añadir tomo", + "CoC7.NewSpellName": "nuevo hechizo", + "CoC7.AddSpell": "Añadir hechizo", + + "CoC7.AddWeapon": "Añadir arma", + "CoC7.NewWeaponName": "nueva arma", + "CoC7.EditWeapon": "Editar arma", + "CoC7.DeleteWeapon": "Eliminar arma", + "CoC7.MeleeWeapons": "Armas cuerpo a cuerpo", + "CoC7.RangeWeapons": "Armas a distancia", + "CoC7.WeaponName": "Nombre", + "CoC7.WeaponSkill": "Habilidad", + "CoC7.WeaponSkillAlt": "Hab. alternativa", + "CoC7.Inventory": "Inventario", + "CoC7.InventoryIsCurrentlyEmpty": "Inventario actualmente vacío", + "CoC7.CharacterDevelopment": "Desarrollo", + "CoC7.OccupationSkill": "Habilidad de ocupación", + "CoC7.ArchetypeSkill": "Habilidad de arquetipo", + "CoC7.UseFormula": "Usar tirada de dados", + "CoC7.EnterFormula": "Introducir fórmula", + "CoC7.SanRollHint": "Tirar Cordura a todos los objetivos seleccionados", + "CoC7.SANCheckTitle": "Pérdida de COR : {name} ({sanMin}/{sanMax})", + "CoC7.NoSkill": "Sin habilidad", + "CoC7.AddWeapontHint": "

                  {actor} no dispone de {weapon}.
                  ¿Desea crearlo ?

                  ", + + "CoC7.LinkCheck": "Tirada de {name}", + "CoC7.LinkCheckDiff": "Tirada [{difficulty}] de {name}", + "CoC7.LinkCheckModif": "Tirada de {name} ({modifier}): ", + "CoC7.LinkCheckDiffModif": "Tirada [{difficulty}] de {name} ({modifier})", + "CoC7.LinkSanLoss": "Tirada de COR, ({sanMin}/{sanMax})", + "CoC7.LinkSanLossDiff": "Tirada [{difficulty}] de COR, ({sanMin}/{sanMax})", + "CoC7.LinkSanLossModif": "Tirada de COR ({modifier}), ({sanMin}/{sanMax})", + "CoC7.LinkSanLossDiffModif": "Tirada [{difficulty}] de COR ({modifier}), ({sanMin}/{sanMax})", + "CoC7.LinkItem": " de {name}", + "CoC7.LinkItemDiff": " [{difficulty}] de {name}", + "CoC7.LinkItemModif": " de {name} ({modifier})", + "CoC7.LinkItemDiffModif": " [{difficulty}] de {name} ({modifier})", + + "CoC7.ManualCreditValues": "Crédito manual", + "CoC7.MonetarySymbol": "Símbolo :", + "CoC7.MonetaryFactor": "Factor :", + "CoC7.AutoCreditValues": "Cambiar a cálculo automático/manual", + "CoC7.MonetarySpendingLevel": "Nivel de gasto :", + "CoC7.MonetaryCash": "Dinero :", + "CoC7.MonetarySpent": "Gastado :", + "CoC7.MonetaryAssets": "Propiedades :", + "CoC7.MonetaryAssetsDetails": "Detalles de las propiedades", + + "CoC7.PossessionsNotes": "Notas :", + "CoC7.PossessionsNotesHolder": "Notas", + + "CoC7.BackgroundNewSection": "Añadir nueva sección", + "CoC7.BackgroundSectionNameHolder": "Título de la sección", + "CoC7.BackgroundDeleteSection": "Eliminar sección", + "CoC7.BackgroundSectionMoveUp": "Subir", + "CoC7.BackgroundSectionMoveDown": "Bajar", + + "CoC7.creatureFightingSkill": "Combatir", + + "CoC7.InvoluntaryAction": "Acción involuntaria", + "CoC7.InvoluntaryActionPerfomed": "Acción involuntaria realizada", + "CoC7.SanityCheck": "Tirada de Cordura", + "CoC7.IntCheck": "Tirada de INT", + "CoC7.NoSanLoss": "Sin pérdida de COR", + "CoC7.SANLoss": "Pérdida de COR", + "CoC7.SanityCheckPerformed": "Has experimentado un evento traumático", + "CoC7.InvoluntaryActionPerformed": "Pierdes el autocontrol durante unos instantes", + "CoC7.SanityLost": "Puntos de COR perdidos", + "CoC7.MemoryRepressed": "Tu mente ha logrado reprimir tus recuerdos y los ha enterrado en el subconsciente", + "CoC7.RememberEverything": "Eres plenamente consciente de lo sucedido", + "CoC7.BoutOfMadnesslasted": "Tu episodio de locula dura", + "CoC7.EnteringBoutOfMadness": "Sufres un episodio de locura", + "CoC7.GrowingAccustomedToAwfulness": "Comienzas a acostumbrarte al horror (se ha limitado la pérdida de COR)", + "CoC7.ImmuneToAwfulness": "Tu mente es inmune a esta atrocidad (no hay perdida de COR)", + "CoC7.InvestigatorPhobiaGained": "El investigador gana una fobia", + "CoC7.PhobiaGained": "Ganas una fobia", + "CoC7.InvestigatorManiaGained": "El investigador gana una manía", + "CoC7.ManiaGained": "Ganas una manía", + "CoC7.AlreadyUnderlyingInsanity": "El investigador se encuentra en estado de locura subyacente", + "CoC7.IndefinitelyInsane": "Has adquirido una locura indefinida", + "CoC7.TemporaryInsane": "Has adquirido una locura temporal", + "CoC7.GoodForAsylum": "Estás listo para que te manden al manicomio", + "CoC7.BoutOfMadness": "Episodio de locura", + "CoC7.BoutRealTime": "Episodio de locura: en tiempo real", + "CoC7.BoutSummary": "Episodio de locura: resumidos", + "CoC7.EndBoutOfMadness": "Fin del episodio de locura", + "CoC7.InsanityType": "Tipe de locura", + "CoC7.Phobia": "Fobia", + "CoC7.Mania": "Manía", + "CoC7.MaxSanloss": "Pérdida máx", + "CoC7.MinSanloss": "Pérdida mín", + "CoC7.AlreadyLost": "Perdidos actualmente", + "CoC7.CreatureMaxLoss": "Pérdida máx por esta criatura", + "CoC7.MaxLossToCreature": "Pérdida restante por esta criatura", + "CoC7.ResetCreatureSan": "Restablecer historial con esta criatura", + "CoC7.ResetSpecieSan": "Restablecer historial con esta especie", + "CoC7.KeepData": "Mantener historial con esta criatura", + "CoC7.BoutActive": "(Episodio) Inmune a pérdida de COR", + "CoC7.AlreadyInABout": "Estás sufriendo un episodio de locura y eres inmune a nuevas pérdidas de COR", + "CoC7.PlayerPermanentlyInsane": "El jugador sufre locura permanente", + "CoC7.MythosFirstEncounter": "Ganancia en Mitos (+5%, al ser la primera vez)", + "CoC7.MythosAlreadyEncountered": "Ganancia en Mitos (+1%)", + "CoC7.DisregardMythosGain": "Sin ganancia en Mitos", + "CoC7.MythosGain": "Ganancia en Mitos", + "CoC7.YouGainedCthulhuMythos": "Tu mente se estremece ante tal manifestación sobrenatural (+{value}% Mitos de Cthulhu)", + "CoC7.CardResolved": "Tarjeta finalizada", + + "CoC7.SpellCastingTime": "Tiempo de ejecución", + "CoC7.SpellCastingCost": "Coste", + "CoC7.CallSpell": "Llamada", + "CoC7.DismissSpell": "Expulsión", + "CoC7.ContactSpell": "Contacto", + "CoC7.SummonSpell": "Convocación", + "CoC7.BindSpell": "Atadura", + "CoC7.EnchantmentSpell": "Encantamiento", + "CoC7.GateSpell": "Portal", + "CoC7.CombatSpell": "Combate", + "CoC7.SpellType": "Tipo de Hechizo", + + "CoC7.BookHasNothingMoreToTeach": "No tiene nada que aprender de {book}. La habilidad de Mitos de Cthulhu de {actor} es mayor que la puntuación de Mitos", + "CoC7.BookType": "Tipo de Libro", + "CoC7.Content": "Contenido", + "CoC7.CthulhuMythosFinal": "Mithos final", + "CoC7.CthulhuMythosInitial": "Mithos inicial", + "CoC7.Development": "Desarrollo", + "CoC7.DifficultyLevel": "Nivel de dificultad", + "CoC7.DragSpell": "Suelte hechizos aquí para incorporarlos al libro...", + "CoC7.FullStudies": "Estudio completo", + "CoC7.Gains": "Ganancia", + "CoC7.GainsForReading": "Ganancia de habilidad por leer {book}.", + "CoC7.InitialReading": "Lectura inicial", + "CoC7.InitialReadingNeeded": "{actor} necesita hacer una lectura inicial de {book} para ser capaz de avanzar por el proceso de estudio completo", + "CoC7.LearnSpellAttempt": "Intento de aprendizaje del hechizo {spell}, de {book}.", + "CoC7.MarkedForDevelopment": "Marcado para desarrollo", + "CoC7.Mythos": "Mitos", + "CoC7.MythosRating": "Puntuación de Mitos", + "CoC7.NotOwned": "Este libro requiere permisos de propietario de un actor para realizar esta acción", + "CoC7.Occult": "Ciencias ocultas", + "CoC7.Points": "punto(s)", + "CoC7.Progress": "Progreso", + "CoC7.RedoFullStudy": "Volver a realizar estudio completo", + "CoC7.ReadAttempt": "Intento de leer {book} ({language}), dificultad {difficulty}", + "CoC7.ReadingMythosTome": "Leyendo {book}", + "CoC7.Specific": "Específico", + "CoC7.SpellsLearned": "Hechizos aprendidos", + "CoC7.StudyTime": "Tiempo de estudio", + "CoC7.UnknownLanguage": "{actor} no conoce el idioma en el que está escrito el libro", + "CoC7.Unreadable": "No legible", + + "CoC7.Crew": "Tripulación", + "CoC7.Origin": "Origen", + "CoC7.ArmedVehicle": "Vehículo blindado", + + "CoC7.PulpTalents": "Talentos Pulp", + "CoC7.TalentType": "Tipo de talento", + "CoC7.PhysicalTalent": "Físicos", + "CoC7.MentalTalent": "Mentales", + "CoC7.CombatTalent": "De combate", + "CoC7.MiscellaneousTalent": "Varios", + "CoC7.BasicTalent": "Básicos", + "CoC7.InsaneTalent": "De locura", + "CoC7.OtherTalent": "Otros", + + "CoC7.Items": "Objetos", + "CoC7.Vehicle": "Vehículo", + "CoC7.Books": "Tomos", + "CoC7.Status": "Estados", + + "CoC7.Classic": "Clásica", + "CoC7.Lovecraftian": "Lovecraftiana", + "CoC7.Pulp": "Pulp", + "CoC7.Modern": "Contemporánea", + "CoC7.Related": "Ocupación Relacionada", + "CoC7.OccupationType": "Tipo de Ocupación", + "CoC7.OccupationPoints": "Puntos de Ocupación", + "CoC7.Selected": "Seleccionada", + "CoC7.Multiplier": "Multiplicador", + "CoC7.Optional": "A elegir", + "CoC7.Or": "o", + "CoC7.Minimum": "Mínimo", + "CoC7.Maximum": "Máximo", + "CoC7.CommonSkills": "Habilidades comunes", + "CoC7.OptionSkills": "Grupos de habilidades a elegir", + "CoC7.ChoiceNumber": "Opciones", + "CoC7.Choose": "Número a escoger entre", + "CoC7.Chosen": "Escogido", + "CoC7.EmptySkillList": "Añada una habilidad soltándola aquí", + "CoC7.EmptyItemList": "Añada un objeto soltándolo aquí", + "CoC7.EmptyCharacterSkillList": "Añada una configuración, ocupación o habilidad soltándolas aquí", + "CoC7.PersonalSpeciality": "Número de especialidades personales o de la época", + "CoC7.AdditionalSkills": "Habilidades Adicionales", + "CoC7.SkillSelectionWindow": "Seleccione habilidades opcionales", + "CoC7.SelectPersonalSkills": "Seleccione {number} habilidades(s) como intereses personales", + "CoC7.ResetOccupation": "Reiniciar Ocupación", + "CoC7.ResetOccupationHint": "El Actor {name} ya tiene una ocupación. ¿Desea reiniciarla?", + "CoC7.ResetArchetype": "Reiniciar Arquetipo", + "CoC7.ResetArchetypeHint": "El Actor {name} ya tiene un arquetipo. ¿Desea reiniciarlo?", + "CoC7.CreditOutOfRange": "El Crédito debe están comprendido entre {min} y {max}", + "CoC7.BioSections": "Secciones del Trasfondo", + "CoC7.BioSectionName": "Nombre de la Sección del Trasfondo", + "CoC7.SpendPoints": "Asignar puntos de características", + "CoC7.RollCharac": "Tirar características", + "CoC7.SelectCoreCharac": "Seleccione características básicas", + "CoC7.SkillSpecSelectTitle": "Especialización de {specialization}", + "CoC7.SkillSelectBase": "Seleccione el valor base de la habilidad {name}", + "CoC7.SelectSkill": "Seleccione una habilidad existente", + "CoC7.CreateNewSkill": "Cree una habilidad nueva", + + "CoC7.Characteristics": "Características", + "CoC7.Characteristic": "Característica", + "CoC7.EnableCharacteristics": "Habilitar características", + "CoC7.UsePoints": "Usar puntos", + "CoC7.UseRolls": "Usar tiradas", + "CoC7.CoreCharacteristics": "Características Básicas", + "CoC7.BonusPoints": "Puntos Adicionales", + "CoC7.SuggestedOccupations": "Sugerencias de ocupaciones", + "CoC7.SuggestedTraits": "Rasgos Sugeridos", + + "CoC7.PutGunAway": "Bajar el arma", + "CoC7.DrawGun": "Desenfundar el arma", + + "CoC7.GmTools": "Herramientas del Guardián", + "CoC7.GmNotes": "Notas del GM", + "CoC7.DevPhase": "Fase de desarrollo", + "CoC7.DevPhaseEnabled": "Fase de desarrollo habilitada", + "CoC7.DevPhaseDisabled": "Fase de desarrollo deshabilitada", + "CoC7.CharCreationMode": "Modo de creación de personajes", + "CoC7.CharCreationEnabled": "Modo de creación de personajes habilitado", + "CoC7.CharCreationDisabled": "Modo de creación de personajes deshabilitado", + "CoC7.toggleXP": "Ganancia de PX", + "CoC7.XPGainEnabled": "Los personajes pueden ganar PX", + "CoC7.XPGainDisabled": "Los personajes no pueden ganar PX", + "CoC7.WarnNoActorAvailable": "No tiene control ni tiene seleccionado ningún actor", + "CoC7.WarnMacroIncorrectType": "Solo puede crear macros para armas y habilidades", + "CoC7.WarnNoGlobalSpec": "No puede crear macros para especializaciones sin especificar", + "CoC7.WarnMacroNoItemFound": "No se ha encontrado ningún objeto usable", + "CoC7.WarnNoControlledActor": "En estos momentos no controla a ningún actor", + "CoC7.WarnFastTargetWithWrongMOV": "Se ha seleccionado Rápido cuando el objetivo tiene un MOV inferior a 8. (MOV: {mov})", + "CoC7.WarnTooManyTarget": "Seleccionados demasiados objetivos. Solo se guardará el último objetivo seleccionado", + + "CoC7.allActors": "Todos los actores", + "CoC7.restTargets": "Descansar objetivos", + "CoC7.startRest": "Comenzando descanso", + "CoC7.dreaming": "Los investigadores esperan... soñando", + "CoC7.healthRecovered": "Un PV recuperado", + "CoC7.pulpHealthRecovered": "{number} PVs recuperados", + "CoC7.dailySanLossRestarted": "Contador de pérdida diraria de COR reiniciado", + "CoC7.magicPointsRecovered": "Puntos de magia recuperados", + "CoC7.hasCriticalWounds": "Una herída crítica impide recuperar PVs", + "CoC7.quickHealer": "Curación acelerada", + + "CoC7.ErrorNoDodgeSkill": "El actor no tiene la habilidad Esquivar", + "CoC7.ErrorNotEnoughLuck": "{actor} no tiene suficientes puntos de suerte para mejorar la tirada", + "CoC7.ErrorManeuverNotPossible": "Su oponente es demasiado fuerte como para realizar la maniobra", + "CoC7.ErrorNotFound": "¡No se ha encontrado {missing}!", + "CoC7.ErrorNotFoundForActor": "¡No se ha encontrado {missing} en el actor {actor}!", + + "CoC7.InfoLessSkillThanOptions": "Solo existen {skillCount} y {optionsCount} opciones, anadiéndose todas", + "CoC7.InfoAllSkillsAlreadySelected": "Ya se han seleccionado todas las habilidades", + + "CoC7.MessageCheckRequestedWait": "El guardián ha pedido una tirada de {check}.
                  ¡Espere a que se lo confirme antes de tirar!
                  ", + "CoC7.MessageTargetCheckRequested": "El guardián ha pedido a {name} una tirada de {check}", + "CoC7.MessageTitleSelectSingleUserForTarget": "Qué usuario podrá responder al ataque", + "CoC7.MessageSelectSingleUserForTarget": "Este icono está controlado por varios usuarios, por favor, seleccione que usuario podrá responder al ataque", + "CoC7.MessageBoutOfMadnessTableNotFound": "No se ha encontrado el resultado de la tabla de locura, por favor, compruebe que se han creado las tablas", + "CoC7.MessageBoutOfMadnessItemNotFound": "No se ha encontrado el resultado de la tabla de locura, por favor, compruebe que se han creado los estatus", + + "CoC7.DealDamage": "¿Causar {damage} puntos de daño a {target}?", + "CoC7.NoTargetSelected": "No ha seleccionado ningún objetivo para la tirada de {weapon}. ¿Desea continuar de todos modos?", + + "CoC7.Import": "Importar", + "CoC7.Proceed": "Proceder", + "CoC7.Cancel": "Cancelar", + + "CoC7.ActorImporter": "Importador de actores", + "CoC7.ActorImporterSummary": "Importa un PNJ o criatura a partir de sus estadísticas y descripción. Solo deberá copiar sus estadísticas en formato texto plano", + "CoC7.PasteTheDataBelow": "Pegue más abajo el texto sin formato", + "CoC7.TextFieldInvalidCharacters": "Caracteres inválidos en el texto, por favor, revíselo o será eliminado", + "CoC7.SelectActorType": "Seleccione tipo de actor", + "CoC7.NonPlayingCharacter": "Personaje no jugador (PNJ)", + "CoC7.Creature": "Criatura", + "CoC7.ConvertFrom6Edition": "Convertir desde 6a edición", + "CoC7.Convert": "Convertir", + "CoC7.NoConvert": "No convertir", + "CoC7.Guess": "Autodetectar", + "CoC7.English": "Inglés", + "CoC7.Spanish": "Español", + "CoC7.French": "Francés", + "CoC7.German": "Alemán", + "CoC7.TraditionalChinese": "Chino tradicional", + "CoC7.SelectSourceLanguage": "Seleccione el idioma del texto original", + "CoC7.ImportedUnnamedCharacter": "Se ha importado personaje 'unnamed'", + "CoC7.CreatedImportedCharactersFolder": "Creada carpeta 'Personajes importados'", + "CoC7.ImportedCharactersFolder": "Personajes importados", + "CoC7.ImportSkillItemLocations": "Buscar habilidades/hechizos/armas en", + "CoC7.ImportActorItemsNone": "Ninguno", + "CoC7.ImportActorItemsItem": "Objetos", + "CoC7.ImportActorItemsItemWorldModuleSystem": "Objetos / Mundo / Módulos / Sistema", + "CoC7.ImportActorItemsWorldModuleItemSystem": "Mundo / Módulos / Objetos / Sistema", + + "CoC7.HowToTranslateTitle": "¿Cómo traducir el sistema?", + "CoC7.HowToTranslateWarning": "No instale ningún módulo que no sea de su confianza", + "CoC7.HowToTranslateInstallBabele": "Instale/actualice el módulo Babele desde el panel de administración de modulos de Foundry", + "CoC7.HowToTranslateInstallTranslation": "Instale/actualice la traducción desde el panel de administración de modulos de Foundry", + "CoC7.HowToTranslateEnableTranslation": "En el mundo de juego, bajo Configuración/Administrar módulos, active tanto Babele como la traducción", + "CoC7.HowToTranslateNoTranslation": "Puede consultar las instrucciones de cómo crear una nueva traducción de un sistema en los módulos de traducción ya creados", + + "CoC7.Migrate.Title": "Se requiere actualizar", + "CoC7.Migrate.Message": "

                  Su mundo necesita ser actualizado para funcionar con la versión {version}.

                  Por favor, haga una copia de seguridad de la carpeta del mundo antes de actualizar.

                  Si no actualiza el mundo el sistema no funcionará correctamente.

                  Se puede reiniciar el mundo una vez que se complete el proceso

                  ", + "CoC7.Migrate.WithModulesMessage": "

                  Es posible que tanto su mundo como sus módulos necesiten una actualización para ejecutar la versión {version}.

                  Por favor, haga copia de seguridad de su mundo y los módulos listados más abajo antes de comenzar la actualización.

                  Si no actualiza el mundo el sistema no funcionará correctamente.

                  Los módulos siguientes contienen actores u objetos, de modo que también se comprobarán.

                  {modules}

                  El mundo se reiniciará cuando se complete el proceso.

                  ", + "CoC7.Migrate.GMRequired": "

                  Su mundo necesita ser actualizado para funcionar con la versión {version}.

                  Por favor, espere a que su GM realice la actualización del sistema y entonces refresque (F5) la página

                  ", + "CoC7.Migrate.RestartRequired": "

                  Su mundo se reiniciará para activar los cambios

                  ", + "CoC7.Migrate.ButtonUpdate": "Actualizar", + "CoC7.Migrate.ButtonSkip": "Saltar", + "CoC7.Migrate.ButtonOkay": "Ok", + + "CoC7.Maximize": "Maximizar", + "CoC7.Summarize": "Resumen", + + "CoC7.UnableToInteractWithChatCard": "No es posible interactuar con este mensaje, si necesita hacer algún cambio pídaselo al Guardián", + "CoC7.UnableToCopyToClipboard": "No es posible copiar al portapapeles, probablemente debido al nivel de seguridad de su navegador", + "CoC7.WarningCharacterSheetV1Depreciated": "Esta disposición está obsoleta y no funcionará correctamente. Se eliminará cuando salga la versión v9 de FoundryVTT, por favor dígale a su Guardián que cambie la hoja a CoC7.CoC7CharacterSheetV2", + + "CoC7.MessageTitleSelectUserToGiveTo": "Dar objeto a otro personaje", + "CoC7.MessageSelectUserToGiveTo": "¿A qué personaje quiere darle el objeto?", + "CoC7.MessageDistanceCalculationFailure": "No es posible calcular la distancia entre los iconos, por favor, use la hoja de personaje del icono", + + "CoC7.ToolTipSkill": "
                  1. Clic izquierdo tirada con opciones
                  2. Mayús + clic izquierdo Tirada inmediata a dificultad normal
                  1. Clic derecho Tirada enfrentada con opciones
                  2. Mayús + clic derecho Tirada enfrentada inmediata
                  1. Alt/Opción + clic derecho Tirada combinada con opciones
                  ", + "CoC7.ToolTipKeeperSkill": "
                  1. CTRL + clic izquierdo Crear enlace a tirada
                  2. {other}
                  ", + "CoC7.ToolTipKeeperStandbySkill": "
                3. Clic izquierdo Petición de tirada a {name}
                4. ", + "CoC7.ToolTipDB": "
                  1. Clic izquierdo Tirada inmediata a dificultad normal
                  ", + "CoC7.ToolTipKeeperSanity": "
                5. CTRL + Alt/Opción Crea enlace a tirada de COR
                6. ", + "CoC7.ToolTipAutoToggle": "
                  1. Left click Conmuta entre cálculo automático/entrada manual
                  2. ", + "CoC7.ToolTipSkillFlagToggle": "
                    1. Doble clic Marcar/desmarcar
                    2. ", + "CoC7.ToolTipSkillFlagged": "Marcada para desarrollo", + "CoC7.ToolTipSkillUnflagged": "No marcada para desarrollo", + + "SETTINGS.TitleRules": "Reglas", + "SETTINGS.TitleInitiative": "Ajustes de iniciativa", + "SETTINGS.TitleRoll": "Ajustes de tiradas", + "SETTINGS.TitleChatCards": "Ajustes de tarjetas del chat", + "SETTINGS.TitleScene": "Ajustes de escena", + "SETTINGS.TitleSheet": "Ajustes de la hoja", + "SETTINGS.TitleGameArtwork": "Ajustes de arte del juego", + "SETTINGS.TitleWeapon": "Ajustes de armas", + "SETTINGS.TitleDiceSoNice": "Ajustes Dice So Nice", + "SETTINGS.TitleDeveloperDebug": "Ajustes de desarrollo y depuración", + "SETTINGS.TitleRollTable": "Ajustes de tablas dinámicas", + "SETTINGS.DebugMode": "Modo de depuración", + "SETTINGS.DebugModeHint": "!!REQUIERE REINICIAR!!", + "SETTINGS.DefaultDifficulty": "Dificultad por defecto", + "SETTINGS.DefaultDifficultyHint": "Puedes indicar la dificultad por defecto de las tiradas. Desconocida lanzará tiradas sin que el jugador conozca la dificultad", + "SETTINGS.CheckDifficultyRegular": "Dificultad por defecto", + "SETTINGS.CheckDifficultyUnknown": "Dificultad desconocida", + "SETTINGS.showIconsOnly": "En la hoja resumen, mostrar solo los iconos en la lista de habilidades", + "SETTINGS.UseToken": "Usar imagen del icono", + "SETTINGS.UseTokenHint": "Usar la imagen del icono en lugar de los retratos en las cartas del chat", + "SETTINGS.DisplayActorOnCard": "Mostrar actor en carta", + "SETTINGS.DisplayActorOnCardHint": "Mostrar la imagen/icono del actor en las cartas de chat de combate", + "SETTINGS.InitiativeRule": "Mecánica de cálculo de iniciativa", + "SETTINGS.InitiativeRuleHint": "Puedes elegir entre la iniciativa básica (valores de DES) o la regla opcional (tirada de DES)", + "SETTINGS.InitiativeRuleBasic": "Básica", + "SETTINGS.InitiativeRuleOptional": "Opcional", + "SETTINGS.displayInitDices": "Mostrar dado de iniciativa", + "SETTINGS.displayInitDicesHint": "Mostrar los dados cuando se tire iniciativa (solo cuando se usa la regla opcional)", + "SETTINGS.displayInitAsText": "Mostrar iniciativa como texto", + "SETTINGS.displayInitAsTextHint": "Mostrar la iniciativa como texto en lugar de un número (solo en las reglas opcionales)", + "SETTINGS.PulpRules": "Reglas Pulp", + "SETTINGS.PulpRulesHint": "Permite usar las reglas de Pulp Cthulhu (Arquetipos, Talentos, PV), ¡en fase de desarrollo!", + "SETTINGS.developmentRollForLuck": "Recuperación de puntos de suerte", + "SETTINGS.developmentRollForLuckHint": "Cada jugador puede hacer una tirada para recuperar suerte en la fase de desarrollo", + "SETTINGS.displayPlayerNameOnSheet": "Mostrar nombre del jugador en la hoja de personaje", + "SETTINGS.DisregardAmmo": "Ignorar la munición", + "SETTINGS.DisregardAmmoHint": "Al activar esta opción no se tendrán en cuenta la munición cargada en el arma a la hora de disparar", + "SETTINGS.DisregardUsePerRound": "Ignorar el número de usos por asalto", + "SETTINGS.DisregardUsePerRoundHint": "Al activar esta opción, se podrá disparar sin restricciones, ignorando el número de disparos que un arma puede realizar por asalto", + "SETTINGS.RestrictGridSpaces": "Medir usando espacios de rejilla", + "SETTINGS.RestrictGridSpacesHint": "En el combate a distancia, si se selecciona esta opción las distancias se medirán usando espacios de rejilla (cuadrados o hexágonos) en lugar de la distancia 'real' (euclidiana)", + "SETTINGS.StatusPlayerEditable": "Los jugadores pueden modificar estados", + "SETTINGS.StatusPlayerEditableHint": "Permite que el jugador modifique sus estados (caído, inconsciente, moribundo, muerto) y reinicie su perdida diaria de COR", + "SETTINGS.SyncDice3D": "[DsN] Sincronizar dados", + "SETTINGS.SyncDice3DHint": "Cuando se usa Dice so Nice (DsN), permite sincronizar los dados entre clientes", + "SETTINGS.UnitDieColorset": "[DsN] Configuración de dado de unidades", + "SETTINGS.UnitDieColorsetHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de unidades (si no se especifica otra cosa, usa los valores por defecto del jugador)", + "SETTINGS.TenDieNoMod": "[DsN] Configuración de dado de decenas", + "SETTINGS.TenDieNoModHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de decenas (si no se especifica otra cosa, usa los valores por defecto del jugador)", + "SETTINGS.TenDieBonus": "[DsN] Configuración de dado de bonificación", + "SETTINGS.TenDieBonusHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de bonificación (si no se especifica otra cosa, usa los valores por defecto del jugador)", + "SETTINGS.TenDiePenalty": "[DsN] Configuración de dado de penalización", + "SETTINGS.TenDiePenaltyHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de penalización (si no se especifica otra cosa, usa los valores por defecto del jugador)", + "SETTINGS.OverrideGameArtwork": "Sobrescribir arte del juego", + "SETTINGS.OverrideGameArtworkHint": "!!REQUIERE REINICIAR!! da acceso al modo de configuración avanzada, deje en blanco para usar la configuración por defecto", + "SETTINGS.ArtPauseImage": "Imagen de pausa", + "SETTINGS.ArtPauseImageHint": ". Escriba 'null' para quitar la imagen", + "SETTINGS.ArtPauseText": "Texto de pausa", + "SETTINGS.ArtPauseTextHint": "Deje en blanco para usar el texto por defecto", + "SETTINGS.OverrideSheetArtwork": "Sobrescribir arte de la hoja de PJ", + "SETTINGS.OverrideSheetArtworkHint": "!!REQUIERE REINICIAR!! Da acceso a la configuración avanzada de la hoja de personaje, deje las opciones en blanco para usar los valores por defecto", + "SETTINGS.ArtWorkSheetBackground": "Fondo de la hoja de PJ", + "SETTINGS.ArtWorkSheetBackgroundHint": "escriba 'null' para quitar el fondo", + "SETTINGS.ArtWorkSheetBackgroundType": "Tipo de fondo", + "SETTINGS.BackgroundSlice": "La imagen de fondo será recortada (css:border-image)", + "SETTINGS.BackgroundAuto": "Redimensiona la imagen manteniendo proporciones (css:auto)", + "SETTINGS.BackgroundContain": "Redimensiona y rellena sin recortar/estirar (css:contain)", + "SETTINGS.BackgroundCover": "Redimensiona y rellena recortando/estirando (css:cover)", + "SETTINGS.ArtWorkOtherSheetBackground": "Fondo del resto de hojas", + "SETTINGS.ArtWorkOtherSheetBackgroundHint": "escriba 'null' para quitar el fondo. Por ahora, solo se aplica a objetos y vehículos", + "SETTINGS.ArtworkSheetImage": "Imagen de la hoja de PJ", + "SETTINGS.ArtworkSheetImageHint": "escriba 'null' para quitar la imagen", + "SETTINGS.ArtworkFrontColor": "Color principal", + "SETTINGS.ArtworkFrontColorHint": "Se usa para todos los elementos", + "SETTINGS.ArtworkBackgroundColor": "Color secundario", + "SETTINGS.ArtworkBackgroundColorHint": "Se usa para fondos y campos de entrada", + "SETTINGS.ArtworkInteractiveColor": "Color de elementos interactivos", + "SETTINGS.ArtworkInteractiveColorHint": "Se usa para elementos interactivos/tablas dinámicas", + "SETTINGS.ArtworkFixedSkillLength": "Limitar la longitud de las habilidades", + "SETTINGS.ArtworkFixedSkillLengthHint": "La longitud de las habilidades se limitará para que la pestaña de habilidades tenga un aspecto más compacto", + "SETTINGS.ArtworkMainFont": "Fuente principal", + "SETTINGS.ArtworkMainFontBold": "Fuente principal (negrita)", + "SETTINGS.ArtworkMainFontSize": "Tamaño de fuente por defecto (px)", + "SETTINGS.BoutOfMadnessSummaryTable": "Tabla de episodios de locura (resumidos)", + "SETTINGS.BoutOfMadnessRealTimeTable": "Tabla de episodios de locura (en tiempo real)", + "SETTINGS.LetKeeperDecide": "A decisión del Guardián", + "SETTINGS.DisplayResultType": "Mostrar el resultado de la tirada (texto)", + "SETTINGS.DisplayCheckSuccessLevel": "Mostrar el nivel de éxito de la tirada (estrellas/arañas)", + "SETTINGS.PlayerUnlockSheetMode": "Los jugadores pueden desbloquear la hoja de personaje", + "SETTINGS.AlwaysEditable": "Siempre", + "SETTINGS.CreationModeOnly": "Solo en modo de creación de personajes", + "SETTINGS.NeverEditable": "Nunca (solo el Guardián)", + "SETTINGS.StanbyGMRolls": "Pausar tiradas del Guardián", + "SETTINGS.StanbyGMRollsHint": "Cuando el Guardián haga una tirada desde una hoja de personaje, mostrar un botón de tirada en lugar de hacer la tirada", + "SETTINGS.AllowFlatDiceModifier": "Modificador simple a las tiradas", + "SETTINGS.AllowFlatDiceModifierHint": "Permite aplicar un modificadores simple a las tiradas de dados", + "SETTINGS.AllowFlatThresholdModifier": "Modificador simple a los umbrales de éxito", + "SETTINGS.AllowFlatThresholdModifierHint": "Permite aplicar un modificador simple al umbral de éxito en la tirada", + "SETTINGS.OpposedRollTieBreaker": "Método alternativo Viriato139ac para deshacer empates", + "SETTINGS.OpposedRollTieBreakerHint": "Si en una tirada enfrentada ambos contendientes sacan el mismo grado de éxito, se declarará ganador al haya sacado un resultado mayor en la tirada, no el que tenga la habilidad más alta", + "SETTINGS.SelfRollWhisperTarget": "Notificación de tirada propia:", + "SETTINGS.SelfRollWhisperTargetHint": "Cuando se haga una tirada propia como GM quiere que se envíe notificación a", + "SETTINGS.DoNotAdvise": "Solo a ti mismo", + "SETTINGS.AdviseOwnersOnly": "Al propietario del actor", + "SETTINGS.AdviseAllPlayer": "A todos los jugadores", + "SETTINGS.OneBlockBackStory": "Trasfondo en un solo bloque", + "SETTINGS.OneBlockBackStoryHint": "Convertir el transfondo en un solo bloque de edición, se pueden añadir formateo y pegar enlaces", + "SETTINGS.EnableStatusIcons": "Activar iconos de estado", + "SETTINGS.EnableStatusIconsHint": "Determina si se deben mostrar de los efectos de combate y cordura en los iconos", + "SETTINGS.ShowExperimentalFeatures": "Mostrar características experimentales", + "SETTINGS.ShowExperimentalFeaturesHint": "Su mundo puede corromperse en próximas versiones si usa estas características. Solo para pruebas, no las use en sus mundos de juego", + "CoC7.ExperimentalFeaturesWarning": "Esta característica está en desarrollo y no se recomienda su uso en sus mundos de juego", + "SETTINGS.CheckElevation": "Incluir elevación en la distancia", + "SETTINGS.CheckElevationHint": "Usa la elevación en el combate a distancia para medir alcances", + "CoC7.toolTipDelay": "Retraso en milisegundos que tarda en aparecer los mensajes emergentes, ajustar a 0 para no mostrarlos nunca", + + "CoC7.getTheExample": "Copiar ejemplo", + "CoC7.Copied": "Ejemplo copiado al portapapeles" +} From f4d757e91d71bab8acafc843807c84b602678402 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trouver=20Objet=20Cach=C3=A9?= <44206935+vonv@users.noreply.github.com> Date: Thu, 9 Dec 2021 13:47:39 +0100 Subject: [PATCH 342/726] Update fr.json --- lang/fr.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lang/fr.json b/lang/fr.json index 0f79da19..6a711924 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -127,7 +127,8 @@ "CoC7.MagicPointsCost": "Coût en Points de Magie", "CoC7.OtherCosts": "Autres coûts", "CoC7.CastingSpell": "Jette {spell}.", - + "CoC7.NotEnoughMagicPoints": "{spell} coûte {originalMagicPoints} Points de Magie, vous n'en avez que {actorMagicPoints}. Vouslez-vous utiliser vos {convertedHitPoints} Points de Vie restants? Vous subirez {convertedHitPoints} points de dommage en le faisant.", + "CoC7.CopyToClipboard": "Copier vers le presse-papier", "CoC7.WhisperToSelection": "Murmurer aux tokens sélectionnés", "CoC7.WhisperTo": "Murmurer à", @@ -661,6 +662,8 @@ "CoC7.WarnFastTargetWithWrongMOV": "'Rapide' sélectionné sur une cible avec un Mvt de moins de 8. (Mvt: {mov})", "CoC7.WarnTooManyTarget": "Trop de cibles sélectionnées. Seule la première est prise en compte", + "CoC7.allActors": "Tous les Personnages", + "CoC7.restTargets": "Candidats au repos", "CoC7.startRest": "Se reposer", "CoC7.dreaming": "Les Investigateurs attendent en rêvant", "CoC7.healthRecovered": "Un Point de Vie récupéré", @@ -707,6 +710,7 @@ "CoC7.English": "Anglais", "CoC7.Spanish": "Espagnol", "CoC7.French": "Français", + "CoC7.German": "Allemand", "CoC7.TraditionalChinese": "Chinois Traditionnel", "CoC7.SelectSourceLanguage": "Sélectionnez la langue du texte copié", "CoC7.ImportedUnnamedCharacter": "Personnage importé sans nom", @@ -869,5 +873,8 @@ "CoC7.ExperimentalFeaturesWarning": "Cette fonctionnalité est en développement, il n'est pas conseillé de l'utiliser pour vos parties.", "SETTINGS.CheckElevation": "Inclut l'altitude", "SETTINGS.CheckElevationHint": "Utiliser l'altitude dans le calcul des distances en combat", - "CoC7.toolTipDelay": "Délai en millisecondes avant qu'une info-bulle apparaisse, 0 pour jamais" + "CoC7.toolTipDelay": "Délai en millisecondes avant qu'une info-bulle apparaisse, 0 pour jamais", + + "CoC7.getTheExample": "Copier l'Exemple", + "CoC7.Copied": "Texte de l'Exemple copié dans le presse-papier" } From 4b506bb15dd9d66438d3d79bf4d2509b3b63b46b Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 9 Dec 2021 13:05:48 +0000 Subject: [PATCH 343/726] Updated translations list --- .github/TRANSLATIONS.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 6553fc21..21790330 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,19 +2,19 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **pt-BR**, **zh-TW** +The following translations are currently up to date **es**, **fr**, **pt-BR**, **zh-TW** The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | ja | pl | sv | -| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **4** | **6** | **6** | **6** | **6** | **2** | -| [CoC7.Copied](#coc7copied) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.allActors](#coc7allactors) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| Key | de | ja | pl | sv | +| :----------------------------------------------------- | :------: | :------: | :------: | :------: | +| **Remaining**: | **4** | **6** | **6** | **2** | +| [CoC7.Copied](#coc7copied) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | ✅ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ❌ | ❌ | ✅ | +| [CoC7.allActors](#coc7allactors) | ❌ | ❌ | ❌ | ❌ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ❌ | ❌ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ❌ | ❌ | ❌ | ##### CoC7.Copied From fc59fbbf6511bb28c7e617b64ec21c0bcab7e850 Mon Sep 17 00:00:00 2001 From: Rangertheman <81484515+Rangertheman@users.noreply.github.com> Date: Fri, 10 Dec 2021 19:36:39 +0100 Subject: [PATCH 344/726] Update sv.json --- lang/sv.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lang/sv.json b/lang/sv.json index 7046ce11..3f202d0f 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -670,6 +670,8 @@ "CoC7.WarnFastTargetWithWrongMOV": "'Snabb' har valts för ett mål med lägre än 8 FÖR. (FÖR: {mov})", "CoC7.WarnTooManyTarget": "För många mål valda. Behåller bara det senast valda målet", + "CoC7.allActors": "Alla karaktärer", + "CoC7.restTargets": "Vila valda mål", "CoC7.startRest": "Påbörja vila", "CoC7.dreaming": "Utredaren väntar i drömmen", "CoC7.healthRecovered": "Återfick en kroppspoäng", From 6bd474f4a5666fcc9972aaff47e61c500007798e Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Fri, 10 Dec 2021 19:01:28 +0000 Subject: [PATCH 345/726] Updated translations list --- .github/TRANSLATIONS.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 21790330..eacaa9fd 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,19 +2,19 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **es**, **fr**, **pt-BR**, **zh-TW** +The following translations are currently up to date **es**, **fr**, **pt-BR**, **sv**, **zh-TW** The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | ja | pl | sv | -| :----------------------------------------------------- | :------: | :------: | :------: | :------: | -| **Remaining**: | **4** | **6** | **6** | **2** | -| [CoC7.Copied](#coc7copied) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | ✅ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ❌ | ❌ | ✅ | -| [CoC7.allActors](#coc7allactors) | ❌ | ❌ | ❌ | ❌ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ❌ | ❌ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ❌ | ❌ | ❌ | +| Key | de | ja | pl | +| :----------------------------------------------------- | :------: | :------: | :------: | +| **Remaining**: | **4** | **6** | **6** | +| [CoC7.Copied](#coc7copied) | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ❌ | ❌ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ❌ | ❌ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ❌ | ❌ | ##### CoC7.Copied From 467cb0c3ca97d067a8426cde4137d53a2b5e9b5a Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 12 Dec 2021 15:58:21 +0000 Subject: [PATCH 346/726] If GM triggers multiple chat messages for tokens, make sure they are assigned to the correct users --- module/chat/card-actor.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/module/chat/card-actor.js b/module/chat/card-actor.js index c0e770f5..d0b40a50 100644 --- a/module/chat/card-actor.js +++ b/module/chat/card-actor.js @@ -134,8 +134,10 @@ export class ChatCardActor { const speakerData = {} let speaker if (this.actor) { - if (this.token) speakerData.token = this.token - else speakerData.actor = this.actor + speakerData.actor = this.actor + if (this.token) { + speakerData.token = this.token + } speaker = ChatMessage.getSpeaker(speakerData) } else { speaker = ChatMessage.getSpeaker() From 6edd37d043008cea64ceae5c1e27f1c9f2cf7ded Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 12 Dec 2021 22:18:11 +0000 Subject: [PATCH 347/726] Update layout for weapon sheet tab navigation Fix era selection on weapons --- lang/en.json | 1 + module/items/sheets/weapon-sheet.js | 16 +++++++--------- styles/sheets/sheet.less | 5 +++++ templates/items/weapon-sheet.html | 6 +++--- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/lang/en.json b/lang/en.json index 59880138..764e1948 100644 --- a/lang/en.json +++ b/lang/en.json @@ -336,6 +336,7 @@ "CoC7.EraPulp": "Pulp Cthulhu", "CoC7.EraMdrn": "Modern", "CoC7.Eras": "Cthulhu Flavors", + "CoC7.EraAvailability": "Availability", "CoC7.SkillNoAdjustments": "No adjustment", "CoC7.SkillNoXpGain": "No XP gain", diff --git a/module/items/sheets/weapon-sheet.js b/module/items/sheets/weapon-sheet.js index 0d45fda7..02fa936b 100644 --- a/module/items/sheets/weapon-sheet.js +++ b/module/items/sheets/weapon-sheet.js @@ -132,15 +132,13 @@ export class CoC7WeaponSheet extends ItemSheet { event.preventDefault() const propertyId = event.currentTarget.closest('.toggle-switch').dataset .property - const set = event.currentTarget.parentElement.dataset.set - const elementName = set + '-' + propertyId - const checkboxControl = this.form.elements.namedItem(elementName) - - if (checkboxControl.checked) checkboxControl.checked = false - else checkboxControl.checked = true - - event.target.classList.toggle('switched-on') - await this._onSubmit(event) + await this.item.toggleProperty( + propertyId, + event.metaKey || + event.ctrlKey || + event.keyCode === 91 || + event.keyCode === 224 + ) } async _onPropertyClick (event) { diff --git a/styles/sheets/sheet.less b/styles/sheets/sheet.less index 4dcd1ada..1ac9e379 100644 --- a/styles/sheets/sheet.less +++ b/styles/sheets/sheet.less @@ -129,4 +129,9 @@ border-top: @borderGroove; } } + nav.sheet-tabs a.item { + line-height: 27px; + font-size: 18px; + font-weight: 700; + } } diff --git a/templates/items/weapon-sheet.html b/templates/items/weapon-sheet.html index 67254211..ea8e2903 100644 --- a/templates/items/weapon-sheet.html +++ b/templates/items/weapon-sheet.html @@ -95,14 +95,14 @@ {{!-- Sheet Body --}}
                      - -
                      +

                      {{ localize "CoC7.EraAvailability" }}

                      +
                      {{#each _eras as |era key|}} {{localize era.name}} {{/each}}
                      -
                      +
                      From 59ce0e035ed71fbddbe56a45493f1487744b7203 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 12 Dec 2021 22:20:48 +0000 Subject: [PATCH 348/726] Updated translations list --- .github/TRANSLATIONS.md | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index eacaa9fd..c2357f36 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,24 +2,27 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **es**, **fr**, **pt-BR**, **sv**, **zh-TW** - The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | ja | pl | -| :----------------------------------------------------- | :------: | :------: | :------: | -| **Remaining**: | **4** | **6** | **6** | -| [CoC7.Copied](#coc7copied) | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ❌ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ❌ | ❌ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ❌ | ❌ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ❌ | ❌ | +| Key | de | es | fr | ja | pl | pt-BR | sv | zh-TW | +| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **5** | **1** | **1** | **7** | **7** | **1** | **1** | **1** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.Copied `"CoC7.Copied": "Copied the Example Text to Clipboard",` +##### CoC7.EraAvailability + +`"CoC7.EraAvailability": "Availability",` + ##### CoC7.German `"CoC7.German": "German",` From de6d02cc961328336012d552c8a0dcf23f68ae57 Mon Sep 17 00:00:00 2001 From: snap01 Date: Sun, 12 Dec 2021 22:20:48 +0000 Subject: [PATCH 349/726] [create-pull-request] automated change --- .github/ABANDONED.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index d6f26d18..5e988ddd 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -120,6 +120,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Reload": "Left/Right click : add/remove 1 bullet\nShift + Left/Right click : Reload/Empty", "CoC7.WeaponUsesPerRoundHint": "Attacks per round (1/3 : 1 attack every 3 rounds)", "CoC7.BurstSizeHint": "How many bullets per burst", +"CoC7.EraAvailability": "Availability", "CoC7.DriveAutoSkillName": "Drive Auto", "CoC7.DriveSpecializationName": "Drive", "CoC7.PilotSpecializationName": "Pilot", @@ -433,6 +434,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.meleeCombatDamageFrom": "from", "CoC7.meleeCombatDamageDeals": "deals", "CoC7.meleeCombatDamageWith": "with", +"CoC7.EraAvailability": "Availability", "CoC7.DriveAutoSkillName": "Drive Auto", "CoC7.SanGained": "Gained 2d6 ({results} = {sanGained}) Sanity after mastering {skill} with a {skillValue}%", "CoC7.DevelopAttribWarn": "You can not access some attributes in development/creation.", From 05805c4eb333331c0d952ab4a0ace83715496261 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Mon, 13 Dec 2021 13:53:35 +0100 Subject: [PATCH 350/726] Check selection --- module/chat/cards/chase-obstacle.js | 25 ++++++--- module/chat/cards/test.js | 4 +- module/coc7.js | 3 +- module/common/chatcardlib/src/chatcardlib.js | 53 +++++++++++++++----- module/items/chase/data.js | 50 ++++++++++++++++-- module/items/chase/sheet.js | 38 -------------- templates/chat/cards/chase-obstacle.html | 30 +++++++++++ templates/chat/cards/test.html | 2 +- templates/items/chase.html | 17 +++++-- 9 files changed, 153 insertions(+), 69 deletions(-) create mode 100644 templates/chat/cards/chase-obstacle.html diff --git a/module/chat/cards/chase-obstacle.js b/module/chat/cards/chase-obstacle.js index 6aa5d80f..32375d78 100644 --- a/module/chat/cards/chase-obstacle.js +++ b/module/chat/cards/chase-obstacle.js @@ -1,26 +1,39 @@ import { EnhancedChatCard } from '../../common/chatcardlib/src/chatcardlib.js' +import { _participant } from '../../items/chase/participant.js' export class ChaseObstacleCard extends EnhancedChatCard { /** @override */ static get defaultOptions () { return mergeObject(super.defaultOptions, { - template: 'systems/CoC7/templates/chat/cards/test.html' + template: 'systems/CoC7/templates/chat/cards/chase-obstacle.html', + GMUpdate: true }) } /** @override */ async getData () { const data = await super.getData() - data.mySelectOptions = { - 0: 'option 1', - 1: 'option 2' + + data.chase = await fromUuid(this._data.chaseUuid) + data.location = data.chase.getLocationData( this._data.locationUuid) + + if( !data.data.checkName){ + data.data.checkName = data.location.obstacleDetails.checkName + } + + data.displayActorOnCard = game.settings.get('CoC7', 'displayActorOnCard') + data.activeParticipant = new _participant( data.chase.activeParticipant) + + if( data.chase.activeActor){ + data.skill = data.chase.activeActor.find( data.data.checkName) } - const chaseItem = await fromUuid(this._data.chaseUuid) - await chaseItem.activateLocation('szb0qfp1oehux6be') return data } + /** @override */ + async GMUpdate () {} + // activateListeners (html) { // super.activateListeners(html) // } diff --git a/module/chat/cards/test.js b/module/chat/cards/test.js index 90c6fa80..ff21e1b0 100644 --- a/module/chat/cards/test.js +++ b/module/chat/cards/test.js @@ -11,8 +11,8 @@ export class testCard extends EnhancedChatCard { }) } - getData(){ - const data = super.getData() + async getData () { + const data = await super.getData() data.mySelectOptions = { 0: 'option 1', 1: 'option 2' diff --git a/module/coc7.js b/module/coc7.js index 5acc0539..380b370b 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -26,6 +26,7 @@ import { DropActorSheetData } from './hooks/drop-actor-sheet-data.js' // Card init import { initECC } from './common/chatcardlib/src/chatcardlib.js' import { ChaseObstacleCard } from './chat/cards/chase-obstacle.js' +import { testCard } from './chat/cards/test.js' // import { testCard } from './chat/cards/test.js' Hooks.on('renderSettingsConfig', (app, html, options) => { @@ -146,7 +147,7 @@ Hooks.once('init', async function () { Combat.prototype.rollInitiative = rollInitiative }) -initECC(ChaseObstacleCard) +initECC(ChaseObstacleCard, testCard) Hooks.on('renderCombatTracker', (app, html, data) => CoC7Combat.renderCombatTracker(app, html, data) diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 456b98b8..36456033 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -25,6 +25,7 @@ export function initECC (...cardclass) { EnhancedChatCardLib.register(cardclass) EnhancedChatCardLib.socket = socketlib.registerSystem(game.system.id) //Socket is attached to current system EnhancedChatCardLib.socket.register('updateMessage', updateMessage) + EnhancedChatCardLib.socket.register('GMUpdate', GMUpdate) EnhancedChatCardLib.socket.register('advise', advise) // EnhancedChatCardLib.socket.register('gmtradeitemto', gmtradeitemto) }) @@ -42,6 +43,13 @@ async function updateMessage (messageId, newContent) { }) } +async function GMUpdate (data, cardClassName, messageId = undefined) { + const card = await EnhancedChatCard.fromData(data, cardClassName, messageId) + await card.GMUpdate() + // const diff = foundry.utils.diffObject( data, card.toObject()) + return card.toObject() +} + async function advise () { return } @@ -146,7 +154,7 @@ export class EnhancedChatCard { } async getData () { - await this.assignObject() + // await this.assignObjects() return { card: this, flags: this.flags, @@ -211,9 +219,10 @@ export class EnhancedChatCard { }) } - async updateChatCard (options = {}) { + async updateChatCard () { //TODO the whole function has to be executed by GM if options.GMchatCard - if (options.compute) await this.compute() + if (this.options.compute) await this.localCompute() + if (this.options.GMUpdate) await this.ExecuteGMUpdate() if (!this.messageId) { this.toMessage() } else { @@ -387,13 +396,33 @@ export class EnhancedChatCard { * Override to reassign object from the data structure. * @returns */ - async assignObject () {} + async assignObjects () {} + + /** + * Override to update object after data change. + * This is called by the local client + * @returns + */ + async localCompute () {} /** * Override to update object after data change. + * This is called by one of the GM clients. * @returns */ - async compute () {} + async GMUpdate () {} + + async ExecuteGMUpdate () { + const newData = await game.enhancedChatCardsLib.socket.executeAsGM( + 'GMUpdate', + this.toObject(), + this.constructor.name, + this.messageId + ) + + this._data = newData + await this.assignObjects() + } /** * @@ -493,14 +522,12 @@ export class EnhancedChatCard { excludeStartWith: '_', submitOnChange: true, speaker: ChatMessage.getSpeaker(), - ooc: false // * @param {boolean} [options.ooc=false] Use the speaker/getspeaker. if true use the user instead + ooc: false, // * @param {boolean} [options.ooc=false] Use the speaker/getspeaker. if true use the user instead + compute: true, // * @param {boolean} [options.compute.local=true] invoque the compute method as local user => need to override localCompute + GMUpdate: false // * @param {boolean} [options.compute.GM=false] invoque the GMUpdate method as GM => need to override GMUpdate } } - // get objectData () { - // return JSON.parse(this.objectDataString) - // } - get objectDataString () { return JSON.stringify(this._data, (key, value) => { if (value === null) return undefined @@ -546,7 +573,7 @@ export class EnhancedChatCard { return await this.fromData(cardData, htmmlCard.dataset.eccClass, messageId) } - static async fromData (data, cardClassName, messageId = null) { + static async fromData (data, cardClassName, messageId = undefined) { const cardClass = game.enhancedChatCardsLib.types.get(cardClassName) if (!cardClass) { @@ -558,7 +585,7 @@ export class EnhancedChatCard { const card = new cardClass(data) if (messageId) card.messageId = messageId - // await card.assignObject() + await card.assignObjects() return card } @@ -607,7 +634,7 @@ export class EnhancedChatCard { const card = target.closest(`.${ECC_CLASS}`) if (this.options.submitOnChange) { if (card) this._update(card) - this.updateChatCard() + this.updateChatCard() //Submit on change ? } } } diff --git a/module/items/chase/data.js b/module/items/chase/data.js index 571b536a..de5dbab2 100644 --- a/module/items/chase/data.js +++ b/module/items/chase/data.js @@ -1,5 +1,6 @@ import { CoCActor } from '../../actors/actor.js' import { ChaseObstacleCard } from '../../chat/cards/chase-obstacle.js' +import { testCard } from '../../chat/cards/test.js' import { chatHelper } from '../../chat/helper.js' import { CoC7Check } from '../../check.js' import { CoC7Item } from '../item.js' @@ -364,10 +365,16 @@ export class CoC7Chase extends CoC7Item { ) { const location = this.getLocationData(locationUuid) const card = new ChaseObstacleCard() - - // card.initialize( location?.obstacleDetails) - card.initialize({ chaseUuid: this.uuid }) + card.initialize({ + chaseUuid: this.uuid, + locationUuid: locationUuid, + moveParticipant: moveParticipant, + forward: locationUuid != this.activeLocation.uuid }) card.toMessage() + + // const test = new testCard() + // test.initialize({}) + // test.toMessage() } /** @override */ @@ -1039,6 +1046,43 @@ export class CoC7Chase extends CoC7Item { return list } + get allSkillsAndCharacteristics () { + const list = [] + CoCActor.getCharacteristicDefinition().forEach(c => + list.push( + `${game.i18n.localize('CoC7.Characteristics')} (${c.shortName})` + ) + ) + list.push( + `${game.i18n.localize('CoC7.Attribute')} (${game.i18n.localize( + 'CoC7.Luck' + )})` + ) + list.push( + `${game.i18n.localize('CoC7.Attribute')} (${game.i18n.localize( + 'CoC7.SAN' + )})` + ) + + game.CoC7.skillList?.forEach(s => { + if ( + !list.includes(s.fullName) && + !s.fullName + .toLowerCase() + .includes(`(${game.i18n.localize('CoC7.AnySpecName')})`.toLowerCase()) + ) + list.push(s.fullName) + }) // TODO: Remove ?? + this.participants.forEach(p => { + if (p.actor) { + p.actor.skills.forEach(s => { + if (!list.includes(s.fullName)) list.push(s.fullName) + }) + } + }) + return list.sort(Intl.Collator().compare) + } + /** * Clean the data of all parasite participants in locations. * Should never happen diff --git a/module/items/chase/sheet.js b/module/items/chase/sheet.js index 45f536a9..20f37cde 100644 --- a/module/items/chase/sheet.js +++ b/module/items/chase/sheet.js @@ -117,49 +117,11 @@ export class CoC7ChaseSheet extends ItemSheet { data.previousLocation = this.item.previousLocation data.nextLocation = this.item.nextLocation data.started = this.item.started - data.dataListCheckOptions = this.allSkillsAndCharacteristics data.isKeeper = game.user.isGM return data } - get allSkillsAndCharacteristics () { - const list = [] - CoCActor.getCharacteristicDefinition().forEach(c => - list.push( - `${game.i18n.localize('CoC7.Characteristics')} (${c.shortName})` - ) - ) - list.push( - `${game.i18n.localize('CoC7.Attribute')} (${game.i18n.localize( - 'CoC7.Luck' - )})` - ) - list.push( - `${game.i18n.localize('CoC7.Attribute')} (${game.i18n.localize( - 'CoC7.SAN' - )})` - ) - - game.CoC7.skillList?.forEach(s => { - if ( - !list.includes(s.fullName) && - !s.fullName - .toLowerCase() - .includes(`(${game.i18n.localize('CoC7.AnySpecName')})`.toLowerCase()) - ) - list.push(s.fullName) - }) // TODO: Remove ?? - this.item.participants.forEach(p => { - if (p.actor) { - p.actor.skills.forEach(s => { - if (!list.includes(s.fullName)) list.push(s.fullName) - }) - } - }) - return list.sort(Intl.Collator().compare) - } - // get activeParticipant () { // if (!this.item.data.data.participants) return undefined // const participant = this.item.data.data.participants.find(p => p.active) diff --git a/templates/chat/cards/chase-obstacle.html b/templates/chat/cards/chase-obstacle.html new file mode 100644 index 00000000..f87b4d85 --- /dev/null +++ b/templates/chat/cards/chase-obstacle.html @@ -0,0 +1,30 @@ +
                      + +
                      +
                      + {{#if displayActorOnCard}} + + {{/if}} +

                      {{item.name}}

                      +
                      +
                      + + + {{#each chase.allSkillsAndCharacteristics as |o|}} + + {{/each}} + + + {{#each chase.activeActorSkillsAndCharacteristics as |o|}} + + {{/each}} + +
                      + +
                      +
                      + +
                      + +
                      \ No newline at end of file diff --git a/templates/chat/cards/test.html b/templates/chat/cards/test.html index 944e37e1..360b49a2 100644 --- a/templates/chat/cards/test.html +++ b/templates/chat/cards/test.html @@ -40,7 +40,7 @@ CRITICAL IS ON {{/if}}
                      - +
                      diff --git a/templates/items/chase.html b/templates/items/chase.html index 9fcb3541..cb55c3a3 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -12,11 +12,11 @@ {{#if activeLocation}} - {{#each dataListCheckOptions as |o|}} + {{#each item.allSkillsAndCharacteristics as |o|}} {{/each}} - + {{#each item.activeActorSkillsAndCharacteristics as |o|}} {{/each}} @@ -52,9 +52,16 @@ {{/if}}
                      -
                      {{ localize "CoC7.ActionCost"}}
                      - {{#if activeLocation.obstacleDetails.hasActionCost}} - + {{#if activeLocation.obstacleDetails.barrier}} +
                      {{ localize "CoC7.HitPoints"}}
                      + {{#if activeLocation.obstacleDetails.hasHitPoints}} + + {{/if}} + {{else}} +
                      {{ localize "CoC7.ActionCost"}}
                      + {{#if activeLocation.obstacleDetails.hasActionCost}} + + {{/if}} {{/if}}
                      {{/if}} From 5ca8200910be9cbc9f47da33547642084bc09708 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Thu, 16 Dec 2021 08:25:05 +0100 Subject: [PATCH 351/726] Chat card header --- assets/icons/barrier.svg | 1 + assets/icons/hazard-sign.svg | 1 + module/chat/cards/chase-obstacle.js | 35 ++++--- module/common/chatcardlib/src/chatcardlib.js | 96 ++++++++++++-------- module/items/chase/data.js | 10 +- module/items/chase/participant.js | 18 ++++ module/items/chase/sheet.js | 7 ++ module/utilities.js | 27 ++++++ styles/chat/obstacle-card.less | 32 +++++++ styles/sheets/chase.less | 4 + styles/system/index.less | 1 + templates/chat/cards/chase-obstacle.html | 33 ++++--- templates/items/chase.html | 2 + 13 files changed, 201 insertions(+), 66 deletions(-) create mode 100644 assets/icons/barrier.svg create mode 100644 assets/icons/hazard-sign.svg create mode 100644 styles/chat/obstacle-card.less diff --git a/assets/icons/barrier.svg b/assets/icons/barrier.svg new file mode 100644 index 00000000..90bc7ede --- /dev/null +++ b/assets/icons/barrier.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/hazard-sign.svg b/assets/icons/hazard-sign.svg new file mode 100644 index 00000000..928c8df2 --- /dev/null +++ b/assets/icons/hazard-sign.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/module/chat/cards/chase-obstacle.js b/module/chat/cards/chase-obstacle.js index 32375d78..d4ca0352 100644 --- a/module/chat/cards/chase-obstacle.js +++ b/module/chat/cards/chase-obstacle.js @@ -4,28 +4,30 @@ import { _participant } from '../../items/chase/participant.js' export class ChaseObstacleCard extends EnhancedChatCard { /** @override */ static get defaultOptions () { - return mergeObject(super.defaultOptions, { + const options = mergeObject(super.defaultOptions, { template: 'systems/CoC7/templates/chat/cards/chase-obstacle.html', - GMUpdate: true + GMUpdate: false }) + options.classes.push('obstacle-card') + return options } /** @override */ async getData () { const data = await super.getData() - data.chase = await fromUuid(this._data.chaseUuid) - data.location = data.chase.getLocationData( this._data.locationUuid) - - if( !data.data.checkName){ - data.data.checkName = data.location.obstacleDetails.checkName - } + data.chase = await fromUuid(this.data.chaseUuid) data.displayActorOnCard = game.settings.get('CoC7', 'displayActorOnCard') - data.activeParticipant = new _participant( data.chase.activeParticipant) - - if( data.chase.activeActor){ - data.skill = data.chase.activeActor.find( data.data.checkName) + data.participant = new _participant(data.data.participantData) + + data.validCheck = false + if (data.participant.actor) { + data.skill = data.participant.actor.find(data.data.obstacle.checkName) + data.checkOptions = data.chase.activeActorSkillsAndCharacteristics + if( data.skill) data.validCheck = true + } else { + data.checkOptions = data.chase.allSkillsAndCharacteristics } return data @@ -34,6 +36,15 @@ export class ChaseObstacleCard extends EnhancedChatCard { /** @override */ async GMUpdate () {} + /** @override */ + async initialize () { + const chase = await fromUuid(this.data.chaseUuid) + if (!chase) return + const location = chase.getLocationData(this.data.locationUuid) + this.data.obstacle = location.obstacleDetails + this.data.participantData = chase.activeParticipantData + } + // activateListeners (html) { // super.activateListeners(html) // } diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 36456033..0de8b18a 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -1,3 +1,5 @@ +import { CoC7Utilities } from "../../../utilities.js" + const ECC_CLASS = 'enhanced-chat-card' const PERMISSION_TYPE = { @@ -118,14 +120,16 @@ export class EnhancedChatCard { // } constructor (data = {}, options = {}) { - this.initialize(data) + this.data = data + if (!this.data.flags) this.data.flags = {} this._options = options } - initialize (data) { - this._data = data - if (!this._data.flags) this._data.flags = {} - } + /** + * Called only once before sending message to chat. + * @override + */ + async initialize () {} get options () { return mergeObject(this.constructor.defaultOptions, this._options) @@ -167,10 +171,10 @@ export class EnhancedChatCard { } toObject () { - if (!this._data) return + if (!this.data) return const data = {} - for (let k of Object.keys(this._data)) { - const v = this._data[k] + for (let k of Object.keys(this.data)) { + const v = this.data[k] if (v instanceof Object) { data[k] = v.toObject ? v.toObject() : deepClone(v) } else data[k] = v @@ -182,6 +186,8 @@ export class EnhancedChatCard { //Map ecc card type if not registered already // this.registerECCClass() + await this.initialize() + //Publish by current user by default unless options.GMchatCard const data = await this.getData() const html = await renderTemplate(this.template, data) @@ -285,18 +291,26 @@ export class EnhancedChatCard { } setState (element) { - if (!element || !element.dataset.flag) return - element.classList.add( - this.flags[element.dataset.flag] ? STATE.ON : STATE.OFF - ) + if (!element) return + if( element.dataset.flag){ + element.classList.add( + this.flags[element.dataset.flag] ? STATE.ON : STATE.OFF + ) + } + if (element.dataset.name) { + const value = CoC7Utilities.getByPath( this, element.dataset.name) + element.classList.add( + value ? STATE.ON : STATE.OFF + ) + } } setRadioState (element) { if (!element || !element.name) return const splited = element.name.split('.') if ('data' != splited[0].toLowerCase()) return - if (this._data && undefined != this._data[splited[1]]) { - if (this._data[splited[1]] == element.value) { + if (this.data && undefined != this.data[splited[1]]) { + if (this.data[splited[1]] == element.value) { element.checked = true } } @@ -389,7 +403,7 @@ export class EnhancedChatCard { } get flags () { - return this._data.flags + return this.data.flags } /** @@ -420,7 +434,7 @@ export class EnhancedChatCard { this.messageId ) - this._data = newData + this.data = newData await this.assignObjects() } @@ -482,13 +496,16 @@ export class EnhancedChatCard { const form = forms[i] const fd = new FormDataExtended(form) let data = fd.toObject() - data = foundry.utils.diffObject( - this._data, - foundry.utils.expandObject(data) - ) - for (const [key, value] of Object.entries(data.data)) { - this._data[key] = value - updates = true + // data = foundry.utils.diffObject( + // this.data, + // foundry.utils.expandObject(data) + // ) + for (const [key, value] of Object.entries(data)) { + const oldValue = CoC7Utilities.getByPath( this, key) + if( !(oldValue === value)){ + CoC7Utilities.setByPath( this, key, value) + updates = true + } } } return updates @@ -529,7 +546,7 @@ export class EnhancedChatCard { } get objectDataString () { - return JSON.stringify(this._data, (key, value) => { + return JSON.stringify(this.data, (key, value) => { if (value === null) return undefined if (this.options.exclude?.includes(key)) return undefined if (key.startsWith(this.options.excludeStartWith)) return undefined @@ -589,18 +606,20 @@ export class EnhancedChatCard { return card } - setFlag (flagName) { - if (!flagName && !($.type(flagName) === 'string')) return - this._data.flags[flagName] = true + setData (name) { + if (!name && !($.type(name) === 'string')) return + CoC7Utilities.setByPath( this, name, true) } - unsetFlag (flagName) { - if (!flagName && !($.type(flagName) === 'string')) return - this._data.flags[flagName] = false + unsetData (name) { + if (!name && !($.type(name) === 'string')) return + CoC7Utilities.setByPath( this, name, false) } - toggleFlag (flagName) { - this.flags[flagName] = !this.flags[flagName] + toggleData (name) { + if (!name && !($.type(name) === 'string')) return + const value = CoC7Utilities.getByPath( this, name) + CoC7Utilities.setByPath( this, name, !value) } async _onToggle (event) { @@ -619,22 +638,23 @@ export class EnhancedChatCard { ) { return } - const flag = target.dataset.flag - if (!flag) return + let name = target.dataset.flag?`data.flags.${target.dataset.flag}`:target.dataset.name + if (!name) return const toggle = target.closest('.ecc-radio') if (!toggle) { - this.toggleFlag(flag) + this.toggleData(name) } else { const buttons = toggle.querySelectorAll('.ecc-switch') for (const b of buttons) { - this.unsetFlag(b.dataset.flag) + const bName = b.dataset.flag?`data.flags.${b.dataset.flag}`:b.dataset.name + this.unsetData(bName) } - this.setFlag(flag) + this.setData(name) } const card = target.closest(`.${ECC_CLASS}`) if (this.options.submitOnChange) { if (card) this._update(card) - this.updateChatCard() //Submit on change ? } + this.updateChatCard() //Submit on change ? } } diff --git a/module/items/chase/data.js b/module/items/chase/data.js index de5dbab2..a929f00e 100644 --- a/module/items/chase/data.js +++ b/module/items/chase/data.js @@ -59,12 +59,12 @@ export class CoC7Chase extends CoC7Item { return participants } - get activeParticipant () { + get activeParticipantData () { return this.data.data.participants.find(p => p.active) } get activeActor () { - const p = this.activeParticipant + const p = this.activeParticipantData if (!p) return undefined if (p.actorKey) { return chatHelper.getActorFromKey(p.actorKey) @@ -364,12 +364,12 @@ export class CoC7Chase extends CoC7Item { { moveParticipant = true } = {} ) { const location = this.getLocationData(locationUuid) - const card = new ChaseObstacleCard() - card.initialize({ + const card = new ChaseObstacleCard({ chaseUuid: this.uuid, locationUuid: locationUuid, moveParticipant: moveParticipant, - forward: locationUuid != this.activeLocation.uuid }) + forward: locationUuid != this.activeLocation.uuid + }) card.toMessage() // const test = new testCard() diff --git a/module/items/chase/participant.js b/module/items/chase/participant.js index 9add279f..44ecb2e0 100644 --- a/module/items/chase/participant.js +++ b/module/items/chase/participant.js @@ -110,6 +110,24 @@ export class _participant { this.data.bonusDice = x } + get hp () { + if( !this.data.hp){ + this.data.hp = 0 + } + if( this.actor){ + this.data.hp = this.actor.hp + } + + return this.data.hp + } + + set hp (x) { + this.data.hp = x + if( this.actor){ + this.actor.setHp(x) + } + } + addBonusDice () { if( this.data.bonusDice >= 2){ ui.notifications.error( 'Already have max bonus dice') diff --git a/module/items/chase/sheet.js b/module/items/chase/sheet.js index 20f37cde..1e1f1623 100644 --- a/module/items/chase/sheet.js +++ b/module/items/chase/sheet.js @@ -325,6 +325,13 @@ export class CoC7ChaseSheet extends ItemSheet { async _updateObject (event, formData) { const target = event.currentTarget const override = target?.dataset?.override === 'true' + if( target?.name?.includes('.hp')){ + const [, , uuid, data] = target.name.split('.') + const participant = this.item.getParticipant(uuid) + if( participant && participant.actor){ + if( !isNaN(Number( target.value))) await participant.actor.setHp( Number( target.value)) + } + } if (override) { const [, type, uuid, subType, data] = target.name.split('.') const index = this.findParticipantIndex(uuid) diff --git a/module/utilities.js b/module/utilities.js index 9097b9fa..dc6efd87 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -700,4 +700,31 @@ export class CoC7Utilities { return qString } + + static setByPath(obj, path, value) { + var parts = path.split('.'); + var o = obj; + if (parts.length > 1) { + for (var i = 0; i < parts.length - 1; i++) { + if (!o[parts[i]]) + o[parts[i]] = {}; + o = o[parts[i]]; + } + } + + o[parts[parts.length - 1]] = value; + } + + static getByPath(obj, path) { + var parts = path.split('.'); + var o = obj; + if (parts.length > 1) { + for (var i = 0; i < parts.length - 1; i++) { + if (!o[parts[i]]) return undefined + o = o[parts[i]]; + } + } + + return o[parts[parts.length - 1]]; + } } diff --git a/styles/chat/obstacle-card.less b/styles/chat/obstacle-card.less new file mode 100644 index 00000000..5e0ad9bf --- /dev/null +++ b/styles/chat/obstacle-card.less @@ -0,0 +1,32 @@ +.coc7.chat-card.obstacle-card{ + + .card-header{ + img{ + height: 2.25rem; + width: 2.25rem; + } + } + + .switched-off{ + display: block; + } + + .movement-action{ + display: flex; + justify-content: center; + align-items: center; + .deficit { + color: red; + text-shadow: 0 0 8px red; + } + .base { + color: gray; + &.deficit { + text-shadow: 0 0 8px red; + } + &.available { + color: goldenrod; + } + } + } +} \ No newline at end of file diff --git a/styles/sheets/chase.less b/styles/sheets/chase.less index 065fc6c9..dc68c6b9 100644 --- a/styles/sheets/chase.less +++ b/styles/sheets/chase.less @@ -183,6 +183,10 @@ justify-content: center; align-items: center; } + input{ + flex: 0 0 3rem; + height: 1.1rem; + } } } diff --git a/styles/system/index.less b/styles/system/index.less index 61f96b0d..eb5d3b47 100644 --- a/styles/system/index.less +++ b/styles/system/index.less @@ -2,6 +2,7 @@ @import '../chat/chat-card.less'; @import '../chat/damage.less'; @import '../chat/interactive-card.less'; +@import '../chat/obstacle-card.less'; @import '../chat/roll-card.less'; @import '../chat/rolls.less'; @import '../chat/san-chat-card.less'; diff --git a/templates/chat/cards/chase-obstacle.html b/templates/chat/cards/chase-obstacle.html index f87b4d85..0fd750b8 100644 --- a/templates/chat/cards/chase-obstacle.html +++ b/templates/chat/cards/chase-obstacle.html @@ -3,28 +3,39 @@
                      {{#if displayActorOnCard}} - + {{/if}} -

                      {{item.name}}

                      +
                      + {{#each participant.movementActionArray as |actionClass|}} + + {{/each}} +
                      + {{#if data.obstacle.barrier}} + + {{else}} + + {{/if}}
                      - - {{#each chase.allSkillsAndCharacteristics as |o|}} + + {{#each checkOptions as |o|}} {{/each}} - - {{#each chase.activeActorSkillsAndCharacteristics as |o|}} - - {{/each}} - +
                      + +
                      +
                      +
                      barrier
                      +
                      hazard
                      +
                      - +
                      \ No newline at end of file diff --git a/templates/items/chase.html b/templates/items/chase.html index cb55c3a3..9de2c36f 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -116,6 +116,8 @@
                      INIT: {{p.initiative}}
                      ADJ. MOV: {{p.adjustedMov}}
                      +
                      HP: +
                      From 2da5112d3337b009ed33f0404b9713c4b330316e Mon Sep 17 00:00:00 2001 From: Wojciech Polak Date: Fri, 17 Dec 2021 22:03:58 +0100 Subject: [PATCH 352/726] Polish NPC importer --- lang/en.json | 1 + lang/pl.json | 2 + module/apps/actor-importer-regexp.js | 109 ++++++++++++++++++++++++++- 3 files changed, 111 insertions(+), 1 deletion(-) diff --git a/lang/en.json b/lang/en.json index 59880138..0effea68 100644 --- a/lang/en.json +++ b/lang/en.json @@ -711,6 +711,7 @@ "CoC7.Spanish": "Spanish", "CoC7.French": "French", "CoC7.German": "German", + "CoC7.Polish": "Polish", "CoC7.TraditionalChinese": "Traditional Chinese", "CoC7.SelectSourceLanguage": "Select the source text language", "CoC7.ImportedUnnamedCharacter": "Imported unnamed character", diff --git a/lang/pl.json b/lang/pl.json index 24995935..691636c1 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -707,6 +707,8 @@ "CoC7.English": "Angielski", "CoC7.Spanish": "Hiszpański", "CoC7.French": "Francuski", + "Coc7.German": "Niemiecki", + "Coc7.Polish": "Polski", "CoC7.TraditionalChinese": "Chiński Tradycyjny", "CoC7.SelectSourceLanguage": "Wybierz źródło języka tekstu", "CoC7.ImportedUnnamedCharacter": "Zaimportowano nienazwaną postać", diff --git a/module/apps/actor-importer-regexp.js b/module/apps/actor-importer-regexp.js index e36407e1..f56fd596 100644 --- a/module/apps/actor-importer-regexp.js +++ b/module/apps/actor-importer-regexp.js @@ -56,7 +56,7 @@ import { CoC7Utilities } from '../utilities.js' const nameCharacters = '\\u3000\\u3400-\\u4DBF\\u4E00-\\u9FFF\\w\\(\\)\\-\\/&"\'' + CoC7Utilities.quoteRegExp( - 'áéíóàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃĀÑÕäëïöüÿÄËÏÖÜŸàèçÇßØøÅåÆ朓”«»' + 'áéíóàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃĀÑÕäëïöüÿÄËÏÖÜŸàèçÇßØøÅåÆ朓”«»ąćęłńóśźżĄĆĘŁŃÓŚŹŻ' ) const keys = { @@ -111,6 +111,32 @@ const keys = { example: 'Vorname Nachname\nAlter: 29\nBeruf: Ein Beruf\nST 50\nMA 60\nKO 60\nGE 60\nGR 55\nER 65\nIN 80\nBI 85\nTrefferpunkte: 11\nGeistige Stabilität: 60\nSchadensbonus: 0\nStatur: 0\nMagiepunkte: 12\nBewegungsweite: 8\n\nKampf\nAngriffe: 1\nHandgemenge 30% (15/6), Schaden 1D3\nMesser 30% (15/6), Schaden 1D4\nAusweichen 30% (15/6)\n\nFertigkeiten: Anthropologie 70% (35/14), Archäologie 30% (15/6), Bibliotheksnutzung 50% (25/10), Erste Hilfe 50% (25/10), Finanzkraft 40% (20/8), Geschichte 60% (30/12), Klettern 50% (25/10)\n\nSprachen: Englisch 85% (42/17); Deutsch 45% (22/9), Latein 45% (22/9)' }, + pl: { + description: 'CoC7.Polish', + dbNone: 'brak', + armorNone: 'brak', + attacksPerRoundNone: 'brak', + sanLossNone: 'brak', + diceShort: 'k|d', + fulldb: '(' + 'Modyfikator Obrażeń|MO' + ')', + halfdb: '(' + '½|1/2 MO|MO/2' + ')', + sectionCombats: '\n(?:' + 'Walka|Ataki' + ')[:\n]', + newCombatHeader: '\n' + 'Walka' + '\n', + sectionSkills: '\n(?:' + 'Umiejętności' + '(?:\\s*\\([^\\)]+\\))?)[:\n]', + sectionLangauges: '\n(?:' + 'Języki' + ')[:\n]', + sectionSpells: '\n(?:' + 'Zaklęcia' + ')[:\n]', + handgun: + '(?' + + ' Pistolet|Rewolwer|Derringer|Beretta|Luger|Desert Eagle| \\.38' + + ')', + rifle: + '(?' + 'Karabin|Strzelba|Wiatrówka|Garand|Gauge |Lee-Enfield|Strzelba na słonie' + ')', + smb: '(?' + 'Pistolet maszynowy|Thompson' + ')', + machineGun: '(?' + 'Browning|Vickers' + ')', + launched: '(?' + 'Mołotowa|Granat|Laska dynamitu|Dynamit' + ')', + example: + 'Przykładowa postać, 27 lat\nBibliotekarz\nS 75 KON 60 BC 80 ZR 70 WYG 60 INT 80\nMOC 50 WYK 85 P 55 PW 14 MO: 1D4\nKrzepa: 1 Ruch: 7 PM: 10 Szczęście: 40 Pancerz: 1\nAtaki w rundzie: 3 Utrata Poczytalności: 1K4/1K8\nWalka\nUgryzienie 50% (25/10), obrażenia 1K6\nWalka 30% (15/6), obrażenia 1K3\nDerringer 40% (20/8), obrażenia 1K8+1\nUnik 50% (25/10)\nUmiejętności\nTresura Zwierząt 55%, Urok Osobisty 30%, Pierwsza Pomoc 25%, Ukrywanie 20%,\nNasłuchiwanie 50%, Medycyna 45%, Przekonywanie 25%, Psychologia 75%,\nNauka (Astronomia) 90%, Nauka (Botanika) 35%, Nauka (Zoologia) 10%,\nSpostrzegawczość 35%, Ukrywanie 10%\nJęzyki: Angielski 80%, Eklo 5%.\nZaklęcia: Przyzwanie NPC, Odesłanie NPC.' + }, fr: { description: 'CoC7.French', dbNone: 'Acune', @@ -360,6 +386,87 @@ const translations = { keys.de.sectionSpells + ')' }, + pl: { + age: '(?\\d+)' + '\\s+(?:' + 'lata|lat|rok' + ')[,\\s]*', + occupation: + '[,\\s]*' + 'Zawód' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', + str: '(?\\d+|-)[,\\s\n]*', + con: '(?\\d+|-)[,\\s\n]*', + siz: '(?\\d+|-)[,\\s\n]*', + int: '(?\\d+|-)[,\\s\n]*', + pow: '(?\\d+|-)[,\\s\n]*', + dex: '(?\\d+|-)[,\\s\n]*', + app: '(?\\d+|-)[,\\s\n]*', + edu: '(?\\d+|-)[,\\s\n]*', + san: + '(?\\d+|-)[,\\s\n]*', + hp: + '(?\\d+|-)[,\\s\n]*', + mp: + '(?\\d+|-)[,\\s\n]*', + db: + '(?[+-]?\\d+(?:d\\d+|D|K\\d+)?|' + + keys.pl.dbNone + + ')[,\\s\n]*', + build: '(?[+-]?\\d+)[,\\s\n]*', + armor: + '(?' + + keys.pl.armorNone + + '|\\d+)[,\\s\n]*', + mov: '(?\\d+)[,\\s\n]*', + lck: '(?\\d+|-)[,\\s\n]*', + attacksPerRound: + '(?' + + keys.pl.attacksPerRoundNone + + '|\\d+(?!d))[,\\s\n]*', + sanLoss: + '(?' + + keys.pl.sanLossNone + + '|\\d[DK]?[+\\d]*\\/\\d[DK]?[+\\d]*)[,\\s\n]*', + weapon: + '(^|\\n)(?[.\\t ' + + nameCharacters + + ']+)(\\**,?\\s+|\\*)(?:\\(|(?\\d+)%,?(?:\\s*\\(\\d+\\/\\d+\\)\\s*,?)?)?(\\s*' + + 'obrażenia' + + ')?\\s+(?(:?(:?\\d+k|d)?\\d+(\\s*/\\s*|\\s*[+-]\\s*(?:' + + keys.pl.fulldb + + '|' + + keys.pl.halfdb + + ')\\s*|\\s*[+-]\\s*(:?\\d+d)?\\d+)*)+)\\)?', + weaponDodge: + '(?' + + 'Unik' + + ')(\\s*:)?\\s+\\(?(?\\d+)\\)?\\s*%(?:\\s*\\(\\d+\\/\\d+\\))?', + // Skill should not be named "The player has" / "but they regenerate" required for "A Cold Fire Within" + skill: + '^(?[:\\*.\\s' + + nameCharacters + + ']+(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,]?\\s*', + guessStartCombat: '(^|(?[\\.\\s' + nameCharacters + ']+)[,\\s\n]+', + sections: + '(' + + keys.pl.sectionCombats + + '|' + + keys.pl.sectionSkills + + '|' + + keys.pl.sectionLangauges + + '|' + + keys.pl.sectionSpells + + ')' + }, fr: { age: '(?\\d+)\\s*' + 'ans' + '(?![a-z])[,\\s]*', occupation: From 4a66241402c0ad1cfcaedfe291c18b9d2693d593 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 18 Dec 2021 02:36:25 +0000 Subject: [PATCH 353/726] Updated translations list --- .github/TRANSLATIONS.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index c2357f36..3c91b1b8 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -6,11 +6,12 @@ The following translations have been abandoned **cn**, **cs**, [are you able to | Key | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **5** | **1** | **1** | **7** | **7** | **1** | **1** | **1** | +| **Remaining**: | **6** | **2** | **2** | **8** | **8** | **2** | **2** | **2** | | [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | | [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | | [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | | [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | | [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | @@ -31,6 +32,10 @@ The following translations have been abandoned **cn**, **cs**, [are you able to `"CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would you like to take the remaining {convertedHitPoints} from your Hit Points? You will take {convertedHitPoints} damage if you proceed.",` +##### CoC7.Polish + +`"CoC7.Polish": "Polish",` + ##### CoC7.allActors `"CoC7.allActors": "All Actors",` From 3eff03dda04fc6dda7da6c4a4b8014cfcaf63a21 Mon Sep 17 00:00:00 2001 From: castanhocorreia Date: Sat, 18 Dec 2021 02:36:26 +0000 Subject: [PATCH 354/726] [create-pull-request] automated change --- .github/ABANDONED.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index 5e988ddd..a9acd4cf 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -270,6 +270,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Spanish": "Spanish", "CoC7.French": "French", "CoC7.German": "German", +"CoC7.Polish": "Polish", "CoC7.TraditionalChinese": "Traditional Chinese", "CoC7.SelectSourceLanguage": "Select the source text language", "CoC7.ImportedUnnamedCharacter": "Imported unnamed character", @@ -485,6 +486,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Cancel": "Cancel", "CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed", "CoC7.German": "German", +"CoC7.Polish": "Polish", "CoC7.TraditionalChinese": "Traditional Chinese", "CoC7.ImportedUnnamedCharacter": "Imported unnamed character", "CoC7.CreatedImportedCharactersFolder": "Created 'Imported Characters' folder", From 356867c4ae029cc71d50efe7a886ac9dfb193637 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Sat, 18 Dec 2021 11:36:08 +0100 Subject: [PATCH 355/726] Status and flows implementation --- lang/en.json | 7 ++ module/chat/cards/chase-obstacle.js | 36 ++++++++- module/check.js | 2 +- module/common/chatcardlib/src/chatcardlib.js | 48 +++++++----- styles/chat/obstacle-card.less | 72 +++++++++++------ styles/system/main.less | 1 + templates/chat/cards/chase-obstacle.html | 81 +++++++++++++++----- 7 files changed, 182 insertions(+), 65 deletions(-) diff --git a/lang/en.json b/lang/en.json index 7683e355..5d61a32c 100644 --- a/lang/en.json +++ b/lang/en.json @@ -529,6 +529,13 @@ "CoC7.YouGainedCthulhuMythos": "Your mind quail before the unearthly manifestation (+{value}% Cthulhu Mythos)", "CoC7.CardResolved": "Card resolved", + "CoC7.FacingObstacle": "You are facing {type}.", + "CoC7.ABarrier": "a barrier", + "CoC7.Barrier": "Barrier", + "CoC7.AHazard": "a hazard", + "CoC7.Hazard": "Hazard", + "CoC7.Breakable": "Breakable", + "CoC7.SpellCastingTime": "Casting Time", "CoC7.SpellCastingCost": "Casting Cost", "CoC7.CallSpell": "Call", diff --git a/module/chat/cards/chase-obstacle.js b/module/chat/cards/chase-obstacle.js index d4ca0352..c580a8ac 100644 --- a/module/chat/cards/chase-obstacle.js +++ b/module/chat/cards/chase-obstacle.js @@ -4,7 +4,7 @@ import { _participant } from '../../items/chase/participant.js' export class ChaseObstacleCard extends EnhancedChatCard { /** @override */ static get defaultOptions () { - const options = mergeObject(super.defaultOptions, { + const options = mergeObject(super.defaultOptions, { template: 'systems/CoC7/templates/chat/cards/chase-obstacle.html', GMUpdate: false }) @@ -25,11 +25,32 @@ export class ChaseObstacleCard extends EnhancedChatCard { if (data.participant.actor) { data.skill = data.participant.actor.find(data.data.obstacle.checkName) data.checkOptions = data.chase.activeActorSkillsAndCharacteristics - if( data.skill) data.validCheck = true + if (data.skill) data.validCheck = true } else { data.checkOptions = data.chase.allSkillsAndCharacteristics } + data.actions = { + player: {}, + gm: {} + } + data.status = [] + data.strings = {} + if (data.data.states?.obstacleDefined){ + data.strings.obstacleDefined = game.i18n.format('CoC7.FacingObstacle', { + type: data.data.obstacle.barrier + ? game.i18n.localize('CoC7.ABarrier') + : game.i18n.localize('CoC7.AHazard') + }) + if( data.data.obstacle.name) data.strings.obstacleDefined += ` (${data.data.obstacle.name})` + + if( data.data.obstacle.barrier) { + data.status.push( game.i18n.localize('CoC7.Barrier')) + if( data.data.obstacle.hasHitPoints ) data.status.push( game.i18n.localize('CoC7.Breakable')) + } + if( data.data.obstacle.hazard) data.status.push( game.i18n.localize('CoC7.Hazard')) + } + return data } @@ -43,6 +64,17 @@ export class ChaseObstacleCard extends EnhancedChatCard { const location = chase.getLocationData(this.data.locationUuid) this.data.obstacle = location.obstacleDetails this.data.participantData = chase.activeParticipantData + if (this.data.participantData.bonusDice > 0) { + this.data.bonusDice = this.data.participantData.bonusDice + this.data.flags.consumeBonusDice = true + } + } + + //Actions : + async onValidateObstacle (options) { + if (!this.data.states) this.data.states = {} + this.data.states.obstacleDefined = true + return true } // activateListeners (html) { diff --git a/module/check.js b/module/check.js index ca35d9e8..1a68b0de 100644 --- a/module/check.js +++ b/module/check.js @@ -210,7 +210,7 @@ export class CoC7Check { if (typeof this.difficulty !== 'undefined') { switch (this.difficulty) { case CoC7Check.difficultyLevel.extreme: - return game.i18n.format('CoC7.ExtremeDifficulty') + return game.mat('CoC7.ExtremeDifficulty') case CoC7Check.difficultyLevel.hard: return game.i18n.format('CoC7.HardDifficulty') case CoC7Check.difficultyLevel.regular: diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 0de8b18a..4508fc0d 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -1,4 +1,4 @@ -import { CoC7Utilities } from "../../../utilities.js" +import { CoC7Utilities } from '../../../utilities.js' const ECC_CLASS = 'enhanced-chat-card' @@ -292,16 +292,14 @@ export class EnhancedChatCard { setState (element) { if (!element) return - if( element.dataset.flag){ + if (element.dataset.flag) { element.classList.add( this.flags[element.dataset.flag] ? STATE.ON : STATE.OFF ) - } + } if (element.dataset.name) { - const value = CoC7Utilities.getByPath( this, element.dataset.name) - element.classList.add( - value ? STATE.ON : STATE.OFF - ) + const value = CoC7Utilities.getByPath(this, element.dataset.name) + element.classList.add(value ? STATE.ON : STATE.OFF) } } @@ -443,10 +441,10 @@ export class EnhancedChatCard { * @param {*} event will check for an action (data-action) * if a method with that name exist it will be triggered. */ - _onButton (event) { - const button = event.currentTarget + async _onButton (event) { + const target = event.currentTarget // button.style.display = 'none' //Avoid multiple push - const action = button.dataset.action + const action = target.dataset.action if (!action) { console.warn(`no action associated with this button`) return @@ -455,7 +453,13 @@ export class EnhancedChatCard { console.warn(`no ${action} action found for this card`) return } - if (this[action]) this[action]({ event: event, update: true }) + var update = false + if (this[action]) + update = await this[action]({ event: event, updateCard: update }) + const card = target.closest(`.${ECC_CLASS}`) + if (!card) return + const formUpdate = this._update(card) + if (formUpdate || update) this.updateChatCard() } /** @@ -501,9 +505,9 @@ export class EnhancedChatCard { // foundry.utils.expandObject(data) // ) for (const [key, value] of Object.entries(data)) { - const oldValue = CoC7Utilities.getByPath( this, key) - if( !(oldValue === value)){ - CoC7Utilities.setByPath( this, key, value) + const oldValue = CoC7Utilities.getByPath(this, key) + if (!(oldValue === value)) { + CoC7Utilities.setByPath(this, key, value) updates = true } } @@ -608,18 +612,18 @@ export class EnhancedChatCard { setData (name) { if (!name && !($.type(name) === 'string')) return - CoC7Utilities.setByPath( this, name, true) + CoC7Utilities.setByPath(this, name, true) } unsetData (name) { if (!name && !($.type(name) === 'string')) return - CoC7Utilities.setByPath( this, name, false) + CoC7Utilities.setByPath(this, name, false) } toggleData (name) { if (!name && !($.type(name) === 'string')) return - const value = CoC7Utilities.getByPath( this, name) - CoC7Utilities.setByPath( this, name, !value) + const value = CoC7Utilities.getByPath(this, name) + CoC7Utilities.setByPath(this, name, !value) } async _onToggle (event) { @@ -638,7 +642,9 @@ export class EnhancedChatCard { ) { return } - let name = target.dataset.flag?`data.flags.${target.dataset.flag}`:target.dataset.name + let name = target.dataset.flag + ? `data.flags.${target.dataset.flag}` + : target.dataset.name if (!name) return const toggle = target.closest('.ecc-radio') if (!toggle) { @@ -646,7 +652,9 @@ export class EnhancedChatCard { } else { const buttons = toggle.querySelectorAll('.ecc-switch') for (const b of buttons) { - const bName = b.dataset.flag?`data.flags.${b.dataset.flag}`:b.dataset.name + const bName = b.dataset.flag + ? `data.flags.${b.dataset.flag}` + : b.dataset.name this.unsetData(bName) } this.setData(name) diff --git a/styles/chat/obstacle-card.less b/styles/chat/obstacle-card.less index 5e0ad9bf..aa6e1f32 100644 --- a/styles/chat/obstacle-card.less +++ b/styles/chat/obstacle-card.less @@ -1,32 +1,58 @@ -.coc7.chat-card.obstacle-card{ +.coc7.chat-card.obstacle-card { + .gm-actions { + .status-list { + display: block; + padding: 3px 0; + border-bottom: none; + border-top: 2px groove #fff; - .card-header{ - img{ - height: 2.25rem; - width: 2.25rem; - } - } + .movement-action { + display: inline; + } + } + } + .card-header { + .card-title { + display: flex; + align-items: center; + justify-content: center; + } + } + + .card-buttons { + button { + font-size: 12px; + height: 24px; + line-height: 20px; + margin: 2px 0; + background: rgba(255, 255, 240, 0.8); + border: 1px solid #b5b3a4; + border-radius: 3px; + width: 100%; + font-family: 'Signika', sans-serif; + } + } - .switched-off{ + .switched-off { display: block; } - .movement-action{ + .movement-action { display: flex; justify-content: center; align-items: center; - .deficit { - color: red; - text-shadow: 0 0 8px red; - } - .base { - color: gray; - &.deficit { - text-shadow: 0 0 8px red; - } - &.available { - color: goldenrod; - } - } + .deficit { + color: red; + text-shadow: 0 0 8px red; + } + .base { + color: gray; + &.deficit { + text-shadow: 0 0 8px red; + } + &.available { + color: goldenrod; + } + } } -} \ No newline at end of file +} diff --git a/styles/system/main.less b/styles/system/main.less index 2a9dd842..74fee874 100644 --- a/styles/system/main.less +++ b/styles/system/main.less @@ -555,6 +555,7 @@ } .coc7.chat-card { .toggle-switch { + text-align: center; &:hover { background-color: lightgray; } diff --git a/templates/chat/cards/chase-obstacle.html b/templates/chat/cards/chase-obstacle.html index 0fd750b8..275a8ed8 100644 --- a/templates/chat/cards/chase-obstacle.html +++ b/templates/chat/cards/chase-obstacle.html @@ -1,15 +1,13 @@ -
                      +
                      -
                      -
                      +
                      +
                      {{#if displayActorOnCard}} {{/if}} -
                      - {{#each participant.movementActionArray as |actionClass|}} - - {{/each}} -
                      +
                      +
                      {{#if data.obstacle.name}}{{data.obstacle.name}}{{else}}{{ localize 'CoC7.Obstacle'}}{{/if}}
                      +
                      {{#if data.obstacle.barrier}} {{else}} @@ -19,23 +17,68 @@
                      + {{#each checkOptions as |o|}} {{/each}} -
                      +
                      +
                      + {{#if data.states.obstacleDefined}} +
                      {{ strings.obstacleDefined}}
                      + {{/if}} +
                      + {{#if playerActions.showActionChoice}} + {{/if}}
                      -
                      -
                      barrier
                      -
                      hazard
                      -
                      -
                      - -
                      -
                      - + +
                      + {{#if data.states.obstacleDefined}} + {{#if data.states.checkTypeDefined}} + {{else}} + {{/if}} + {{else}} +
                      +
                      barrier
                      +
                      hazard
                      +
                      +
                      + + +
                      +
                      +
                      Use Dice
                      +
                      Damage
                      + {{#if data.obstacle.barrier}} +
                      Hit Points
                      + {{else}} +
                      Actions
                      + {{/if}} +
                      +
                      + +
                      +
                      + +
                      +
                      + +
                      + {{/if}} + +
                      +
                      + actions : + {{#each participant.movementActionArray as |actionClass|}} + + {{/each}} +
                      + {{#each status as |s|}} +
                      {{s}}
                      + {{/each}} +
                      \ No newline at end of file From 0a08bdd40088bfa319f9e42f72077fe5f1a67ecd Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:26:08 +0100 Subject: [PATCH 356/726] Flow until action defined --- lang/en.json | 3 + module/chat/cards/chase-obstacle.js | 91 +++++++++++++++++++++--- module/items/chase/participant.js | 43 ++++++----- styles/chat/obstacle-card.less | 4 ++ templates/chat/cards/chase-obstacle.html | 72 +++++++++++++------ 5 files changed, 164 insertions(+), 49 deletions(-) diff --git a/lang/en.json b/lang/en.json index 5d61a32c..b7ff4a24 100644 --- a/lang/en.json +++ b/lang/en.json @@ -529,12 +529,15 @@ "CoC7.YouGainedCthulhuMythos": "Your mind quail before the unearthly manifestation (+{value}% Cthulhu Mythos)", "CoC7.CardResolved": "Card resolved", + "CoC7.SomethingInTheWay": "There is something in the way", "CoC7.FacingObstacle": "You are facing {type}.", "CoC7.ABarrier": "a barrier", "CoC7.Barrier": "Barrier", "CoC7.AHazard": "a hazard", "CoC7.Hazard": "Hazard", "CoC7.Breakable": "Breakable", + "CoC7.NoValidCheck": "No valid check", + "CoC7.EnterXXXBaseValue": "Enter {name} base value", "CoC7.SpellCastingTime": "Casting Time", "CoC7.SpellCastingCost": "Casting Cost", diff --git a/module/chat/cards/chase-obstacle.js b/module/chat/cards/chase-obstacle.js index c580a8ac..ae99a832 100644 --- a/module/chat/cards/chase-obstacle.js +++ b/module/chat/cards/chase-obstacle.js @@ -21,11 +21,43 @@ export class ChaseObstacleCard extends EnhancedChatCard { data.displayActorOnCard = game.settings.get('CoC7', 'displayActorOnCard') data.participant = new _participant(data.data.participantData) - data.validCheck = false + data.card.breakableObstacle = + data.data.obstacle.barrier && data.data.obstacle.hasHitPoints + data.card.validCheck = false + + if ( + data.data.obstacle.hazard || + (data.data.obstacle.barrier && !data.data.obstacle.hasHitPoints) + ) { + data.data.states.actionDefined = true + data.data.states.tryToPass = true + data.data.states.tryToBreak = false + } + if (data.participant.actor) { data.skill = data.participant.actor.find(data.data.obstacle.checkName) data.checkOptions = data.chase.activeActorSkillsAndCharacteristics - if (data.skill) data.validCheck = true + if (data.skill) data.card.validCheck = true + data.weaponsOptions = [] + if (data.card.breakableObstacle && data.data.states.breakThrougObstacle) { + data.participant.actor?.itemTypes?.weapon?.forEach(w => { + let formula = w.data.data.range.normal.damage + let db = data.participant.actor.db + if (null === db) { + db = '' + } else { + db = `${db}` + } + + if (db && !db.startsWith('-')) db = '+' + db + if (w.data.data.properties.addb) formula = formula + db + if (w.data.data.properties.ahbd) formula = formula + db + '/2' + data.weaponsOptions.push = { + name: `${w.data.name} (${formula})`, + damage: formula + } + }) + } } else { data.checkOptions = data.chase.allSkillsAndCharacteristics } @@ -36,21 +68,40 @@ export class ChaseObstacleCard extends EnhancedChatCard { } data.status = [] data.strings = {} - if (data.data.states?.obstacleDefined){ + data.strings.somethinInTheWay = game.i18n.localize('CoC7.SomethingInTheWay') + if (data.data.states?.obstacleDefined) { data.strings.obstacleDefined = game.i18n.format('CoC7.FacingObstacle', { type: data.data.obstacle.barrier ? game.i18n.localize('CoC7.ABarrier') : game.i18n.localize('CoC7.AHazard') }) - if( data.data.obstacle.name) data.strings.obstacleDefined += ` (${data.data.obstacle.name})` + if (data.data.obstacle.name) + data.strings.obstacleDefined += ` (${data.data.obstacle.name})` - if( data.data.obstacle.barrier) { - data.status.push( game.i18n.localize('CoC7.Barrier')) - if( data.data.obstacle.hasHitPoints ) data.status.push( game.i18n.localize('CoC7.Breakable')) + data.data.states.canAskRoll = true + data.data.states.obstacleCanBeBroken = false + if (data.data.obstacle.barrier) { + data.status.push({ name: game.i18n.localize('CoC7.Barrier') }) + if (data.data.obstacle.hasHitPoints) { + data.status.push({ name: game.i18n.localize('CoC7.Breakable') }) + data.data.states.obstacleCanBeBroken = true + } } - if( data.data.obstacle.hazard) data.status.push( game.i18n.localize('CoC7.Hazard')) - } + if (data.data.obstacle.hazard) + data.status.push({ name: game.i18n.localize('CoC7.Hazard') }) + if (!data.card.validCheck) { + data.status.push({ + name: game.i18n.localize('CoC7.NoValidCheck'), + css: 'warning' + }) + data.strings.EnterValuePlaceHolder = game.i18n.format( + 'CoC7.EnterXXXBaseValue', + { name: data.data.obstacle.checkName } + ) + if (!data.data.card.checkThreshold) data.data.states.canAskRoll = false + } + } return data } @@ -61,22 +112,40 @@ export class ChaseObstacleCard extends EnhancedChatCard { async initialize () { const chase = await fromUuid(this.data.chaseUuid) if (!chase) return + + if (undefined == this.data.card) this.data.card = {} + if (undefined == this.data.states) this.data.states = {} + const location = chase.getLocationData(this.data.locationUuid) this.data.obstacle = location.obstacleDetails this.data.participantData = chase.activeParticipantData if (this.data.participantData.bonusDice > 0) { - this.data.bonusDice = this.data.participantData.bonusDice + this.data.card.bonusDice = this.data.participantData.bonusDice this.data.flags.consumeBonusDice = true } } //Actions : - async onValidateObstacle (options) { + async defineObstacle (options) { if (!this.data.states) this.data.states = {} this.data.states.obstacleDefined = true return true } + async tryToPassObstacle (options) { + this.data.states.actionDefined = true + this.data.states.tryToPass = true + this.data.states.tryToBreak = false + return true + } + + async tryToreakThroughObstacle (options) { + this.data.states.actionDefined = true + this.data.states.tryToPass = false + this.data.states.tryToBreak = true + return true + } + // activateListeners (html) { // super.activateListeners(html) // } diff --git a/module/items/chase/participant.js b/module/items/chase/participant.js index 44ecb2e0..8bb75c98 100644 --- a/module/items/chase/participant.js +++ b/module/items/chase/participant.js @@ -90,31 +90,36 @@ export class _participant { } get bonusDice () { - if( isNaN(this.data.bonusDice) || this.data.bonusDice < 0 || this.data.bonusDice > 2) return 0 + if ( + isNaN(this.data.bonusDice) || + this.data.bonusDice < 0 || + this.data.bonusDice > 2 + ) + return 0 return this.data.bonusDice } set bonusDice (x) { - if( isNaN(x)){ - ui.notifications.error( 'Bonus dice can Only be a number') + if (isNaN(x)) { + ui.notifications.error('Bonus dice can Only be a number') return } - if( x > 2){ - ui.notifications.error( 'Max 2 bonus dice') + if (x > 2) { + ui.notifications.error('Max 2 bonus dice') return } - if( x < 0){ - ui.notifications.error( 'No negativ bonus dice') + if (x < 0) { + ui.notifications.error('No negativ bonus dice') return } this.data.bonusDice = x } get hp () { - if( !this.data.hp){ - this.data.hp = 0 + if (!this.data.hp) { + this.data.hp = 0 } - if( this.actor){ + if (this.actor) { this.data.hp = this.actor.hp } @@ -123,22 +128,22 @@ export class _participant { set hp (x) { this.data.hp = x - if( this.actor){ + if (this.actor) { this.actor.setHp(x) - } + } } addBonusDice () { - if( this.data.bonusDice >= 2){ - ui.notifications.error( 'Already have max bonus dice') + if (this.data.bonusDice >= 2) { + ui.notifications.error('Already have max bonus dice') return } this.data.bonusDice += 1 } removeBonusDice () { - if( this.data.bonusDice <= 0){ - ui.notifications.error( 'Already have 0 bonus dice') + if (this.data.bonusDice <= 0) { + ui.notifications.error('Already have 0 bonus dice') return } this.data.bonusDice -= 1 @@ -148,6 +153,10 @@ export class _participant { this.data.bonusDice = 0 } + get hasBonusDice () { + return this.hasOneBonusDice || this.hasTwoBonusDice + } + get hasOneBonusDice () { return this.bonusDice >= 1 } @@ -294,7 +303,7 @@ export class _participant { this.data.fastest = x } - calculateMovementActions( minMov){ + calculateMovementActions (minMov) { this.movementAction = 1 + (this.adjustedMov - minMov) } diff --git a/styles/chat/obstacle-card.less b/styles/chat/obstacle-card.less index aa6e1f32..55f7110e 100644 --- a/styles/chat/obstacle-card.less +++ b/styles/chat/obstacle-card.less @@ -9,6 +9,10 @@ .movement-action { display: inline; } + + .warning { + background-color: rgba(255, 166, 0, 0.5); + } } } .card-header { diff --git a/templates/chat/cards/chase-obstacle.html b/templates/chat/cards/chase-obstacle.html index 275a8ed8..b92454fa 100644 --- a/templates/chat/cards/chase-obstacle.html +++ b/templates/chat/cards/chase-obstacle.html @@ -6,6 +6,7 @@ {{/if}}
                      + {{#if data.states.obstacleDefined}}
                      {{#if data.obstacle.name}}{{data.obstacle.name}}{{else}}{{ localize 'CoC7.Obstacle'}}{{/if}}
                      {{#if data.obstacle.barrier}} @@ -14,6 +15,7 @@ {{/if}}
                      + {{/if}}
                      @@ -26,45 +28,73 @@
                      {{#if data.states.obstacleDefined}} -
                      {{ strings.obstacleDefined}}
                      +
                      {{strings.obstacleDefined}}
                      + {{else}} +
                      {{strings.somethinInTheWay}}
                      + {{/if}} + {{#if data.states.actionDefined}} +
                      + {{else}} +
                      {{ localize 'CoC7.WhatToDo' }}
                      {{/if}}
                      - {{#if playerActions.showActionChoice}} + + {{#if data.states.obstacleDefined}} {{/if}} +
                      {{#if data.states.obstacleDefined}} - {{#if data.states.checkTypeDefined}} + {{#if data.states.actionDefined}} + {{#if data.states.tryToPass}} +
                      + {{#if participant.hasBonusDice}} +
                      Consume bonus dice
                      + {{/if}} +
                      +
                      + +
                      +
                      + + {{#if card.validCheck}} + : {{skill.value.value}}% + {{else}} + : + {{/if}} +
                      + {{else}} +
                      + + +
                      + {{/if}} {{else}} +
                      {{ localize 'CoC7.AskPlayerAction' }}
                      +
                      + + +
                      {{/if}} {{else}}
                      barrier
                      hazard
                      + {{#if data.obstacle.barrier}}
                      - - -
                      -
                      -
                      Use Dice
                      -
                      Damage
                      - {{#if data.obstacle.barrier}} -
                      Hit Points
                      - {{else}} -
                      Actions
                      - {{/if}} -
                      -
                      - +
                      Can be broken
                      + {{/if}}
                      - + +
                      - +
                      {{/if}} @@ -76,7 +106,7 @@ {{/each}}
                      {{#each status as |s|}} -
                      {{s}}
                      +
                      {{s.name}}
                      {{/each}}
                      From 48ad5e372ab201e57a05269c68a2642428430750 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Tue, 21 Dec 2021 02:53:27 +0100 Subject: [PATCH 357/726] CoC7ChatCards removed --- module/coc7.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/coc7.js b/module/coc7.js index 380b370b..6c966286 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -20,7 +20,7 @@ import { CoC7Hooks } from './hooks/index.js' import * as DiceBot from './dicebot.js' import '../styles/system/index.less' import { CoC7ChaseSheet } from './items/chase/sheet.js' -import { CoC7Socket, CoC7ChatCards } from './hooks/socket.js' +import { CoC7Socket } from './hooks/socket.js' import { DropActorSheetData } from './hooks/drop-actor-sheet-data.js' // Card init From 776edb36d73cc8e8a67f1500899c630839e88ef2 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 21 Dec 2021 10:28:22 +0000 Subject: [PATCH 358/726] Fix compendium render in v8/v9 --- module/scripts/compendium-filter.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/module/scripts/compendium-filter.js b/module/scripts/compendium-filter.js index b1f46356..1bcba775 100644 --- a/module/scripts/compendium-filter.js +++ b/module/scripts/compendium-filter.js @@ -50,8 +50,7 @@ async function performFilter (e) { export function compendiumFilter () { Hooks.on('renderCompendium', async (app, html, data) => { - if (app.metadata.entity === 'Item') { - console.log(app, html, data) + if (app.collection.documentName === 'Item') { const types = [...new Set(data.index.map(item => item.type))] const select = [] select.push('') From fa188a2cb0bb217e5cba9980a060af9ba217a8ff Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 21 Dec 2021 11:32:12 +0000 Subject: [PATCH 359/726] Prevent character sheets editing themselves if not editable. Update tab spacing on character sheet --- module/actors/sheets/character.js | 11 ++++------- styles/sheets/character.less | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index f7ed2a94..096a8d35 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -39,17 +39,14 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { async getData () { const data = await super.getData() - - if (typeof this.actor.getFlag('CoC7', 'skillListMode') === 'undefined') { + if (this.isEditable && typeof this.actor.getFlag('CoC7', 'skillListMode') === 'undefined') { await this.actor.setFlag('CoC7', 'skillListMode', false) } - data.skillListModeValue = this.actor.getFlag('CoC7', 'skillListMode') - if ( - typeof this.actor.getFlag('CoC7', 'skillShowUncommon') === 'undefined' - ) { + if (this.isEditable && typeof this.actor.getFlag('CoC7', 'skillShowUncommon') === 'undefined') { await this.actor.setFlag('CoC7', 'skillShowUncommon', true) } - data.skillShowUncommon = this.actor.getFlag('CoC7', 'skillShowUncommon') + data.skillListModeValue = (this.actor.getFlag('CoC7', 'skillListMode') ?? false) + data.skillShowUncommon = (this.actor.getFlag('CoC7', 'skillShowUncommon') ?? true) data.showIconsOnly = game.settings.get('CoC7', 'showIconsOnly') if (this.actor.occupation) { diff --git a/styles/sheets/character.less b/styles/sheets/character.less index 4d3a44b9..81897087 100644 --- a/styles/sheets/character.less +++ b/styles/sheets/character.less @@ -244,7 +244,7 @@ display: flex; flex-direction: row; flex-wrap: wrap; - justify-content: flex-start; + justify-content: space-around; align-items: center; a { From 12441efe22c0a96056d5c82bdc00b4ed6827a307 Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Wed, 22 Dec 2021 01:09:36 -0300 Subject: [PATCH 360/726] Update japanese localization file --- lang/ja.json | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/lang/ja.json b/lang/ja.json index 4f60d411..54440a1b 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -127,6 +127,7 @@ "CoC7.MagicPointsCost": "MPコスト", "CoC7.OtherCosts": "その他のコスト", "CoC7.CastingSpell": "{spell} 呪文を詠唱。", + "CoC7.NotEnoughMagicPoints": "{spell} 呪文のコストとして {originalMagicPoints} MPを消費する必要がある。君には {actorMagicPoints} MPしかないため、不足分である {convertedHitPoints} 点のコストを、君の耐久力から支払うことが可能だ。そうした場合、{convertedHitPoints} ダメージを受ける。", "CoC7.CopyToClipboard": "クリップボードにコピー", "CoC7.WhisperToSelection": "選択したトークンにウィスパー", @@ -334,7 +335,7 @@ "CoC7.Era1920": "1920年代", "CoC7.EraPulp": "パルプ・クトゥルフ", "CoC7.EraMdrn": "現代", - "CoC7.Eras": "クトゥルフ・フレーバー", + "CoC7.Eras": "対応サプリメント", "CoC7.SkillNoAdjustments": "修正不可", "CoC7.SkillNoXpGain": "成長しない技能", @@ -352,7 +353,7 @@ "CoC7.WeaponRare": "まれ", "CoC7.WeaponAhdb": "+1/2 DB", "CoC7.WeaponAddb": "+DB", - "CoC7.WeaponSlnt": "消音性能", + "CoC7.WeaponSlnt": "消音", "CoC7.WeaponXplv": "範囲攻撃", "CoC7.WeaponBrst": "バースト", "CoC7.WeaponAuto": "フルオート", @@ -378,7 +379,7 @@ "CoC7.DodgeSkillName": "回避", "CoC7.CthulhuMythosName": "クトゥルフ神話", "CoC7.CreditRatingSkillName": "信用", - "CoC7.DriveAutoSkillName": "Drive Auto", + "CoC7.DriveAutoSkillName": "運転(自動車)", "CoC7.FightingSpecializationName": "近接格闘", "CoC7.FirearmSpecializationName": "射撃", "CoC7.DriveSpecializationName": "運転", @@ -661,6 +662,8 @@ "CoC7.WarnFastTargetWithWrongMOV": "MOV 7以下の対象に「疾走する対象」の選択がされている (MOV: {mov})", "CoC7.WarnTooManyTarget": "対象の選択数が多すぎる。最後に選択した対象のみを有効にする", + "CoC7.allActors": "全アクター", + "CoC7.restTargets": "休息の対象者", "CoC7.startRest": "休息を取る", "CoC7.dreaming": "探索者たちは、眠りに落ちて夢を見る", "CoC7.healthRecovered": "HP 1点を回復", @@ -679,8 +682,8 @@ "CoC7.InfoLessSkillThanOptions": "現在の技能の選択数は {skillCount} で、任意の技能数は {optionsCount} だ。選択数が足りない。", "CoC7.InfoAllSkillsAlreadySelected": "すでに選択可能な技能数まで選択済みだ。", - "CoC7.MessageCheckRequestedWait": "キーパーが {check} 判定を要望。
                      それを待ってクリックしよう!
                      ", - "CoC7.MessageTargetCheckRequested": "キーパーが {name} に {check} 判定を要望。", + "CoC7.MessageCheckRequestedWait": "キーパーが {check} 判定を指示。
                      クリックしよう!
                      ", + "CoC7.MessageTargetCheckRequested": "キーパーが {name} に {check} 判定を指示。", "CoC7.MessageTitleSelectSingleUserForTarget": "この攻撃に対応できるユーザー", "CoC7.MessageSelectSingleUserForTarget": "このトークンは複数のユーザーによって管理されている。どのユーザーがこの攻撃に対応するかを選択すること。", "CoC7.MessageBoutOfMadnessTableNotFound": "狂気テーブルの結果が見つからない。すべてのロールテーブルが作成されているか確認すること", @@ -707,6 +710,7 @@ "CoC7.English": "英語", "CoC7.Spanish": "スペイン語", "CoC7.French": "フランス語", + "CoC7.German": "ドイツ語", "CoC7.TraditionalChinese": "繁体字中国語", "CoC7.SelectSourceLanguage": "言語を選択", "CoC7.ImportedUnnamedCharacter": "インポートされた無名のキャラクター", @@ -869,5 +873,8 @@ "CoC7.ExperimentalFeaturesWarning": "この機能は開発中のものであり、あなたのワールドでの使用は推奨されません。", "SETTINGS.CheckElevation": "距離に高さを含める", "SETTINGS.CheckElevationHint": "射撃戦闘の距離計算に高さも含める", - "CoC7.toolTipDelay": "ツールチップが表示されるまでの時間 (ミリ秒)。0は非表示。" + "CoC7.toolTipDelay": "ツールチップが表示されるまでの時間 (ミリ秒)。0は非表示。", + + "CoC7.getTheExample": "例のコピー", + "CoC7.Copied": "例をクリップボードにコピー" } From 84ab8089ab506acc1499a94320d30097c7cf1c23 Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Wed, 22 Dec 2021 01:10:19 -0300 Subject: [PATCH 361/726] Prepare system for v0.7.3 --- .github/CHANGELOG.md | 18 ++++++++++++++++++ package.json | 2 +- system.json | 6 +++--- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 98c921d2..a1b6b2cf 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,3 +1,21 @@ +## Version 0.7.3: + +When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. + +- Compatible with Foundry VTT v9 +- Fix compendium render in v8/v9 +- Fix multiple chat messages for tokens to the correct users +- Now Actor Importer support Polish, thanks to @frondeus +- Prevent character sheets editing themselves if not editable +- Update layout for weapon sheet tab navigation +- Update to French localization, thanks to @vonv +- Update to Japanese localization, thanks to `@Asami#8627` +- Update to Polish localization, thanks to @frondeus +- Update to Portuguese localization +- Update to Spanish localization, thanks to @lozalojo +- Update to Swedish localization, thanks to @Rangertheman +- Update to Taiwanese localization, thanks to @zeteticl + ## Version 0.7.2: When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. diff --git a/package.json b/package.json index 39fecb25..d9292d62 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fvtt-coc7", - "version": "0.7.2", + "version": "0.7.3", "description": "An unofficial implementation of Call of Cthulhu 7th Edition system for Foundry VTT.", "scripts": { "build": "webpack --mode production", diff --git a/system.json b/system.json index a2f577df..47fd62b6 100644 --- a/system.json +++ b/system.json @@ -2,10 +2,10 @@ "name": "CoC7", "title": "Call of Cthulhu 7th Edition (Unofficial)", "description": "An unofficial implementation of the Call of Cthulhu 7th Edition game system for Foundry Virtual Tabletop.", - "version": "0.7.2", + "version": "0.7.3", "author": "Miskatonic Investigative Society", - "minimumCoreVersion": "0.8.6", - "compatibleCoreVersion": "0.8.9", + "minimumCoreVersion": "9", + "compatibleCoreVersion": "9", "esmodules": [ "lib/socketlib/src/libwrapper_shim.js", "lib/socketlib/src/socketlib.js", From 940db576ebe939aed90dc4ca0431ce8e0df89521 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 22 Dec 2021 04:11:26 +0000 Subject: [PATCH 362/726] Updated translations list --- .github/TRANSLATIONS.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 3c91b1b8..78a860a9 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -6,15 +6,15 @@ The following translations have been abandoned **cn**, **cs**, [are you able to | Key | de | es | fr | ja | pl | pt-BR | sv | zh-TW | | :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **6** | **2** | **2** | **8** | **8** | **2** | **2** | **2** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| **Remaining**: | **6** | **2** | **2** | **2** | **8** | **2** | **2** | **2** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | | [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | | [CoC7.Polish](#coc7polish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.Copied From 6f7edc48c65a8acec88bb5b26ea9a695a5c92d4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20E=2E=20Lozano?= Date: Wed, 22 Dec 2021 09:48:58 +0100 Subject: [PATCH 363/726] Updated spanish --- lang/es.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lang/es.json b/lang/es.json index f97ac51e..2998949c 100644 --- a/lang/es.json +++ b/lang/es.json @@ -339,6 +339,7 @@ "CoC7.EraPulp": "Pulp Cthulhu", "CoC7.EraMdrn": "Época Actual", "CoC7.Eras": "Épocas Cthulhu", + "CoC7.EraAvailability": "Disponibilidad", "CoC7.SkillNoAdjustments": "Sin ajustes", "CoC7.SkillNoXpGain": "Sin ganancia de EXP", @@ -714,6 +715,7 @@ "CoC7.Spanish": "Español", "CoC7.French": "Francés", "CoC7.German": "Alemán", + "CoC7.Polish": "Polaco", "CoC7.TraditionalChinese": "Chino tradicional", "CoC7.SelectSourceLanguage": "Seleccione el idioma del texto original", "CoC7.ImportedUnnamedCharacter": "Se ha importado personaje 'unnamed'", From 13af039143f805bb41135ca0a92c1018d775e503 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 23 Dec 2021 21:24:09 +0000 Subject: [PATCH 364/726] Updated translations list --- .github/TRANSLATIONS.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 78a860a9..6fcc0a1b 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,19 +2,21 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! +The **es** translation is currently up to date + The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | ja | pl | pt-BR | sv | zh-TW | -| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **6** | **2** | **2** | **2** | **8** | **2** | **2** | **2** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| Key | de | fr | ja | pl | pt-BR | sv | zh-TW | +| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **6** | **2** | **2** | **8** | **2** | **2** | **2** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.Copied From 1b0922a35c9dbd4b2dc54279b899436c186088e4 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 25 Dec 2021 23:03:54 +0000 Subject: [PATCH 365/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index a1b6b2cf..b2ee077f 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,3 +1,9 @@ +## Changes coming in a future release: + +When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. + +- Update to Spanish localization, thanks to @lozalojo + ## Version 0.7.3: When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. From f28dfdc2deea7de8e0d033b103a4163bb65a8508 Mon Sep 17 00:00:00 2001 From: HavlockV Date: Sun, 26 Dec 2021 20:00:20 +0300 Subject: [PATCH 366/726] Request roll with name --- lang/en.json | 6 +- module/actors/actor.js | 2 + module/chat/cards/chase-obstacle.js | 56 +++++++++++++++---- module/common/chatcardlib/src/chatcardlib.js | 24 +++++++- styles/chat/obstacle-card.less | 4 ++ templates/chat/cards/chase-obstacle.html | 59 +++++++++++++------- 6 files changed, 114 insertions(+), 37 deletions(-) diff --git a/lang/en.json b/lang/en.json index b5604169..20b6d11c 100644 --- a/lang/en.json +++ b/lang/en.json @@ -147,6 +147,7 @@ "CoC7.DiceModifierPenalty": "penalty", "CoC7.Modifiers": "Modifiers", "CoC7.BonusDice": "Bonus Dice", + "CoC7.PenaltyDice": "Penalty Dice", "CoC7.UnitsDie": "1 units die", "CoC7.TensDie": "tens die", "CoC7.TensDice": "tens dice", @@ -538,7 +539,9 @@ "CoC7.Hazard": "Hazard", "CoC7.Breakable": "Breakable", "CoC7.NoValidCheck": "No valid check", - "CoC7.EnterXXXBaseValue": "Enter {name} base value", + "CoC7.NoValidSkill": "Fake skill", + "CoC7.AskIntentions": "What are your intentions ?", + "CoC7.AskRoll": "Roll {name} ({value}%)", "CoC7.SpellCastingTime": "Casting Time", "CoC7.SpellCastingCost": "Casting Cost", @@ -889,5 +892,4 @@ "CoC7.getTheExample": "Copy Example", "CoC7.Copied": "Copied the Example Text to Clipboard" - } diff --git a/module/actors/actor.js b/module/actors/actor.js index aa763bcc..4e70c6ab 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -2706,6 +2706,7 @@ export class CoCActor extends Actor { for (let i = 0; i < charKey.length; i++) { const char = this.getCharacteristic(charKey[i]) if (char) { + char.name = char.label if ( char.key?.toLocaleLowerCase() === name.toLowerCase() || char.key?.toLocaleLowerCase() === shortName?.toLowerCase() @@ -2732,6 +2733,7 @@ export class CoCActor extends Actor { for (let i = 0; i < attribKey.length; i++) { const attr = this.getAttribute(attribKey[i]) if (attr) { + attr.name = attr.label if ( attr.key?.toLocaleLowerCase() === name.toLowerCase() || attr.key?.toLocaleLowerCase() === shortName?.toLowerCase() diff --git a/module/chat/cards/chase-obstacle.js b/module/chat/cards/chase-obstacle.js index ae99a832..cfb8a36e 100644 --- a/module/chat/cards/chase-obstacle.js +++ b/module/chat/cards/chase-obstacle.js @@ -17,7 +17,9 @@ export class ChaseObstacleCard extends EnhancedChatCard { const data = await super.getData() data.chase = await fromUuid(this.data.chaseUuid) - + data.status = [] + data.strings = {} + data.displayActorOnCard = game.settings.get('CoC7', 'displayActorOnCard') data.participant = new _participant(data.data.participantData) @@ -26,18 +28,23 @@ export class ChaseObstacleCard extends EnhancedChatCard { data.card.validCheck = false if ( - data.data.obstacle.hazard || - (data.data.obstacle.barrier && !data.data.obstacle.hasHitPoints) + data.data.states.obstacleDefined && + (data.data.obstacle.hazard || + (data.data.obstacle.barrier && !data.data.obstacle.hasHitPoints)) ) { - data.data.states.actionDefined = true data.data.states.tryToPass = true data.data.states.tryToBreak = false + data.data.states.actionDefined = true } if (data.participant.actor) { data.skill = data.participant.actor.find(data.data.obstacle.checkName) data.checkOptions = data.chase.activeActorSkillsAndCharacteristics - if (data.skill) data.card.validCheck = true + if (data.skill) { + data.validCheck = true + data.validSkill = true + } else if (data.data.obstacle.checkName && data.data.card.checkThreshold) + data.validCheck = true data.weaponsOptions = [] if (data.card.breakableObstacle && data.data.states.breakThrougObstacle) { data.participant.actor?.itemTypes?.weapon?.forEach(w => { @@ -60,14 +67,30 @@ export class ChaseObstacleCard extends EnhancedChatCard { } } else { data.checkOptions = data.chase.allSkillsAndCharacteristics + data.dummyActor = true + if (data.data.obstacle.checkName && data.data.card.checkThreshold) + data.validCheck = true + } + + if( data.validCheck){ + let checkName,value + if( data.skill){ + checkName = data.skill.value.name + value = data.skill.value.value + } else { + checkName = data.data.obstacle.checkName + value = data.data.card.checkThreshold + } + data.strings.rollRequest = game.i18n.format( 'CoC7.AskRoll', {name: checkName, value: value}) + if( data.data.card.bonusDice != 0){ + data.strings.rollRequest += ` (${data.data.card.bonusDice})` + } } data.actions = { player: {}, gm: {} } - data.status = [] - data.strings = {} data.strings.somethinInTheWay = game.i18n.localize('CoC7.SomethingInTheWay') if (data.data.states?.obstacleDefined) { data.strings.obstacleDefined = game.i18n.format('CoC7.FacingObstacle', { @@ -90,16 +113,21 @@ export class ChaseObstacleCard extends EnhancedChatCard { if (data.data.obstacle.hazard) data.status.push({ name: game.i18n.localize('CoC7.Hazard') }) - if (!data.card.validCheck) { + if (!data.validCheck) { data.status.push({ name: game.i18n.localize('CoC7.NoValidCheck'), - css: 'warning' + css: 'error' }) - data.strings.EnterValuePlaceHolder = game.i18n.format( - 'CoC7.EnterXXXBaseValue', + data.strings.EnterValueTitle = game.i18n.format( + 'CoC7.SkillSelectBase', { name: data.data.obstacle.checkName } ) if (!data.data.card.checkThreshold) data.data.states.canAskRoll = false + } else if (!data.validSkill) { + data.status.push({ + name: game.i18n.localize('CoC7.NoValidSkill'), + css: 'warning' + }) } } return data @@ -146,6 +174,12 @@ export class ChaseObstacleCard extends EnhancedChatCard { return true } + async requestRoll (options) { + this.data.states.waitForRoll = true + this.data.states.checkDefined = true + return true + } + // activateListeners (html) { // super.activateListeners(html) // } diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 4508fc0d..b9e7c584 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -4,6 +4,7 @@ const ECC_CLASS = 'enhanced-chat-card' const PERMISSION_TYPE = { GM: 'gm', // user is GM + NOT_GM: '!gm', // user is NOT gm (hide to GM in case of visibility) SPEAKER: 'speaker', // the speaker is an actor controled/owned by the user USER: 'user', // the user is the message's author EVERYONE: 'all', // equivalent to empty string @@ -352,11 +353,19 @@ export class EnhancedChatCard { if (!vision) return true //GM can always modify everything ! Nah if (permissionsArray.includes(PERMISSION_TYPE.GM)) return true && whiteList - return false || !whiteList //If pass the filter return false unless it's a blacklist - } else { + if (permissionsArray.includes(PERMISSION_TYPE.NOT_GM)) + return false || !whiteList permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.GM) + permissionsArray = permissionsArray.filter( + e => e != PERMISSION_TYPE.NOT_GM + ) } + // return false || !whiteList //If pass the filter return false unless it's a blacklist + // } else { + // permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.GM) + // } + if (permissionsArray.includes(PERMISSION_TYPE.USER)) { if (this.message.isAuthor) return true && whiteList //isAuthor vs user.isOwner ? permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.USER) @@ -386,7 +395,16 @@ export class EnhancedChatCard { } // All filter passed, array should contains only uuids or actor/token ids if (permissionsArray.length) { - ui.notifications.info('Array permission is not empty !') + for (let i = 0; i < permissionsArray.length; i++) { + const uuid = permissionsArray[i] + let actor = await fromUuid(uuid) + if (!actor) actor = game.actors.get(uuid) + if (actor) { + return actor.isOwner + } else { + ui.notifications.error(`Unable to find actor ${uuid}`) + } + } } return false || !whiteList //If pass the filter return false unless it's a blacklist } diff --git a/styles/chat/obstacle-card.less b/styles/chat/obstacle-card.less index 55f7110e..22c84bb8 100644 --- a/styles/chat/obstacle-card.less +++ b/styles/chat/obstacle-card.less @@ -13,6 +13,10 @@ .warning { background-color: rgba(255, 166, 0, 0.5); } + + .error { + background-color: rgba(255, 0, 0, 0.5); + } } } .card-header { diff --git a/templates/chat/cards/chase-obstacle.html b/templates/chat/cards/chase-obstacle.html index b92454fa..d23431e0 100644 --- a/templates/chat/cards/chase-obstacle.html +++ b/templates/chat/cards/chase-obstacle.html @@ -29,14 +29,19 @@
                      {{#if data.states.obstacleDefined}}
                      {{strings.obstacleDefined}}
                      + {{#if data.states.checkDefined}} +
                      I know what to do
                      +
                      + {{#unless dummyActor}} + + {{/unless}} +
                      + {{else}} +
                      {{ localize 'CoC7.AskIntentions' }}
                      + {{/if}} {{else}}
                      {{strings.somethinInTheWay}}
                      {{/if}} - {{#if data.states.actionDefined}} -
                      - {{else}} -
                      {{ localize 'CoC7.WhatToDo' }}
                      - {{/if}}
                      {{#if data.states.obstacleDefined}} @@ -48,24 +53,36 @@ {{#if data.states.obstacleDefined}} {{#if data.states.actionDefined}} {{#if data.states.tryToPass}} -
                      - {{#if participant.hasBonusDice}} -
                      Consume bonus dice
                      - {{/if}} -
                      -
                      - -
                      -
                      - - {{#if card.validCheck}} - : {{skill.value.value}}% + {{#if data.states.rolled}} + {{else}} + {{#if data.states.waitForRoll}} + Waiting for roll {{else}} - : +
                      + {{#if participant.hasBonusDice}} +
                      Consume bonus dice
                      + {{/if}} +
                      +
                      + +
                      +
                      + + {{#if validSkill}} + : {{skill.value.value}}% + {{else}} + : + {{/if}} +
                      +
                      + {{#if validCheck}} + + {{/if}} +
                      {{/if}} -
                      + {{/if}} {{else}}
                      From 8dbbb11410389c6f922bee6e489ecffe6a7d61a0 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Mon, 27 Dec 2021 12:57:23 +0100 Subject: [PATCH 367/726] Fix CSS for tabs display --- styles/sheets/sheets.less | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/styles/sheets/sheets.less b/styles/sheets/sheets.less index 0eb5861b..af0706cc 100644 --- a/styles/sheets/sheets.less +++ b/styles/sheets/sheets.less @@ -2,6 +2,45 @@ html { font-size: 16px; } +.tabs { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-start; +} +.tabs > * { + flex: 1; +} +.tabs > .flex0 { + display: block; + flex: 0; +} +.tabs > .flex1 { + flex: 1; +} +.tabs > .flex2 { + flex: 2; +} +.tabs > .flex3 { + flex: 3; +} +.tabs .item { + text-align: center; +} +.tabs .item.active { + text-shadow: 0 0 10px red; +} +.tab[data-tab] { + display: none; +} +.tab[data-tab].active { + display: block; +} +.tab[data-tab].active.flexrow, +.tab[data-tab].active.flexcol { + display: flex; +} + a.keeper-only-tab { flex: 0 0 30px; color: @colorGreen; From 4b99a502033751f179e8dde06f4f07c8cb024340 Mon Sep 17 00:00:00 2001 From: Mero-Pe Date: Tue, 28 Dec 2021 11:19:15 +0900 Subject: [PATCH 368/726] upload korean localization file --- lang/ko.json | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/lang/ko.json b/lang/ko.json index f5f3a60f..a6083b9c 100644 --- a/lang/ko.json +++ b/lang/ko.json @@ -493,28 +493,28 @@ "CoC7.SanityLost": "이성치 손실", "CoC7.MemoryRepressed": "당신은 그 기억을 상기시키고 당신의 무의식에 묻습니다.", "CoC7.RememberEverything": "당신은 모든것을 기억합니다.", - "CoC7.BoutOfMadnesslasted": "Your bout of madness lasted", - "CoC7.EnteringBoutOfMadness": "You experience a bout of madness", - "CoC7.GrowingAccustomedToAwfulness": "Your getting used to horror. (Your sanity loss is limited).", - "CoC7.ImmuneToAwfulness": "Your mind is immune to this awfulness. (No sanity loss).", - "CoC7.InvestigatorPhobiaGained": "The investigator gain a phobia", - "CoC7.PhobiaGained": "You gain a phobia", - "CoC7.InvestigatorManiaGained": "The investigator gain a mania", - "CoC7.ManiaGained": "You gain a mania", - "CoC7.AlreadyUnderlyingInsanity": "Investigator already in an underlying insanity state.", - "CoC7.IndefinitelyInsane": "You become indefinitely insane.", - "CoC7.TemporaryInsane": "You become temporary insane.", + "CoC7.BoutOfMadnesslasted": "당신의 장기적 광증이 지속됩니다.", + "CoC7.EnteringBoutOfMadness": "당신은 장기적 광증을 경험합니다.", + "CoC7.GrowingAccustomedToAwfulness": "당신은 공포에 익숙해집니다. (당신의 이성치 손실이 제한됩니다).", + "CoC7.ImmuneToAwfulness": "당신의 의식은 이런 두려움에 영향을 받지 않습니다. (이성치 손실 없음).", + "CoC7.InvestigatorPhobiaGained": "탐사자가 공포증을 가집니다", + "CoC7.PhobiaGained": "당신은 공포증을 가집니다", + "CoC7.InvestigatorManiaGained": "탐사자가 열광증을 가집니다", + "CoC7.ManiaGained": "당신은 열광증을 가집니다", + "CoC7.AlreadyUnderlyingInsanity": "탐사자는 이미 내재된 광기상태입니다.", + "CoC7.IndefinitelyInsane": "당신은 장기적으로 미치게됩니다.", + "CoC7.TemporaryInsane": "당신은 일시적으로 미치게됩니다", "CoC7.GoodForAsylum": "You're good to be sent to the asylum", "CoC7.BoutOfMadness": "Bout of madness", "CoC7.BoutRealTime": "Bout of madness: Real time", "CoC7.BoutSummary": "Bout of madness: Summary", "CoC7.EndBoutOfMadness": "End bout of madness", - "CoC7.InsanityType": "Type of insanity", - "CoC7.Phobia": "Phobia", - "CoC7.Mania": "Mania", - "CoC7.MaxSanloss": "Max loss", - "CoC7.MinSanloss": "Min loss", - "CoC7.AlreadyLost": "Already lost", + "CoC7.InsanityType": "광기의 종류", + "CoC7.Phobia": "공포증", + "CoC7.Mania": "열광증", + "CoC7.MaxSanloss": "최대 손실", + "CoC7.MinSanloss": "최소 손실", + "CoC7.AlreadyLost": "이미 잃어버림", "CoC7.CreatureMaxLoss": "Creature max loss", "CoC7.MaxLossToCreature": "Max loss to this creature", "CoC7.ResetCreatureSan": "Reset creature's history", From 3c9ab1beb54afe1d301e1a2c9cf044dc64cbb6ac Mon Sep 17 00:00:00 2001 From: Rangertheman <81484515+Rangertheman@users.noreply.github.com> Date: Wed, 29 Dec 2021 22:55:32 +0100 Subject: [PATCH 369/726] Update sv.json --- lang/sv.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lang/sv.json b/lang/sv.json index 3f202d0f..0d2a237e 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -336,6 +336,8 @@ "CoC7.EraPulp": "Pulp Cthulhu", "CoC7.EraMdrn": "Modern", "CoC7.Eras": "Cthulhu-varianter", + "CoC7.EraAvailability": "Tillgänglighet", + "CoC7.SkillNoAdjustments": "Ingen modifiering", "CoC7.SkillNoXpGain": "Ingen erfarenhet", @@ -719,6 +721,7 @@ "CoC7.Spanish": "Spanska", "CoC7.French": "Franska", "CoC7.German": "Tyska", + "CoC7.Polish": "Polska", "CoC7.TraditionalChinese": "Traditionell kinesiska", "CoC7.SelectSourceLanguage": "Välj ursprungstextens språk", "CoC7.ImportedUnnamedCharacter": "Importerad icke namngiven karaktär", @@ -747,7 +750,7 @@ "CoC7.Migrate.ButtonOkay": "Ok", "CoC7.Maximize": "Maximera", - "CoC7.Summarize": "Summera", + "CoC7.Summarize": "Begränsad vy", "CoC7.UnableToInteractWithChatCard": "Du kan inte interagera med det här medelandet. Om du behöver ändra något, vänligen be din Väktare välja det alternativet åt dig", "CoC7.UnableToCopyToClipboard": "Kan inte kopiera till Urklippshanteraren, förmodligen på grund av säkerhetsinställningarna i din webbläsare.", From f8eadc2115b938d71497d5a5483e1840f0896c03 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 29 Dec 2021 23:22:31 +0000 Subject: [PATCH 370/726] Updated translations list --- .github/TRANSLATIONS.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 6fcc0a1b..70087801 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,21 +2,21 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The **es** translation is currently up to date +The following translations are currently up to date **es**, **sv** The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | fr | ja | pl | pt-BR | sv | zh-TW | -| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **6** | **2** | **2** | **8** | **2** | **2** | **2** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| Key | de | fr | ja | pl | pt-BR | zh-TW | +| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **6** | **2** | **2** | **8** | **2** | **2** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ##### CoC7.Copied From c5874c945a26ab3f75d8afa2e406e49adca4d1dd Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Thu, 30 Dec 2021 02:10:36 +0100 Subject: [PATCH 371/726] Check complete - strings --- lang/en.json | 2 + module/chat.js | 4 +- module/chat/cards/chase-obstacle.js | 219 ++++++++++++++++--- module/check.js | 60 ++++- module/common/chatcardlib/src/chatcardlib.js | 7 +- module/utilities.js | 123 +++++++---- styles/chat/obstacle-card.less | 57 +++++ templates/chat/cards/chase-obstacle.html | 103 +++++++-- 8 files changed, 486 insertions(+), 89 deletions(-) diff --git a/lang/en.json b/lang/en.json index 20b6d11c..cb2e0699 100644 --- a/lang/en.json +++ b/lang/en.json @@ -542,6 +542,8 @@ "CoC7.NoValidSkill": "Fake skill", "CoC7.AskIntentions": "What are your intentions ?", "CoC7.AskRoll": "Roll {name} ({value}%)", + "CoC7.ActionCost": "Action cost", + "CoC7.SpellCastingTime": "Casting Time", "CoC7.SpellCastingCost": "Casting Cost", diff --git a/module/chat.js b/module/chat.js index d452b8bf..8df86dd0 100644 --- a/module/chat.js +++ b/module/chat.js @@ -330,7 +330,9 @@ export class CoC7Chat { const ownerOnly = html.find('.owner-only') for (const zone of ownerOnly) { // Try retrieving actor - let actor = CoC7Chat._getActorFromKey(zone.dataset?.actorKey) // Try with self. + let actor = CoC7Chat._getActorFromKey( + zone.dataset?.actorKey || zone.dataset?.actorId + ) // Try with self. if (!actor) { actor = CoC7Chat._getChatCardActor(zone.closest('.chat-card')) // Try with closest chat card. } diff --git a/module/chat/cards/chase-obstacle.js b/module/chat/cards/chase-obstacle.js index cfb8a36e..67612e61 100644 --- a/module/chat/cards/chase-obstacle.js +++ b/module/chat/cards/chase-obstacle.js @@ -1,5 +1,8 @@ +import { CoC7Check } from '../../check.js' import { EnhancedChatCard } from '../../common/chatcardlib/src/chatcardlib.js' import { _participant } from '../../items/chase/participant.js' +import { CoC7Utilities } from '../../utilities.js' +import { createInlineRoll } from '../helper.js' export class ChaseObstacleCard extends EnhancedChatCard { /** @override */ @@ -16,12 +19,12 @@ export class ChaseObstacleCard extends EnhancedChatCard { async getData () { const data = await super.getData() - data.chase = await fromUuid(this.data.chaseUuid) + // data.chase = CoC7Utilities.fromUuid(this.data.chaseUuid) data.status = [] data.strings = {} - + data.displayActorOnCard = game.settings.get('CoC7', 'displayActorOnCard') - data.participant = new _participant(data.data.participantData) + // data.participant = new _participant(this.participantData) data.card.breakableObstacle = data.data.obstacle.barrier && data.data.obstacle.hasHitPoints @@ -37,9 +40,9 @@ export class ChaseObstacleCard extends EnhancedChatCard { data.data.states.actionDefined = true } - if (data.participant.actor) { - data.skill = data.participant.actor.find(data.data.obstacle.checkName) - data.checkOptions = data.chase.activeActorSkillsAndCharacteristics + if (this.participant.actor) { + data.skill = this.participant.actor.find(data.data.obstacle.checkName) + data.checkOptions = this.chase.activeActorSkillsAndCharacteristics if (data.skill) { data.validCheck = true data.validSkill = true @@ -47,9 +50,9 @@ export class ChaseObstacleCard extends EnhancedChatCard { data.validCheck = true data.weaponsOptions = [] if (data.card.breakableObstacle && data.data.states.breakThrougObstacle) { - data.participant.actor?.itemTypes?.weapon?.forEach(w => { + this.participant.actor?.itemTypes?.weapon?.forEach(w => { let formula = w.data.data.range.normal.damage - let db = data.participant.actor.db + let db = this.participant.actor.db if (null === db) { db = '' } else { @@ -66,32 +69,34 @@ export class ChaseObstacleCard extends EnhancedChatCard { }) } } else { - data.checkOptions = data.chase.allSkillsAndCharacteristics + data.checkOptions = this.chase.allSkillsAndCharacteristics data.dummyActor = true if (data.data.obstacle.checkName && data.data.card.checkThreshold) data.validCheck = true } - if( data.validCheck){ - let checkName,value - if( data.skill){ + data.validFailledRolls = true + + if (data.validCheck) { + let checkName, value + if (data.skill) { checkName = data.skill.value.name value = data.skill.value.value } else { checkName = data.data.obstacle.checkName value = data.data.card.checkThreshold } - data.strings.rollRequest = game.i18n.format( 'CoC7.AskRoll', {name: checkName, value: value}) - if( data.data.card.bonusDice != 0){ - data.strings.rollRequest += ` (${data.data.card.bonusDice})` + data.strings.rollRequest = game.i18n.format('CoC7.AskRoll', { + name: checkName, + value: value + }) + if (data.data.card.bonusDice != 0) { + if (data.data.card.bonusDice > 0) + data.strings.rollRequest += ` (+${data.data.card.bonusDice})` + else data.strings.rollRequest += ` (${data.data.card.bonusDice})` } } - data.actions = { - player: {}, - gm: {} - } - data.strings.somethinInTheWay = game.i18n.localize('CoC7.SomethingInTheWay') if (data.data.states?.obstacleDefined) { data.strings.obstacleDefined = game.i18n.format('CoC7.FacingObstacle', { type: data.data.obstacle.barrier @@ -129,6 +134,52 @@ export class ChaseObstacleCard extends EnhancedChatCard { css: 'warning' }) } + + if (this.data.objects?.check) { + if (this.data.objects.check.passed) + data.status.push({ + name: game.i18n.localize('CoC7.Success'), + css: 'success' + }) + else if (this.data.objects.check.isFumble) + data.status.push({ + name: game.i18n.localize('CoC7.Fumble'), + css: 'fumble' + }) + else + data.status.push({ + name: game.i18n.localize('CoC7.Failure'), + css: 'failure' + }) + } + } + + if (this.data.states.checkRolled) { + if (this.data.states.cardResolved) + data.htmlCheck = await this.data.objects.check.inlineCheck?.outerHTML + else data.htmlCheck = await this.data.objects.check.getHtmlRoll() + } + + if (this.data.states.cardResolved) { + if (this.data.obstacle.hasDamage && this.data.objects?.check?.isFailure) { + data.damageTaken = true + data.inlineDamageTakenRoll = createInlineRoll( + this.data.objects.failledDamageRoll + )?.outerHTML + data.status.push({ + name: game.i18n.localize('CoC7.TotalDamage') + ` :${this.data.objects.failledDamageRoll.total}` + }) + } + + if( this.data.obstacle.hasActionCost && this.data.obstacle.hazard && this.data.objects?.check?.isFailure){ + data.actionLost = true + data.inlineActionLostRoll = createInlineRoll( + this.data.objects.failledActionRoll + )?.outerHTML + data.status.push({ + name: game.i18n.localize('CoC7.ActionCost') + ` :${this.data.objects.failledActionRoll.total}` + }) + } } return data } @@ -136,23 +187,91 @@ export class ChaseObstacleCard extends EnhancedChatCard { /** @override */ async GMUpdate () {} + /** @override */ + async assignObjects () { + if (this.data.states.checkRolled) { + if (this.data.objects.check) { + if (this.data.objects.check?.constructor?.name === 'Object') { + this.data.objects.check = Object.assign( + new CoC7Check(), + this.data.objects.check + ) + } + } + } + } + /** @override */ async initialize () { - const chase = await fromUuid(this.data.chaseUuid) - if (!chase) return + // const chase = await fromUuid(this.data.chaseUuid) + if (!this.chase) return if (undefined == this.data.card) this.data.card = {} if (undefined == this.data.states) this.data.states = {} - const location = chase.getLocationData(this.data.locationUuid) - this.data.obstacle = location.obstacleDetails - this.data.participantData = chase.activeParticipantData - if (this.data.participantData.bonusDice > 0) { - this.data.card.bonusDice = this.data.participantData.bonusDice + // const location = chase.getLocationData(this.data.locationUuid) + this.data.obstacle = this.location?.obstacleDetails + // this.data.participantData = chase.activeParticipantData + if (this.participantData.bonusDice > 0) { + this.data.card.bonusDice = this.participantData.bonusDice this.data.flags.consumeBonusDice = true } } + get participant () { + if (!this.participantData) return undefined + if (!this._participant) + this._participant = new _participant(this.participantData) + return this._participant + } + + get participantData () { + if (!this.chase) return undefined + return this.chase.activeParticipantData + } + + get location () { + if (!this.chase) return undefined + return this.chase.getLocationData(this.data.locationUuid) + } + + get obstacle () { + if (!this.location) return undefined + return this.location.obstacleDetails + } + + get chase () { + if (!this.data.chaseUuid) return undefined + if (!this._chase) this._chase = CoC7Utilities.fromUuid(this.data.chaseUuid) + return this._chase + } + + get roll () { + let rollData + if (this.participant.actor && this.data.obstacle.checkName) { + rollData = this.participant.actor.find(this.data.obstacle.checkName) + rollData.actor = { actorKey: this.participant.actor.id } + } else { + if (this.data.obstacle.checkName && this.data.card.checkThreshold) { + rollData = { + type: 'value', + value: { + name: this.data.obstacle.checkName, + threshold: this.data.card.checkThreshold + }, + actor: { + name: this.participant.name + } + } + } + } + if (rollData) { + rollData.diceModifier = this.data.card?.bonusDice || 0 + rollData.difficulty = CoC7Check.difficultyLevel.regular + } + return rollData || undefined + } + //Actions : async defineObstacle (options) { if (!this.data.states) this.data.states = {} @@ -180,6 +299,52 @@ export class ChaseObstacleCard extends EnhancedChatCard { return true } + async rollSkillCheck (options) { + if (!this.roll) { + ui.notifications.error('Nothing to roll !!') + return + } + if (!this.data.objects) this.data.objects = {} + this.data.objects.check = CoC7Check.createFromActorRollData(this.roll) + if (!this.data.objects.check) return false + this.data.objects.check.canBePushed = false //Obstacle check can't be pushed + await this.data.objects.check.roll() + this.data.states.checkRolled = true + return true + } + + async useLuck (options) { + await CoC7Check.alter(this.data.objects.check, 'useLuck', { + target: options.event.currentTarget, + update: false + }) + return true + } + + async rollFailConsequences (options) { + if (!this.data.objects) this.data.objects = {} + if (this.data.obstacle.hasDamage && this.data.objects.check?.isFailure) { + this.data.objects.failledDamageRoll = new Roll( + this.data.obstacle.failedCheckDamage + ) + await this.data.objects.failledDamageRoll.evaluate({ async: true }) + } + if (this.data.obstacle.hazard) { + if ( + this.data.obstacle.hasActionCost && + this.data.objects.check?.isFailure + ) { + this.data.objects.failledActionRoll = new Roll( + this.data.obstacle.failedActionCost + ) + await this.data.objects.failledActionRoll.evaluate({ async: true }) + } + } + + this.data.states.cardResolved = true + return true + } + // activateListeners (html) { // super.activateListeners(html) // } diff --git a/module/check.js b/module/check.js index 1a68b0de..c274a1b8 100644 --- a/module/check.js +++ b/module/check.js @@ -63,6 +63,16 @@ export class CoC7Check { } } + static get type () { + return { + characteristic: 'characteristic', + attribute: 'attribute', + skill: 'item', + item: 'item', + value: 'value' + } + } + static difficultyString (difficultyLevel) { switch ( !isNaN(Number(difficultyLevel)) @@ -657,6 +667,51 @@ export class CoC7Check { if (!this.standby) await this._perform() } + /** + * Create a check with the provided data + * Process roll data to a format that can be fed to create() + * @param {*} rollData A roll data structure as returned by actor.find + * @returns A check with the roll data provided + */ + static createFromActorRollData (rollData) { + const roll = {} + // check Modifier + if (rollData.difficulty) roll.difficulty = rollData.difficulty + if (rollData.diceModifier) roll.diceModifier = rollData.diceModifier + if (rollData.flatDiceModifier) + roll.flatDiceModifier = rollData.flatDiceModifier + if (rollData.flatThresholdModifier) + roll.flatThresholdModifier = rollData.flatThresholdModifier + // Actor + if (rollData.actor?.actorKey) roll.actorKey = rollData.actor.actorKey + else if (rollData.actor?.name) roll.actorName = rollData.actor.name + // Check type + switch (rollData.type) { + case CoC7Check.type.characteristic: + roll.characteristic = rollData.value?.key + break + case CoC7Check.type.attribute: + roll.attribute = rollData.value?.key + break + case CoC7Check.type.item: + roll.actorKey = rollData.value.actor.actorKey + if ('skill' == rollData.value?.type) roll.skill = rollData.value.id + else roll.item = rollData.value.id + break + case CoC7Check.type.skill: + roll.actorKey = rollData.value.actor.actorKey + roll.skill = rollData.value.id + break + case CoC7Check.type.value: + roll.displayName = rollData.value.name + roll.rawValue = rollData.value.threshold + break + default: + break + } + return CoC7Check.create(roll) + } + static create ({ difficulty = CoC7Check.difficultyLevel.regular, diceModifier = null, @@ -664,6 +719,7 @@ export class CoC7Check { characteristic = null, attribute = null, rawValue = 0, + item = null, skill = null, flatDiceModifier = 0, flatThresholdModifier = 0, @@ -687,6 +743,7 @@ export class CoC7Check { // TODO : try retrieve skill by name else if (characteristic) check.characteristic = characteristic else if (attribute) check.attribute = attribute + else if (item) check.item = item } return check } @@ -891,7 +948,8 @@ export class CoC7Check { } } - this.canBePushed = this.skill ? this.skill.canBePushed() : false + if (undefined == this.canBePushed) + this.canBePushed = this.skill ? this.skill.canBePushed() : false if (this.characteristic != null) this.canBePushed = true if (this.isFumble) this.canBePushed = false if (this.denyPush) this.canBePushed = false diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index b9e7c584..6d7ca938 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -355,12 +355,11 @@ export class EnhancedChatCard { return true && whiteList if (permissionsArray.includes(PERMISSION_TYPE.NOT_GM)) return false || !whiteList - permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.GM) - permissionsArray = permissionsArray.filter( - e => e != PERMISSION_TYPE.NOT_GM - ) } + permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.GM) + permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.NOT_GM) + // return false || !whiteList //If pass the filter return false unless it's a blacklist // } else { // permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.GM) diff --git a/module/utilities.js b/module/utilities.js index c8db0d3b..8d23cb07 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -417,50 +417,56 @@ export class CoC7Utilities { Hooks.call('toggleCharCreation', toggle) } - static async getTarget() { - let users = game.users.filter(user => user.active); - let actors = game.actors; + static async getTarget () { + let users = game.users.filter(user => user.active) + let actors = game.actors let checkOptions = `\n ` - let playerTokenIds = users.map(u => u.character?.id).filter(id => id !== undefined); + let playerTokenIds = users + .map(u => u.character?.id) + .filter(id => id !== undefined) let selectedPlayerIds = canvas.tokens.controlled.map(token => { - return token.actor.id; - }); + return token.actor.id + }) // Build checkbox list for all active players actors.forEach(actor => { - let checked = (selectedPlayerIds.includes(actor.id) || playerTokenIds.includes(actor.id)) && 'checked'; - checkOptions += ` + let checked = + (selectedPlayerIds.includes(actor.id) || + playerTokenIds.includes(actor.id)) && + 'checked' + checkOptions += `
                      \n ` - }); + }) new Dialog({ - title: `${game.i18n.localize('CoC7.dreaming')}`, - content: `${game.i18n.localize('CoC7.restTargets')}: ${checkOptions}
                      `, - buttons: { - whisper: { - label: `${game.i18n.localize('CoC7.startRest')}`, - callback: async (html) => { - let targets = []; - let all = false; - let users = html.find('[type="checkbox"]') - for (let user of users) { - if (user.name === "COCCheckAllPC" && user.checked) all = true; - if (user.checked || all) - targets.push(user.id); - } - await CoC7Utilities.startRest(targets)} + title: `${game.i18n.localize('CoC7.dreaming')}`, + content: `${game.i18n.localize( + 'CoC7.restTargets' + )}: ${checkOptions}
                      `, + buttons: { + whisper: { + label: `${game.i18n.localize('CoC7.startRest')}`, + callback: async html => { + let targets = [] + let all = false + let users = html.find('[type="checkbox"]') + for (let user of users) { + if (user.name === 'COCCheckAllPC' && user.checked) all = true + if (user.checked || all) targets.push(user.id) } + await CoC7Utilities.startRest(targets) + } } - }).render(true); - -} + } + }).render(true) + } static async startRest (targets) { - if(!targets.length)return; + if (!targets.length) return const actors = game.actors.filter(actor => targets.includes(actor.id)) let chatContent = `${game.i18n.localize('CoC7.dreaming')}...
                      ` for (const actor of actors) { @@ -744,30 +750,65 @@ export class CoC7Utilities { return qString } - static setByPath(obj, path, value) { - var parts = path.split('.'); - var o = obj; + static setByPath (obj, path, value) { + var parts = path.split('.') + var o = obj if (parts.length > 1) { for (var i = 0; i < parts.length - 1; i++) { - if (!o[parts[i]]) - o[parts[i]] = {}; - o = o[parts[i]]; + if (!o[parts[i]]) o[parts[i]] = {} + o = o[parts[i]] } } - o[parts[parts.length - 1]] = value; + o[parts[parts.length - 1]] = value } - static getByPath(obj, path) { - var parts = path.split('.'); - var o = obj; + static getByPath (obj, path) { + var parts = path.split('.') + var o = obj if (parts.length > 1) { for (var i = 0; i < parts.length - 1; i++) { - if (!o[parts[i]]) return undefined - o = o[parts[i]]; + if (!o[parts[i]]) return undefined + o = o[parts[i]] } } - return o[parts[parts.length - 1]]; + return o[parts[parts.length - 1]] + } + + /** + * Retrieve a Document by its Universally Unique Identifier (uuid). + * @param {string} uuid The uuid of the Document to retrieve + * @return {Promise} + */ + static fromUuid (uuid) { + let parts = uuid.split('.') + let doc + + // Compendium Documents + if (parts[0] === 'Compendium') { + return undefined + // parts.shift(); + // const [scope, packName, id] = parts.slice(0, 3); + // parts = parts.slice(3); + // const pack = game.packs.get(`${scope}.${packName}`); + // return await pack?.getDocument(id); + } + + // World Documents + else { + const [docName, docId] = parts.slice(0, 2) + parts = parts.slice(2) + const collection = CONFIG[docName].collection.instance + doc = collection.get(docId) + } + + // Embedded Documents + while (doc && parts.length > 1) { + const [embeddedName, embeddedId] = parts.slice(0, 2) + doc = doc.getEmbeddedDocument(embeddedName, embeddedId) + parts = parts.slice(2) + } + return doc || null } } diff --git a/styles/chat/obstacle-card.less b/styles/chat/obstacle-card.less index 22c84bb8..2dc7c0fb 100644 --- a/styles/chat/obstacle-card.less +++ b/styles/chat/obstacle-card.less @@ -17,6 +17,18 @@ .error { background-color: rgba(255, 0, 0, 0.5); } + + .success { + .success-color(); + } + + .failure { + .failure-color(); + } + + .fumble { + .fumble-color(); + } } } .card-header { @@ -28,6 +40,10 @@ } .card-buttons { + span { + line-height: 1.5rem; + border: none; + } button { font-size: 12px; height: 24px; @@ -41,6 +57,47 @@ } } + .form-group.small { + .toggle-icon { + font-size: 1rem; + line-height: 1.25rem; + padding: 1px 6px; + display: inline; + flex: 0; + &.switched-off { + display: inline; + } + &.switched-on { + color: red; + text-shadow: 0 0 8px red; + border: none; + background: none; + box-shadow: none; + } + } + + input { + margin: 0; + line-height: 1.25rem; + height: calc(100% - 2px); + } + + button { + &.button-icon { + line-height: 1.25rem; + padding: 1px 6px; + display: inline; + flex: 0; + background: none; + border: none; + &:hover { + box-shadow: none; + text-shadow: 0 0 8px red; + } + } + } + } + .switched-off { display: block; } diff --git a/templates/chat/cards/chase-obstacle.html b/templates/chat/cards/chase-obstacle.html index d23431e0..07e73fc9 100644 --- a/templates/chat/cards/chase-obstacle.html +++ b/templates/chat/cards/chase-obstacle.html @@ -3,7 +3,7 @@
                      {{#if displayActorOnCard}} - + {{/if}}
                      {{#if data.states.obstacleDefined}} @@ -30,23 +30,36 @@ {{#if data.states.obstacleDefined}}
                      {{strings.obstacleDefined}}
                      {{#if data.states.checkDefined}} -
                      I know what to do
                      -
                      - {{#unless dummyActor}} - - {{/unless}} -
                      +
                      **** playerIntentions {{ strings.playerIntentions }} ****
                      + {{#unless dummyActor}} + {{#if data.states.checkRolled}} +
                      **** checkRolled {{ strings.checkRolled}} **** {{data.card.roll.value.value.name}} : {{{ htmlCheck }}}
                      + {{#if data.objects.check.passed}} +
                      **** obstaclePassed {{ strings.obstaclePassed }} ****
                      + {{else}} +
                      **** checkFailled {{ strings.checkFailled }} ****
                      + {{#if data.states.cardResolved}} + {{#if damageTaken}} +
                      **** damageTaken {{ strings.damageTaken}} **** : {{{inlineDamageTakenRoll}}}
                      + {{/if}} + {{#if actionLost}} +
                      **** actionLost {{ strings.actionLost }} **** : {{{inlineActionLostRoll}}}
                      + {{/if}} + {{/if}} + {{/if}} + {{else}} +
                      + +
                      + {{/if}} + {{/unless}} {{else}}
                      {{ localize 'CoC7.AskIntentions' }}
                      {{/if}} {{else}} -
                      {{strings.somethinInTheWay}}
                      +
                      {{ localize 'CoC7.SomethingInTheWay' }}
                      {{/if}}
                      - - {{#if data.states.obstacleDefined}} - {{/if}} -
                      @@ -56,10 +69,70 @@ {{#if data.states.rolled}} {{else}} {{#if data.states.waitForRoll}} + {{#if data.states.checkRolled}} + {{#if data.objects.check.passed}} + Check passed + {{else}} + Check failled + {{#if data.states.cardResolved}} + {{else}} + {{#if data.obstacle.barrier}} + Barier failled +
                      +
                      +
                      +
                      + + + + {{#if data.obstacle.hasDamage }} + + {{/if}} +
                      +
                      +
                      + {{#if validFailledRolls}} + + {{/if}} +
                      + {{/if}} + {{#if data.obstacle.hazard}} + Hazard failled + {{#if data.states.obstacleFailledResolved}} + {{else}} +
                      +
                      + + + + {{#if data.obstacle.hasActionCost }} + + {{/if}} +
                      +
                      + + + + {{#if data.obstacle.hasDamage }} + + {{/if}} +
                      +
                      +
                      + {{#if validFailledRolls}} + + {{/if}} +
                      + {{/if}} + {{/if}} + {{/if}} + {{/if}} + {{else}} Waiting for roll + {{/if}} {{else}}
                      - {{#if participant.hasBonusDice}} + {{#if card.participant.hasBonusDice}}
                      Consume bonus dice
                      {{/if}}
                      @@ -78,7 +151,7 @@
                      {{#if validCheck}} - + {{/if}}
                      {{/if}} @@ -118,7 +191,7 @@
                      actions : - {{#each participant.movementActionArray as |actionClass|}} + {{#each card.participant.movementActionArray as |actionClass|}} {{/each}}
                      From 079168308d74573a9430bc7d1696c5fd796c4dbe Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 30 Dec 2021 19:08:03 +0000 Subject: [PATCH 372/726] Updated translations list --- .github/TRANSLATIONS.md | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 70087801..1d719eb7 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -6,17 +6,18 @@ The following translations are currently up to date **es**, **sv** The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | fr | ja | pl | pt-BR | zh-TW | -| :----------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **6** | **2** | **2** | **8** | **2** | **2** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | +| Key | de | fr | ja | ko | pl | pt-BR | zh-TW | +| :------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **6** | **2** | **2** | **9** | **8** | **2** | **2** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.Copied @@ -49,3 +50,7 @@ The following translations have been abandoned **cn**, **cs**, [are you able to ##### CoC7.restTargets `"CoC7.restTargets": "Rest Targets",` + +##### SETTINGS.DefaultDifficulty + +`"SETTINGS.DefaultDifficulty": "Default check difficulty",` From b975d523c7fdbdb46ebfcc2d886cac00b10877fb Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Thu, 30 Dec 2021 23:07:37 +0100 Subject: [PATCH 373/726] Breakable damage roll --- lang/en.json | 4 +- module/chat/cards/chase-obstacle.js | 167 +++++++++++++++++++---- module/check.js | 4 +- styles/chat/obstacle-card.less | 19 ++- templates/chat/cards/chase-obstacle.html | 50 +++++-- 5 files changed, 195 insertions(+), 49 deletions(-) diff --git a/lang/en.json b/lang/en.json index cb2e0699..c85a22ab 100644 --- a/lang/en.json +++ b/lang/en.json @@ -249,6 +249,7 @@ "CoC7.Tie": "Tie", "CoC7.DamageInflicted": "Damage inflicted", "CoC7.TotalDamage": "Total damage", + "CoC7.Unarmed": "Unarmed", "CoC7.combatCard.dive4cover": "Dive for Cover", @@ -537,13 +538,14 @@ "CoC7.Barrier": "Barrier", "CoC7.AHazard": "a hazard", "CoC7.Hazard": "Hazard", + "CoC7.ConsumeBonusDice": "Consume Bonus Dice", "CoC7.Breakable": "Breakable", "CoC7.NoValidCheck": "No valid check", "CoC7.NoValidSkill": "Fake skill", "CoC7.AskIntentions": "What are your intentions ?", + "CoC7.WaitForPlayerInput": "Wait for player's input", "CoC7.AskRoll": "Roll {name} ({value}%)", "CoC7.ActionCost": "Action cost", - "CoC7.SpellCastingTime": "Casting Time", "CoC7.SpellCastingCost": "Casting Cost", diff --git a/module/chat/cards/chase-obstacle.js b/module/chat/cards/chase-obstacle.js index 67612e61..61e2c562 100644 --- a/module/chat/cards/chase-obstacle.js +++ b/module/chat/cards/chase-obstacle.js @@ -9,7 +9,7 @@ export class ChaseObstacleCard extends EnhancedChatCard { static get defaultOptions () { const options = mergeObject(super.defaultOptions, { template: 'systems/CoC7/templates/chat/cards/chase-obstacle.html', - GMUpdate: false + GMUpdate: true }) options.classes.push('obstacle-card') return options @@ -48,26 +48,6 @@ export class ChaseObstacleCard extends EnhancedChatCard { data.validSkill = true } else if (data.data.obstacle.checkName && data.data.card.checkThreshold) data.validCheck = true - data.weaponsOptions = [] - if (data.card.breakableObstacle && data.data.states.breakThrougObstacle) { - this.participant.actor?.itemTypes?.weapon?.forEach(w => { - let formula = w.data.data.range.normal.damage - let db = this.participant.actor.db - if (null === db) { - db = '' - } else { - db = `${db}` - } - - if (db && !db.startsWith('-')) db = '+' + db - if (w.data.data.properties.addb) formula = formula + db - if (w.data.data.properties.ahbd) formula = formula + db + '/2' - data.weaponsOptions.push = { - name: `${w.data.name} (${formula})`, - damage: formula - } - }) - } } else { data.checkOptions = this.chase.allSkillsAndCharacteristics data.dummyActor = true @@ -75,7 +55,10 @@ export class ChaseObstacleCard extends EnhancedChatCard { data.validCheck = true } - data.validFailledRolls = true + data.customWeapon = false + if ('0' === this.data.card.weaponChoice) { + data.customWeapon = true + } if (data.validCheck) { let checkName, value @@ -167,17 +150,25 @@ export class ChaseObstacleCard extends EnhancedChatCard { this.data.objects.failledDamageRoll )?.outerHTML data.status.push({ - name: game.i18n.localize('CoC7.TotalDamage') + ` :${this.data.objects.failledDamageRoll.total}` + name: + game.i18n.localize('CoC7.TotalDamage') + + ` :${this.data.objects.failledDamageRoll.total}` }) } - if( this.data.obstacle.hasActionCost && this.data.obstacle.hazard && this.data.objects?.check?.isFailure){ + if ( + this.data.obstacle.hasActionCost && + this.data.obstacle.hazard && + this.data.objects?.check?.isFailure + ) { data.actionLost = true data.inlineActionLostRoll = createInlineRoll( this.data.objects.failledActionRoll )?.outerHTML data.status.push({ - name: game.i18n.localize('CoC7.ActionCost') + ` :${this.data.objects.failledActionRoll.total}` + name: + game.i18n.localize('CoC7.ActionCost') + + ` :${this.data.objects.failledActionRoll.total}` }) } } @@ -185,7 +176,21 @@ export class ChaseObstacleCard extends EnhancedChatCard { } /** @override */ - async GMUpdate () {} + async GMUpdate () { + // ui.notifications.info( `I am ${game.user.id}. Doing GMUpdate`) + if (this.data.states.cardResolved) { + if (game.user.isGM) + ui.notifications.info( + `I am the GM ${game.user.id}. I will update the card and chase ${this.data.chaseUuid}` + ) + } + } + + /** @override */ + async localCompute () { + if (this.data.states.checkRolled && this.data.objects?.check?.passed) + this.data.states.cardResolved = true + } /** @override */ async assignObjects () { @@ -272,6 +277,100 @@ export class ChaseObstacleCard extends EnhancedChatCard { return rollData || undefined } + get validFailledRolls () { + if (!this.data.objects?.check?.isFailure) return false + if ( + this.data.obstacle.hasDamage && + !Roll.validate(this.data.obstacle.failedCheckDamage) + ) + return false + if ( + this.data.obstacle.hazard && + this.data.obstacle.hasActionCost && + !Roll.validate(this.data.obstacle.failedActionCost) + ) + return false + return true + } + + get weaponsOptions () { + const weapons = [] + this.participant.actor?.itemTypes?.weapon?.forEach(w => { + let formula = w.data.data.range.normal.damage + let db = this.participant.actor.db + if (null === db) { + db = '' + } else { + db = `${db}` + } + + if (db && !db.startsWith('-')) db = '+' + db + if (w.data.data.properties.addb) formula = formula + db + if (w.data.data.properties.ahbd) formula = formula + db + '/2' + weapons.push({ + name: `${w.data.name} (${formula})`, + damage: formula, + uuid: w.uuid + }) + }) + weapons.sort((a, b) => { + var nameA = a.name.toUpperCase() + var nameB = b.name.toUpperCase() + if (nameA < nameB) return -1 + if (nameA > nameB) return 1 + return 0 + }) + + let db = '' + if (this.participant.actor) { + db = this.participant.actor.db + if (db && !db.startsWith('-')) db = '+' + db + } + + weapons.unshift({ + name: `${game.i18n.localize('CoC7.Unarmed')} (1D3${db})`, + damage: `1D3${db}`, + uuid: 'unarmed' + }) + + weapons.push({ + name: game.i18n.localize('CoC7.Other'), + damage: this.data.card?.customWeaponDamage || null, + uuid: 0 + }) + return weapons + } + + get usedWeapon () { + if (this.data.card.weaponChoice) { + const weapon = this.weaponsOptions.find( + e => e.uuid == this.data.card.weaponChoice + ) + if (weapon) return weapon + } + } + + get inflictedDamageFormula () { + if (this.usedWeapon) { + const weapon = this.usedWeapon + if (weapon && weapon.damage && Roll.validate(weapon.damage)) + return weapon.damage + return undefined + } + return undefined + } + + get validObstacleDamage () { + if ( + this.data.obstacle.hasHitPoints && + !isNaN(Number(this.data.obstacle.HitPoints)) && + Number(this.data.obstacle.HitPoints) > 0 && + this.inflictedDamageFormula + ) + return true + return false + } + //Actions : async defineObstacle (options) { if (!this.data.states) this.data.states = {} @@ -293,6 +392,13 @@ export class ChaseObstacleCard extends EnhancedChatCard { return true } + async cancelObstacleDefinition (options) { + this.data.states.actionDefined = false + this.data.states.tryToPass = false + this.data.states.tryToBreak = false + return true + } + async requestRoll (options) { this.data.states.waitForRoll = true this.data.states.checkDefined = true @@ -308,7 +414,7 @@ export class ChaseObstacleCard extends EnhancedChatCard { this.data.objects.check = CoC7Check.createFromActorRollData(this.roll) if (!this.data.objects.check) return false this.data.objects.check.canBePushed = false //Obstacle check can't be pushed - await this.data.objects.check.roll() + await this.data.objects.check._perform({ forceDSN: true }) this.data.states.checkRolled = true return true } @@ -345,7 +451,8 @@ export class ChaseObstacleCard extends EnhancedChatCard { return true } - // activateListeners (html) { - // super.activateListeners(html) - // } + async askRollObstacleDamage (options) { + this.data.states.waitForDamageRoll = true + return false + } } diff --git a/module/check.js b/module/check.js index c274a1b8..dfe3e508 100644 --- a/module/check.js +++ b/module/check.js @@ -661,10 +661,10 @@ export class CoC7Check { return a } - async roll (diceMod = null, difficulty = null) { + async roll (diceMod = null, difficulty = null, options = {}) { if (diceMod) this.diceModifier = diceMod if (difficulty) this.difficulty = difficulty - if (!this.standby) await this._perform() + if (!this.standby) await this._perform(options) } /** diff --git a/styles/chat/obstacle-card.less b/styles/chat/obstacle-card.less index 2dc7c0fb..76fc468d 100644 --- a/styles/chat/obstacle-card.less +++ b/styles/chat/obstacle-card.less @@ -58,12 +58,19 @@ } .form-group.small { - .toggle-icon { + .toggle-icon, + .icon { font-size: 1rem; line-height: 1.25rem; padding: 1px 6px; display: inline; flex: 0; + + &.bigger { + padding: 1px 4px; + font-size: 1.4rem; + } + &.switched-off { display: inline; } @@ -90,6 +97,7 @@ flex: 0; background: none; border: none; + font-size: 1rem; &:hover { box-shadow: none; text-shadow: 0 0 8px red; @@ -120,4 +128,13 @@ } } } + + .player-actions { + .info { + .roll-line { + line-height: 1.25rem; + min-height: 1.25rem; + } + } + } } diff --git a/templates/chat/cards/chase-obstacle.html b/templates/chat/cards/chase-obstacle.html index 07e73fc9..2ced0595 100644 --- a/templates/chat/cards/chase-obstacle.html +++ b/templates/chat/cards/chase-obstacle.html @@ -33,17 +33,17 @@
                      **** playerIntentions {{ strings.playerIntentions }} ****
                      {{#unless dummyActor}} {{#if data.states.checkRolled}} -
                      **** checkRolled {{ strings.checkRolled}} **** {{data.card.roll.value.value.name}} : {{{ htmlCheck }}}
                      +
                      **** checkRolled {{ strings.checkRolled}} **** {{data.card.roll.value.value.name}} : {{{ htmlCheck }}}
                      {{#if data.objects.check.passed}}
                      **** obstaclePassed {{ strings.obstaclePassed }} ****
                      {{else}}
                      **** checkFailled {{ strings.checkFailled }} ****
                      {{#if data.states.cardResolved}} {{#if damageTaken}} -
                      **** damageTaken {{ strings.damageTaken}} **** : {{{inlineDamageTakenRoll}}}
                      +
                      **** damageTaken {{ strings.damageTaken}} **** : {{{inlineDamageTakenRoll}}}
                      {{/if}} {{#if actionLost}} -
                      **** actionLost {{ strings.actionLost }} **** : {{{inlineActionLostRoll}}}
                      +
                      **** actionLost {{ strings.actionLost }} **** : {{{inlineActionLostRoll}}}
                      {{/if}} {{/if}} {{/if}} @@ -82,7 +82,7 @@
                      - + {{#if data.obstacle.hasDamage }} @@ -102,7 +102,7 @@ {{else}}
                      - + {{#if data.obstacle.hasActionCost }} @@ -110,7 +110,7 @@ {{/if}}
                      - + {{#if data.obstacle.hasDamage }} @@ -119,7 +119,7 @@
                      - {{#if validFailledRolls}} + {{#if card.validFailledRolls}} {{/if}}
                      @@ -128,16 +128,15 @@ {{/if}} {{/if}} {{else}} - Waiting for roll + {{ localize 'CoC7.WaitForPlayerInput' }} {{/if}} {{else}} -
                      +
                      {{#if card.participant.hasBonusDice}} -
                      Consume bonus dice
                      + {{/if}} -
                      -
                      +
                      - +
                      + + +
                      +
                      + +
                      + {{#if customWeapon}} +
                      +
                      +
                      + + +
                      +
                      + {{/if}} + {{#if card.validObstacleDamage}} +
                      + +
                      + {{/if}} {{/if}} {{else}} -
                      {{ localize 'CoC7.AskPlayerAction' }}
                      +
                      {{ localize 'CoC7.WaitForPlayerInput' }}
                      From ecceb11a1d37facc1e10eaa05486c675c8547087 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 1 Jan 2022 22:38:45 +0000 Subject: [PATCH 374/726] Switch to updated fork of prettier-standard https://github.com/ksmithut/prettier-standard --- package.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index d9292d62..0f3ea405 100644 --- a/package.json +++ b/package.json @@ -20,16 +20,21 @@ }, "homepage": "https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT#readme", "devDependencies": { + "@babel/core": "^7.16.7", + "@babel/eslint-parser": "^7.16.5", + "@ksmithut/prettier-standard": "git+https://github.com/ksmithut/prettier-standard.git", "copy-webpack-plugin": "^9.0.1", "css-loader": "^6.2.0", "css-minimizer-webpack-plugin": "^3.0.2", "del": "^6.0.0", + "eslint": "^7.32.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-jest": "^25.3.4", "glob": "^7.1.7", "jsonfile": "^6.1.0", "less": "^4.1.1", "less-loader": "^10.0.1", "mini-css-extract-plugin": "^2.2.0", - "prettier-standard": "^16.4.1", "standard": "^16.0.3", "terser-webpack-plugin": "^5.1.4", "thread-loader": "^3.0.4", From 93a4b51273734b805a6f3841a598cc35669f9155 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 1 Jan 2022 22:39:51 +0000 Subject: [PATCH 375/726] Run prettier-standard --format and prettier-standard --lint on all files --- lang/en.json | 1 - lang/es.json | 1770 +++++++++--------- lang/fr.json | 4 +- lang/ko.json | 1750 ++++++++--------- lang/sv.json | 6 +- module/actors/actor.js | 44 +- module/actors/sheets/base.js | 143 +- module/actors/sheets/character.js | 31 +- module/actors/sheets/container.js | 6 +- module/apps/actor-importer-dialog.js | 37 +- module/apps/actor-importer-regexp.js | 48 +- module/apps/actor-importer.js | 25 +- module/apps/char-roll-dialog.js | 5 +- module/apps/parser.js | 5 +- module/apps/roll-dialog.js | 4 +- module/apps/sandata-dialog.js | 4 +- module/apps/skill-spec-select-dialog.js | 4 +- module/apps/tooltips.js | 2 +- module/chat.js | 24 +- module/chat/cards/test.js | 7 +- module/check.js | 15 +- module/coc7.js | 18 +- module/common/chatcardlib/src/chatcardlib.js | 98 +- module/hooks/render-pause.js | 6 +- module/items/book/sheet.js | 4 +- module/items/sheets/archetype.js | 4 +- module/items/sheets/chase.js | 242 +-- module/items/sheets/item-sheetV2.js | 4 +- module/items/sheets/occupation.js | 9 +- module/items/sheets/setup.js | 12 +- module/items/sheets/skill.js | 4 +- module/items/sheets/weapon-sheet.js | 8 +- module/scripts/compendium-filter.js | 107 +- module/updater.js | 31 +- module/utilities.js | 70 +- webpack.config.js | 32 +- 36 files changed, 2342 insertions(+), 2242 deletions(-) diff --git a/lang/en.json b/lang/en.json index 3eb9482d..5f903aad 100644 --- a/lang/en.json +++ b/lang/en.json @@ -879,5 +879,4 @@ "CoC7.getTheExample": "Copy Example", "CoC7.Copied": "Copied the Example Text to Clipboard" - } diff --git a/lang/es.json b/lang/es.json index 2998949c..56732b4f 100644 --- a/lang/es.json +++ b/lang/es.json @@ -1,885 +1,885 @@ -{ - "I18N.LANGUAGE": "Español", - "I18N.MAINTAINERS": "@Viriato139ac#0342", - - "CoC7.title": "La Llamada de Cthulhu 7a Edición (no oficial)", - - "CoC7.Entities.Character": "Personaje", - "CoC7.Entities.Container": "Contenedor", - "CoC7.Entities.Creature": "Criatura", - "CoC7.Entities.Npc": "PNJ", - "CoC7.Entities.Vehicle": "Vehículo", - - "CoC7.Entities.Archetype": "Arquetipo", - "CoC7.Entities.Book": "Tomo", - "CoC7.Entities.Chase": "Persecución", - "CoC7.Entities.Item": "Objeto", - "CoC7.Entities.Occupation": "Ocupación", - "CoC7.Entities.Setup": "Configuración", - "CoC7.Entities.Skill": "Habilidad", - "CoC7.Entities.Spell": "Hechizo", - "CoC7.Entities.Status": "Estado", - "CoC7.Entities.Talent": "Talento", - "CoC7.Entities.Weapon": "Arma", - - "CHARAC.STR": "FUE", - "CHARAC.Strengh": "Fuerza", - "CHARAC.Strength": "Fuerza", - "CHARAC.CON": "CON", - "CHARAC.Constitution": "Constitución", - "CHARAC.SIZ": "TAM", - "CHARAC.Size": "Tamaño", - "CHARAC.DEX": "DES", - "CHARAC.Dexterity": "Destreza", - "CHARAC.APP": "APA", - "CHARAC.Appearance": "Apariencia", - "CHARAC.INT": "INT", - "CHARAC.Intelligence": "Inteligencia", - "CHARAC.POW": "POD", - "CHARAC.Power": "Poder", - "CHARAC.EDU": "EDU", - "CHARAC.Education": "Educación", - "CoC7.PlayerName": "Jugador", - "CoC7.Name": "Nombre", - "CoC7.Archetype": "Arquetipo", - "CoC7.Occupation": "Ocupación", - "CoC7.Age": "Edad", - "CoC7.Sex": "Género", - "CoC7.Residence": "Residencia", - "CoC7.Birthplace": "Nacimiento", - "CoC7.Organization": "Organización", - "CoC7.HitPoints": "Puntos de vida", - "CoC7.HP": "PV", - "CoC7.MagicPoints": "Puntos de magia", - "CoC7.MP": "PM", - "CoC7.SanityPoints": "Puntos de cordura", - "CoC7.Sanity": "Cordura", - "CoC7.SAN": "COR", - "CoC7.DailySanLoss": "Pérdida diaria de COR :", - "CoC7.DailyLoss": "Pérdida diaria", - "CoC7.Luck": "Suerte", - "CoC7.Movement": "Movimiento", - "CoC7.Mov": "Mov", - "CoC7.BonusDamage": "Bonif. Daño", - "CoC7.DB": "BD", - "CoC7.Build": "Corpulencia", - "CoC7.Skills": "Habilidades", - "CoC7.Skill": "Habilidad", - "CoC7.Combat": "Combate", - "CoC7.Possessions": "Posesiones", - "CoC7.Background": "Trasfondo", - "CoC7.Notes": "Notas", - "CoC7.DailySanIconOver": "Reiniciar", - "CoC7.Prone": "Caído", - "CoC7.Unconsious": "Inconsciente", - "CoC7.CriticalWounds": "Herida grave", - "CoC7.Dying": "Moribundo", - "CoC7.DyingCheck": "Tirada de CON para evitar la muerte", - "CoC7.Dead": "Muerto", - "CoC7.Resist": "Resistido", - "CoC7.UnderlyingInsanity": "Locura subyacente", - "CoC7.TemporaryInsanity": "Locura temporal", - "CoC7.IndefiniteInsanity": "Locura indefinida", - "CoC7.NotInsane": "Ninguna", - "CoC7.UnlockActor": "Desbloquear Actor", - "CoC7.LockActor": "Bloquear Actor", - "CoC7.NpcRollCharacteristics": "Tirar para características aleatorias", - "CoC7.NpcAvarageCharacteristics": "Características medias", - "CoC7.NpcCharacteristicsFormula": "Fórmula", - "CoC7.NpcCharacteristicsValues": "Valores", - "CoC7.language": "Idioma", - "CoC7.Author": "Autor", - "CoC7.Date": "Fecha", - "CoC7.Spells": "Hechizos", - "CoC7.Spell": "Hechizo", - "CoC7.Spells&Notes": "Hechizos y Notas", - "CoC7.Weapons": "Armas", - "CoC7.Effects": "Efectos", - "CoC7.Cost": "Coste", - "CoC7.Source": "Fuente", - "CoC7.SpellDetails": "Detalles del hechizo", - "CoC7.Details": "Detalles", - "CoC7.Other": "Otros", - "CoC7.rounds": "asalto(s)", - "CoC7.hours": "hora(s)", - "CoC7.weeks": "semana(s)", - "CoC7.remove": "Quitar", - "CoC7.Any": "Cualquiera", - "CoC7.All": "Todos", - "CoC7.Success": "Éxito", - "CoC7.CustomLabel": "Etiqueta personalizada", - "CoC7.SpecificLocations": "Localizaciones específicas", - "CoC7.ArmourPlating": "Blindaje", - "CoC7.Location": "Localizacion", - "CoC7.Properties": "Propiedades", - "CoC7.Attributes": "Atributos", - "CoC7.Attribute": "Atributo", - "CoC7.Collapse": "Encoger", - "CoC7.Expand": "Expandir", - "CoC7.Blind": "Oculta", - "CoC7.Label": "Etiqueta", - "CoC7.Icon": "Icono", - "CoC7.Check": "Prueba", - "CoC7.ItemWeapon": "Objeto (arma)", - "CoC7.AttacksPerRound": "Ataques por asalto", - - "CoC7.Cast": "Lanzamiento", - "CoC7.SanityCost": "Coste COR", - "CoC7.PowerCost": "Coste POD", - "CoC7.HitPointsCost": "Coste PVs", - "CoC7.MagicPointsCost": "Coste PMs", - "CoC7.OtherCosts": "Otro coste", - "CoC7.CastingSpell": "Lanzando {spell}.", - "CoC7.NotEnoughMagicPoints": "El hechizo {spell} cuesta {originalMagicPoints} PMs, pero solo dispone de {actorMagicPoints}. ¿Desea tomar los restantes {convertedHitPoints} de sus PVs? Se le causará un daño de {convertedHitPoints} PVs si continúa", - - "CoC7.CopyToClipboard": "Copiar al portapapeles", - "CoC7.WhisperToSelection": "Susurrar a iconos seleccionados", - "CoC7.WhisperTo": "Susurrar a", - "CoC7.SendToChat": "Enviar al chat", - - "CoC7.RegularSuccess": "Éxito normal", - "CoC7.HardSuccess": "Éxito difícil", - "CoC7.ExtremeSuccess": "Éxito extremo", - "CoC7.CriticalSuccess": "Éxito crítico", - "CoC7.Fumble": "Pifia", - "CoC7.Failure": "Fallo", - "CoC7.Malfunction": "{itemName} sufre una avería", - - "CoC7.Dice": "Dados", - "CoC7.DiceModifierBonus": "bonificación", - "CoC7.DiceModifierPenalty": "penalización", - "CoC7.Modifiers": "Modificadores", - "CoC7.BonusDice": "Dados de bonificación", - "CoC7.UnitsDie": "1 dado de unidades", - "CoC7.TensDie": "dado de decenas", - "CoC7.TensDice": "dado(s) de decenas", - "CoC7.SuccessRequired": "se requiere un éxito {successRequired}", - "CoC7.Roll": "Tirar dados", - "CoC7.Pushing": "Forzando... ", - "CoC7.PushingSkill": ": ¡forzando tirada!", - "CoC7.PushSkill": "Forzar tirada", - "CoC7.PushedRoll": "(tirada forzada)", - "CoC7.SpendLuck": "Gastar {luckNeededValue} puntos de Suerte para superar la tirada", - "CoC7.LuckSpent": "{luckAmount} puntos de Suerte gastados para superar la tirada", - "CoC7.LuckSpentAlt": "Suerte gastada", - "CoC7.LuckError": "{actorName} no tiene suficiente Suerte para superar la tirada", - "CoC7.check.AutoSuccess": "Éxito Autom.", - "CoC7.check.AutoFailure": "Fallo Autom.", - "CoC7.RevealCheck": "Mostrar tirada", - "CoC7.RevealSanLoss": "Mostar pérdida de COR", - "CoC7.check.ForcePass": "Forzar éxito", - "CoC7.check.ForceFail": "Forzar fallo", - "CoC7.check.FlagForDevelopment": "Premiar experiencia", - "CoC7.IncreaseSuccessLevel": "Incrementar nivel de éxito", - "CoC7.check.DecreaseSuccessLevel": "Disminuir nivel de éxito", - "CoC7.RollSecretDice": "El Guardián ha hecho una tirada privada", - "CoC7.KeeperSentDecoy": "Se ha enviado a los jugadores una tirada señuelo", - "CoC7.FakeRoll": "Mandar a los jugadores una tirada señuelo", - - "CoC7.ConstitutionCheck": "Tirada de Constitución", - - "CoC7.SanDataSelectionWindow": "Seleccionar pérdidas de COR", - "CoC7.BonusSelectionWindow": "Seleccionar dificultad y bonificación", - "CoC7.BonusSelectionWindowNamed": "Seleccione modificador para la tirada de {name}", - "CoC7.SkillDetailsWindow": "Ventana de detalles de la habilidad", - "CoC7.RegularDifficulty": "normal", - "CoC7.HardDifficulty": "difícil", - "CoC7.ExtremeDifficulty": "extrema", - "CoC7.CriticalDifficulty": "crítica", - "CoC7.UnknownDifficulty": "desconocida", - "CoC7.RollDifficulty": "Dificultad de la tirada", - "CoC7.RollThreshold": "Umbral de éxito", - "CoC7.FlatDiceModifier": "Modificador a la tirada", - "CoC7.FlatModifier": "Modificador al umbral de éxito", - "CoC7.RollDifficultyUnknown": "Desconocida", - "CoC7.RollDifficultyRegular": "Normal", - "CoC7.RollDifficultyHard": "Difícil", - "CoC7.RollDifficultyExtreme": "Extrema", - "CoC7.RollDifficultyCritical": "Crítica", - "CoC7.RollResult.LuckSpendText": "{luckAmount} puntos de Suerte gastados, {successLevel} superado", - "CoC7.RollDice": "¡Tirar dados!", - "CoC7.CreateLink": "Crear enlace a tirada", - "CoC7.SuccesLevelHint": "{value} nivel(es) de éxito", - "CoC7.FailureLevelHint": "Fallo por {value} nivel(es)", - "CoC7.CombinedRollCard": "Tarjeta de tiradas combinadas", - "CoC7.OpposedRollCard": "Tarjeta de tiradas enfrentadas", - "CoC7.CombinedAnyHint": "Solo es necesario que una tirada tenga éxito", - "CoC7.CombinedAllHint": "Todas las tiradas tienen que tener éxito", - "CoC7.CloseCard": "Finalizar tarjeta", - - "CoC7.CheckResult": "Tirada de {name} ({value}%), dificultad {difficulty}", - "CoC7.ItemCheckResult": "{item} - tirada de {skill} ({value}%), dificultad {difficulty}", - "CoC7.CheckRawValue": "({rawvalue}%), dificultad {difficulty}", - - "CoC7.ArmorAbsorbsDamage": "La armadura absorbe el daño", - "CoC7.Critical": "Crítico", - "CoC7.Impale": "Empala", - "CoC7.CriticalTitle": "El impacto ha sido crítico", - "CoC7.ImpaleTitle": "El arma puede empalar", - "CoC7.Target": "Objetivo", - "CoC7.TargetOutOfRange": "Objetivo fuera de alcance", - "CoC7.NoTargetToDamage": "Sin objetivo al que aplicar el daño", - "CoC7.ShotIsImpossible": "Disparo imposible", - "CoC7.OutOfAmmo": "Sin munición", - "CoC7.OutOfShots": "No es posible realizar más disparos", - - "CoC7.BonusDamageRoll": "Tirada de Bonificación de Daño", - "CoC7.Type": "Tipo", - "CoC7.FightBack": "Contraatacar", - "CoC7.Dodge": "Esquivar", - "CoC7.Maneuver": "Maniobra", - "CoC7.NoResponse": "No reaccionar", - "CoC7.OutNumbered": "Superado", - "CoC7.combatCard.surprised": "Sorprendido", - "CoC7.combatCard.autoSuccess": "Éxito Automático", - "CoC7.Advantage": "Ventaja", - "CoC7.Disadvantage": "Desventaja", - "CoC7.TitleAdvantage": "Añadir 1 dado de bonificación (el objetivo está boca abajo, inmovilizado...)", - "CoC7.TitleDisadvantage": "Añadir 1 dado de penalización (por estar boca abajo, inmovilizado...)", - "CoC7.TitleOutNumbered": "Añadir 1 dado de bonificación por objetivo en inferioridad numérica", - "CoC7.TitleSurprised": "Añadir 1 dado de bonificación por objetivo sorprendido", - "CoC7.TitleAutoSuccess": "El ataque impacta automáticamente", - "CoC7.WinnerRollDamage": "{name} ha ganado. Tirar daño", - "CoC7.InitiatorMissed": "{name} falló.", - "CoC7.NoWinner": "Ambas partes han fallado", - "CoC7.DodgeSuccess": "{name} ha esquivado!", - "CoC7.ManeuverSuccess": "La maniobra {name} ha tenido éxito", - "CoC7.AttackSuccess": "{name} landed a blow.", - "CoC7.InflictPain": "Aplicar daño", - "CoC7.AdvantageAttacker": "Ventaja: Atacante", - "CoC7.AdvantageDefender": "Ventaja: Defensor", - "CoC7.Tie": "Empate", - "CoC7.DamageInflicted": "Daño causado", - "CoC7.TotalDamage": "Daño total", - - "CoC7.combatCard.dive4cover": "Ponerse a Cubierto", - - "CoC7.rangeCombatCard.SingleShot": "Disparo único", - "CoC7.rangeCombatCard.MultipleShots": "Disparos múltiples", - "CoC7.AutomaticFire": "Fuego automático", - "CoC7.rangeCombatCard.Burst": "Ráfaga", - "CoC7.rangeCombatCard.FullAuto": "Fuego automático", - "CoC7.rangeCombatCard.BaseRange": "Alcance básico", - "CoC7.rangeCombatCard.LongRange": "Largo alcance", - "CoC7.rangeCombatCard.ExtremeRange": "Muy largo alcance", - "CoC7.rangeCombatCard.OutOfRange": "Fuera del alcance", - "CoC7.rangeCombatCard.Cover": "A cubierto", - "CoC7.rangeCombatCard.PointBlankRange": "A bocajarro", - "CoC7.rangeCombatCard.NormalTarget": "Objetivo normal", - "CoC7.rangeCombatCard.BigTarget": "Objetivo grande", - "CoC7.combatCard.SmallTarget": "Objetivo pequeño", - "CoC7.rangeCombatCard.FastMovingTarget": "Objetivo rápido", - "CoC7.rangeCombatCard.InMelee": "En combate cuerpo a cuerpo", - "CoC7.rangeCombatCard.aiming": "Apuntando", - "CoC7.rangeCombatDamage": "{name} recibe {total} puntos de daño", - "CoC7.rangeCombatDamageArmor": "{name} recibe {total} punto/s de daño. ({armor} absorbido/s)", - "CoC7.RollDamage": "Tirada de daño", - "CoC7.BulletsFired": "Balas disparadas", - "CoC7.Shots": "Disparos", - "CoC7.Shoot": "Disparo", - "CoC7.ShotBullets": "Disparar {bullets} tiros al objetivo {actor}", - "CoC7.ShotVoley": "Disparando una ráfaga de {bullets} tiros al objetivo {actor}", - "CoC7.rangeCombatCard.AimingTitle": "Añade 1 dado de bonificación al primer disparo", - "CoC7.rangeCombatCard.CoverTitle": "1 dado de penalización. El objetivo tiene cobertura o se ha puesto a cubierto", - "CoC7.rangeCombatCard.PointBlankRangeTitle": "1 dado de bonificación. Objetivo a distancia de bocajarro", - "CoC7.rangeCombatCard.BigTargetTitle": "1 dado de bonificación por objetivo grande (corpulencia > 4)", - "CoC7.rangeCombatCard.SmallTargetTitle": "1 dado de penalización por objetivo pequeño", - "CoC7.rangeCombatCard.NormalTargetTitle": "Objetivo de tamaño normal, sin bonificación/penalización", - "CoC7.rangeCombatCard.InMeleeTitle": "1 dado de penalización. Objetivo trabado en combate cuerpo a cuerpo", - "CoC7.rangeCombatCard.FastMovingTargetTitle": "1 dado de penalización. Objetivo veloz (MOV 8+) moviéndose rápido", - - "CoC7.meleeCombatDamageTakes": "recibe", - "CoC7.meleeCombatDamageFrom": "de", - "CoC7.meleeCombatDamageDeals": "inflige", - "CoC7.meleeCombatDamageWith": "con", - - "CoC7.DropZone": "DropZone", - - "CoC7.Value": "Valor", - "CoC7.SkillValue": "Valor Habilidad", - "CoC7.SkillBase": "Base", - "CoC7.BaseSkillValue": "Valor base de la habilidad", - "CoC7.SkillExperience": "Experiencia", - "CoC7.SkillArchetype": "Arquetipo", - "CoC7.SkillOccupation": "Ocupacion", - "CoC7.SkillPersonal": "Particulares", - - "CoC7.SkillTotalExperience": "Puntos de experiencia", - "CoC7.SkillTotalArchetype": "Puntos de arquetipo", - "CoC7.SkillTotalOccupation": "Puntos de ocupación", - "CoC7.SkillTotalPersonal": "Intereses particulares", - "CoC7.CharacteristicsPoints": "Puntos de características", - "CoC7.TotalPoints": "Puntos de ocupación totales", - - "CoC7.ItemQuantity": "Cantidad", - "CoC7.ItemWeight": "Peso", - "CoC7.ItemDetails": "Detalles", - "CoC7.Description": "Descripción", - "CoC7.Reload": "Clic Izqdo/Decho : añade/quita 1 bala\nMayús + clic Izqdo/Decho : recargar/vaciar", - "CoC7.WeaponRange": "Alcance", - "CoC7.WeaponDamage": "Daño", - "CoC7.Weapon.BlastRadius": "Radio de explosión", - "CoC7.WeaponMalfunction": "Avería", - "CoC7.WeaponUsesPerRound": "Asaltos/uso", - "CoC7.WeaponUsesPerRoundHint": "Ataques por asalto (1/3 indica: 1 ataque cada 3 asaltos)", - "CoC7.WeaponSheet.RoundsPerUse.Info": "Número de asaltos de preparación necesarios para disparar el arma de nuevo", - "CoC7.WeaponMax": "Disparos/asalto", - "CoC7.BurstSize": "Balas/ráfaga", - "CoC7.BurstSizeHint": "Numero de balas por cada ráfaga", - "CoC7.WeaponBulletsInMag": "Cargador", - "CoC7.WeaponSpecial": "Especial", - "CoC7.ItemPrice": "Precio", - "CoC7.Armor": "Armadura", - - "CoC7.EraNvct": "Invictus", - "CoC7.EraDrka": "Edad Oscura", - "CoC7.EraDdts": "El Viejo Oeste", - "CoC7.EraGlit": "Luz de Gas", - "CoC7.Era1920": "Años 20", - "CoC7.EraPulp": "Pulp Cthulhu", - "CoC7.EraMdrn": "Época Actual", - "CoC7.Eras": "Épocas Cthulhu", - "CoC7.EraAvailability": "Disponibilidad", - - "CoC7.SkillNoAdjustments": "Sin ajustes", - "CoC7.SkillNoXpGain": "Sin ganancia de EXP", - "CoC7.SkillSpecial": "Especialización", - "CoC7.SkillRarity": "Infrecuente", - "CoC7.SkillPush": "Forzada", - "CoC7.SkillCombat": "Combate", - "CoC7.SkillFighting": "Combatir", - "CoC7.SkillFirearm": "Armas de fuego", - - "CoC7.WeaponRngd": "Alcance", - "CoC7.WeaponProperyManeuver": "Maniobra", - "CoC7.WeaponTouch": "Toque", - "CoC7.WeaponImpl": "Empala", - "CoC7.WeaponRare": "Rara", - "CoC7.WeaponAhdb": "+BD/2", - "CoC7.WeaponAddb": "+BD", - "CoC7.WeaponSlnt": "Silenciosa", - "CoC7.WeaponXplv": "Explosivos", - "CoC7.WeaponBrst": "Ráfaga", - "CoC7.WeaponAuto": "Fuego automático", - "CoC7.WeaponSpcl": "Especial", - "CoC7.WeaponMont": "Montada", - "CoC7.WeaponDbrl": "Dos cañones", - "CoC7.WeaponBlst": "Explosiva", - "CoC7.WeaponStun": "Aturdimiento", - "CoC7.Weapon.Property.Melee": "Cuerpo a cuerpo", - "CoC7.Weapon.Property.Thrown": "Arrojadiza", - "CoC7.Weapon.Property.Burn": "Fuego", - "CoC7.Weapon.Property.Shotgun": "Escopeta", - - "CoC7.ErrorItem": "No se pudo localizar el ítem", - "CoC7.ErrorActor": "No se pudo localizar al actor", - "CoC7.ErrorInvalidFormula": "{value} no es una fórmula válida", - "CoC7.ErrorInvalid": "inválido", - "CoC7.Validate": "Validar", - "CoC7.Apply": "Aplicar", - - "CoC7.NewBioSectionName": "Nueva Sección", - - "CoC7.DodgeSkillName": "Esquivar", - "CoC7.CthulhuMythosName": "Mitos de Cthulhu", - "CoC7.CreditRatingSkillName": "Crédito", - "CoC7.DriveAutoSkillName": "Conducir automóvil", - "CoC7.FightingSpecializationName": "Combatir", - "CoC7.FirearmSpecializationName": "Armas de fuego", - "CoC7.DriveSpecializationName": "Conducir", - "CoC7.PilotSpecializationName": "Pilotar", - "CoC7.AnySpecName": "Genérica", - "CoC7.BoutOfMadnessName": "Episodio de Locura", - "CoC7.InsanityName": "Locura", - - "CoC7.NewSkillName": "nueva habilidad", - "CoC7.AddSkill": "Añadir habilidad", - "CoC7.DevelopemmentPhase": "Fase de Desarrollo", - "CoC7.RecoverLuckPoints": "Recuperar puntos de suerte", - "CoC7.SkillCantGainXp": "Esta habilidad no puede ganar XP automáticamente", - "CoC7.SkillUnflagForDevelopement": "Desmarcar para desarrollo", - "CoC7.SkillFlagForDevelopement": "Marcar para desarrollo", - "CoC7.RollAll4Dev": "Tirando desarrollo de todas las habilidades", - "CoC7.RollLuck4Dev": "Tirando desarrollo para suerte", - "CoC7.DevRollTitle": "Tirando desarrollo de {item}: {die}/{score}%", - "CoC7.DevSuccessDetails": "{item} se ha aumentado un {augment}%", - "CoC7.SanGained": "Ha recuperado 2d6 ({results} = {sanGained}) de cordura tras dominar la habilidad {skill} con un {skillValue}%", - "CoC7.DevFailureDetails": "{item} NO se ha aumentado", - "CoC7.DevSuccess": "({die}/{score}%), {item} se ha aumentado un {augment}%", - "CoC7.DevFailure": "({die}/{score}%), {item} NO se ha aumentado", - "CoC7.LuckIncreased": "{augment} puntos de suerte recuperados ({die}/{score})", - "CoC7.LuckNotIncreased": "No se ha recuperado suerte ({die}/{score})", - "CoC7.DevelopAttribWarn": "No tiene acceso a algunos atributos en el modo desarrollo/creación", - "CoC7.SkillDetail": "Detalles", - "CoC7.EditSkill": "Editar habilidad", - "CoC7.DeleteSkill": "Eliminar habilidad", - "CoC7.RangeSkills": "Habilidades de combate a distancia", - "CoC7.MeleeSkills": "Habilidades de combate cuerpo a cuerpo", - "CoC7.NewItemName": "nuevo objeto", - "CoC7.AddItem": "Añadir objeto", - "CoC7.EditItem": "Editar objeto", - "CoC7.DeleteItem": "Eliminar objeto", - "CoC7.TradeItem": "Cambiar/almacenar objeto", - "CoC7.SortBySkillName": "Ordenar por nombre de habilidad", - "CoC7.SortBySkillValue": "Ordenar por porcentaje de habilidad", - "CoC7.UncommonSkillsShow": "Mostrar habilidades infrecuentes", - "CoC7.UncommonSkillsHide": "Ocultar habilidades infrecuentes", - - "CoC7.NewBookName": "nuevo tomo", - "CoC7.AddBook": "Añadir tomo", - "CoC7.NewSpellName": "nuevo hechizo", - "CoC7.AddSpell": "Añadir hechizo", - - "CoC7.AddWeapon": "Añadir arma", - "CoC7.NewWeaponName": "nueva arma", - "CoC7.EditWeapon": "Editar arma", - "CoC7.DeleteWeapon": "Eliminar arma", - "CoC7.MeleeWeapons": "Armas cuerpo a cuerpo", - "CoC7.RangeWeapons": "Armas a distancia", - "CoC7.WeaponName": "Nombre", - "CoC7.WeaponSkill": "Habilidad", - "CoC7.WeaponSkillAlt": "Hab. alternativa", - "CoC7.Inventory": "Inventario", - "CoC7.InventoryIsCurrentlyEmpty": "Inventario actualmente vacío", - "CoC7.CharacterDevelopment": "Desarrollo", - "CoC7.OccupationSkill": "Habilidad de ocupación", - "CoC7.ArchetypeSkill": "Habilidad de arquetipo", - "CoC7.UseFormula": "Usar tirada de dados", - "CoC7.EnterFormula": "Introducir fórmula", - "CoC7.SanRollHint": "Tirar Cordura a todos los objetivos seleccionados", - "CoC7.SANCheckTitle": "Pérdida de COR : {name} ({sanMin}/{sanMax})", - "CoC7.NoSkill": "Sin habilidad", - "CoC7.AddWeapontHint": "

                      {actor} no dispone de {weapon}.
                      ¿Desea crearlo ?

                      ", - - "CoC7.LinkCheck": "Tirada de {name}", - "CoC7.LinkCheckDiff": "Tirada [{difficulty}] de {name}", - "CoC7.LinkCheckModif": "Tirada de {name} ({modifier}): ", - "CoC7.LinkCheckDiffModif": "Tirada [{difficulty}] de {name} ({modifier})", - "CoC7.LinkSanLoss": "Tirada de COR, ({sanMin}/{sanMax})", - "CoC7.LinkSanLossDiff": "Tirada [{difficulty}] de COR, ({sanMin}/{sanMax})", - "CoC7.LinkSanLossModif": "Tirada de COR ({modifier}), ({sanMin}/{sanMax})", - "CoC7.LinkSanLossDiffModif": "Tirada [{difficulty}] de COR ({modifier}), ({sanMin}/{sanMax})", - "CoC7.LinkItem": " de {name}", - "CoC7.LinkItemDiff": " [{difficulty}] de {name}", - "CoC7.LinkItemModif": " de {name} ({modifier})", - "CoC7.LinkItemDiffModif": " [{difficulty}] de {name} ({modifier})", - - "CoC7.ManualCreditValues": "Crédito manual", - "CoC7.MonetarySymbol": "Símbolo :", - "CoC7.MonetaryFactor": "Factor :", - "CoC7.AutoCreditValues": "Cambiar a cálculo automático/manual", - "CoC7.MonetarySpendingLevel": "Nivel de gasto :", - "CoC7.MonetaryCash": "Dinero :", - "CoC7.MonetarySpent": "Gastado :", - "CoC7.MonetaryAssets": "Propiedades :", - "CoC7.MonetaryAssetsDetails": "Detalles de las propiedades", - - "CoC7.PossessionsNotes": "Notas :", - "CoC7.PossessionsNotesHolder": "Notas", - - "CoC7.BackgroundNewSection": "Añadir nueva sección", - "CoC7.BackgroundSectionNameHolder": "Título de la sección", - "CoC7.BackgroundDeleteSection": "Eliminar sección", - "CoC7.BackgroundSectionMoveUp": "Subir", - "CoC7.BackgroundSectionMoveDown": "Bajar", - - "CoC7.creatureFightingSkill": "Combatir", - - "CoC7.InvoluntaryAction": "Acción involuntaria", - "CoC7.InvoluntaryActionPerfomed": "Acción involuntaria realizada", - "CoC7.SanityCheck": "Tirada de Cordura", - "CoC7.IntCheck": "Tirada de INT", - "CoC7.NoSanLoss": "Sin pérdida de COR", - "CoC7.SANLoss": "Pérdida de COR", - "CoC7.SanityCheckPerformed": "Has experimentado un evento traumático", - "CoC7.InvoluntaryActionPerformed": "Pierdes el autocontrol durante unos instantes", - "CoC7.SanityLost": "Puntos de COR perdidos", - "CoC7.MemoryRepressed": "Tu mente ha logrado reprimir tus recuerdos y los ha enterrado en el subconsciente", - "CoC7.RememberEverything": "Eres plenamente consciente de lo sucedido", - "CoC7.BoutOfMadnesslasted": "Tu episodio de locula dura", - "CoC7.EnteringBoutOfMadness": "Sufres un episodio de locura", - "CoC7.GrowingAccustomedToAwfulness": "Comienzas a acostumbrarte al horror (se ha limitado la pérdida de COR)", - "CoC7.ImmuneToAwfulness": "Tu mente es inmune a esta atrocidad (no hay perdida de COR)", - "CoC7.InvestigatorPhobiaGained": "El investigador gana una fobia", - "CoC7.PhobiaGained": "Ganas una fobia", - "CoC7.InvestigatorManiaGained": "El investigador gana una manía", - "CoC7.ManiaGained": "Ganas una manía", - "CoC7.AlreadyUnderlyingInsanity": "El investigador se encuentra en estado de locura subyacente", - "CoC7.IndefinitelyInsane": "Has adquirido una locura indefinida", - "CoC7.TemporaryInsane": "Has adquirido una locura temporal", - "CoC7.GoodForAsylum": "Estás listo para que te manden al manicomio", - "CoC7.BoutOfMadness": "Episodio de locura", - "CoC7.BoutRealTime": "Episodio de locura: en tiempo real", - "CoC7.BoutSummary": "Episodio de locura: resumidos", - "CoC7.EndBoutOfMadness": "Fin del episodio de locura", - "CoC7.InsanityType": "Tipe de locura", - "CoC7.Phobia": "Fobia", - "CoC7.Mania": "Manía", - "CoC7.MaxSanloss": "Pérdida máx", - "CoC7.MinSanloss": "Pérdida mín", - "CoC7.AlreadyLost": "Perdidos actualmente", - "CoC7.CreatureMaxLoss": "Pérdida máx por esta criatura", - "CoC7.MaxLossToCreature": "Pérdida restante por esta criatura", - "CoC7.ResetCreatureSan": "Restablecer historial con esta criatura", - "CoC7.ResetSpecieSan": "Restablecer historial con esta especie", - "CoC7.KeepData": "Mantener historial con esta criatura", - "CoC7.BoutActive": "(Episodio) Inmune a pérdida de COR", - "CoC7.AlreadyInABout": "Estás sufriendo un episodio de locura y eres inmune a nuevas pérdidas de COR", - "CoC7.PlayerPermanentlyInsane": "El jugador sufre locura permanente", - "CoC7.MythosFirstEncounter": "Ganancia en Mitos (+5%, al ser la primera vez)", - "CoC7.MythosAlreadyEncountered": "Ganancia en Mitos (+1%)", - "CoC7.DisregardMythosGain": "Sin ganancia en Mitos", - "CoC7.MythosGain": "Ganancia en Mitos", - "CoC7.YouGainedCthulhuMythos": "Tu mente se estremece ante tal manifestación sobrenatural (+{value}% Mitos de Cthulhu)", - "CoC7.CardResolved": "Tarjeta finalizada", - - "CoC7.SpellCastingTime": "Tiempo de ejecución", - "CoC7.SpellCastingCost": "Coste", - "CoC7.CallSpell": "Llamada", - "CoC7.DismissSpell": "Expulsión", - "CoC7.ContactSpell": "Contacto", - "CoC7.SummonSpell": "Convocación", - "CoC7.BindSpell": "Atadura", - "CoC7.EnchantmentSpell": "Encantamiento", - "CoC7.GateSpell": "Portal", - "CoC7.CombatSpell": "Combate", - "CoC7.SpellType": "Tipo de Hechizo", - - "CoC7.BookHasNothingMoreToTeach": "No tiene nada que aprender de {book}. La habilidad de Mitos de Cthulhu de {actor} es mayor que la puntuación de Mitos", - "CoC7.BookType": "Tipo de Libro", - "CoC7.Content": "Contenido", - "CoC7.CthulhuMythosFinal": "Mithos final", - "CoC7.CthulhuMythosInitial": "Mithos inicial", - "CoC7.Development": "Desarrollo", - "CoC7.DifficultyLevel": "Nivel de dificultad", - "CoC7.DragSpell": "Suelte hechizos aquí para incorporarlos al libro...", - "CoC7.FullStudies": "Estudio completo", - "CoC7.Gains": "Ganancia", - "CoC7.GainsForReading": "Ganancia de habilidad por leer {book}.", - "CoC7.InitialReading": "Lectura inicial", - "CoC7.InitialReadingNeeded": "{actor} necesita hacer una lectura inicial de {book} para ser capaz de avanzar por el proceso de estudio completo", - "CoC7.LearnSpellAttempt": "Intento de aprendizaje del hechizo {spell}, de {book}.", - "CoC7.MarkedForDevelopment": "Marcado para desarrollo", - "CoC7.Mythos": "Mitos", - "CoC7.MythosRating": "Puntuación de Mitos", - "CoC7.NotOwned": "Este libro requiere permisos de propietario de un actor para realizar esta acción", - "CoC7.Occult": "Ciencias ocultas", - "CoC7.Points": "punto(s)", - "CoC7.Progress": "Progreso", - "CoC7.RedoFullStudy": "Volver a realizar estudio completo", - "CoC7.ReadAttempt": "Intento de leer {book} ({language}), dificultad {difficulty}", - "CoC7.ReadingMythosTome": "Leyendo {book}", - "CoC7.Specific": "Específico", - "CoC7.SpellsLearned": "Hechizos aprendidos", - "CoC7.StudyTime": "Tiempo de estudio", - "CoC7.UnknownLanguage": "{actor} no conoce el idioma en el que está escrito el libro", - "CoC7.Unreadable": "No legible", - - "CoC7.Crew": "Tripulación", - "CoC7.Origin": "Origen", - "CoC7.ArmedVehicle": "Vehículo blindado", - - "CoC7.PulpTalents": "Talentos Pulp", - "CoC7.TalentType": "Tipo de talento", - "CoC7.PhysicalTalent": "Físicos", - "CoC7.MentalTalent": "Mentales", - "CoC7.CombatTalent": "De combate", - "CoC7.MiscellaneousTalent": "Varios", - "CoC7.BasicTalent": "Básicos", - "CoC7.InsaneTalent": "De locura", - "CoC7.OtherTalent": "Otros", - - "CoC7.Items": "Objetos", - "CoC7.Vehicle": "Vehículo", - "CoC7.Books": "Tomos", - "CoC7.Status": "Estados", - - "CoC7.Classic": "Clásica", - "CoC7.Lovecraftian": "Lovecraftiana", - "CoC7.Pulp": "Pulp", - "CoC7.Modern": "Contemporánea", - "CoC7.Related": "Ocupación Relacionada", - "CoC7.OccupationType": "Tipo de Ocupación", - "CoC7.OccupationPoints": "Puntos de Ocupación", - "CoC7.Selected": "Seleccionada", - "CoC7.Multiplier": "Multiplicador", - "CoC7.Optional": "A elegir", - "CoC7.Or": "o", - "CoC7.Minimum": "Mínimo", - "CoC7.Maximum": "Máximo", - "CoC7.CommonSkills": "Habilidades comunes", - "CoC7.OptionSkills": "Grupos de habilidades a elegir", - "CoC7.ChoiceNumber": "Opciones", - "CoC7.Choose": "Número a escoger entre", - "CoC7.Chosen": "Escogido", - "CoC7.EmptySkillList": "Añada una habilidad soltándola aquí", - "CoC7.EmptyItemList": "Añada un objeto soltándolo aquí", - "CoC7.EmptyCharacterSkillList": "Añada una configuración, ocupación o habilidad soltándolas aquí", - "CoC7.PersonalSpeciality": "Número de especialidades personales o de la época", - "CoC7.AdditionalSkills": "Habilidades Adicionales", - "CoC7.SkillSelectionWindow": "Seleccione habilidades opcionales", - "CoC7.SelectPersonalSkills": "Seleccione {number} habilidades(s) como intereses personales", - "CoC7.ResetOccupation": "Reiniciar Ocupación", - "CoC7.ResetOccupationHint": "El Actor {name} ya tiene una ocupación. ¿Desea reiniciarla?", - "CoC7.ResetArchetype": "Reiniciar Arquetipo", - "CoC7.ResetArchetypeHint": "El Actor {name} ya tiene un arquetipo. ¿Desea reiniciarlo?", - "CoC7.CreditOutOfRange": "El Crédito debe están comprendido entre {min} y {max}", - "CoC7.BioSections": "Secciones del Trasfondo", - "CoC7.BioSectionName": "Nombre de la Sección del Trasfondo", - "CoC7.SpendPoints": "Asignar puntos de características", - "CoC7.RollCharac": "Tirar características", - "CoC7.SelectCoreCharac": "Seleccione características básicas", - "CoC7.SkillSpecSelectTitle": "Especialización de {specialization}", - "CoC7.SkillSelectBase": "Seleccione el valor base de la habilidad {name}", - "CoC7.SelectSkill": "Seleccione una habilidad existente", - "CoC7.CreateNewSkill": "Cree una habilidad nueva", - - "CoC7.Characteristics": "Características", - "CoC7.Characteristic": "Característica", - "CoC7.EnableCharacteristics": "Habilitar características", - "CoC7.UsePoints": "Usar puntos", - "CoC7.UseRolls": "Usar tiradas", - "CoC7.CoreCharacteristics": "Características Básicas", - "CoC7.BonusPoints": "Puntos Adicionales", - "CoC7.SuggestedOccupations": "Sugerencias de ocupaciones", - "CoC7.SuggestedTraits": "Rasgos Sugeridos", - - "CoC7.PutGunAway": "Bajar el arma", - "CoC7.DrawGun": "Desenfundar el arma", - - "CoC7.GmTools": "Herramientas del Guardián", - "CoC7.GmNotes": "Notas del GM", - "CoC7.DevPhase": "Fase de desarrollo", - "CoC7.DevPhaseEnabled": "Fase de desarrollo habilitada", - "CoC7.DevPhaseDisabled": "Fase de desarrollo deshabilitada", - "CoC7.CharCreationMode": "Modo de creación de personajes", - "CoC7.CharCreationEnabled": "Modo de creación de personajes habilitado", - "CoC7.CharCreationDisabled": "Modo de creación de personajes deshabilitado", - "CoC7.toggleXP": "Ganancia de PX", - "CoC7.XPGainEnabled": "Los personajes pueden ganar PX", - "CoC7.XPGainDisabled": "Los personajes no pueden ganar PX", - "CoC7.WarnNoActorAvailable": "No tiene control ni tiene seleccionado ningún actor", - "CoC7.WarnMacroIncorrectType": "Solo puede crear macros para armas y habilidades", - "CoC7.WarnNoGlobalSpec": "No puede crear macros para especializaciones sin especificar", - "CoC7.WarnMacroNoItemFound": "No se ha encontrado ningún objeto usable", - "CoC7.WarnNoControlledActor": "En estos momentos no controla a ningún actor", - "CoC7.WarnFastTargetWithWrongMOV": "Se ha seleccionado Rápido cuando el objetivo tiene un MOV inferior a 8. (MOV: {mov})", - "CoC7.WarnTooManyTarget": "Seleccionados demasiados objetivos. Solo se guardará el último objetivo seleccionado", - - "CoC7.allActors": "Todos los actores", - "CoC7.restTargets": "Descansar objetivos", - "CoC7.startRest": "Comenzando descanso", - "CoC7.dreaming": "Los investigadores esperan... soñando", - "CoC7.healthRecovered": "Un PV recuperado", - "CoC7.pulpHealthRecovered": "{number} PVs recuperados", - "CoC7.dailySanLossRestarted": "Contador de pérdida diraria de COR reiniciado", - "CoC7.magicPointsRecovered": "Puntos de magia recuperados", - "CoC7.hasCriticalWounds": "Una herída crítica impide recuperar PVs", - "CoC7.quickHealer": "Curación acelerada", - - "CoC7.ErrorNoDodgeSkill": "El actor no tiene la habilidad Esquivar", - "CoC7.ErrorNotEnoughLuck": "{actor} no tiene suficientes puntos de suerte para mejorar la tirada", - "CoC7.ErrorManeuverNotPossible": "Su oponente es demasiado fuerte como para realizar la maniobra", - "CoC7.ErrorNotFound": "¡No se ha encontrado {missing}!", - "CoC7.ErrorNotFoundForActor": "¡No se ha encontrado {missing} en el actor {actor}!", - - "CoC7.InfoLessSkillThanOptions": "Solo existen {skillCount} y {optionsCount} opciones, anadiéndose todas", - "CoC7.InfoAllSkillsAlreadySelected": "Ya se han seleccionado todas las habilidades", - - "CoC7.MessageCheckRequestedWait": "El guardián ha pedido una tirada de {check}.
                      ¡Espere a que se lo confirme antes de tirar!
                      ", - "CoC7.MessageTargetCheckRequested": "El guardián ha pedido a {name} una tirada de {check}", - "CoC7.MessageTitleSelectSingleUserForTarget": "Qué usuario podrá responder al ataque", - "CoC7.MessageSelectSingleUserForTarget": "Este icono está controlado por varios usuarios, por favor, seleccione que usuario podrá responder al ataque", - "CoC7.MessageBoutOfMadnessTableNotFound": "No se ha encontrado el resultado de la tabla de locura, por favor, compruebe que se han creado las tablas", - "CoC7.MessageBoutOfMadnessItemNotFound": "No se ha encontrado el resultado de la tabla de locura, por favor, compruebe que se han creado los estatus", - - "CoC7.DealDamage": "¿Causar {damage} puntos de daño a {target}?", - "CoC7.NoTargetSelected": "No ha seleccionado ningún objetivo para la tirada de {weapon}. ¿Desea continuar de todos modos?", - - "CoC7.Import": "Importar", - "CoC7.Proceed": "Proceder", - "CoC7.Cancel": "Cancelar", - - "CoC7.ActorImporter": "Importador de actores", - "CoC7.ActorImporterSummary": "Importa un PNJ o criatura a partir de sus estadísticas y descripción. Solo deberá copiar sus estadísticas en formato texto plano", - "CoC7.PasteTheDataBelow": "Pegue más abajo el texto sin formato", - "CoC7.TextFieldInvalidCharacters": "Caracteres inválidos en el texto, por favor, revíselo o será eliminado", - "CoC7.SelectActorType": "Seleccione tipo de actor", - "CoC7.NonPlayingCharacter": "Personaje no jugador (PNJ)", - "CoC7.Creature": "Criatura", - "CoC7.ConvertFrom6Edition": "Convertir desde 6a edición", - "CoC7.Convert": "Convertir", - "CoC7.NoConvert": "No convertir", - "CoC7.Guess": "Autodetectar", - "CoC7.English": "Inglés", - "CoC7.Spanish": "Español", - "CoC7.French": "Francés", - "CoC7.German": "Alemán", - "CoC7.Polish": "Polaco", - "CoC7.TraditionalChinese": "Chino tradicional", - "CoC7.SelectSourceLanguage": "Seleccione el idioma del texto original", - "CoC7.ImportedUnnamedCharacter": "Se ha importado personaje 'unnamed'", - "CoC7.CreatedImportedCharactersFolder": "Creada carpeta 'Personajes importados'", - "CoC7.ImportedCharactersFolder": "Personajes importados", - "CoC7.ImportSkillItemLocations": "Buscar habilidades/hechizos/armas en", - "CoC7.ImportActorItemsNone": "Ninguno", - "CoC7.ImportActorItemsItem": "Objetos", - "CoC7.ImportActorItemsItemWorldModuleSystem": "Objetos / Mundo / Módulos / Sistema", - "CoC7.ImportActorItemsWorldModuleItemSystem": "Mundo / Módulos / Objetos / Sistema", - - "CoC7.HowToTranslateTitle": "¿Cómo traducir el sistema?", - "CoC7.HowToTranslateWarning": "No instale ningún módulo que no sea de su confianza", - "CoC7.HowToTranslateInstallBabele": "Instale/actualice el módulo Babele desde el panel de administración de modulos de Foundry", - "CoC7.HowToTranslateInstallTranslation": "Instale/actualice la traducción desde el panel de administración de modulos de Foundry", - "CoC7.HowToTranslateEnableTranslation": "En el mundo de juego, bajo Configuración/Administrar módulos, active tanto Babele como la traducción", - "CoC7.HowToTranslateNoTranslation": "Puede consultar las instrucciones de cómo crear una nueva traducción de un sistema en los módulos de traducción ya creados", - - "CoC7.Migrate.Title": "Se requiere actualizar", - "CoC7.Migrate.Message": "

                      Su mundo necesita ser actualizado para funcionar con la versión {version}.

                      Por favor, haga una copia de seguridad de la carpeta del mundo antes de actualizar.

                      Si no actualiza el mundo el sistema no funcionará correctamente.

                      Se puede reiniciar el mundo una vez que se complete el proceso

                      ", - "CoC7.Migrate.WithModulesMessage": "

                      Es posible que tanto su mundo como sus módulos necesiten una actualización para ejecutar la versión {version}.

                      Por favor, haga copia de seguridad de su mundo y los módulos listados más abajo antes de comenzar la actualización.

                      Si no actualiza el mundo el sistema no funcionará correctamente.

                      Los módulos siguientes contienen actores u objetos, de modo que también se comprobarán.

                      {modules}

                      El mundo se reiniciará cuando se complete el proceso.

                      ", - "CoC7.Migrate.GMRequired": "

                      Su mundo necesita ser actualizado para funcionar con la versión {version}.

                      Por favor, espere a que su GM realice la actualización del sistema y entonces refresque (F5) la página

                      ", - "CoC7.Migrate.RestartRequired": "

                      Su mundo se reiniciará para activar los cambios

                      ", - "CoC7.Migrate.ButtonUpdate": "Actualizar", - "CoC7.Migrate.ButtonSkip": "Saltar", - "CoC7.Migrate.ButtonOkay": "Ok", - - "CoC7.Maximize": "Maximizar", - "CoC7.Summarize": "Resumen", - - "CoC7.UnableToInteractWithChatCard": "No es posible interactuar con este mensaje, si necesita hacer algún cambio pídaselo al Guardián", - "CoC7.UnableToCopyToClipboard": "No es posible copiar al portapapeles, probablemente debido al nivel de seguridad de su navegador", - "CoC7.WarningCharacterSheetV1Depreciated": "Esta disposición está obsoleta y no funcionará correctamente. Se eliminará cuando salga la versión v9 de FoundryVTT, por favor dígale a su Guardián que cambie la hoja a CoC7.CoC7CharacterSheetV2", - - "CoC7.MessageTitleSelectUserToGiveTo": "Dar objeto a otro personaje", - "CoC7.MessageSelectUserToGiveTo": "¿A qué personaje quiere darle el objeto?", - "CoC7.MessageDistanceCalculationFailure": "No es posible calcular la distancia entre los iconos, por favor, use la hoja de personaje del icono", - - "CoC7.ToolTipSkill": "
                      1. Clic izquierdo tirada con opciones
                      2. Mayús + clic izquierdo Tirada inmediata a dificultad normal
                      1. Clic derecho Tirada enfrentada con opciones
                      2. Mayús + clic derecho Tirada enfrentada inmediata
                      1. Alt/Opción + clic derecho Tirada combinada con opciones
                      ", - "CoC7.ToolTipKeeperSkill": "
                      1. CTRL + clic izquierdo Crear enlace a tirada
                      2. {other}
                      ", - "CoC7.ToolTipKeeperStandbySkill": "
                    3. Clic izquierdo Petición de tirada a {name}
                    4. ", - "CoC7.ToolTipDB": "
                      1. Clic izquierdo Tirada inmediata a dificultad normal
                      ", - "CoC7.ToolTipKeeperSanity": "
                    5. CTRL + Alt/Opción Crea enlace a tirada de COR
                    6. ", - "CoC7.ToolTipAutoToggle": "
                      1. Left click Conmuta entre cálculo automático/entrada manual
                      2. ", - "CoC7.ToolTipSkillFlagToggle": "
                        1. Doble clic Marcar/desmarcar
                        2. ", - "CoC7.ToolTipSkillFlagged": "Marcada para desarrollo", - "CoC7.ToolTipSkillUnflagged": "No marcada para desarrollo", - - "SETTINGS.TitleRules": "Reglas", - "SETTINGS.TitleInitiative": "Ajustes de iniciativa", - "SETTINGS.TitleRoll": "Ajustes de tiradas", - "SETTINGS.TitleChatCards": "Ajustes de tarjetas del chat", - "SETTINGS.TitleScene": "Ajustes de escena", - "SETTINGS.TitleSheet": "Ajustes de la hoja", - "SETTINGS.TitleGameArtwork": "Ajustes de arte del juego", - "SETTINGS.TitleWeapon": "Ajustes de armas", - "SETTINGS.TitleDiceSoNice": "Ajustes Dice So Nice", - "SETTINGS.TitleDeveloperDebug": "Ajustes de desarrollo y depuración", - "SETTINGS.TitleRollTable": "Ajustes de tablas dinámicas", - "SETTINGS.DebugMode": "Modo de depuración", - "SETTINGS.DebugModeHint": "!!REQUIERE REINICIAR!!", - "SETTINGS.DefaultDifficulty": "Dificultad por defecto", - "SETTINGS.DefaultDifficultyHint": "Puedes indicar la dificultad por defecto de las tiradas. Desconocida lanzará tiradas sin que el jugador conozca la dificultad", - "SETTINGS.CheckDifficultyRegular": "Dificultad por defecto", - "SETTINGS.CheckDifficultyUnknown": "Dificultad desconocida", - "SETTINGS.showIconsOnly": "En la hoja resumen, mostrar solo los iconos en la lista de habilidades", - "SETTINGS.UseToken": "Usar imagen del icono", - "SETTINGS.UseTokenHint": "Usar la imagen del icono en lugar de los retratos en las cartas del chat", - "SETTINGS.DisplayActorOnCard": "Mostrar actor en carta", - "SETTINGS.DisplayActorOnCardHint": "Mostrar la imagen/icono del actor en las cartas de chat de combate", - "SETTINGS.InitiativeRule": "Mecánica de cálculo de iniciativa", - "SETTINGS.InitiativeRuleHint": "Puedes elegir entre la iniciativa básica (valores de DES) o la regla opcional (tirada de DES)", - "SETTINGS.InitiativeRuleBasic": "Básica", - "SETTINGS.InitiativeRuleOptional": "Opcional", - "SETTINGS.displayInitDices": "Mostrar dado de iniciativa", - "SETTINGS.displayInitDicesHint": "Mostrar los dados cuando se tire iniciativa (solo cuando se usa la regla opcional)", - "SETTINGS.displayInitAsText": "Mostrar iniciativa como texto", - "SETTINGS.displayInitAsTextHint": "Mostrar la iniciativa como texto en lugar de un número (solo en las reglas opcionales)", - "SETTINGS.PulpRules": "Reglas Pulp", - "SETTINGS.PulpRulesHint": "Permite usar las reglas de Pulp Cthulhu (Arquetipos, Talentos, PV), ¡en fase de desarrollo!", - "SETTINGS.developmentRollForLuck": "Recuperación de puntos de suerte", - "SETTINGS.developmentRollForLuckHint": "Cada jugador puede hacer una tirada para recuperar suerte en la fase de desarrollo", - "SETTINGS.displayPlayerNameOnSheet": "Mostrar nombre del jugador en la hoja de personaje", - "SETTINGS.DisregardAmmo": "Ignorar la munición", - "SETTINGS.DisregardAmmoHint": "Al activar esta opción no se tendrán en cuenta la munición cargada en el arma a la hora de disparar", - "SETTINGS.DisregardUsePerRound": "Ignorar el número de usos por asalto", - "SETTINGS.DisregardUsePerRoundHint": "Al activar esta opción, se podrá disparar sin restricciones, ignorando el número de disparos que un arma puede realizar por asalto", - "SETTINGS.RestrictGridSpaces": "Medir usando espacios de rejilla", - "SETTINGS.RestrictGridSpacesHint": "En el combate a distancia, si se selecciona esta opción las distancias se medirán usando espacios de rejilla (cuadrados o hexágonos) en lugar de la distancia 'real' (euclidiana)", - "SETTINGS.StatusPlayerEditable": "Los jugadores pueden modificar estados", - "SETTINGS.StatusPlayerEditableHint": "Permite que el jugador modifique sus estados (caído, inconsciente, moribundo, muerto) y reinicie su perdida diaria de COR", - "SETTINGS.SyncDice3D": "[DsN] Sincronizar dados", - "SETTINGS.SyncDice3DHint": "Cuando se usa Dice so Nice (DsN), permite sincronizar los dados entre clientes", - "SETTINGS.UnitDieColorset": "[DsN] Configuración de dado de unidades", - "SETTINGS.UnitDieColorsetHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de unidades (si no se especifica otra cosa, usa los valores por defecto del jugador)", - "SETTINGS.TenDieNoMod": "[DsN] Configuración de dado de decenas", - "SETTINGS.TenDieNoModHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de decenas (si no se especifica otra cosa, usa los valores por defecto del jugador)", - "SETTINGS.TenDieBonus": "[DsN] Configuración de dado de bonificación", - "SETTINGS.TenDieBonusHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de bonificación (si no se especifica otra cosa, usa los valores por defecto del jugador)", - "SETTINGS.TenDiePenalty": "[DsN] Configuración de dado de penalización", - "SETTINGS.TenDiePenaltyHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de penalización (si no se especifica otra cosa, usa los valores por defecto del jugador)", - "SETTINGS.OverrideGameArtwork": "Sobrescribir arte del juego", - "SETTINGS.OverrideGameArtworkHint": "!!REQUIERE REINICIAR!! da acceso al modo de configuración avanzada, deje en blanco para usar la configuración por defecto", - "SETTINGS.ArtPauseImage": "Imagen de pausa", - "SETTINGS.ArtPauseImageHint": ". Escriba 'null' para quitar la imagen", - "SETTINGS.ArtPauseText": "Texto de pausa", - "SETTINGS.ArtPauseTextHint": "Deje en blanco para usar el texto por defecto", - "SETTINGS.OverrideSheetArtwork": "Sobrescribir arte de la hoja de PJ", - "SETTINGS.OverrideSheetArtworkHint": "!!REQUIERE REINICIAR!! Da acceso a la configuración avanzada de la hoja de personaje, deje las opciones en blanco para usar los valores por defecto", - "SETTINGS.ArtWorkSheetBackground": "Fondo de la hoja de PJ", - "SETTINGS.ArtWorkSheetBackgroundHint": "escriba 'null' para quitar el fondo", - "SETTINGS.ArtWorkSheetBackgroundType": "Tipo de fondo", - "SETTINGS.BackgroundSlice": "La imagen de fondo será recortada (css:border-image)", - "SETTINGS.BackgroundAuto": "Redimensiona la imagen manteniendo proporciones (css:auto)", - "SETTINGS.BackgroundContain": "Redimensiona y rellena sin recortar/estirar (css:contain)", - "SETTINGS.BackgroundCover": "Redimensiona y rellena recortando/estirando (css:cover)", - "SETTINGS.ArtWorkOtherSheetBackground": "Fondo del resto de hojas", - "SETTINGS.ArtWorkOtherSheetBackgroundHint": "escriba 'null' para quitar el fondo. Por ahora, solo se aplica a objetos y vehículos", - "SETTINGS.ArtworkSheetImage": "Imagen de la hoja de PJ", - "SETTINGS.ArtworkSheetImageHint": "escriba 'null' para quitar la imagen", - "SETTINGS.ArtworkFrontColor": "Color principal", - "SETTINGS.ArtworkFrontColorHint": "Se usa para todos los elementos", - "SETTINGS.ArtworkBackgroundColor": "Color secundario", - "SETTINGS.ArtworkBackgroundColorHint": "Se usa para fondos y campos de entrada", - "SETTINGS.ArtworkInteractiveColor": "Color de elementos interactivos", - "SETTINGS.ArtworkInteractiveColorHint": "Se usa para elementos interactivos/tablas dinámicas", - "SETTINGS.ArtworkFixedSkillLength": "Limitar la longitud de las habilidades", - "SETTINGS.ArtworkFixedSkillLengthHint": "La longitud de las habilidades se limitará para que la pestaña de habilidades tenga un aspecto más compacto", - "SETTINGS.ArtworkMainFont": "Fuente principal", - "SETTINGS.ArtworkMainFontBold": "Fuente principal (negrita)", - "SETTINGS.ArtworkMainFontSize": "Tamaño de fuente por defecto (px)", - "SETTINGS.BoutOfMadnessSummaryTable": "Tabla de episodios de locura (resumidos)", - "SETTINGS.BoutOfMadnessRealTimeTable": "Tabla de episodios de locura (en tiempo real)", - "SETTINGS.LetKeeperDecide": "A decisión del Guardián", - "SETTINGS.DisplayResultType": "Mostrar el resultado de la tirada (texto)", - "SETTINGS.DisplayCheckSuccessLevel": "Mostrar el nivel de éxito de la tirada (estrellas/arañas)", - "SETTINGS.PlayerUnlockSheetMode": "Los jugadores pueden desbloquear la hoja de personaje", - "SETTINGS.AlwaysEditable": "Siempre", - "SETTINGS.CreationModeOnly": "Solo en modo de creación de personajes", - "SETTINGS.NeverEditable": "Nunca (solo el Guardián)", - "SETTINGS.StanbyGMRolls": "Pausar tiradas del Guardián", - "SETTINGS.StanbyGMRollsHint": "Cuando el Guardián haga una tirada desde una hoja de personaje, mostrar un botón de tirada en lugar de hacer la tirada", - "SETTINGS.AllowFlatDiceModifier": "Modificador simple a las tiradas", - "SETTINGS.AllowFlatDiceModifierHint": "Permite aplicar un modificadores simple a las tiradas de dados", - "SETTINGS.AllowFlatThresholdModifier": "Modificador simple a los umbrales de éxito", - "SETTINGS.AllowFlatThresholdModifierHint": "Permite aplicar un modificador simple al umbral de éxito en la tirada", - "SETTINGS.OpposedRollTieBreaker": "Método alternativo Viriato139ac para deshacer empates", - "SETTINGS.OpposedRollTieBreakerHint": "Si en una tirada enfrentada ambos contendientes sacan el mismo grado de éxito, se declarará ganador al haya sacado un resultado mayor en la tirada, no el que tenga la habilidad más alta", - "SETTINGS.SelfRollWhisperTarget": "Notificación de tirada propia:", - "SETTINGS.SelfRollWhisperTargetHint": "Cuando se haga una tirada propia como GM quiere que se envíe notificación a", - "SETTINGS.DoNotAdvise": "Solo a ti mismo", - "SETTINGS.AdviseOwnersOnly": "Al propietario del actor", - "SETTINGS.AdviseAllPlayer": "A todos los jugadores", - "SETTINGS.OneBlockBackStory": "Trasfondo en un solo bloque", - "SETTINGS.OneBlockBackStoryHint": "Convertir el transfondo en un solo bloque de edición, se pueden añadir formateo y pegar enlaces", - "SETTINGS.EnableStatusIcons": "Activar iconos de estado", - "SETTINGS.EnableStatusIconsHint": "Determina si se deben mostrar de los efectos de combate y cordura en los iconos", - "SETTINGS.ShowExperimentalFeatures": "Mostrar características experimentales", - "SETTINGS.ShowExperimentalFeaturesHint": "Su mundo puede corromperse en próximas versiones si usa estas características. Solo para pruebas, no las use en sus mundos de juego", - "CoC7.ExperimentalFeaturesWarning": "Esta característica está en desarrollo y no se recomienda su uso en sus mundos de juego", - "SETTINGS.CheckElevation": "Incluir elevación en la distancia", - "SETTINGS.CheckElevationHint": "Usa la elevación en el combate a distancia para medir alcances", - "CoC7.toolTipDelay": "Retraso en milisegundos que tarda en aparecer los mensajes emergentes, ajustar a 0 para no mostrarlos nunca", - - "CoC7.getTheExample": "Copiar ejemplo", - "CoC7.Copied": "Ejemplo copiado al portapapeles" -} +{ + "I18N.LANGUAGE": "Español", + "I18N.MAINTAINERS": "@Viriato139ac#0342", + + "CoC7.title": "La Llamada de Cthulhu 7a Edición (no oficial)", + + "CoC7.Entities.Character": "Personaje", + "CoC7.Entities.Container": "Contenedor", + "CoC7.Entities.Creature": "Criatura", + "CoC7.Entities.Npc": "PNJ", + "CoC7.Entities.Vehicle": "Vehículo", + + "CoC7.Entities.Archetype": "Arquetipo", + "CoC7.Entities.Book": "Tomo", + "CoC7.Entities.Chase": "Persecución", + "CoC7.Entities.Item": "Objeto", + "CoC7.Entities.Occupation": "Ocupación", + "CoC7.Entities.Setup": "Configuración", + "CoC7.Entities.Skill": "Habilidad", + "CoC7.Entities.Spell": "Hechizo", + "CoC7.Entities.Status": "Estado", + "CoC7.Entities.Talent": "Talento", + "CoC7.Entities.Weapon": "Arma", + + "CHARAC.STR": "FUE", + "CHARAC.Strengh": "Fuerza", + "CHARAC.Strength": "Fuerza", + "CHARAC.CON": "CON", + "CHARAC.Constitution": "Constitución", + "CHARAC.SIZ": "TAM", + "CHARAC.Size": "Tamaño", + "CHARAC.DEX": "DES", + "CHARAC.Dexterity": "Destreza", + "CHARAC.APP": "APA", + "CHARAC.Appearance": "Apariencia", + "CHARAC.INT": "INT", + "CHARAC.Intelligence": "Inteligencia", + "CHARAC.POW": "POD", + "CHARAC.Power": "Poder", + "CHARAC.EDU": "EDU", + "CHARAC.Education": "Educación", + "CoC7.PlayerName": "Jugador", + "CoC7.Name": "Nombre", + "CoC7.Archetype": "Arquetipo", + "CoC7.Occupation": "Ocupación", + "CoC7.Age": "Edad", + "CoC7.Sex": "Género", + "CoC7.Residence": "Residencia", + "CoC7.Birthplace": "Nacimiento", + "CoC7.Organization": "Organización", + "CoC7.HitPoints": "Puntos de vida", + "CoC7.HP": "PV", + "CoC7.MagicPoints": "Puntos de magia", + "CoC7.MP": "PM", + "CoC7.SanityPoints": "Puntos de cordura", + "CoC7.Sanity": "Cordura", + "CoC7.SAN": "COR", + "CoC7.DailySanLoss": "Pérdida diaria de COR :", + "CoC7.DailyLoss": "Pérdida diaria", + "CoC7.Luck": "Suerte", + "CoC7.Movement": "Movimiento", + "CoC7.Mov": "Mov", + "CoC7.BonusDamage": "Bonif. Daño", + "CoC7.DB": "BD", + "CoC7.Build": "Corpulencia", + "CoC7.Skills": "Habilidades", + "CoC7.Skill": "Habilidad", + "CoC7.Combat": "Combate", + "CoC7.Possessions": "Posesiones", + "CoC7.Background": "Trasfondo", + "CoC7.Notes": "Notas", + "CoC7.DailySanIconOver": "Reiniciar", + "CoC7.Prone": "Caído", + "CoC7.Unconsious": "Inconsciente", + "CoC7.CriticalWounds": "Herida grave", + "CoC7.Dying": "Moribundo", + "CoC7.DyingCheck": "Tirada de CON para evitar la muerte", + "CoC7.Dead": "Muerto", + "CoC7.Resist": "Resistido", + "CoC7.UnderlyingInsanity": "Locura subyacente", + "CoC7.TemporaryInsanity": "Locura temporal", + "CoC7.IndefiniteInsanity": "Locura indefinida", + "CoC7.NotInsane": "Ninguna", + "CoC7.UnlockActor": "Desbloquear Actor", + "CoC7.LockActor": "Bloquear Actor", + "CoC7.NpcRollCharacteristics": "Tirar para características aleatorias", + "CoC7.NpcAvarageCharacteristics": "Características medias", + "CoC7.NpcCharacteristicsFormula": "Fórmula", + "CoC7.NpcCharacteristicsValues": "Valores", + "CoC7.language": "Idioma", + "CoC7.Author": "Autor", + "CoC7.Date": "Fecha", + "CoC7.Spells": "Hechizos", + "CoC7.Spell": "Hechizo", + "CoC7.Spells&Notes": "Hechizos y Notas", + "CoC7.Weapons": "Armas", + "CoC7.Effects": "Efectos", + "CoC7.Cost": "Coste", + "CoC7.Source": "Fuente", + "CoC7.SpellDetails": "Detalles del hechizo", + "CoC7.Details": "Detalles", + "CoC7.Other": "Otros", + "CoC7.rounds": "asalto(s)", + "CoC7.hours": "hora(s)", + "CoC7.weeks": "semana(s)", + "CoC7.remove": "Quitar", + "CoC7.Any": "Cualquiera", + "CoC7.All": "Todos", + "CoC7.Success": "Éxito", + "CoC7.CustomLabel": "Etiqueta personalizada", + "CoC7.SpecificLocations": "Localizaciones específicas", + "CoC7.ArmourPlating": "Blindaje", + "CoC7.Location": "Localizacion", + "CoC7.Properties": "Propiedades", + "CoC7.Attributes": "Atributos", + "CoC7.Attribute": "Atributo", + "CoC7.Collapse": "Encoger", + "CoC7.Expand": "Expandir", + "CoC7.Blind": "Oculta", + "CoC7.Label": "Etiqueta", + "CoC7.Icon": "Icono", + "CoC7.Check": "Prueba", + "CoC7.ItemWeapon": "Objeto (arma)", + "CoC7.AttacksPerRound": "Ataques por asalto", + + "CoC7.Cast": "Lanzamiento", + "CoC7.SanityCost": "Coste COR", + "CoC7.PowerCost": "Coste POD", + "CoC7.HitPointsCost": "Coste PVs", + "CoC7.MagicPointsCost": "Coste PMs", + "CoC7.OtherCosts": "Otro coste", + "CoC7.CastingSpell": "Lanzando {spell}.", + "CoC7.NotEnoughMagicPoints": "El hechizo {spell} cuesta {originalMagicPoints} PMs, pero solo dispone de {actorMagicPoints}. ¿Desea tomar los restantes {convertedHitPoints} de sus PVs? Se le causará un daño de {convertedHitPoints} PVs si continúa", + + "CoC7.CopyToClipboard": "Copiar al portapapeles", + "CoC7.WhisperToSelection": "Susurrar a iconos seleccionados", + "CoC7.WhisperTo": "Susurrar a", + "CoC7.SendToChat": "Enviar al chat", + + "CoC7.RegularSuccess": "Éxito normal", + "CoC7.HardSuccess": "Éxito difícil", + "CoC7.ExtremeSuccess": "Éxito extremo", + "CoC7.CriticalSuccess": "Éxito crítico", + "CoC7.Fumble": "Pifia", + "CoC7.Failure": "Fallo", + "CoC7.Malfunction": "{itemName} sufre una avería", + + "CoC7.Dice": "Dados", + "CoC7.DiceModifierBonus": "bonificación", + "CoC7.DiceModifierPenalty": "penalización", + "CoC7.Modifiers": "Modificadores", + "CoC7.BonusDice": "Dados de bonificación", + "CoC7.UnitsDie": "1 dado de unidades", + "CoC7.TensDie": "dado de decenas", + "CoC7.TensDice": "dado(s) de decenas", + "CoC7.SuccessRequired": "se requiere un éxito {successRequired}", + "CoC7.Roll": "Tirar dados", + "CoC7.Pushing": "Forzando... ", + "CoC7.PushingSkill": ": ¡forzando tirada!", + "CoC7.PushSkill": "Forzar tirada", + "CoC7.PushedRoll": "(tirada forzada)", + "CoC7.SpendLuck": "Gastar {luckNeededValue} puntos de Suerte para superar la tirada", + "CoC7.LuckSpent": "{luckAmount} puntos de Suerte gastados para superar la tirada", + "CoC7.LuckSpentAlt": "Suerte gastada", + "CoC7.LuckError": "{actorName} no tiene suficiente Suerte para superar la tirada", + "CoC7.check.AutoSuccess": "Éxito Autom.", + "CoC7.check.AutoFailure": "Fallo Autom.", + "CoC7.RevealCheck": "Mostrar tirada", + "CoC7.RevealSanLoss": "Mostar pérdida de COR", + "CoC7.check.ForcePass": "Forzar éxito", + "CoC7.check.ForceFail": "Forzar fallo", + "CoC7.check.FlagForDevelopment": "Premiar experiencia", + "CoC7.IncreaseSuccessLevel": "Incrementar nivel de éxito", + "CoC7.check.DecreaseSuccessLevel": "Disminuir nivel de éxito", + "CoC7.RollSecretDice": "El Guardián ha hecho una tirada privada", + "CoC7.KeeperSentDecoy": "Se ha enviado a los jugadores una tirada señuelo", + "CoC7.FakeRoll": "Mandar a los jugadores una tirada señuelo", + + "CoC7.ConstitutionCheck": "Tirada de Constitución", + + "CoC7.SanDataSelectionWindow": "Seleccionar pérdidas de COR", + "CoC7.BonusSelectionWindow": "Seleccionar dificultad y bonificación", + "CoC7.BonusSelectionWindowNamed": "Seleccione modificador para la tirada de {name}", + "CoC7.SkillDetailsWindow": "Ventana de detalles de la habilidad", + "CoC7.RegularDifficulty": "normal", + "CoC7.HardDifficulty": "difícil", + "CoC7.ExtremeDifficulty": "extrema", + "CoC7.CriticalDifficulty": "crítica", + "CoC7.UnknownDifficulty": "desconocida", + "CoC7.RollDifficulty": "Dificultad de la tirada", + "CoC7.RollThreshold": "Umbral de éxito", + "CoC7.FlatDiceModifier": "Modificador a la tirada", + "CoC7.FlatModifier": "Modificador al umbral de éxito", + "CoC7.RollDifficultyUnknown": "Desconocida", + "CoC7.RollDifficultyRegular": "Normal", + "CoC7.RollDifficultyHard": "Difícil", + "CoC7.RollDifficultyExtreme": "Extrema", + "CoC7.RollDifficultyCritical": "Crítica", + "CoC7.RollResult.LuckSpendText": "{luckAmount} puntos de Suerte gastados, {successLevel} superado", + "CoC7.RollDice": "¡Tirar dados!", + "CoC7.CreateLink": "Crear enlace a tirada", + "CoC7.SuccesLevelHint": "{value} nivel(es) de éxito", + "CoC7.FailureLevelHint": "Fallo por {value} nivel(es)", + "CoC7.CombinedRollCard": "Tarjeta de tiradas combinadas", + "CoC7.OpposedRollCard": "Tarjeta de tiradas enfrentadas", + "CoC7.CombinedAnyHint": "Solo es necesario que una tirada tenga éxito", + "CoC7.CombinedAllHint": "Todas las tiradas tienen que tener éxito", + "CoC7.CloseCard": "Finalizar tarjeta", + + "CoC7.CheckResult": "Tirada de {name} ({value}%), dificultad {difficulty}", + "CoC7.ItemCheckResult": "{item} - tirada de {skill} ({value}%), dificultad {difficulty}", + "CoC7.CheckRawValue": "({rawvalue}%), dificultad {difficulty}", + + "CoC7.ArmorAbsorbsDamage": "La armadura absorbe el daño", + "CoC7.Critical": "Crítico", + "CoC7.Impale": "Empala", + "CoC7.CriticalTitle": "El impacto ha sido crítico", + "CoC7.ImpaleTitle": "El arma puede empalar", + "CoC7.Target": "Objetivo", + "CoC7.TargetOutOfRange": "Objetivo fuera de alcance", + "CoC7.NoTargetToDamage": "Sin objetivo al que aplicar el daño", + "CoC7.ShotIsImpossible": "Disparo imposible", + "CoC7.OutOfAmmo": "Sin munición", + "CoC7.OutOfShots": "No es posible realizar más disparos", + + "CoC7.BonusDamageRoll": "Tirada de Bonificación de Daño", + "CoC7.Type": "Tipo", + "CoC7.FightBack": "Contraatacar", + "CoC7.Dodge": "Esquivar", + "CoC7.Maneuver": "Maniobra", + "CoC7.NoResponse": "No reaccionar", + "CoC7.OutNumbered": "Superado", + "CoC7.combatCard.surprised": "Sorprendido", + "CoC7.combatCard.autoSuccess": "Éxito Automático", + "CoC7.Advantage": "Ventaja", + "CoC7.Disadvantage": "Desventaja", + "CoC7.TitleAdvantage": "Añadir 1 dado de bonificación (el objetivo está boca abajo, inmovilizado...)", + "CoC7.TitleDisadvantage": "Añadir 1 dado de penalización (por estar boca abajo, inmovilizado...)", + "CoC7.TitleOutNumbered": "Añadir 1 dado de bonificación por objetivo en inferioridad numérica", + "CoC7.TitleSurprised": "Añadir 1 dado de bonificación por objetivo sorprendido", + "CoC7.TitleAutoSuccess": "El ataque impacta automáticamente", + "CoC7.WinnerRollDamage": "{name} ha ganado. Tirar daño", + "CoC7.InitiatorMissed": "{name} falló.", + "CoC7.NoWinner": "Ambas partes han fallado", + "CoC7.DodgeSuccess": "{name} ha esquivado!", + "CoC7.ManeuverSuccess": "La maniobra {name} ha tenido éxito", + "CoC7.AttackSuccess": "{name} landed a blow.", + "CoC7.InflictPain": "Aplicar daño", + "CoC7.AdvantageAttacker": "Ventaja: Atacante", + "CoC7.AdvantageDefender": "Ventaja: Defensor", + "CoC7.Tie": "Empate", + "CoC7.DamageInflicted": "Daño causado", + "CoC7.TotalDamage": "Daño total", + + "CoC7.combatCard.dive4cover": "Ponerse a Cubierto", + + "CoC7.rangeCombatCard.SingleShot": "Disparo único", + "CoC7.rangeCombatCard.MultipleShots": "Disparos múltiples", + "CoC7.AutomaticFire": "Fuego automático", + "CoC7.rangeCombatCard.Burst": "Ráfaga", + "CoC7.rangeCombatCard.FullAuto": "Fuego automático", + "CoC7.rangeCombatCard.BaseRange": "Alcance básico", + "CoC7.rangeCombatCard.LongRange": "Largo alcance", + "CoC7.rangeCombatCard.ExtremeRange": "Muy largo alcance", + "CoC7.rangeCombatCard.OutOfRange": "Fuera del alcance", + "CoC7.rangeCombatCard.Cover": "A cubierto", + "CoC7.rangeCombatCard.PointBlankRange": "A bocajarro", + "CoC7.rangeCombatCard.NormalTarget": "Objetivo normal", + "CoC7.rangeCombatCard.BigTarget": "Objetivo grande", + "CoC7.combatCard.SmallTarget": "Objetivo pequeño", + "CoC7.rangeCombatCard.FastMovingTarget": "Objetivo rápido", + "CoC7.rangeCombatCard.InMelee": "En combate cuerpo a cuerpo", + "CoC7.rangeCombatCard.aiming": "Apuntando", + "CoC7.rangeCombatDamage": "{name} recibe {total} puntos de daño", + "CoC7.rangeCombatDamageArmor": "{name} recibe {total} punto/s de daño. ({armor} absorbido/s)", + "CoC7.RollDamage": "Tirada de daño", + "CoC7.BulletsFired": "Balas disparadas", + "CoC7.Shots": "Disparos", + "CoC7.Shoot": "Disparo", + "CoC7.ShotBullets": "Disparar {bullets} tiros al objetivo {actor}", + "CoC7.ShotVoley": "Disparando una ráfaga de {bullets} tiros al objetivo {actor}", + "CoC7.rangeCombatCard.AimingTitle": "Añade 1 dado de bonificación al primer disparo", + "CoC7.rangeCombatCard.CoverTitle": "1 dado de penalización. El objetivo tiene cobertura o se ha puesto a cubierto", + "CoC7.rangeCombatCard.PointBlankRangeTitle": "1 dado de bonificación. Objetivo a distancia de bocajarro", + "CoC7.rangeCombatCard.BigTargetTitle": "1 dado de bonificación por objetivo grande (corpulencia > 4)", + "CoC7.rangeCombatCard.SmallTargetTitle": "1 dado de penalización por objetivo pequeño", + "CoC7.rangeCombatCard.NormalTargetTitle": "Objetivo de tamaño normal, sin bonificación/penalización", + "CoC7.rangeCombatCard.InMeleeTitle": "1 dado de penalización. Objetivo trabado en combate cuerpo a cuerpo", + "CoC7.rangeCombatCard.FastMovingTargetTitle": "1 dado de penalización. Objetivo veloz (MOV 8+) moviéndose rápido", + + "CoC7.meleeCombatDamageTakes": "recibe", + "CoC7.meleeCombatDamageFrom": "de", + "CoC7.meleeCombatDamageDeals": "inflige", + "CoC7.meleeCombatDamageWith": "con", + + "CoC7.DropZone": "DropZone", + + "CoC7.Value": "Valor", + "CoC7.SkillValue": "Valor Habilidad", + "CoC7.SkillBase": "Base", + "CoC7.BaseSkillValue": "Valor base de la habilidad", + "CoC7.SkillExperience": "Experiencia", + "CoC7.SkillArchetype": "Arquetipo", + "CoC7.SkillOccupation": "Ocupacion", + "CoC7.SkillPersonal": "Particulares", + + "CoC7.SkillTotalExperience": "Puntos de experiencia", + "CoC7.SkillTotalArchetype": "Puntos de arquetipo", + "CoC7.SkillTotalOccupation": "Puntos de ocupación", + "CoC7.SkillTotalPersonal": "Intereses particulares", + "CoC7.CharacteristicsPoints": "Puntos de características", + "CoC7.TotalPoints": "Puntos de ocupación totales", + + "CoC7.ItemQuantity": "Cantidad", + "CoC7.ItemWeight": "Peso", + "CoC7.ItemDetails": "Detalles", + "CoC7.Description": "Descripción", + "CoC7.Reload": "Clic Izqdo/Decho : añade/quita 1 bala\nMayús + clic Izqdo/Decho : recargar/vaciar", + "CoC7.WeaponRange": "Alcance", + "CoC7.WeaponDamage": "Daño", + "CoC7.Weapon.BlastRadius": "Radio de explosión", + "CoC7.WeaponMalfunction": "Avería", + "CoC7.WeaponUsesPerRound": "Asaltos/uso", + "CoC7.WeaponUsesPerRoundHint": "Ataques por asalto (1/3 indica: 1 ataque cada 3 asaltos)", + "CoC7.WeaponSheet.RoundsPerUse.Info": "Número de asaltos de preparación necesarios para disparar el arma de nuevo", + "CoC7.WeaponMax": "Disparos/asalto", + "CoC7.BurstSize": "Balas/ráfaga", + "CoC7.BurstSizeHint": "Numero de balas por cada ráfaga", + "CoC7.WeaponBulletsInMag": "Cargador", + "CoC7.WeaponSpecial": "Especial", + "CoC7.ItemPrice": "Precio", + "CoC7.Armor": "Armadura", + + "CoC7.EraNvct": "Invictus", + "CoC7.EraDrka": "Edad Oscura", + "CoC7.EraDdts": "El Viejo Oeste", + "CoC7.EraGlit": "Luz de Gas", + "CoC7.Era1920": "Años 20", + "CoC7.EraPulp": "Pulp Cthulhu", + "CoC7.EraMdrn": "Época Actual", + "CoC7.Eras": "Épocas Cthulhu", + "CoC7.EraAvailability": "Disponibilidad", + + "CoC7.SkillNoAdjustments": "Sin ajustes", + "CoC7.SkillNoXpGain": "Sin ganancia de EXP", + "CoC7.SkillSpecial": "Especialización", + "CoC7.SkillRarity": "Infrecuente", + "CoC7.SkillPush": "Forzada", + "CoC7.SkillCombat": "Combate", + "CoC7.SkillFighting": "Combatir", + "CoC7.SkillFirearm": "Armas de fuego", + + "CoC7.WeaponRngd": "Alcance", + "CoC7.WeaponProperyManeuver": "Maniobra", + "CoC7.WeaponTouch": "Toque", + "CoC7.WeaponImpl": "Empala", + "CoC7.WeaponRare": "Rara", + "CoC7.WeaponAhdb": "+BD/2", + "CoC7.WeaponAddb": "+BD", + "CoC7.WeaponSlnt": "Silenciosa", + "CoC7.WeaponXplv": "Explosivos", + "CoC7.WeaponBrst": "Ráfaga", + "CoC7.WeaponAuto": "Fuego automático", + "CoC7.WeaponSpcl": "Especial", + "CoC7.WeaponMont": "Montada", + "CoC7.WeaponDbrl": "Dos cañones", + "CoC7.WeaponBlst": "Explosiva", + "CoC7.WeaponStun": "Aturdimiento", + "CoC7.Weapon.Property.Melee": "Cuerpo a cuerpo", + "CoC7.Weapon.Property.Thrown": "Arrojadiza", + "CoC7.Weapon.Property.Burn": "Fuego", + "CoC7.Weapon.Property.Shotgun": "Escopeta", + + "CoC7.ErrorItem": "No se pudo localizar el ítem", + "CoC7.ErrorActor": "No se pudo localizar al actor", + "CoC7.ErrorInvalidFormula": "{value} no es una fórmula válida", + "CoC7.ErrorInvalid": "inválido", + "CoC7.Validate": "Validar", + "CoC7.Apply": "Aplicar", + + "CoC7.NewBioSectionName": "Nueva Sección", + + "CoC7.DodgeSkillName": "Esquivar", + "CoC7.CthulhuMythosName": "Mitos de Cthulhu", + "CoC7.CreditRatingSkillName": "Crédito", + "CoC7.DriveAutoSkillName": "Conducir automóvil", + "CoC7.FightingSpecializationName": "Combatir", + "CoC7.FirearmSpecializationName": "Armas de fuego", + "CoC7.DriveSpecializationName": "Conducir", + "CoC7.PilotSpecializationName": "Pilotar", + "CoC7.AnySpecName": "Genérica", + "CoC7.BoutOfMadnessName": "Episodio de Locura", + "CoC7.InsanityName": "Locura", + + "CoC7.NewSkillName": "nueva habilidad", + "CoC7.AddSkill": "Añadir habilidad", + "CoC7.DevelopemmentPhase": "Fase de Desarrollo", + "CoC7.RecoverLuckPoints": "Recuperar puntos de suerte", + "CoC7.SkillCantGainXp": "Esta habilidad no puede ganar XP automáticamente", + "CoC7.SkillUnflagForDevelopement": "Desmarcar para desarrollo", + "CoC7.SkillFlagForDevelopement": "Marcar para desarrollo", + "CoC7.RollAll4Dev": "Tirando desarrollo de todas las habilidades", + "CoC7.RollLuck4Dev": "Tirando desarrollo para suerte", + "CoC7.DevRollTitle": "Tirando desarrollo de {item}: {die}/{score}%", + "CoC7.DevSuccessDetails": "{item} se ha aumentado un {augment}%", + "CoC7.SanGained": "Ha recuperado 2d6 ({results} = {sanGained}) de cordura tras dominar la habilidad {skill} con un {skillValue}%", + "CoC7.DevFailureDetails": "{item} NO se ha aumentado", + "CoC7.DevSuccess": "({die}/{score}%), {item} se ha aumentado un {augment}%", + "CoC7.DevFailure": "({die}/{score}%), {item} NO se ha aumentado", + "CoC7.LuckIncreased": "{augment} puntos de suerte recuperados ({die}/{score})", + "CoC7.LuckNotIncreased": "No se ha recuperado suerte ({die}/{score})", + "CoC7.DevelopAttribWarn": "No tiene acceso a algunos atributos en el modo desarrollo/creación", + "CoC7.SkillDetail": "Detalles", + "CoC7.EditSkill": "Editar habilidad", + "CoC7.DeleteSkill": "Eliminar habilidad", + "CoC7.RangeSkills": "Habilidades de combate a distancia", + "CoC7.MeleeSkills": "Habilidades de combate cuerpo a cuerpo", + "CoC7.NewItemName": "nuevo objeto", + "CoC7.AddItem": "Añadir objeto", + "CoC7.EditItem": "Editar objeto", + "CoC7.DeleteItem": "Eliminar objeto", + "CoC7.TradeItem": "Cambiar/almacenar objeto", + "CoC7.SortBySkillName": "Ordenar por nombre de habilidad", + "CoC7.SortBySkillValue": "Ordenar por porcentaje de habilidad", + "CoC7.UncommonSkillsShow": "Mostrar habilidades infrecuentes", + "CoC7.UncommonSkillsHide": "Ocultar habilidades infrecuentes", + + "CoC7.NewBookName": "nuevo tomo", + "CoC7.AddBook": "Añadir tomo", + "CoC7.NewSpellName": "nuevo hechizo", + "CoC7.AddSpell": "Añadir hechizo", + + "CoC7.AddWeapon": "Añadir arma", + "CoC7.NewWeaponName": "nueva arma", + "CoC7.EditWeapon": "Editar arma", + "CoC7.DeleteWeapon": "Eliminar arma", + "CoC7.MeleeWeapons": "Armas cuerpo a cuerpo", + "CoC7.RangeWeapons": "Armas a distancia", + "CoC7.WeaponName": "Nombre", + "CoC7.WeaponSkill": "Habilidad", + "CoC7.WeaponSkillAlt": "Hab. alternativa", + "CoC7.Inventory": "Inventario", + "CoC7.InventoryIsCurrentlyEmpty": "Inventario actualmente vacío", + "CoC7.CharacterDevelopment": "Desarrollo", + "CoC7.OccupationSkill": "Habilidad de ocupación", + "CoC7.ArchetypeSkill": "Habilidad de arquetipo", + "CoC7.UseFormula": "Usar tirada de dados", + "CoC7.EnterFormula": "Introducir fórmula", + "CoC7.SanRollHint": "Tirar Cordura a todos los objetivos seleccionados", + "CoC7.SANCheckTitle": "Pérdida de COR : {name} ({sanMin}/{sanMax})", + "CoC7.NoSkill": "Sin habilidad", + "CoC7.AddWeapontHint": "

                          {actor} no dispone de {weapon}.
                          ¿Desea crearlo ?

                          ", + + "CoC7.LinkCheck": "Tirada de {name}", + "CoC7.LinkCheckDiff": "Tirada [{difficulty}] de {name}", + "CoC7.LinkCheckModif": "Tirada de {name} ({modifier}): ", + "CoC7.LinkCheckDiffModif": "Tirada [{difficulty}] de {name} ({modifier})", + "CoC7.LinkSanLoss": "Tirada de COR, ({sanMin}/{sanMax})", + "CoC7.LinkSanLossDiff": "Tirada [{difficulty}] de COR, ({sanMin}/{sanMax})", + "CoC7.LinkSanLossModif": "Tirada de COR ({modifier}), ({sanMin}/{sanMax})", + "CoC7.LinkSanLossDiffModif": "Tirada [{difficulty}] de COR ({modifier}), ({sanMin}/{sanMax})", + "CoC7.LinkItem": " de {name}", + "CoC7.LinkItemDiff": " [{difficulty}] de {name}", + "CoC7.LinkItemModif": " de {name} ({modifier})", + "CoC7.LinkItemDiffModif": " [{difficulty}] de {name} ({modifier})", + + "CoC7.ManualCreditValues": "Crédito manual", + "CoC7.MonetarySymbol": "Símbolo :", + "CoC7.MonetaryFactor": "Factor :", + "CoC7.AutoCreditValues": "Cambiar a cálculo automático/manual", + "CoC7.MonetarySpendingLevel": "Nivel de gasto :", + "CoC7.MonetaryCash": "Dinero :", + "CoC7.MonetarySpent": "Gastado :", + "CoC7.MonetaryAssets": "Propiedades :", + "CoC7.MonetaryAssetsDetails": "Detalles de las propiedades", + + "CoC7.PossessionsNotes": "Notas :", + "CoC7.PossessionsNotesHolder": "Notas", + + "CoC7.BackgroundNewSection": "Añadir nueva sección", + "CoC7.BackgroundSectionNameHolder": "Título de la sección", + "CoC7.BackgroundDeleteSection": "Eliminar sección", + "CoC7.BackgroundSectionMoveUp": "Subir", + "CoC7.BackgroundSectionMoveDown": "Bajar", + + "CoC7.creatureFightingSkill": "Combatir", + + "CoC7.InvoluntaryAction": "Acción involuntaria", + "CoC7.InvoluntaryActionPerfomed": "Acción involuntaria realizada", + "CoC7.SanityCheck": "Tirada de Cordura", + "CoC7.IntCheck": "Tirada de INT", + "CoC7.NoSanLoss": "Sin pérdida de COR", + "CoC7.SANLoss": "Pérdida de COR", + "CoC7.SanityCheckPerformed": "Has experimentado un evento traumático", + "CoC7.InvoluntaryActionPerformed": "Pierdes el autocontrol durante unos instantes", + "CoC7.SanityLost": "Puntos de COR perdidos", + "CoC7.MemoryRepressed": "Tu mente ha logrado reprimir tus recuerdos y los ha enterrado en el subconsciente", + "CoC7.RememberEverything": "Eres plenamente consciente de lo sucedido", + "CoC7.BoutOfMadnesslasted": "Tu episodio de locula dura", + "CoC7.EnteringBoutOfMadness": "Sufres un episodio de locura", + "CoC7.GrowingAccustomedToAwfulness": "Comienzas a acostumbrarte al horror (se ha limitado la pérdida de COR)", + "CoC7.ImmuneToAwfulness": "Tu mente es inmune a esta atrocidad (no hay perdida de COR)", + "CoC7.InvestigatorPhobiaGained": "El investigador gana una fobia", + "CoC7.PhobiaGained": "Ganas una fobia", + "CoC7.InvestigatorManiaGained": "El investigador gana una manía", + "CoC7.ManiaGained": "Ganas una manía", + "CoC7.AlreadyUnderlyingInsanity": "El investigador se encuentra en estado de locura subyacente", + "CoC7.IndefinitelyInsane": "Has adquirido una locura indefinida", + "CoC7.TemporaryInsane": "Has adquirido una locura temporal", + "CoC7.GoodForAsylum": "Estás listo para que te manden al manicomio", + "CoC7.BoutOfMadness": "Episodio de locura", + "CoC7.BoutRealTime": "Episodio de locura: en tiempo real", + "CoC7.BoutSummary": "Episodio de locura: resumidos", + "CoC7.EndBoutOfMadness": "Fin del episodio de locura", + "CoC7.InsanityType": "Tipe de locura", + "CoC7.Phobia": "Fobia", + "CoC7.Mania": "Manía", + "CoC7.MaxSanloss": "Pérdida máx", + "CoC7.MinSanloss": "Pérdida mín", + "CoC7.AlreadyLost": "Perdidos actualmente", + "CoC7.CreatureMaxLoss": "Pérdida máx por esta criatura", + "CoC7.MaxLossToCreature": "Pérdida restante por esta criatura", + "CoC7.ResetCreatureSan": "Restablecer historial con esta criatura", + "CoC7.ResetSpecieSan": "Restablecer historial con esta especie", + "CoC7.KeepData": "Mantener historial con esta criatura", + "CoC7.BoutActive": "(Episodio) Inmune a pérdida de COR", + "CoC7.AlreadyInABout": "Estás sufriendo un episodio de locura y eres inmune a nuevas pérdidas de COR", + "CoC7.PlayerPermanentlyInsane": "El jugador sufre locura permanente", + "CoC7.MythosFirstEncounter": "Ganancia en Mitos (+5%, al ser la primera vez)", + "CoC7.MythosAlreadyEncountered": "Ganancia en Mitos (+1%)", + "CoC7.DisregardMythosGain": "Sin ganancia en Mitos", + "CoC7.MythosGain": "Ganancia en Mitos", + "CoC7.YouGainedCthulhuMythos": "Tu mente se estremece ante tal manifestación sobrenatural (+{value}% Mitos de Cthulhu)", + "CoC7.CardResolved": "Tarjeta finalizada", + + "CoC7.SpellCastingTime": "Tiempo de ejecución", + "CoC7.SpellCastingCost": "Coste", + "CoC7.CallSpell": "Llamada", + "CoC7.DismissSpell": "Expulsión", + "CoC7.ContactSpell": "Contacto", + "CoC7.SummonSpell": "Convocación", + "CoC7.BindSpell": "Atadura", + "CoC7.EnchantmentSpell": "Encantamiento", + "CoC7.GateSpell": "Portal", + "CoC7.CombatSpell": "Combate", + "CoC7.SpellType": "Tipo de Hechizo", + + "CoC7.BookHasNothingMoreToTeach": "No tiene nada que aprender de {book}. La habilidad de Mitos de Cthulhu de {actor} es mayor que la puntuación de Mitos", + "CoC7.BookType": "Tipo de Libro", + "CoC7.Content": "Contenido", + "CoC7.CthulhuMythosFinal": "Mithos final", + "CoC7.CthulhuMythosInitial": "Mithos inicial", + "CoC7.Development": "Desarrollo", + "CoC7.DifficultyLevel": "Nivel de dificultad", + "CoC7.DragSpell": "Suelte hechizos aquí para incorporarlos al libro...", + "CoC7.FullStudies": "Estudio completo", + "CoC7.Gains": "Ganancia", + "CoC7.GainsForReading": "Ganancia de habilidad por leer {book}.", + "CoC7.InitialReading": "Lectura inicial", + "CoC7.InitialReadingNeeded": "{actor} necesita hacer una lectura inicial de {book} para ser capaz de avanzar por el proceso de estudio completo", + "CoC7.LearnSpellAttempt": "Intento de aprendizaje del hechizo {spell}, de {book}.", + "CoC7.MarkedForDevelopment": "Marcado para desarrollo", + "CoC7.Mythos": "Mitos", + "CoC7.MythosRating": "Puntuación de Mitos", + "CoC7.NotOwned": "Este libro requiere permisos de propietario de un actor para realizar esta acción", + "CoC7.Occult": "Ciencias ocultas", + "CoC7.Points": "punto(s)", + "CoC7.Progress": "Progreso", + "CoC7.RedoFullStudy": "Volver a realizar estudio completo", + "CoC7.ReadAttempt": "Intento de leer {book} ({language}), dificultad {difficulty}", + "CoC7.ReadingMythosTome": "Leyendo {book}", + "CoC7.Specific": "Específico", + "CoC7.SpellsLearned": "Hechizos aprendidos", + "CoC7.StudyTime": "Tiempo de estudio", + "CoC7.UnknownLanguage": "{actor} no conoce el idioma en el que está escrito el libro", + "CoC7.Unreadable": "No legible", + + "CoC7.Crew": "Tripulación", + "CoC7.Origin": "Origen", + "CoC7.ArmedVehicle": "Vehículo blindado", + + "CoC7.PulpTalents": "Talentos Pulp", + "CoC7.TalentType": "Tipo de talento", + "CoC7.PhysicalTalent": "Físicos", + "CoC7.MentalTalent": "Mentales", + "CoC7.CombatTalent": "De combate", + "CoC7.MiscellaneousTalent": "Varios", + "CoC7.BasicTalent": "Básicos", + "CoC7.InsaneTalent": "De locura", + "CoC7.OtherTalent": "Otros", + + "CoC7.Items": "Objetos", + "CoC7.Vehicle": "Vehículo", + "CoC7.Books": "Tomos", + "CoC7.Status": "Estados", + + "CoC7.Classic": "Clásica", + "CoC7.Lovecraftian": "Lovecraftiana", + "CoC7.Pulp": "Pulp", + "CoC7.Modern": "Contemporánea", + "CoC7.Related": "Ocupación Relacionada", + "CoC7.OccupationType": "Tipo de Ocupación", + "CoC7.OccupationPoints": "Puntos de Ocupación", + "CoC7.Selected": "Seleccionada", + "CoC7.Multiplier": "Multiplicador", + "CoC7.Optional": "A elegir", + "CoC7.Or": "o", + "CoC7.Minimum": "Mínimo", + "CoC7.Maximum": "Máximo", + "CoC7.CommonSkills": "Habilidades comunes", + "CoC7.OptionSkills": "Grupos de habilidades a elegir", + "CoC7.ChoiceNumber": "Opciones", + "CoC7.Choose": "Número a escoger entre", + "CoC7.Chosen": "Escogido", + "CoC7.EmptySkillList": "Añada una habilidad soltándola aquí", + "CoC7.EmptyItemList": "Añada un objeto soltándolo aquí", + "CoC7.EmptyCharacterSkillList": "Añada una configuración, ocupación o habilidad soltándolas aquí", + "CoC7.PersonalSpeciality": "Número de especialidades personales o de la época", + "CoC7.AdditionalSkills": "Habilidades Adicionales", + "CoC7.SkillSelectionWindow": "Seleccione habilidades opcionales", + "CoC7.SelectPersonalSkills": "Seleccione {number} habilidades(s) como intereses personales", + "CoC7.ResetOccupation": "Reiniciar Ocupación", + "CoC7.ResetOccupationHint": "El Actor {name} ya tiene una ocupación. ¿Desea reiniciarla?", + "CoC7.ResetArchetype": "Reiniciar Arquetipo", + "CoC7.ResetArchetypeHint": "El Actor {name} ya tiene un arquetipo. ¿Desea reiniciarlo?", + "CoC7.CreditOutOfRange": "El Crédito debe están comprendido entre {min} y {max}", + "CoC7.BioSections": "Secciones del Trasfondo", + "CoC7.BioSectionName": "Nombre de la Sección del Trasfondo", + "CoC7.SpendPoints": "Asignar puntos de características", + "CoC7.RollCharac": "Tirar características", + "CoC7.SelectCoreCharac": "Seleccione características básicas", + "CoC7.SkillSpecSelectTitle": "Especialización de {specialization}", + "CoC7.SkillSelectBase": "Seleccione el valor base de la habilidad {name}", + "CoC7.SelectSkill": "Seleccione una habilidad existente", + "CoC7.CreateNewSkill": "Cree una habilidad nueva", + + "CoC7.Characteristics": "Características", + "CoC7.Characteristic": "Característica", + "CoC7.EnableCharacteristics": "Habilitar características", + "CoC7.UsePoints": "Usar puntos", + "CoC7.UseRolls": "Usar tiradas", + "CoC7.CoreCharacteristics": "Características Básicas", + "CoC7.BonusPoints": "Puntos Adicionales", + "CoC7.SuggestedOccupations": "Sugerencias de ocupaciones", + "CoC7.SuggestedTraits": "Rasgos Sugeridos", + + "CoC7.PutGunAway": "Bajar el arma", + "CoC7.DrawGun": "Desenfundar el arma", + + "CoC7.GmTools": "Herramientas del Guardián", + "CoC7.GmNotes": "Notas del GM", + "CoC7.DevPhase": "Fase de desarrollo", + "CoC7.DevPhaseEnabled": "Fase de desarrollo habilitada", + "CoC7.DevPhaseDisabled": "Fase de desarrollo deshabilitada", + "CoC7.CharCreationMode": "Modo de creación de personajes", + "CoC7.CharCreationEnabled": "Modo de creación de personajes habilitado", + "CoC7.CharCreationDisabled": "Modo de creación de personajes deshabilitado", + "CoC7.toggleXP": "Ganancia de PX", + "CoC7.XPGainEnabled": "Los personajes pueden ganar PX", + "CoC7.XPGainDisabled": "Los personajes no pueden ganar PX", + "CoC7.WarnNoActorAvailable": "No tiene control ni tiene seleccionado ningún actor", + "CoC7.WarnMacroIncorrectType": "Solo puede crear macros para armas y habilidades", + "CoC7.WarnNoGlobalSpec": "No puede crear macros para especializaciones sin especificar", + "CoC7.WarnMacroNoItemFound": "No se ha encontrado ningún objeto usable", + "CoC7.WarnNoControlledActor": "En estos momentos no controla a ningún actor", + "CoC7.WarnFastTargetWithWrongMOV": "Se ha seleccionado Rápido cuando el objetivo tiene un MOV inferior a 8. (MOV: {mov})", + "CoC7.WarnTooManyTarget": "Seleccionados demasiados objetivos. Solo se guardará el último objetivo seleccionado", + + "CoC7.allActors": "Todos los actores", + "CoC7.restTargets": "Descansar objetivos", + "CoC7.startRest": "Comenzando descanso", + "CoC7.dreaming": "Los investigadores esperan... soñando", + "CoC7.healthRecovered": "Un PV recuperado", + "CoC7.pulpHealthRecovered": "{number} PVs recuperados", + "CoC7.dailySanLossRestarted": "Contador de pérdida diraria de COR reiniciado", + "CoC7.magicPointsRecovered": "Puntos de magia recuperados", + "CoC7.hasCriticalWounds": "Una herída crítica impide recuperar PVs", + "CoC7.quickHealer": "Curación acelerada", + + "CoC7.ErrorNoDodgeSkill": "El actor no tiene la habilidad Esquivar", + "CoC7.ErrorNotEnoughLuck": "{actor} no tiene suficientes puntos de suerte para mejorar la tirada", + "CoC7.ErrorManeuverNotPossible": "Su oponente es demasiado fuerte como para realizar la maniobra", + "CoC7.ErrorNotFound": "¡No se ha encontrado {missing}!", + "CoC7.ErrorNotFoundForActor": "¡No se ha encontrado {missing} en el actor {actor}!", + + "CoC7.InfoLessSkillThanOptions": "Solo existen {skillCount} y {optionsCount} opciones, anadiéndose todas", + "CoC7.InfoAllSkillsAlreadySelected": "Ya se han seleccionado todas las habilidades", + + "CoC7.MessageCheckRequestedWait": "El guardián ha pedido una tirada de {check}.
                          ¡Espere a que se lo confirme antes de tirar!
                          ", + "CoC7.MessageTargetCheckRequested": "El guardián ha pedido a {name} una tirada de {check}", + "CoC7.MessageTitleSelectSingleUserForTarget": "Qué usuario podrá responder al ataque", + "CoC7.MessageSelectSingleUserForTarget": "Este icono está controlado por varios usuarios, por favor, seleccione que usuario podrá responder al ataque", + "CoC7.MessageBoutOfMadnessTableNotFound": "No se ha encontrado el resultado de la tabla de locura, por favor, compruebe que se han creado las tablas", + "CoC7.MessageBoutOfMadnessItemNotFound": "No se ha encontrado el resultado de la tabla de locura, por favor, compruebe que se han creado los estatus", + + "CoC7.DealDamage": "¿Causar {damage} puntos de daño a {target}?", + "CoC7.NoTargetSelected": "No ha seleccionado ningún objetivo para la tirada de {weapon}. ¿Desea continuar de todos modos?", + + "CoC7.Import": "Importar", + "CoC7.Proceed": "Proceder", + "CoC7.Cancel": "Cancelar", + + "CoC7.ActorImporter": "Importador de actores", + "CoC7.ActorImporterSummary": "Importa un PNJ o criatura a partir de sus estadísticas y descripción. Solo deberá copiar sus estadísticas en formato texto plano", + "CoC7.PasteTheDataBelow": "Pegue más abajo el texto sin formato", + "CoC7.TextFieldInvalidCharacters": "Caracteres inválidos en el texto, por favor, revíselo o será eliminado", + "CoC7.SelectActorType": "Seleccione tipo de actor", + "CoC7.NonPlayingCharacter": "Personaje no jugador (PNJ)", + "CoC7.Creature": "Criatura", + "CoC7.ConvertFrom6Edition": "Convertir desde 6a edición", + "CoC7.Convert": "Convertir", + "CoC7.NoConvert": "No convertir", + "CoC7.Guess": "Autodetectar", + "CoC7.English": "Inglés", + "CoC7.Spanish": "Español", + "CoC7.French": "Francés", + "CoC7.German": "Alemán", + "CoC7.Polish": "Polaco", + "CoC7.TraditionalChinese": "Chino tradicional", + "CoC7.SelectSourceLanguage": "Seleccione el idioma del texto original", + "CoC7.ImportedUnnamedCharacter": "Se ha importado personaje 'unnamed'", + "CoC7.CreatedImportedCharactersFolder": "Creada carpeta 'Personajes importados'", + "CoC7.ImportedCharactersFolder": "Personajes importados", + "CoC7.ImportSkillItemLocations": "Buscar habilidades/hechizos/armas en", + "CoC7.ImportActorItemsNone": "Ninguno", + "CoC7.ImportActorItemsItem": "Objetos", + "CoC7.ImportActorItemsItemWorldModuleSystem": "Objetos / Mundo / Módulos / Sistema", + "CoC7.ImportActorItemsWorldModuleItemSystem": "Mundo / Módulos / Objetos / Sistema", + + "CoC7.HowToTranslateTitle": "¿Cómo traducir el sistema?", + "CoC7.HowToTranslateWarning": "No instale ningún módulo que no sea de su confianza", + "CoC7.HowToTranslateInstallBabele": "Instale/actualice el módulo Babele desde el panel de administración de modulos de Foundry", + "CoC7.HowToTranslateInstallTranslation": "Instale/actualice la traducción desde el panel de administración de modulos de Foundry", + "CoC7.HowToTranslateEnableTranslation": "En el mundo de juego, bajo Configuración/Administrar módulos, active tanto Babele como la traducción", + "CoC7.HowToTranslateNoTranslation": "Puede consultar las instrucciones de cómo crear una nueva traducción de un sistema en los módulos de traducción ya creados", + + "CoC7.Migrate.Title": "Se requiere actualizar", + "CoC7.Migrate.Message": "

                          Su mundo necesita ser actualizado para funcionar con la versión {version}.

                          Por favor, haga una copia de seguridad de la carpeta del mundo antes de actualizar.

                          Si no actualiza el mundo el sistema no funcionará correctamente.

                          Se puede reiniciar el mundo una vez que se complete el proceso

                          ", + "CoC7.Migrate.WithModulesMessage": "

                          Es posible que tanto su mundo como sus módulos necesiten una actualización para ejecutar la versión {version}.

                          Por favor, haga copia de seguridad de su mundo y los módulos listados más abajo antes de comenzar la actualización.

                          Si no actualiza el mundo el sistema no funcionará correctamente.

                          Los módulos siguientes contienen actores u objetos, de modo que también se comprobarán.

                          {modules}

                          El mundo se reiniciará cuando se complete el proceso.

                          ", + "CoC7.Migrate.GMRequired": "

                          Su mundo necesita ser actualizado para funcionar con la versión {version}.

                          Por favor, espere a que su GM realice la actualización del sistema y entonces refresque (F5) la página

                          ", + "CoC7.Migrate.RestartRequired": "

                          Su mundo se reiniciará para activar los cambios

                          ", + "CoC7.Migrate.ButtonUpdate": "Actualizar", + "CoC7.Migrate.ButtonSkip": "Saltar", + "CoC7.Migrate.ButtonOkay": "Ok", + + "CoC7.Maximize": "Maximizar", + "CoC7.Summarize": "Resumen", + + "CoC7.UnableToInteractWithChatCard": "No es posible interactuar con este mensaje, si necesita hacer algún cambio pídaselo al Guardián", + "CoC7.UnableToCopyToClipboard": "No es posible copiar al portapapeles, probablemente debido al nivel de seguridad de su navegador", + "CoC7.WarningCharacterSheetV1Depreciated": "Esta disposición está obsoleta y no funcionará correctamente. Se eliminará cuando salga la versión v9 de FoundryVTT, por favor dígale a su Guardián que cambie la hoja a CoC7.CoC7CharacterSheetV2", + + "CoC7.MessageTitleSelectUserToGiveTo": "Dar objeto a otro personaje", + "CoC7.MessageSelectUserToGiveTo": "¿A qué personaje quiere darle el objeto?", + "CoC7.MessageDistanceCalculationFailure": "No es posible calcular la distancia entre los iconos, por favor, use la hoja de personaje del icono", + + "CoC7.ToolTipSkill": "
                          1. Clic izquierdo tirada con opciones
                          2. Mayús + clic izquierdo Tirada inmediata a dificultad normal
                          1. Clic derecho Tirada enfrentada con opciones
                          2. Mayús + clic derecho Tirada enfrentada inmediata
                          1. Alt/Opción + clic derecho Tirada combinada con opciones
                          ", + "CoC7.ToolTipKeeperSkill": "
                          1. CTRL + clic izquierdo Crear enlace a tirada
                          2. {other}
                          ", + "CoC7.ToolTipKeeperStandbySkill": "
                        3. Clic izquierdo Petición de tirada a {name}
                        4. ", + "CoC7.ToolTipDB": "
                          1. Clic izquierdo Tirada inmediata a dificultad normal
                          ", + "CoC7.ToolTipKeeperSanity": "
                        5. CTRL + Alt/Opción Crea enlace a tirada de COR
                        6. ", + "CoC7.ToolTipAutoToggle": "
                          1. Left click Conmuta entre cálculo automático/entrada manual
                          2. ", + "CoC7.ToolTipSkillFlagToggle": "
                            1. Doble clic Marcar/desmarcar
                            2. ", + "CoC7.ToolTipSkillFlagged": "Marcada para desarrollo", + "CoC7.ToolTipSkillUnflagged": "No marcada para desarrollo", + + "SETTINGS.TitleRules": "Reglas", + "SETTINGS.TitleInitiative": "Ajustes de iniciativa", + "SETTINGS.TitleRoll": "Ajustes de tiradas", + "SETTINGS.TitleChatCards": "Ajustes de tarjetas del chat", + "SETTINGS.TitleScene": "Ajustes de escena", + "SETTINGS.TitleSheet": "Ajustes de la hoja", + "SETTINGS.TitleGameArtwork": "Ajustes de arte del juego", + "SETTINGS.TitleWeapon": "Ajustes de armas", + "SETTINGS.TitleDiceSoNice": "Ajustes Dice So Nice", + "SETTINGS.TitleDeveloperDebug": "Ajustes de desarrollo y depuración", + "SETTINGS.TitleRollTable": "Ajustes de tablas dinámicas", + "SETTINGS.DebugMode": "Modo de depuración", + "SETTINGS.DebugModeHint": "!!REQUIERE REINICIAR!!", + "SETTINGS.DefaultDifficulty": "Dificultad por defecto", + "SETTINGS.DefaultDifficultyHint": "Puedes indicar la dificultad por defecto de las tiradas. Desconocida lanzará tiradas sin que el jugador conozca la dificultad", + "SETTINGS.CheckDifficultyRegular": "Dificultad por defecto", + "SETTINGS.CheckDifficultyUnknown": "Dificultad desconocida", + "SETTINGS.showIconsOnly": "En la hoja resumen, mostrar solo los iconos en la lista de habilidades", + "SETTINGS.UseToken": "Usar imagen del icono", + "SETTINGS.UseTokenHint": "Usar la imagen del icono en lugar de los retratos en las cartas del chat", + "SETTINGS.DisplayActorOnCard": "Mostrar actor en carta", + "SETTINGS.DisplayActorOnCardHint": "Mostrar la imagen/icono del actor en las cartas de chat de combate", + "SETTINGS.InitiativeRule": "Mecánica de cálculo de iniciativa", + "SETTINGS.InitiativeRuleHint": "Puedes elegir entre la iniciativa básica (valores de DES) o la regla opcional (tirada de DES)", + "SETTINGS.InitiativeRuleBasic": "Básica", + "SETTINGS.InitiativeRuleOptional": "Opcional", + "SETTINGS.displayInitDices": "Mostrar dado de iniciativa", + "SETTINGS.displayInitDicesHint": "Mostrar los dados cuando se tire iniciativa (solo cuando se usa la regla opcional)", + "SETTINGS.displayInitAsText": "Mostrar iniciativa como texto", + "SETTINGS.displayInitAsTextHint": "Mostrar la iniciativa como texto en lugar de un número (solo en las reglas opcionales)", + "SETTINGS.PulpRules": "Reglas Pulp", + "SETTINGS.PulpRulesHint": "Permite usar las reglas de Pulp Cthulhu (Arquetipos, Talentos, PV), ¡en fase de desarrollo!", + "SETTINGS.developmentRollForLuck": "Recuperación de puntos de suerte", + "SETTINGS.developmentRollForLuckHint": "Cada jugador puede hacer una tirada para recuperar suerte en la fase de desarrollo", + "SETTINGS.displayPlayerNameOnSheet": "Mostrar nombre del jugador en la hoja de personaje", + "SETTINGS.DisregardAmmo": "Ignorar la munición", + "SETTINGS.DisregardAmmoHint": "Al activar esta opción no se tendrán en cuenta la munición cargada en el arma a la hora de disparar", + "SETTINGS.DisregardUsePerRound": "Ignorar el número de usos por asalto", + "SETTINGS.DisregardUsePerRoundHint": "Al activar esta opción, se podrá disparar sin restricciones, ignorando el número de disparos que un arma puede realizar por asalto", + "SETTINGS.RestrictGridSpaces": "Medir usando espacios de rejilla", + "SETTINGS.RestrictGridSpacesHint": "En el combate a distancia, si se selecciona esta opción las distancias se medirán usando espacios de rejilla (cuadrados o hexágonos) en lugar de la distancia 'real' (euclidiana)", + "SETTINGS.StatusPlayerEditable": "Los jugadores pueden modificar estados", + "SETTINGS.StatusPlayerEditableHint": "Permite que el jugador modifique sus estados (caído, inconsciente, moribundo, muerto) y reinicie su perdida diaria de COR", + "SETTINGS.SyncDice3D": "[DsN] Sincronizar dados", + "SETTINGS.SyncDice3DHint": "Cuando se usa Dice so Nice (DsN), permite sincronizar los dados entre clientes", + "SETTINGS.UnitDieColorset": "[DsN] Configuración de dado de unidades", + "SETTINGS.UnitDieColorsetHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de unidades (si no se especifica otra cosa, usa los valores por defecto del jugador)", + "SETTINGS.TenDieNoMod": "[DsN] Configuración de dado de decenas", + "SETTINGS.TenDieNoModHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de decenas (si no se especifica otra cosa, usa los valores por defecto del jugador)", + "SETTINGS.TenDieBonus": "[DsN] Configuración de dado de bonificación", + "SETTINGS.TenDieBonusHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de bonificación (si no se especifica otra cosa, usa los valores por defecto del jugador)", + "SETTINGS.TenDiePenalty": "[DsN] Configuración de dado de penalización", + "SETTINGS.TenDiePenaltyHint": "Cuando se usa Dice so Nice (DsN), configuración de dado de penalización (si no se especifica otra cosa, usa los valores por defecto del jugador)", + "SETTINGS.OverrideGameArtwork": "Sobrescribir arte del juego", + "SETTINGS.OverrideGameArtworkHint": "!!REQUIERE REINICIAR!! da acceso al modo de configuración avanzada, deje en blanco para usar la configuración por defecto", + "SETTINGS.ArtPauseImage": "Imagen de pausa", + "SETTINGS.ArtPauseImageHint": ". Escriba 'null' para quitar la imagen", + "SETTINGS.ArtPauseText": "Texto de pausa", + "SETTINGS.ArtPauseTextHint": "Deje en blanco para usar el texto por defecto", + "SETTINGS.OverrideSheetArtwork": "Sobrescribir arte de la hoja de PJ", + "SETTINGS.OverrideSheetArtworkHint": "!!REQUIERE REINICIAR!! Da acceso a la configuración avanzada de la hoja de personaje, deje las opciones en blanco para usar los valores por defecto", + "SETTINGS.ArtWorkSheetBackground": "Fondo de la hoja de PJ", + "SETTINGS.ArtWorkSheetBackgroundHint": "escriba 'null' para quitar el fondo", + "SETTINGS.ArtWorkSheetBackgroundType": "Tipo de fondo", + "SETTINGS.BackgroundSlice": "La imagen de fondo será recortada (css:border-image)", + "SETTINGS.BackgroundAuto": "Redimensiona la imagen manteniendo proporciones (css:auto)", + "SETTINGS.BackgroundContain": "Redimensiona y rellena sin recortar/estirar (css:contain)", + "SETTINGS.BackgroundCover": "Redimensiona y rellena recortando/estirando (css:cover)", + "SETTINGS.ArtWorkOtherSheetBackground": "Fondo del resto de hojas", + "SETTINGS.ArtWorkOtherSheetBackgroundHint": "escriba 'null' para quitar el fondo. Por ahora, solo se aplica a objetos y vehículos", + "SETTINGS.ArtworkSheetImage": "Imagen de la hoja de PJ", + "SETTINGS.ArtworkSheetImageHint": "escriba 'null' para quitar la imagen", + "SETTINGS.ArtworkFrontColor": "Color principal", + "SETTINGS.ArtworkFrontColorHint": "Se usa para todos los elementos", + "SETTINGS.ArtworkBackgroundColor": "Color secundario", + "SETTINGS.ArtworkBackgroundColorHint": "Se usa para fondos y campos de entrada", + "SETTINGS.ArtworkInteractiveColor": "Color de elementos interactivos", + "SETTINGS.ArtworkInteractiveColorHint": "Se usa para elementos interactivos/tablas dinámicas", + "SETTINGS.ArtworkFixedSkillLength": "Limitar la longitud de las habilidades", + "SETTINGS.ArtworkFixedSkillLengthHint": "La longitud de las habilidades se limitará para que la pestaña de habilidades tenga un aspecto más compacto", + "SETTINGS.ArtworkMainFont": "Fuente principal", + "SETTINGS.ArtworkMainFontBold": "Fuente principal (negrita)", + "SETTINGS.ArtworkMainFontSize": "Tamaño de fuente por defecto (px)", + "SETTINGS.BoutOfMadnessSummaryTable": "Tabla de episodios de locura (resumidos)", + "SETTINGS.BoutOfMadnessRealTimeTable": "Tabla de episodios de locura (en tiempo real)", + "SETTINGS.LetKeeperDecide": "A decisión del Guardián", + "SETTINGS.DisplayResultType": "Mostrar el resultado de la tirada (texto)", + "SETTINGS.DisplayCheckSuccessLevel": "Mostrar el nivel de éxito de la tirada (estrellas/arañas)", + "SETTINGS.PlayerUnlockSheetMode": "Los jugadores pueden desbloquear la hoja de personaje", + "SETTINGS.AlwaysEditable": "Siempre", + "SETTINGS.CreationModeOnly": "Solo en modo de creación de personajes", + "SETTINGS.NeverEditable": "Nunca (solo el Guardián)", + "SETTINGS.StanbyGMRolls": "Pausar tiradas del Guardián", + "SETTINGS.StanbyGMRollsHint": "Cuando el Guardián haga una tirada desde una hoja de personaje, mostrar un botón de tirada en lugar de hacer la tirada", + "SETTINGS.AllowFlatDiceModifier": "Modificador simple a las tiradas", + "SETTINGS.AllowFlatDiceModifierHint": "Permite aplicar un modificadores simple a las tiradas de dados", + "SETTINGS.AllowFlatThresholdModifier": "Modificador simple a los umbrales de éxito", + "SETTINGS.AllowFlatThresholdModifierHint": "Permite aplicar un modificador simple al umbral de éxito en la tirada", + "SETTINGS.OpposedRollTieBreaker": "Método alternativo Viriato139ac para deshacer empates", + "SETTINGS.OpposedRollTieBreakerHint": "Si en una tirada enfrentada ambos contendientes sacan el mismo grado de éxito, se declarará ganador al haya sacado un resultado mayor en la tirada, no el que tenga la habilidad más alta", + "SETTINGS.SelfRollWhisperTarget": "Notificación de tirada propia:", + "SETTINGS.SelfRollWhisperTargetHint": "Cuando se haga una tirada propia como GM quiere que se envíe notificación a", + "SETTINGS.DoNotAdvise": "Solo a ti mismo", + "SETTINGS.AdviseOwnersOnly": "Al propietario del actor", + "SETTINGS.AdviseAllPlayer": "A todos los jugadores", + "SETTINGS.OneBlockBackStory": "Trasfondo en un solo bloque", + "SETTINGS.OneBlockBackStoryHint": "Convertir el transfondo en un solo bloque de edición, se pueden añadir formateo y pegar enlaces", + "SETTINGS.EnableStatusIcons": "Activar iconos de estado", + "SETTINGS.EnableStatusIconsHint": "Determina si se deben mostrar de los efectos de combate y cordura en los iconos", + "SETTINGS.ShowExperimentalFeatures": "Mostrar características experimentales", + "SETTINGS.ShowExperimentalFeaturesHint": "Su mundo puede corromperse en próximas versiones si usa estas características. Solo para pruebas, no las use en sus mundos de juego", + "CoC7.ExperimentalFeaturesWarning": "Esta característica está en desarrollo y no se recomienda su uso en sus mundos de juego", + "SETTINGS.CheckElevation": "Incluir elevación en la distancia", + "SETTINGS.CheckElevationHint": "Usa la elevación en el combate a distancia para medir alcances", + "CoC7.toolTipDelay": "Retraso en milisegundos que tarda en aparecer los mensajes emergentes, ajustar a 0 para no mostrarlos nunca", + + "CoC7.getTheExample": "Copiar ejemplo", + "CoC7.Copied": "Ejemplo copiado al portapapeles" +} diff --git a/lang/fr.json b/lang/fr.json index 6a711924..492bc290 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -128,7 +128,7 @@ "CoC7.OtherCosts": "Autres coûts", "CoC7.CastingSpell": "Jette {spell}.", "CoC7.NotEnoughMagicPoints": "{spell} coûte {originalMagicPoints} Points de Magie, vous n'en avez que {actorMagicPoints}. Vouslez-vous utiliser vos {convertedHitPoints} Points de Vie restants? Vous subirez {convertedHitPoints} points de dommage en le faisant.", - + "CoC7.CopyToClipboard": "Copier vers le presse-papier", "CoC7.WhisperToSelection": "Murmurer aux tokens sélectionnés", "CoC7.WhisperTo": "Murmurer à", @@ -874,7 +874,7 @@ "SETTINGS.CheckElevation": "Inclut l'altitude", "SETTINGS.CheckElevationHint": "Utiliser l'altitude dans le calcul des distances en combat", "CoC7.toolTipDelay": "Délai en millisecondes avant qu'une info-bulle apparaisse, 0 pour jamais", - + "CoC7.getTheExample": "Copier l'Exemple", "CoC7.Copied": "Texte de l'Exemple copié dans le presse-papier" } diff --git a/lang/ko.json b/lang/ko.json index a6083b9c..673c0df1 100644 --- a/lang/ko.json +++ b/lang/ko.json @@ -1,876 +1,876 @@ { - "I18N.LANGUAGE": "ko", - - "CoC7.title": "크툴루의 부름 7th Edition (비공식)", - - "CoC7.Entities.Character": "캐릭터", - "CoC7.Entities.Container": "Container", - "CoC7.Entities.Creature": "크리쳐", - "CoC7.Entities.Npc": "NPC", - "CoC7.Entities.Vehicle": "탈것", - - "CoC7.Entities.Archetype": "캐릭터 타입", - "CoC7.Entities.Book": "서적", - "CoC7.Entities.Chase": "추격", - "CoC7.Entities.Item": "아이템", - "CoC7.Entities.Occupation": "직업", - "CoC7.Entities.Setup": "초기설정", - "CoC7.Entities.Skill": "기능", - "CoC7.Entities.Spell": "주문", - "CoC7.Entities.Status": "Status", - "CoC7.Entities.Talent": "Talent", - "CoC7.Entities.Weapon": "무기", - - "CHARAC.STR": "근력", - "CHARAC.Strengh": "근력", - "CHARAC.Strength": "근력", - "CHARAC.CON": "건강", - "CHARAC.Constitution": "건강", - "CHARAC.SIZ": "크기", - "CHARAC.Size": "크기", - "CHARAC.DEX": "민첩성", - "CHARAC.Dexterity": "민첩성", - "CHARAC.APP": "외모", - "CHARAC.Appearance": "외모", - "CHARAC.INT": "지능", - "CHARAC.Intelligence": "지능", - "CHARAC.POW": "정신력", - "CHARAC.Power": "정신력", - "CHARAC.EDU": "교육", - "CHARAC.Education": "교육", - "CoC7.PlayerName": "플레이어", - "CoC7.Name": "이름", - "CoC7.Archetype": "캐릭터 타입", - "CoC7.Occupation": "직업", - "CoC7.Age": "나이", - "CoC7.Sex": "성별", - "CoC7.Residence": "거주지", - "CoC7.Birthplace": "출생지", - "CoC7.Organization": "소속", - "CoC7.HitPoints": "체력", - "CoC7.HP": "HP", - "CoC7.MagicPoints": "마력", - "CoC7.MP": "MP", - "CoC7.SanityPoints": "이성", - "CoC7.Sanity": "이성", - "CoC7.SAN": "이성", - "CoC7.DailySanLoss": "일일 이성 손실", - "CoC7.DailyLoss": "일일 손실", - "CoC7.Luck": "운", - "CoC7.Movement": "이동력", - "CoC7.Mov": "이동력", - "CoC7.BonusDamage": "피해 보너스", - "CoC7.DB": "피해", - "CoC7.Build": "체격", - "CoC7.Skills": "기능", - "CoC7.Skill": "기능", - "CoC7.Combat": "전투", - "CoC7.Possessions": "소지품", - "CoC7.Background": "백스토리", - "CoC7.Notes": "메모", - "CoC7.DailySanIconOver": "초기화", - "CoC7.Prone": "쓰러짐", - "CoC7.Unconsious": "의식불명", - "CoC7.CriticalWounds": "중상", - "CoC7.Dying": "빈사", - "CoC7.DyingCheck": "건강에 의한 사망판정", - "CoC7.Dead": "사망", - "CoC7.Resist": "저항", - "CoC7.UnderlyingInsanity": "잠재적 광기", - "CoC7.TemporaryInsanity": "일시적 광기", - "CoC7.IndefiniteInsanity": "장기적 광기", - "CoC7.NotInsane": "None", - "CoC7.UnlockActor": "액터 해금", - "CoC7.LockActor": "액터 잠금", - "CoC7.NpcRollCharacteristics": "특성치 굴림", - "CoC7.NpcAvarageCharacteristics": "특성치 평준화", - "CoC7.NpcCharacteristicsFormula": "수식", - "CoC7.NpcCharacteristicsValues": "값", - "CoC7.language": "언어", - "CoC7.Author": "저자", - "CoC7.Date": "날짜", - "CoC7.Spells": "주문", - "CoC7.Spell": "주문", - "CoC7.Spells&Notes": "주문과 서적", - "CoC7.Weapons": "장비", - "CoC7.Effects": "효과", - "CoC7.Cost": "비용", - "CoC7.Source": "출처", - "CoC7.SpellDetails": "주문 상세", - "CoC7.Details": "상세", - "CoC7.Other": "기타", - "CoC7.rounds": "라운드", - "CoC7.hours": "시간", - "CoC7.weeks": "주", - "CoC7.remove": "제거", - "CoC7.Any": "또는", - "CoC7.All": "모두", - "CoC7.Success": "성공", - "CoC7.CustomLabel": "커스텀 라벨", - "CoC7.SpecificLocations": "특정 장소", - "CoC7.ArmourPlating": "무장 방어복", - "CoC7.Location": "위지", - "CoC7.Properties": "기능", - "CoC7.Attributes": "속성", - "CoC7.Attribute": "속성", - "CoC7.Collapse": "축소", - "CoC7.Expand": "확장", - "CoC7.Blind": "실명", - "CoC7.Label": "라벨", - "CoC7.Icon": "아이콘", - "CoC7.Check": "판정", - "CoC7.ItemWeapon": "아이템 (무기)", - "CoC7.AttacksPerRound": "라운드당 공격횟수", - - "CoC7.Cast": "Cast", - "CoC7.SanityCost": "이성 조건", - "CoC7.PowerCost": "정신력 조건", - "CoC7.HitPointsCost": "체력 조건", - "CoC7.MagicPointsCost": "마력 조건", - "CoC7.OtherCosts": "기타 조건", - "CoC7.CastingSpell": "{spell} 주문 시전.", - - "CoC7.CopyToClipboard": "클립보드에 복사", - "CoC7.WhisperToSelection": "선택한 토큰에 귓속말", - "CoC7.WhisperTo": "귓속말: ", - "CoC7.SendToChat": "채팅송신", - - "CoC7.RegularSuccess": "보통 성공", - "CoC7.HardSuccess": "어려운 성공", - "CoC7.ExtremeSuccess": "극단적 성공", - "CoC7.CriticalSuccess": "대성공", - "CoC7.Fumble": "대실패", - "CoC7.Failure": "실패", - "CoC7.Malfunction": "{itemName} 이(가) 고장났습니다", - - "CoC7.Dice": "주사위", - "CoC7.DiceModifierBonus": "주사위", - "CoC7.DiceModifierPenalty": "패널티", - "CoC7.Modifiers": "수정", - "CoC7.BonusDice": "보너스 주사위", - "CoC7.UnitsDie": "1 단위 주사위", - "CoC7.TensDie": "10면주사위", - "CoC7.TensDice": "10면주사위", - "CoC7.SuccessRequired": "{successRequired} 성공이 필요합니다.", - "CoC7.Roll": "판정", - "CoC7.Pushing": "강행", - "CoC7.PushingSkill": ": 기능 강행판정!", - "CoC7.PushSkill": "강행", - "CoC7.PushedRoll": "(강행판정)", - "CoC7.SpendLuck": "성공하기 위해 {luckNeededValue} 의 행운 소모", - "CoC7.LuckSpent": "{luckAmount} 성공하기 위해 행운 소모", - "CoC7.LuckSpentAlt": "행운 소모", - "CoC7.LuckError": "{actorName} 은(는) 판정에 필요한 행운이 모자랍니다", - "CoC7.check.AutoSuccess": "자동. 성공", - "CoC7.check.AutoFailure": "자동. 실패", - "CoC7.RevealCheck": "판정 공개", - "CoC7.RevealSanLoss": "이성 손실 공개", - "CoC7.check.ForcePass": "강제 통과", - "CoC7.check.ForceFail": "강제 실패", - "CoC7.check.FlagForDevelopment": "경험치 보상", - "CoC7.IncreaseSuccessLevel": "성공율 증가", - "CoC7.check.DecreaseSuccessLevel": "성공율 감소", - "CoC7.RollSecretDice": "수호자가 몇개의 주사위를 굴렸습니다", - "CoC7.KeeperSentDecoy": "플레이어가 눈속임판정을 받았습니다", - "CoC7.FakeRoll": "플레이어에게 눈속임판정을 보냅니다", - - "CoC7.ConstitutionCheck": "건강 판정", - - "CoC7.SanDataSelectionWindow": "이성치 손실 선택", - "CoC7.BonusSelectionWindow": "보너스 선택 창", - "CoC7.BonusSelectionWindowNamed": "{name} 판정을 위해 난이도를 선택합니다", - "CoC7.SkillDetailsWindow": "상세 기능 창", - "CoC7.RegularDifficulty": "보통", - "CoC7.HardDifficulty": "어려움", - "CoC7.ExtremeDifficulty": "극단적", - "CoC7.CriticalDifficulty": "대성공", - "CoC7.UnknownDifficulty": "난이도 미공개", - "CoC7.RollDifficulty": "난이도 판정", - "CoC7.RollThreshold": "역치 판정", - "CoC7.FlatDiceModifier": "Flat dice modifier", - "CoC7.FlatModifier": "Flat modifier", - "CoC7.RollDifficultyUnknown": "난이도 미공개", - "CoC7.RollDifficultyRegular": "보통", - "CoC7.RollDifficultyHard": "어려움", - "CoC7.RollDifficultyExtreme": "극단적", - "CoC7.RollDifficultyCritical": "대성공", - "CoC7.RollResult.LuckSpendText": "{luckAmount} 의 행운을 써서, {successLevel} 성공입니다", - "CoC7.RollDice": "판정 !", - "CoC7.CreateLink": "링크 생성", - "CoC7.SuccesLevelHint": "{value} 난이도의 성공", - "CoC7.FailureLevelHint": "{value} 난이도로 인해 실패", - "CoC7.CombinedRollCard": "Combined roll card", - "CoC7.OpposedRollCard": "Opposed roll card", - "CoC7.CombinedAnyHint": "하나 이상 판정에 성공", - "CoC7.CombinedAllHint": "모든 판정에 성공", - "CoC7.CloseCard": "카드 닫음", - - "CoC7.CheckResult": "{name} 판정 ({value}%) - {difficulty} 난이도", - "CoC7.ItemCheckResult": "{item} - {skill} 판정 ({value}%) - {difficulty} 난이도", - "CoC7.CheckRawValue": "({rawvalue}%) - {difficulty} 난이도", - - "CoC7.ArmorAbsorbsDamage": "방어구가 무시한 총 피해", - "CoC7.Critical": "치명상", - "CoC7.Impale": "관통상", - "CoC7.CriticalTitle": "치명상을 입었다", - "CoC7.ImpaleTitle": "이 무기는 관통할 수 있다", - "CoC7.Target": "대상", - "CoC7.TargetOutOfRange": "범위밖 대상", - "CoC7.NoTargetToDamage": "피해를 입힐 대상이 없음", - "CoC7.ShotIsImpossible": "사격 불가", - "CoC7.OutOfAmmo": "탄약 고갈", - "CoC7.OutOfShots": "사정거리 밖", - - "CoC7.BonusDamageRoll": "피해 보너스 판정", - "CoC7.Type": "유형", - "CoC7.FightBack": "반격", - "CoC7.Dodge": "회피", - "CoC7.Maneuver": "조종", - "CoC7.NoResponse": "응답없음", - "CoC7.OutNumbered": "수적열세", - "CoC7.combatCard.surprised": "기습", - "CoC7.combatCard.autoSuccess": "자동성공", - "CoC7.Advantage": "이점", - "CoC7.Disadvantage": "불이익", - "CoC7.TitleAdvantage": "보너스 주사위 1 추가 (대상이 쓰러지거나 저지됨...)", - "CoC7.TitleDisadvantage": "패널티 주사위 1 추가 (쓰러지거나 저지당함...)", - "CoC7.TitleOutNumbered": "수적열세의 대상에 대해 보너스 주사위 1 추가", - "CoC7.TitleSurprised": "대상을 기습함에 따라 보너스 주사위 1 추가", - "CoC7.TitleAutoSuccess": "공격 자동 명중", - "CoC7.WinnerRollDamage": "{name} 승리. 피해 판정.", - "CoC7.InitiatorMissed": "{name} 놓침.", - "CoC7.NoWinner": "양쪽 모두 실패.", - "CoC7.DodgeSuccess": "{name} 회피함!", - "CoC7.ManeuverSuccess": "{name} 조종이 성공적이었음.", - "CoC7.AttackSuccess": "{name} 유효타를 입힘.", - "CoC7.InflictPain": "고통을 입힘", - "CoC7.AdvantageAttacker": "우위: 공격측", - "CoC7.AdvantageDefender": "우위: 방어측", - "CoC7.Tie": "Tie", - "CoC7.DamageInflicted": "피해 반영됨", - "CoC7.TotalDamage": "총 피해", - - "CoC7.combatCard.dive4cover": "Dive for Cover", - - "CoC7.rangeCombatCard.SingleShot": "사격(단발)", - "CoC7.rangeCombatCard.MultipleShots": "사격(연발)", - "CoC7.AutomaticFire": "반자동 사격", - "CoC7.rangeCombatCard.Burst": "집중 사격", - "CoC7.rangeCombatCard.FullAuto": "전자동", - "CoC7.rangeCombatCard.BaseRange": "단거리", - "CoC7.rangeCombatCard.LongRange": "중거리", - "CoC7.rangeCombatCard.ExtremeRange": "장거리", - "CoC7.rangeCombatCard.OutOfRange": "사거리 밖", - "CoC7.rangeCombatCard.Cover": "은엄폐", - "CoC7.rangeCombatCard.PointBlankRange": "Point blank range", - "CoC7.rangeCombatCard.NormalTarget": "보통 대상", - "CoC7.rangeCombatCard.BigTarget": "큰 대상", - "CoC7.combatCard.SmallTarget": "작은 대상", - "CoC7.rangeCombatCard.FastMovingTarget": "Fast", - "CoC7.rangeCombatCard.InMelee": "근접전", - "CoC7.rangeCombatCard.aiming": "조준", - "CoC7.rangeCombatDamage": "{name} 이(가) {total} 의 피해를 입었습니다", - "CoC7.rangeCombatDamageArmor": "{name} 이(가) {total} 의 피해를 입었습니다. ({armor} 경감)", - "CoC7.RollDamage": "피해 판정", - "CoC7.BulletsFired": "Bullets fired", - "CoC7.Shots": "발포횟수", - "CoC7.Shoot": "사격", - "CoC7.ShotBullets": "{bullets} 탄약을 {actor}에게 쏩니다.", - "CoC7.ShotVoley": "Shooting a voley of {bullets} bullets at target {actor}.", - "CoC7.rangeCombatCard.AimingTitle": "첫 사격에 보너스 주사위 1개 추가", - "CoC7.rangeCombatCard.CoverTitle": "패널티 주사위 1개. 대상이 엄폐했거나 성공적으로 지원을 받았습니다.", - "CoC7.rangeCombatCard.PointBlankRangeTitle": "보너스 주사위 1개. 지근거리 내 대상", - "CoC7.rangeCombatCard.BigTargetTitle": "큰 대상에 대해 보너스 주사위 1개 (체격 > 4)", - "CoC7.rangeCombatCard.SmallTargetTitle": "작은 대상에 대해 패널티 주사위 1개", - "CoC7.rangeCombatCard.NormalTargetTitle": "보통 크기의 대상. 어떤 패널티/보너스도 없습니다", - "CoC7.rangeCombatCard.InMeleeTitle": "패널티 주사위 1개. 대상이 근접 전투에 들어갔습니다", - "CoC7.rangeCombatCard.FastMovingTargetTitle": "패널티 주사위 1개. 대상이 빠르고 (MOV 8+) 최고 속도로 움직입니다", - - "CoC7.meleeCombatDamageTakes": "takes", - "CoC7.meleeCombatDamageFrom": "from", - "CoC7.meleeCombatDamageDeals": "deals", - "CoC7.meleeCombatDamageWith": "with", - - "CoC7.DropZone": "DropZone", - - "CoC7.Value": "수치", - "CoC7.SkillValue": "기능 수치", - "CoC7.SkillBase": "기본", - "CoC7.BaseSkillValue": "기본 기능 수치", - "CoC7.SkillExperience": "경험치", - "CoC7.SkillArchetype": "캐릭터 타입", - "CoC7.SkillOccupation": "직업 기능", - "CoC7.SkillPersonal": "관심 기능", - - "CoC7.SkillTotalExperience": "경험치 점수", - "CoC7.SkillTotalArchetype": "캐릭터 타입 점수", - "CoC7.SkillTotalOccupation": "직업 점수", - "CoC7.SkillTotalPersonal": "관심 기능 점수", - "CoC7.CharacteristicsPoints": "특성치 점수", - "CoC7.TotalPoints": "총 직업 기능 점수", - - "CoC7.ItemQuantity": "양", - "CoC7.ItemWeight": "무게", - "CoC7.ItemDetails": "상세", - "CoC7.Description": "설명", - "CoC7.Reload": "좌/우 클릭 : 1의 탄종을 장탄/제거 \nShift + 좌/우 클릭 : 재장전/비우기", - "CoC7.WeaponRange": "사거리", - "CoC7.WeaponDamage": "피해량", - "CoC7.Weapon.BlastRadius": "폭발 범위", - "CoC7.WeaponMalfunction": "고장", - "CoC7.WeaponUsesPerRound": "라운드당 사용횟수", - "CoC7.WeaponUsesPerRoundHint": "라운드당 공격횟수 (1/3 : 매 3번의 라운드당 1번의 공격)", - "CoC7.WeaponSheet.RoundsPerUse.Info": "발사준비가 될때까지 걸리는 라운드", - "CoC7.WeaponMax": "최대 라운드당 사용횟수", - "CoC7.BurstSize": "점사 규모", - "CoC7.BurstSizeHint": "점사당 몇발의 탄 소모", - "CoC7.WeaponBulletsInMag": "탄창", - "CoC7.WeaponSpecial": "특수", - "CoC7.ItemPrice": "가격", - "CoC7.Armor": "방어구", - - "CoC7.EraNvct": "인빅터스", - "CoC7.EraDrka": "암흑기", - "CoC7.EraDdts": "더 어두운 오솔길로", - "CoC7.EraGlit": "가스등의 크툴루", - "CoC7.Era1920": "1920s", - "CoC7.EraPulp": "펄프 크툴루", - "CoC7.EraMdrn": "현대", - "CoC7.Eras": "크툴루 배경", - - "CoC7.SkillNoAdjustments": "수정 불가", - "CoC7.SkillNoXpGain": "경험치 습득 불가", - "CoC7.SkillSpecial": "전문화", - "CoC7.SkillRarity": "희귀", - "CoC7.SkillPush": "강행", - "CoC7.SkillCombat": "근접전(격투)", - "CoC7.SkillFighting": "근접전(무장)", - "CoC7.SkillFirearm": "사격", - - "CoC7.WeaponRngd": "원거리", - "CoC7.WeaponProperyManeuver": "가동 기능", - "CoC7.WeaponTouch": "접촉", - "CoC7.WeaponImpl": "관통", - "CoC7.WeaponRare": "희귀", - "CoC7.WeaponAhdb": "+DB/2", - "CoC7.WeaponAddb": "+DB", - "CoC7.WeaponSlnt": "소음", - "CoC7.WeaponXplv": "폭파", - "CoC7.WeaponBrst": "점사", - "CoC7.WeaponAuto": "전자동", - "CoC7.WeaponSpcl": "특수", - "CoC7.WeaponMont": "Mounted", - "CoC7.WeaponDbrl": "Dual barrel", - "CoC7.WeaponBlst": "폭발", - "CoC7.WeaponStun": "기절", - "CoC7.Weapon.Property.Melee": "근접", - "CoC7.Weapon.Property.Thrown": "투척", - "CoC7.Weapon.Property.Burn": "발화", - "CoC7.Weapon.Property.Shotgun": "산탄총", - - "CoC7.ErrorItem": "아이템을 찾을 수 없습니다", - "CoC7.ErrorActor": "액터를 찾을 수 없습니다", - "CoC7.ErrorInvalidFormula": "{value}은(는) 유효한 수식이 아닙니다.", - "CoC7.ErrorInvalid": "무효", - "CoC7.Validate": "승인", - "CoC7.Apply": "적용", - - "CoC7.NewBioSectionName": "새 단락", - - "CoC7.DodgeSkillName": "회피", - "CoC7.CthulhuMythosName": "크툴루 신화", - "CoC7.CreditRatingSkillName": "신용 등급", - "CoC7.DriveAutoSkillName": "자동 운행", - "CoC7.FightingSpecializationName": "근접전", - "CoC7.FirearmSpecializationName": "사격", - "CoC7.DriveSpecializationName": "운전", - "CoC7.PilotSpecializationName": "조종", - "CoC7.AnySpecName": "Any", - "CoC7.BoutOfMadnessName": "광기", - "CoC7.InsanityName": "광기", - - "CoC7.NewSkillName": "새 기능", - "CoC7.AddSkill": "기능 추가", - "CoC7.DevelopemmentPhase": "성장 단계", - "CoC7.RecoverLuckPoints": "행운 점수 회복", - "CoC7.SkillCantGainXp": "기능이 자동으로 경험치를 얻지 못합니다.", - "CoC7.SkillUnflagForDevelopement": "성장 비표시", - "CoC7.SkillFlagForDevelopement": "성장 표시", - "CoC7.RollAll4Dev": "성장할 모든 기능에 대해 판정", - "CoC7.RollLuck4Dev": "행운점수 성장에 대해 판정", - "CoC7.DevRollTitle": "{item}성장에 대해 판정: {die}/{score}%", - "CoC7.DevSuccessDetails": "{item} 이(가) {augment} 만큼 향상%", - "CoC7.SanGained": "Gained 2d6 ({results} = {sanGained}) Sanity after mastering {skill} with a {skillValue}%", - "CoC7.DevFailureDetails": "{item}이(가) 향상되지 않음", - "CoC7.DevSuccess": "{item} upgraded ({die}/{score}%) by {augment}%", - "CoC7.DevFailure": "{item} NOT upgraded ({die}/{score}%)", - "CoC7.LuckIncreased": "Luck recovered ({die}/{score}) by {augment} points", - "CoC7.LuckNotIncreased": "Luck NOT recovered ({die}/{score})", - "CoC7.DevelopAttribWarn": "성장/생성중인 속성에 접근할 수 없습니다.", - "CoC7.SkillDetail": "상세", - "CoC7.EditSkill": "기능 편집", - "CoC7.DeleteSkill": "기능 제거", - "CoC7.RangeSkills": "원거리 기능", - "CoC7.MeleeSkills": "근접전 기능", - "CoC7.NewItemName": "새 아이템", - "CoC7.AddItem": "아이템 추가", - "CoC7.EditItem": "아이템 편집", - "CoC7.DeleteItem": "아이템 삭제", - "CoC7.TradeItem": "아이템 교환 / 소지 ", - "CoC7.SortBySkillName": "기능 이름으로 정렬", - "CoC7.SortBySkillValue": "기능 퍼센트로 정렬", - "CoC7.UncommonSkillsShow": "희귀 기능 표시", - "CoC7.UncommonSkillsHide": "희귀 기능 숨김", - - "CoC7.NewBookName": "새로운 서적", - "CoC7.AddBook": "서적 추가", - "CoC7.NewSpellName": "새로운 주문", - "CoC7.AddSpell": "주문 추가", - - "CoC7.AddWeapon": "무기 추가", - "CoC7.NewWeaponName": "새로운 무기", - "CoC7.EditWeapon": "무기 편집", - "CoC7.DeleteWeapon": "무기 삭제", - "CoC7.MeleeWeapons": "근접 무기", - "CoC7.RangeWeapons": "원거리 무기", - "CoC7.WeaponName": "이름", - "CoC7.WeaponSkill": "기능", - "CoC7.WeaponSkillAlt": "Alt-skill", - "CoC7.Inventory": "소지품", - "CoC7.InventoryIsCurrentlyEmpty": "현재 소지품이 없습니다.", - "CoC7.CharacterDevelopment": "성장", - "CoC7.OccupationSkill": "직업 기능", - "CoC7.ArchetypeSkill": "캐릭터 타입 기능", - "CoC7.UseFormula": "주사위 판정 사용", - "CoC7.EnterFormula": "수식 입력", - "CoC7.SanRollHint": "대상에 대한 이성수치 판정", - "CoC7.SANCheckTitle": "이성 감소 : {name} ({sanMin}/{sanMax})", - "CoC7.NoSkill": "기능 없음", - "CoC7.AddWeapontHint": "

                              {actor} doesn't have a {weapon}.
                              Do you want to create one ?

                              ", - - "CoC7.LinkCheck": " {name} 판정", - "CoC7.LinkCheckDiff": "[{difficulty}] {name} 판정", - "CoC7.LinkCheckModif": " {name} 판정({modifier})", - "CoC7.LinkCheckDiffModif": "[{difficulty}] {name} 판정({modifier})", - "CoC7.LinkSanLoss": " 이성 감소 ({sanMin}/{sanMax})", - "CoC7.LinkSanLossDiff": "[{difficulty}] 이성 감소 ({sanMin}/{sanMax})", - "CoC7.LinkSanLossModif": " 이성 감소({modifier}) ({sanMin}/{sanMax})", - "CoC7.LinkSanLossDiffModif": "[{difficulty}] 이성 감소({modifier}) ({sanMin}/{sanMax})", - "CoC7.LinkItem": " {name}", - "CoC7.LinkItemDiff": "[{difficulty}] {name}", - "CoC7.LinkItemModif": " {name} ({modifier})", - "CoC7.LinkItemDiffModif": "[{difficulty}] {name} ({modifier})", - - "CoC7.ManualCreditValues": "Manual Credit Values", - "CoC7.MonetarySymbol": "상징 :", - "CoC7.MonetaryFactor": "요인 :", - "CoC7.AutoCreditValues": "자동 계산 토글", - "CoC7.MonetarySpendingLevel": "레벨 사용 :", - "CoC7.MonetaryCash": "현금 :", - "CoC7.MonetarySpent": "지출 :", - "CoC7.MonetaryAssets": "자산 :", - "CoC7.MonetaryAssetsDetails": "자산 상세", - - "CoC7.PossessionsNotes": "메모 :", - "CoC7.PossessionsNotesHolder": "메모", - - "CoC7.BackgroundNewSection": "새로운 문단 추가", - "CoC7.BackgroundSectionNameHolder": "문단 제목 입력", - "CoC7.BackgroundDeleteSection": "문단 삭제", - "CoC7.BackgroundSectionMoveUp": "위로", - "CoC7.BackgroundSectionMoveDown": "아래로", - - "CoC7.creatureFightingSkill": "근접전", - - "CoC7.InvoluntaryAction": "원치 않는 행동", - "CoC7.InvoluntaryActionPerfomed": "원치 않는 행동을 수행했습니다", - "CoC7.SanityCheck": "이성 판정", - "CoC7.IntCheck": "지능 판정", - "CoC7.NoSanLoss": "이성 손실 없음", - "CoC7.SANLoss": "이성 손실", - "CoC7.SanityCheckPerformed": "트라우마적 사건에 노출되었습니다.", - "CoC7.InvoluntaryActionPerformed": "잠시동안 스스로 제어할 수 없습니다.", - "CoC7.SanityLost": "이성치 손실", - "CoC7.MemoryRepressed": "당신은 그 기억을 상기시키고 당신의 무의식에 묻습니다.", - "CoC7.RememberEverything": "당신은 모든것을 기억합니다.", - "CoC7.BoutOfMadnesslasted": "당신의 장기적 광증이 지속됩니다.", - "CoC7.EnteringBoutOfMadness": "당신은 장기적 광증을 경험합니다.", - "CoC7.GrowingAccustomedToAwfulness": "당신은 공포에 익숙해집니다. (당신의 이성치 손실이 제한됩니다).", - "CoC7.ImmuneToAwfulness": "당신의 의식은 이런 두려움에 영향을 받지 않습니다. (이성치 손실 없음).", - "CoC7.InvestigatorPhobiaGained": "탐사자가 공포증을 가집니다", - "CoC7.PhobiaGained": "당신은 공포증을 가집니다", - "CoC7.InvestigatorManiaGained": "탐사자가 열광증을 가집니다", - "CoC7.ManiaGained": "당신은 열광증을 가집니다", - "CoC7.AlreadyUnderlyingInsanity": "탐사자는 이미 내재된 광기상태입니다.", - "CoC7.IndefinitelyInsane": "당신은 장기적으로 미치게됩니다.", - "CoC7.TemporaryInsane": "당신은 일시적으로 미치게됩니다", - "CoC7.GoodForAsylum": "You're good to be sent to the asylum", - "CoC7.BoutOfMadness": "Bout of madness", - "CoC7.BoutRealTime": "Bout of madness: Real time", - "CoC7.BoutSummary": "Bout of madness: Summary", - "CoC7.EndBoutOfMadness": "End bout of madness", - "CoC7.InsanityType": "광기의 종류", - "CoC7.Phobia": "공포증", - "CoC7.Mania": "열광증", - "CoC7.MaxSanloss": "최대 손실", - "CoC7.MinSanloss": "최소 손실", - "CoC7.AlreadyLost": "이미 잃어버림", - "CoC7.CreatureMaxLoss": "Creature max loss", - "CoC7.MaxLossToCreature": "Max loss to this creature", - "CoC7.ResetCreatureSan": "Reset creature's history", - "CoC7.ResetSpecieSan": "Reset specie's history", - "CoC7.KeepData": "Keep creature's data", - "CoC7.BoutActive": "(Bout) Immune to SAN loss", - "CoC7.AlreadyInABout": "You're already suffering a bout of madness and are immune to further loss of sanity.", - "CoC7.PlayerPermanentlyInsane": "Player Permanently Insane", - "CoC7.MythosFirstEncounter": "Award Mythos Experience (+5% First time)", - "CoC7.MythosAlreadyEncountered": "Award Mythos Experience (+1%)", - "CoC7.DisregardMythosGain": "No Mythos gain", - "CoC7.MythosGain": "Mythos gain", - "CoC7.YouGainedCthulhuMythos": "Your mind quail before the unearthly manifestation (+{value}% Cthulhu Mythos)", - "CoC7.CardResolved": "Card resolved", - - "CoC7.SpellCastingTime": "시전 시간", - "CoC7.SpellCastingCost": "시전 비용", - "CoC7.CallSpell": "외침", - "CoC7.DismissSpell": "취소", - "CoC7.ContactSpell": "접촉", - "CoC7.SummonSpell": "소환", - "CoC7.BindSpell": "속박", - "CoC7.EnchantmentSpell": "인챈트", - "CoC7.GateSpell": "Gate", - "CoC7.CombatSpell": "전투", - "CoC7.SpellType": "주문 타입", - - "CoC7.BookHasNothingMoreToTeach": "{book} has nothing more to teach. Cthulhu Mythos skill of {actor} is greater than this Mythos Rating.", - "CoC7.BookType": "서적 타입", - "CoC7.Content": "내용", - "CoC7.CthulhuMythosFinal": "Mythos Final", - "CoC7.CthulhuMythosInitial": "Mythos Initial", - "CoC7.Development": "성장", - "CoC7.DifficultyLevel": "난이도", - "CoC7.DragSpell": "Drag spells here to insert them into the book...", - "CoC7.FullStudies": "Full Studies", - "CoC7.Gains": "습득", - "CoC7.GainsForReading": "Skill gains for reading {book}.", - "CoC7.InitialReading": "첫 독서", - "CoC7.InitialReadingNeeded": "{actor} needs to perform an Initial Reading on {book} to be able to advance through Full Study progress.", - "CoC7.LearnSpellAttempt": "Attempt to learn spell {spell}, from {book}.", - "CoC7.MarkedForDevelopment": "Marked for development", - "CoC7.Mythos": "신화", - "CoC7.MythosRating": "신화 등급", - "CoC7.NotOwned": "This Item needs to be owned by an Actor to perform this action.", - "CoC7.Occult": "오컬트", - "CoC7.Points": "수치", - "CoC7.Progress": "진행", - "CoC7.RedoFullStudy": "Redo Full Study", - "CoC7.ReadAttempt": "Attempt to read {book} ({language}), {difficulty} difficulty.", - "CoC7.ReadingMythosTome": "Reading {book}.", - "CoC7.Specific": "특수한", - "CoC7.SpellsLearned": "주문을 배움", - "CoC7.StudyTime": "Study Time", - "CoC7.UnknownLanguage": "{actor} do not know the language in which this book is written.", - "CoC7.Unreadable": "해독 불가", - - "CoC7.Crew": "Crew", - "CoC7.Origin": "Origin", - "CoC7.ArmedVehicle": "군용 탈것", - - "CoC7.PulpTalents": "펄프 재능", - "CoC7.TalentType": "재능 타입", - "CoC7.PhysicalTalent": "신체적", - "CoC7.MentalTalent": "정신적", - "CoC7.CombatTalent": "전투", - "CoC7.MiscellaneousTalent": "잡다한", - "CoC7.BasicTalent": "기본", - "CoC7.InsaneTalent": "광기", - "CoC7.OtherTalent": "기타", - - "CoC7.Items": "아이템", - "CoC7.Vehicle": "탈것", - "CoC7.Books": "서적", - "CoC7.Status": "상태", - - "CoC7.Classic": "고전", - "CoC7.Lovecraftian": "Lovecraftian", - "CoC7.Pulp": "펄프", - "CoC7.Modern": "현대", - "CoC7.Related": "관련 직업", - "CoC7.OccupationType": "직업 타입", - "CoC7.OccupationPoints": "직업 점수", - "CoC7.Selected": "선택됨", - "CoC7.Multiplier": "배수", - "CoC7.Optional": "선택", - "CoC7.Or": "또는", - "CoC7.Minimum": "최소", - "CoC7.Maximum": "최대", - "CoC7.CommonSkills": "흔한 기능", - "CoC7.OptionSkills": "선택 기능 그룹", - "CoC7.ChoiceNumber": "선택지", - "CoC7.Choose": "Number to choose from", - "CoC7.Chosen": "Chosen", - "CoC7.EmptySkillList": "Add a skill by dropping it here.", - "CoC7.EmptyItemList": "Add an item by dropping it here.", - "CoC7.EmptyCharacterSkillList": "Add a setup, occupation, or skill by dropping it here.", - "CoC7.PersonalSpeciality": "Number of personal or era specialty", - "CoC7.AdditionalSkills": "추가 기능", - "CoC7.SkillSelectionWindow": "Select optional skills", - "CoC7.SelectPersonalSkills": "Select {number} skill(s) as personal interest skills", - "CoC7.ResetOccupation": "직업 초기화", - "CoC7.ResetOccupationHint": "Actor {name} already have an occupation. Do you want to reset it?", - "CoC7.ResetArchetype": "캐릭터 타입 초기화", - "CoC7.ResetArchetypeHint": "Actor {name} already have an archetype. Do you want to reset it?", - "CoC7.CreditOutOfRange": "Credit rating should be between {min} and {max}", - "CoC7.BioSections": "백스토리 문단", - "CoC7.BioSectionName": "백스토리 문단 이름", - "CoC7.SpendPoints": "특성치 점수 할당", - "CoC7.RollCharac": "특성치 굴림", - "CoC7.SelectCoreCharac": "주 특성치 선택", - "CoC7.SkillSpecSelectTitle": "Select/create skill of {specialization} specialization", - "CoC7.SkillSelectBase": "Select base value for skill {name}", - "CoC7.SelectSkill": "Select an existing skill", - "CoC7.CreateNewSkill": "새 기능 생성", - - "CoC7.Characteristics": "특성치", - "CoC7.Characteristic": "특성치", - "CoC7.EnableCharacteristics": "특성치 입력", - "CoC7.UsePoints": "점수 사용", - "CoC7.UseRolls": "판정 사용", - "CoC7.CoreCharacteristics": "주 특성치", - "CoC7.BonusPoints": "보너스 포인트", - "CoC7.SuggestedOccupations": "제안 직업", - "CoC7.SuggestedTraits": "제안 성격", - - "CoC7.PutGunAway": "Put your gun away", - "CoC7.DrawGun": "Draw your gun", - - "CoC7.GmTools": "수호자의 도구", - "CoC7.GmNotes": "수호자의 노트", - "CoC7.DevPhase": "성장 단계", - "CoC7.DevPhaseEnabled": "성장 단계 활성화", - "CoC7.DevPhaseDisabled": "성장 단계 비활성화", - "CoC7.CharCreationMode": "캐릭터 생성 모드", - "CoC7.CharCreationEnabled": "캐릭터 생성 모드 활성화", - "CoC7.CharCreationDisabled": "캐릭터 생성 모드 비활성화", - "CoC7.toggleXP": "경험치 습득", - "CoC7.XPGainEnabled": "캐릭터가 경험치를 얻을 수 있습니다", - "CoC7.XPGainDisabled": "캐릭터가 경험치를 얻을 수 없습니다", - "CoC7.WarnNoActorAvailable": "You do not have any actor controlled nor selected", - "CoC7.WarnMacroIncorrectType": "You can create macro for weapons and skills only", - "CoC7.WarnNoGlobalSpec": "You can't create macro for unspecified specializations", - "CoC7.WarnMacroNoItemFound": "No usable item found", - "CoC7.WarnNoControlledActor": "You don't have any controlled actor", - "CoC7.WarnFastTargetWithWrongMOV": "Fast selected on a target with less than 8 MOV. (MOV: {mov})", - "CoC7.WarnTooManyTarget": "Too many target selected. Keeping only last selected target", - - "CoC7.startRest": "휴식 시작", - "CoC7.dreaming": "The Investigators wait dreaming", - "CoC7.healthRecovered": "체력 1점 회복", - "CoC7.pulpHealthRecovered": "Recovered {number} Hit Points", - "CoC7.dailySanLossRestarted": "Daily Sanity loss counter restarted", - "CoC7.magicPointsRecovered": "Magic Points recovered", - "CoC7.hasCriticalWounds": "Unable to recover Hit Points due to Critical Wounds", - "CoC7.quickHealer": "Quick Healer", - - "CoC7.ErrorNoDodgeSkill": "Actor doesn't have a dodge skill", - "CoC7.ErrorNotEnoughLuck": "{actor} didn't have enough luck to pass the check", - "CoC7.ErrorManeuverNotPossible": "Your opponent is too strong for you to perform a maneuver", - "CoC7.ErrorNotFound": "{missing} not found!", - "CoC7.ErrorNotFoundForActor": "{missing} not found for actor {actor}!", - - "CoC7.InfoLessSkillThanOptions": "There's only {skillCount} and {optionsCount} options, adding all of them", - "CoC7.InfoAllSkillsAlreadySelected": "All skills are already selected.", - - "CoC7.MessageCheckRequestedWait": "{check} roll requested by your Keeper.
                              Wait before clicking!
                              ", - "CoC7.MessageTargetCheckRequested": "Your keeper has requested {name} make a {check} roll.", - "CoC7.MessageTitleSelectSingleUserForTarget": "Which user can respond to this attack", - "CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.", - "CoC7.MessageBoutOfMadnessTableNotFound": "The result from the madness table was not found, please check all your roll tables are created", - "CoC7.MessageBoutOfMadnessItemNotFound": "The result from the madness table was not found, please check all your statuses are created", - - "CoC7.DealDamage": "Deal {damage} damage points to {target}?", - "CoC7.NoTargetSelected": "You have not selected a target for your {weapon} check. Do you want to proceed anyway?", - - "CoC7.Import": "Import", - "CoC7.Proceed": "Proceed", - "CoC7.Cancel": "Cancel", - - "CoC7.ActorImporter": "Actor Importer", - "CoC7.ActorImporterSummary": "Import an NPC or Creature from description and stats. Just paste the corresponding plain text", - "CoC7.PasteTheDataBelow": "Paste the raw text data below", - "CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed", - "CoC7.SelectActorType": "액터 타입 선택", - "CoC7.NonPlayingCharacter": "Non Playing Character (NPC)", - "CoC7.Creature": "크리쳐", - "CoC7.ConvertFrom6Edition": "Convert from 6 edition", - "CoC7.Convert": "Convert", - "CoC7.NoConvert": "No Convert", - "CoC7.Guess": "Guess", - "CoC7.English": "English", - "CoC7.Spanish": "Spanish", - "CoC7.French": "French", - "CoC7.Korean": "Korean", - "CoC7.TraditionalChinese": "Traditional Chinese", - "CoC7.SelectSourceLanguage": "Select the source text language", - "CoC7.ImportedUnnamedCharacter": "Imported unnamed character", - "CoC7.CreatedImportedCharactersFolder": "test", - "CoC7.ImportedCharactersFolder": "Imported characters", - "CoC7.ImportSkillItemLocations": "Look for skills/spells/weapons in", - "CoC7.ImportActorItemsNone": "None", - "CoC7.ImportActorItemsItem": "아이템", - "CoC7.ImportActorItemsItemWorldModuleSystem": "Items / World / Modules / System", - "CoC7.ImportActorItemsWorldModuleItemSystem": "World / Modules / Items / System", - - "CoC7.HowToTranslateTitle": "번역 방법", - "CoC7.HowToTranslateWarning": "신뢰할 수 없는 모듈은 설치하지 마십시오.", - "CoC7.HowToTranslateInstallBabele": "Install/Update Babele module from Foundry's module manager.", - "CoC7.HowToTranslateInstallTranslation": "Install/Update Translation from Foundry's module manager.", - "CoC7.HowToTranslateEnableTranslation": "Inside the Game World, under Configuration/Manage Modules activate both Babele and the translations.", - "CoC7.HowToTranslateNoTranslation": "Instructions for creating new language translations are available on existing translation modules.", - - "CoC7.Migrate.Title": "업데이트 필요", - "CoC7.Migrate.Message": "

                              Your world requires an update to run version {version}.

                              Please backup your world folder before starting the upgrade.

                              If you do not update your world the system will not work correctly.

                              The world may be restarted when completed.

                              ", - "CoC7.Migrate.WithModulesMessage": "

                              Your world or modules may require an update to run version {version}.

                              Please backup your world and module folders listed below before starting the upgrade.

                              If you do not update your world the system will not work correctly.

                              The following modules contain actors or items so will also be checked.

                              {modules}

                              The world may be restarted when completed.

                              ", - "CoC7.Migrate.GMRequired": "

                              Your world requires an update to run version {version}.

                              Please wait for your GM to update the system then refresh (F5) this page.

                              ", - "CoC7.Migrate.RestartRequired": "

                              Your world will now restart to enable these changes

                              ", - "CoC7.Migrate.ButtonUpdate": "Update", - "CoC7.Migrate.ButtonSkip": "Skip", - "CoC7.Migrate.ButtonOkay": "Okay", - - "CoC7.Maximize": "최대화", - "CoC7.Summarize": "요약", - - "CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you", - "CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", - "CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2", - - "CoC7.MessageTitleSelectUserToGiveTo": "Give item to another character", - "CoC7.MessageSelectUserToGiveTo": "Which character would you like to give this item to?", - "CoC7.MessageDistanceCalculationFailure": "Unable to calculate distance between tokens, please use the token character sheet.", - - "CoC7.ToolTipSkill": "
                              1. Left click roll check with options
                              2. Shift + Left click Immediate regular difficulty roll
                              1. Right click Opposed check with options
                              2. Shift + Right click Immediate opposed check
                              1. Alt/Option + Right click Combined check with options
                              ", - "CoC7.ToolTipKeeperSkill": "
                              1. CTRL + Left click Create roll link
                              2. {other}
                              ", - "CoC7.ToolTipKeeperStandbySkill": "
                            3. Left click Request a roll from {name}
                            4. ", - "CoC7.ToolTipDB": "
                              1. Left click Immediate regular difficulty roll
                              ", - "CoC7.ToolTipKeeperSanity": "
                            5. CTRL + Alt/Option Create sanity check roll link
                            6. ", - "CoC7.ToolTipAutoToggle": "
                              1. Left click Toggle automatic calculation / manual entry
                              2. ", - "CoC7.ToolTipSkillFlagToggle": "
                                1. Double Click Toggle flag status
                                2. ", - "CoC7.ToolTipSkillFlagged": "Flagged for development", - "CoC7.ToolTipSkillUnflagged": "Not flagged for development", - - "SETTINGS.TitleRules": "룰", - "SETTINGS.TitleInitiative": "초기 세팅", - "SETTINGS.TitleRoll": "주사위 세팅", - "SETTINGS.TitleChatCards": "Chat Cards Settings", - "SETTINGS.TitleScene": "장면 세팅", - "SETTINGS.TitleSheet": "Sheet Settings", - "SETTINGS.TitleGameArtwork": "Game Artwork Settings", - "SETTINGS.TitleWeapon": "Weapon Settings", - "SETTINGS.TitleDiceSoNice": "Dice So Nice Settings", - "SETTINGS.TitleDeveloperDebug": "Developer And Debug Settings", - "SETTINGS.TitleRollTable": "", - "SETTINGS.DebugMode": "System Debug Mode", - "SETTINGS.DebugModeHint": "!!재시작 필요!!", - "SETTINGS.DefautDifficulty": "Default check difficulty", - "SETTINGS.DefaultDifficultyHint": "You can choose the default difficulty for checks. Unknown will roll checks without the player knowing the check difficulty.", - "SETTINGS.CheckDifficultyRegular": "Default difficulty", - "SETTINGS.CheckDifficultyUnknown": "Unknown difficulty", - "SETTINGS.showIconsOnly": "On summarized sheet, show only icons on skills list.", - "SETTINGS.UseToken": "Use token image", - "SETTINGS.UseTokenHint": "Use token image instead of portraits in chat-cards", - "SETTINGS.DisplayActorOnCard": "Display actor on card", - "SETTINGS.DisplayActorOnCardHint": "Display the actor's image/token on combat chat-cards", - "SETTINGS.InitiativeRule": "Select initiative rule", - "SETTINGS.InitiativeRuleHint": "You can select basic initiative rule (using DEX value) or optional rule (using a roll)", - "SETTINGS.InitiativeRuleBasic": "Basic", - "SETTINGS.InitiativeRuleOptional": "Optional", - "SETTINGS.displayInitDices": "Display init dice", - "SETTINGS.displayInitDicesHint": "Display the dices when rolling for initiative (Optional rules only)", - "SETTINGS.displayInitAsText": "Display init text", - "SETTINGS.displayInitAsTextHint": "Display initiative as text instead of number (Optional rules only)", - "SETTINGS.PulpRules": "Pulp rules", - "SETTINGS.PulpRulesHint": "Alow the usage of Pulp Rules (Archetype, Talent, HP), !early implementation!", - "SETTINGS.developmentRollForLuck": "Recoverable Luck points", - "SETTINGS.developmentRollForLuckHint": "Each player can make an improvement check for their Luck on Development Phase", - "SETTINGS.displayPlayerNameOnSheet": "Display player's name on sheet", - "SETTINGS.DisregardAmmo": "Disregard Ammo count.", - "SETTINGS.DisregardAmmoHint": "Enabling this will not take in account the number of bullets loaded in the gun.", - "SETTINGS.DisregardUsePerRound": "Disregard Uses per Rounds.", - "SETTINGS.DisregardUsePerRoundHint": "Enabling this will allow you to fire as much as you want, regardless of the uses per round of the weapon.", - "SETTINGS.RestrictGridSpaces": "Restrict measurement to grid spaces", - "SETTINGS.RestrictGridSpacesHint": "For range combat, if selected the distances will be measured in grid spaces, if not the 'real' (euclidean) distance will be used.", - "SETTINGS.StatusPlayerEditable": "Player can modify status", - "SETTINGS.StatusPlayerEditableHint": "Let your player modify their status (prone, unconscious, dying, dead) and reset their daily SAN loss", - "SETTINGS.SyncDice3D": "[DsN] Sync dice", - "SETTINGS.SyncDice3DHint": "When using DsN, sync dice between clients", - "SETTINGS.UnitDieColorset": "[DsN] Unit die colorset", - "SETTINGS.UnitDieColorsetHint": "When using DsN, colorset to use for unit die. (leave blank to use player default)", - "SETTINGS.TenDieNoMod": "[DsN] Ten die colorset", - "SETTINGS.TenDieNoModHint": "When using DsN, colorset to use for single ten die. (leave blank to use player default)", - "SETTINGS.TenDieBonus": "[DsN] Ten bonus dice colorset", - "SETTINGS.TenDieBonusHint": "When using DsN, colorset to use for ten bonus dice. (leave blank to use player default)", - "SETTINGS.TenDiePenalty": "[DsN] Ten penalty dice colorset", - "SETTINGS.TenDiePenaltyHint": "When using DsN, colorset to use for penalty bonus dice. (leave blank to use player default)", - "SETTINGS.OverrideGameArtwork": "Override game Artwork", - "SETTINGS.OverrideGameArtworkHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default", - "SETTINGS.ArtPauseImage": "Pause image", - "SETTINGS.ArtPauseImageHint": ". Type 'null' to remove image", - "SETTINGS.ArtPauseText": "Pause text", - "SETTINGS.ArtPauseTextHint": "Leave blank for default", - "SETTINGS.OverrideSheetArtwork": "Override Sheet Artwork", - "SETTINGS.OverrideSheetArtworkHint": "!!RESTART REQUIRED!! gives access to advance sheet config, leave blank for default", - "SETTINGS.ArtWorkSheetBackground": "Character sheet background", - "SETTINGS.ArtWorkSheetBackgroundHint": "type 'null' to remove background, blank for default", - "SETTINGS.ArtWorkSheetBackgroundType": "Background type", - "SETTINGS.BackgroundSlice": "Background image will be sliced (css:border-image)", - "SETTINGS.BackgroundAuto": "Scales the image maintening proportions (css:auto)", - "SETTINGS.BackgroundContain": "Scales to fill without croping/stretching (css:contain)", - "SETTINGS.BackgroundCover": "Scales to fill with croping/stretching (css:cover)", - "SETTINGS.ArtWorkOtherSheetBackground": "Other sheet background", - "SETTINGS.ArtWorkOtherSheetBackgroundHint": "type 'null' to remove background. Only for items and vehicle for now", - "SETTINGS.ArtworkSheetImage": "Character sheet image", - "SETTINGS.ArtworkSheetImageHint": "type 'null' to remove image", - "SETTINGS.ArtworkFrontColor": "Main color", - "SETTINGS.ArtworkFrontColorHint": "Used for all elements", - "SETTINGS.ArtworkBackgroundColor": "Secondary color", - "SETTINGS.ArtworkBackgroundColorHint": "Used for background and inputs", - "SETTINGS.ArtworkInteractiveColor": "Interactive elements color", - "SETTINGS.ArtworkInteractiveColorHint": "Used for interactives/rollables elements", - "SETTINGS.ArtworkFixedSkillLength": "Limit skill name length", - "SETTINGS.ArtworkFixedSkillLengthHint": "The skill length in the skill tab will be limited for a more compact sheet", - "SETTINGS.ArtworkMainFont": "Main font", - "SETTINGS.ArtworkMainFontBold": "Main font (bold)", - "SETTINGS.ArtworkMainFontSize": "Default font size (px)", - "SETTINGS.BoutOfMadnessSummaryTable": "Bout of madness (Summary) table", - "SETTINGS.BoutOfMadnessRealTimeTable": "Bout of madness (Real Time) table", - "SETTINGS.LetKeeperDecide": "Let keeper decide", - "SETTINGS.DisplayResultType": "Display dice result type (text)", - "SETTINGS.DisplayCheckSuccessLevel": "Display check level of success (stars)", - "SETTINGS.PlayerUnlockSheetMode": "Player can unlock sheet", - "SETTINGS.AlwaysEditable": "always", - "SETTINGS.CreationModeOnly": "in creation mode only", - "SETTINGS.NeverEditable": "never (Keeper only)", - "SETTINGS.StanbyGMRolls": "Standby Keeper rolls", - "SETTINGS.StanbyGMRollsHint": "When the Keeper is making a roll from an assigned character sheet, display a roll button instead of rolling", - "SETTINGS.AllowFlatDiceModifier": "Flat dice modifier", - "SETTINGS.AllowFlatDiceModifierHint": "Allows dice roll results to be modified by a flat value.", - "SETTINGS.AllowFlatThresholdModifier": "Flat value modifier", - "SETTINGS.AllowFlatThresholdModifierHint": "Allows checks success value to be modified by a flat value.", - "SETTINGS.OpposedRollTieBreaker": "Opposed rolls Viriato139ac tie breaker", - "SETTINGS.OpposedRollTieBreakerHint": "In case of a tie during opposed roll, winner is determined by highest rolled value, not higher skill.", - "SETTINGS.SelfRollWhisperTarget": "Self roll notification:", - "SETTINGS.SelfRollWhisperTargetHint": "As a GM, when doing self check roll, who do you want to send a notification to.", - "SETTINGS.DoNotAdvise": "Keep it for yourself.", - "SETTINGS.AdviseOwnersOnly": "Notify actor's owner", - "SETTINGS.AdviseAllPlayer": "Notify all players", - "SETTINGS.OneBlockBackStory": "One block backstory", - "SETTINGS.OneBlockBackStoryHint": "Turn backstory to one editor block, but you can format/add links.", - "SETTINGS.EnableStatusIcons": "Enable status icons", - "SETTINGS.EnableStatusIconsHint": "Set if combat and sanity effects icons are shown in tokens.", - "SETTINGS.ShowExperimentalFeatures": "Show Experimental Features", - "SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds", - "CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.", - "SETTINGS.CheckElevation": "Include elevation in distance", - "SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations", - "CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never" - } + "I18N.LANGUAGE": "ko", + + "CoC7.title": "크툴루의 부름 7th Edition (비공식)", + + "CoC7.Entities.Character": "캐릭터", + "CoC7.Entities.Container": "Container", + "CoC7.Entities.Creature": "크리쳐", + "CoC7.Entities.Npc": "NPC", + "CoC7.Entities.Vehicle": "탈것", + + "CoC7.Entities.Archetype": "캐릭터 타입", + "CoC7.Entities.Book": "서적", + "CoC7.Entities.Chase": "추격", + "CoC7.Entities.Item": "아이템", + "CoC7.Entities.Occupation": "직업", + "CoC7.Entities.Setup": "초기설정", + "CoC7.Entities.Skill": "기능", + "CoC7.Entities.Spell": "주문", + "CoC7.Entities.Status": "Status", + "CoC7.Entities.Talent": "Talent", + "CoC7.Entities.Weapon": "무기", + + "CHARAC.STR": "근력", + "CHARAC.Strengh": "근력", + "CHARAC.Strength": "근력", + "CHARAC.CON": "건강", + "CHARAC.Constitution": "건강", + "CHARAC.SIZ": "크기", + "CHARAC.Size": "크기", + "CHARAC.DEX": "민첩성", + "CHARAC.Dexterity": "민첩성", + "CHARAC.APP": "외모", + "CHARAC.Appearance": "외모", + "CHARAC.INT": "지능", + "CHARAC.Intelligence": "지능", + "CHARAC.POW": "정신력", + "CHARAC.Power": "정신력", + "CHARAC.EDU": "교육", + "CHARAC.Education": "교육", + "CoC7.PlayerName": "플레이어", + "CoC7.Name": "이름", + "CoC7.Archetype": "캐릭터 타입", + "CoC7.Occupation": "직업", + "CoC7.Age": "나이", + "CoC7.Sex": "성별", + "CoC7.Residence": "거주지", + "CoC7.Birthplace": "출생지", + "CoC7.Organization": "소속", + "CoC7.HitPoints": "체력", + "CoC7.HP": "HP", + "CoC7.MagicPoints": "마력", + "CoC7.MP": "MP", + "CoC7.SanityPoints": "이성", + "CoC7.Sanity": "이성", + "CoC7.SAN": "이성", + "CoC7.DailySanLoss": "일일 이성 손실", + "CoC7.DailyLoss": "일일 손실", + "CoC7.Luck": "운", + "CoC7.Movement": "이동력", + "CoC7.Mov": "이동력", + "CoC7.BonusDamage": "피해 보너스", + "CoC7.DB": "피해", + "CoC7.Build": "체격", + "CoC7.Skills": "기능", + "CoC7.Skill": "기능", + "CoC7.Combat": "전투", + "CoC7.Possessions": "소지품", + "CoC7.Background": "백스토리", + "CoC7.Notes": "메모", + "CoC7.DailySanIconOver": "초기화", + "CoC7.Prone": "쓰러짐", + "CoC7.Unconsious": "의식불명", + "CoC7.CriticalWounds": "중상", + "CoC7.Dying": "빈사", + "CoC7.DyingCheck": "건강에 의한 사망판정", + "CoC7.Dead": "사망", + "CoC7.Resist": "저항", + "CoC7.UnderlyingInsanity": "잠재적 광기", + "CoC7.TemporaryInsanity": "일시적 광기", + "CoC7.IndefiniteInsanity": "장기적 광기", + "CoC7.NotInsane": "None", + "CoC7.UnlockActor": "액터 해금", + "CoC7.LockActor": "액터 잠금", + "CoC7.NpcRollCharacteristics": "특성치 굴림", + "CoC7.NpcAvarageCharacteristics": "특성치 평준화", + "CoC7.NpcCharacteristicsFormula": "수식", + "CoC7.NpcCharacteristicsValues": "값", + "CoC7.language": "언어", + "CoC7.Author": "저자", + "CoC7.Date": "날짜", + "CoC7.Spells": "주문", + "CoC7.Spell": "주문", + "CoC7.Spells&Notes": "주문과 서적", + "CoC7.Weapons": "장비", + "CoC7.Effects": "효과", + "CoC7.Cost": "비용", + "CoC7.Source": "출처", + "CoC7.SpellDetails": "주문 상세", + "CoC7.Details": "상세", + "CoC7.Other": "기타", + "CoC7.rounds": "라운드", + "CoC7.hours": "시간", + "CoC7.weeks": "주", + "CoC7.remove": "제거", + "CoC7.Any": "또는", + "CoC7.All": "모두", + "CoC7.Success": "성공", + "CoC7.CustomLabel": "커스텀 라벨", + "CoC7.SpecificLocations": "특정 장소", + "CoC7.ArmourPlating": "무장 방어복", + "CoC7.Location": "위지", + "CoC7.Properties": "기능", + "CoC7.Attributes": "속성", + "CoC7.Attribute": "속성", + "CoC7.Collapse": "축소", + "CoC7.Expand": "확장", + "CoC7.Blind": "실명", + "CoC7.Label": "라벨", + "CoC7.Icon": "아이콘", + "CoC7.Check": "판정", + "CoC7.ItemWeapon": "아이템 (무기)", + "CoC7.AttacksPerRound": "라운드당 공격횟수", + + "CoC7.Cast": "Cast", + "CoC7.SanityCost": "이성 조건", + "CoC7.PowerCost": "정신력 조건", + "CoC7.HitPointsCost": "체력 조건", + "CoC7.MagicPointsCost": "마력 조건", + "CoC7.OtherCosts": "기타 조건", + "CoC7.CastingSpell": "{spell} 주문 시전.", + + "CoC7.CopyToClipboard": "클립보드에 복사", + "CoC7.WhisperToSelection": "선택한 토큰에 귓속말", + "CoC7.WhisperTo": "귓속말: ", + "CoC7.SendToChat": "채팅송신", + + "CoC7.RegularSuccess": "보통 성공", + "CoC7.HardSuccess": "어려운 성공", + "CoC7.ExtremeSuccess": "극단적 성공", + "CoC7.CriticalSuccess": "대성공", + "CoC7.Fumble": "대실패", + "CoC7.Failure": "실패", + "CoC7.Malfunction": "{itemName} 이(가) 고장났습니다", + + "CoC7.Dice": "주사위", + "CoC7.DiceModifierBonus": "주사위", + "CoC7.DiceModifierPenalty": "패널티", + "CoC7.Modifiers": "수정", + "CoC7.BonusDice": "보너스 주사위", + "CoC7.UnitsDie": "1 단위 주사위", + "CoC7.TensDie": "10면주사위", + "CoC7.TensDice": "10면주사위", + "CoC7.SuccessRequired": "{successRequired} 성공이 필요합니다.", + "CoC7.Roll": "판정", + "CoC7.Pushing": "강행", + "CoC7.PushingSkill": ": 기능 강행판정!", + "CoC7.PushSkill": "강행", + "CoC7.PushedRoll": "(강행판정)", + "CoC7.SpendLuck": "성공하기 위해 {luckNeededValue} 의 행운 소모", + "CoC7.LuckSpent": "{luckAmount} 성공하기 위해 행운 소모", + "CoC7.LuckSpentAlt": "행운 소모", + "CoC7.LuckError": "{actorName} 은(는) 판정에 필요한 행운이 모자랍니다", + "CoC7.check.AutoSuccess": "자동. 성공", + "CoC7.check.AutoFailure": "자동. 실패", + "CoC7.RevealCheck": "판정 공개", + "CoC7.RevealSanLoss": "이성 손실 공개", + "CoC7.check.ForcePass": "강제 통과", + "CoC7.check.ForceFail": "강제 실패", + "CoC7.check.FlagForDevelopment": "경험치 보상", + "CoC7.IncreaseSuccessLevel": "성공율 증가", + "CoC7.check.DecreaseSuccessLevel": "성공율 감소", + "CoC7.RollSecretDice": "수호자가 몇개의 주사위를 굴렸습니다", + "CoC7.KeeperSentDecoy": "플레이어가 눈속임판정을 받았습니다", + "CoC7.FakeRoll": "플레이어에게 눈속임판정을 보냅니다", + + "CoC7.ConstitutionCheck": "건강 판정", + + "CoC7.SanDataSelectionWindow": "이성치 손실 선택", + "CoC7.BonusSelectionWindow": "보너스 선택 창", + "CoC7.BonusSelectionWindowNamed": "{name} 판정을 위해 난이도를 선택합니다", + "CoC7.SkillDetailsWindow": "상세 기능 창", + "CoC7.RegularDifficulty": "보통", + "CoC7.HardDifficulty": "어려움", + "CoC7.ExtremeDifficulty": "극단적", + "CoC7.CriticalDifficulty": "대성공", + "CoC7.UnknownDifficulty": "난이도 미공개", + "CoC7.RollDifficulty": "난이도 판정", + "CoC7.RollThreshold": "역치 판정", + "CoC7.FlatDiceModifier": "Flat dice modifier", + "CoC7.FlatModifier": "Flat modifier", + "CoC7.RollDifficultyUnknown": "난이도 미공개", + "CoC7.RollDifficultyRegular": "보통", + "CoC7.RollDifficultyHard": "어려움", + "CoC7.RollDifficultyExtreme": "극단적", + "CoC7.RollDifficultyCritical": "대성공", + "CoC7.RollResult.LuckSpendText": "{luckAmount} 의 행운을 써서, {successLevel} 성공입니다", + "CoC7.RollDice": "판정 !", + "CoC7.CreateLink": "링크 생성", + "CoC7.SuccesLevelHint": "{value} 난이도의 성공", + "CoC7.FailureLevelHint": "{value} 난이도로 인해 실패", + "CoC7.CombinedRollCard": "Combined roll card", + "CoC7.OpposedRollCard": "Opposed roll card", + "CoC7.CombinedAnyHint": "하나 이상 판정에 성공", + "CoC7.CombinedAllHint": "모든 판정에 성공", + "CoC7.CloseCard": "카드 닫음", + + "CoC7.CheckResult": "{name} 판정 ({value}%) - {difficulty} 난이도", + "CoC7.ItemCheckResult": "{item} - {skill} 판정 ({value}%) - {difficulty} 난이도", + "CoC7.CheckRawValue": "({rawvalue}%) - {difficulty} 난이도", + + "CoC7.ArmorAbsorbsDamage": "방어구가 무시한 총 피해", + "CoC7.Critical": "치명상", + "CoC7.Impale": "관통상", + "CoC7.CriticalTitle": "치명상을 입었다", + "CoC7.ImpaleTitle": "이 무기는 관통할 수 있다", + "CoC7.Target": "대상", + "CoC7.TargetOutOfRange": "범위밖 대상", + "CoC7.NoTargetToDamage": "피해를 입힐 대상이 없음", + "CoC7.ShotIsImpossible": "사격 불가", + "CoC7.OutOfAmmo": "탄약 고갈", + "CoC7.OutOfShots": "사정거리 밖", + + "CoC7.BonusDamageRoll": "피해 보너스 판정", + "CoC7.Type": "유형", + "CoC7.FightBack": "반격", + "CoC7.Dodge": "회피", + "CoC7.Maneuver": "조종", + "CoC7.NoResponse": "응답없음", + "CoC7.OutNumbered": "수적열세", + "CoC7.combatCard.surprised": "기습", + "CoC7.combatCard.autoSuccess": "자동성공", + "CoC7.Advantage": "이점", + "CoC7.Disadvantage": "불이익", + "CoC7.TitleAdvantage": "보너스 주사위 1 추가 (대상이 쓰러지거나 저지됨...)", + "CoC7.TitleDisadvantage": "패널티 주사위 1 추가 (쓰러지거나 저지당함...)", + "CoC7.TitleOutNumbered": "수적열세의 대상에 대해 보너스 주사위 1 추가", + "CoC7.TitleSurprised": "대상을 기습함에 따라 보너스 주사위 1 추가", + "CoC7.TitleAutoSuccess": "공격 자동 명중", + "CoC7.WinnerRollDamage": "{name} 승리. 피해 판정.", + "CoC7.InitiatorMissed": "{name} 놓침.", + "CoC7.NoWinner": "양쪽 모두 실패.", + "CoC7.DodgeSuccess": "{name} 회피함!", + "CoC7.ManeuverSuccess": "{name} 조종이 성공적이었음.", + "CoC7.AttackSuccess": "{name} 유효타를 입힘.", + "CoC7.InflictPain": "고통을 입힘", + "CoC7.AdvantageAttacker": "우위: 공격측", + "CoC7.AdvantageDefender": "우위: 방어측", + "CoC7.Tie": "Tie", + "CoC7.DamageInflicted": "피해 반영됨", + "CoC7.TotalDamage": "총 피해", + + "CoC7.combatCard.dive4cover": "Dive for Cover", + + "CoC7.rangeCombatCard.SingleShot": "사격(단발)", + "CoC7.rangeCombatCard.MultipleShots": "사격(연발)", + "CoC7.AutomaticFire": "반자동 사격", + "CoC7.rangeCombatCard.Burst": "집중 사격", + "CoC7.rangeCombatCard.FullAuto": "전자동", + "CoC7.rangeCombatCard.BaseRange": "단거리", + "CoC7.rangeCombatCard.LongRange": "중거리", + "CoC7.rangeCombatCard.ExtremeRange": "장거리", + "CoC7.rangeCombatCard.OutOfRange": "사거리 밖", + "CoC7.rangeCombatCard.Cover": "은엄폐", + "CoC7.rangeCombatCard.PointBlankRange": "Point blank range", + "CoC7.rangeCombatCard.NormalTarget": "보통 대상", + "CoC7.rangeCombatCard.BigTarget": "큰 대상", + "CoC7.combatCard.SmallTarget": "작은 대상", + "CoC7.rangeCombatCard.FastMovingTarget": "Fast", + "CoC7.rangeCombatCard.InMelee": "근접전", + "CoC7.rangeCombatCard.aiming": "조준", + "CoC7.rangeCombatDamage": "{name} 이(가) {total} 의 피해를 입었습니다", + "CoC7.rangeCombatDamageArmor": "{name} 이(가) {total} 의 피해를 입었습니다. ({armor} 경감)", + "CoC7.RollDamage": "피해 판정", + "CoC7.BulletsFired": "Bullets fired", + "CoC7.Shots": "발포횟수", + "CoC7.Shoot": "사격", + "CoC7.ShotBullets": "{bullets} 탄약을 {actor}에게 쏩니다.", + "CoC7.ShotVoley": "Shooting a voley of {bullets} bullets at target {actor}.", + "CoC7.rangeCombatCard.AimingTitle": "첫 사격에 보너스 주사위 1개 추가", + "CoC7.rangeCombatCard.CoverTitle": "패널티 주사위 1개. 대상이 엄폐했거나 성공적으로 지원을 받았습니다.", + "CoC7.rangeCombatCard.PointBlankRangeTitle": "보너스 주사위 1개. 지근거리 내 대상", + "CoC7.rangeCombatCard.BigTargetTitle": "큰 대상에 대해 보너스 주사위 1개 (체격 > 4)", + "CoC7.rangeCombatCard.SmallTargetTitle": "작은 대상에 대해 패널티 주사위 1개", + "CoC7.rangeCombatCard.NormalTargetTitle": "보통 크기의 대상. 어떤 패널티/보너스도 없습니다", + "CoC7.rangeCombatCard.InMeleeTitle": "패널티 주사위 1개. 대상이 근접 전투에 들어갔습니다", + "CoC7.rangeCombatCard.FastMovingTargetTitle": "패널티 주사위 1개. 대상이 빠르고 (MOV 8+) 최고 속도로 움직입니다", + + "CoC7.meleeCombatDamageTakes": "takes", + "CoC7.meleeCombatDamageFrom": "from", + "CoC7.meleeCombatDamageDeals": "deals", + "CoC7.meleeCombatDamageWith": "with", + + "CoC7.DropZone": "DropZone", + + "CoC7.Value": "수치", + "CoC7.SkillValue": "기능 수치", + "CoC7.SkillBase": "기본", + "CoC7.BaseSkillValue": "기본 기능 수치", + "CoC7.SkillExperience": "경험치", + "CoC7.SkillArchetype": "캐릭터 타입", + "CoC7.SkillOccupation": "직업 기능", + "CoC7.SkillPersonal": "관심 기능", + + "CoC7.SkillTotalExperience": "경험치 점수", + "CoC7.SkillTotalArchetype": "캐릭터 타입 점수", + "CoC7.SkillTotalOccupation": "직업 점수", + "CoC7.SkillTotalPersonal": "관심 기능 점수", + "CoC7.CharacteristicsPoints": "특성치 점수", + "CoC7.TotalPoints": "총 직업 기능 점수", + + "CoC7.ItemQuantity": "양", + "CoC7.ItemWeight": "무게", + "CoC7.ItemDetails": "상세", + "CoC7.Description": "설명", + "CoC7.Reload": "좌/우 클릭 : 1의 탄종을 장탄/제거 \nShift + 좌/우 클릭 : 재장전/비우기", + "CoC7.WeaponRange": "사거리", + "CoC7.WeaponDamage": "피해량", + "CoC7.Weapon.BlastRadius": "폭발 범위", + "CoC7.WeaponMalfunction": "고장", + "CoC7.WeaponUsesPerRound": "라운드당 사용횟수", + "CoC7.WeaponUsesPerRoundHint": "라운드당 공격횟수 (1/3 : 매 3번의 라운드당 1번의 공격)", + "CoC7.WeaponSheet.RoundsPerUse.Info": "발사준비가 될때까지 걸리는 라운드", + "CoC7.WeaponMax": "최대 라운드당 사용횟수", + "CoC7.BurstSize": "점사 규모", + "CoC7.BurstSizeHint": "점사당 몇발의 탄 소모", + "CoC7.WeaponBulletsInMag": "탄창", + "CoC7.WeaponSpecial": "특수", + "CoC7.ItemPrice": "가격", + "CoC7.Armor": "방어구", + + "CoC7.EraNvct": "인빅터스", + "CoC7.EraDrka": "암흑기", + "CoC7.EraDdts": "더 어두운 오솔길로", + "CoC7.EraGlit": "가스등의 크툴루", + "CoC7.Era1920": "1920s", + "CoC7.EraPulp": "펄프 크툴루", + "CoC7.EraMdrn": "현대", + "CoC7.Eras": "크툴루 배경", + + "CoC7.SkillNoAdjustments": "수정 불가", + "CoC7.SkillNoXpGain": "경험치 습득 불가", + "CoC7.SkillSpecial": "전문화", + "CoC7.SkillRarity": "희귀", + "CoC7.SkillPush": "강행", + "CoC7.SkillCombat": "근접전(격투)", + "CoC7.SkillFighting": "근접전(무장)", + "CoC7.SkillFirearm": "사격", + + "CoC7.WeaponRngd": "원거리", + "CoC7.WeaponProperyManeuver": "가동 기능", + "CoC7.WeaponTouch": "접촉", + "CoC7.WeaponImpl": "관통", + "CoC7.WeaponRare": "희귀", + "CoC7.WeaponAhdb": "+DB/2", + "CoC7.WeaponAddb": "+DB", + "CoC7.WeaponSlnt": "소음", + "CoC7.WeaponXplv": "폭파", + "CoC7.WeaponBrst": "점사", + "CoC7.WeaponAuto": "전자동", + "CoC7.WeaponSpcl": "특수", + "CoC7.WeaponMont": "Mounted", + "CoC7.WeaponDbrl": "Dual barrel", + "CoC7.WeaponBlst": "폭발", + "CoC7.WeaponStun": "기절", + "CoC7.Weapon.Property.Melee": "근접", + "CoC7.Weapon.Property.Thrown": "투척", + "CoC7.Weapon.Property.Burn": "발화", + "CoC7.Weapon.Property.Shotgun": "산탄총", + + "CoC7.ErrorItem": "아이템을 찾을 수 없습니다", + "CoC7.ErrorActor": "액터를 찾을 수 없습니다", + "CoC7.ErrorInvalidFormula": "{value}은(는) 유효한 수식이 아닙니다.", + "CoC7.ErrorInvalid": "무효", + "CoC7.Validate": "승인", + "CoC7.Apply": "적용", + + "CoC7.NewBioSectionName": "새 단락", + + "CoC7.DodgeSkillName": "회피", + "CoC7.CthulhuMythosName": "크툴루 신화", + "CoC7.CreditRatingSkillName": "신용 등급", + "CoC7.DriveAutoSkillName": "자동 운행", + "CoC7.FightingSpecializationName": "근접전", + "CoC7.FirearmSpecializationName": "사격", + "CoC7.DriveSpecializationName": "운전", + "CoC7.PilotSpecializationName": "조종", + "CoC7.AnySpecName": "Any", + "CoC7.BoutOfMadnessName": "광기", + "CoC7.InsanityName": "광기", + + "CoC7.NewSkillName": "새 기능", + "CoC7.AddSkill": "기능 추가", + "CoC7.DevelopemmentPhase": "성장 단계", + "CoC7.RecoverLuckPoints": "행운 점수 회복", + "CoC7.SkillCantGainXp": "기능이 자동으로 경험치를 얻지 못합니다.", + "CoC7.SkillUnflagForDevelopement": "성장 비표시", + "CoC7.SkillFlagForDevelopement": "성장 표시", + "CoC7.RollAll4Dev": "성장할 모든 기능에 대해 판정", + "CoC7.RollLuck4Dev": "행운점수 성장에 대해 판정", + "CoC7.DevRollTitle": "{item}성장에 대해 판정: {die}/{score}%", + "CoC7.DevSuccessDetails": "{item} 이(가) {augment} 만큼 향상%", + "CoC7.SanGained": "Gained 2d6 ({results} = {sanGained}) Sanity after mastering {skill} with a {skillValue}%", + "CoC7.DevFailureDetails": "{item}이(가) 향상되지 않음", + "CoC7.DevSuccess": "{item} upgraded ({die}/{score}%) by {augment}%", + "CoC7.DevFailure": "{item} NOT upgraded ({die}/{score}%)", + "CoC7.LuckIncreased": "Luck recovered ({die}/{score}) by {augment} points", + "CoC7.LuckNotIncreased": "Luck NOT recovered ({die}/{score})", + "CoC7.DevelopAttribWarn": "성장/생성중인 속성에 접근할 수 없습니다.", + "CoC7.SkillDetail": "상세", + "CoC7.EditSkill": "기능 편집", + "CoC7.DeleteSkill": "기능 제거", + "CoC7.RangeSkills": "원거리 기능", + "CoC7.MeleeSkills": "근접전 기능", + "CoC7.NewItemName": "새 아이템", + "CoC7.AddItem": "아이템 추가", + "CoC7.EditItem": "아이템 편집", + "CoC7.DeleteItem": "아이템 삭제", + "CoC7.TradeItem": "아이템 교환 / 소지 ", + "CoC7.SortBySkillName": "기능 이름으로 정렬", + "CoC7.SortBySkillValue": "기능 퍼센트로 정렬", + "CoC7.UncommonSkillsShow": "희귀 기능 표시", + "CoC7.UncommonSkillsHide": "희귀 기능 숨김", + + "CoC7.NewBookName": "새로운 서적", + "CoC7.AddBook": "서적 추가", + "CoC7.NewSpellName": "새로운 주문", + "CoC7.AddSpell": "주문 추가", + + "CoC7.AddWeapon": "무기 추가", + "CoC7.NewWeaponName": "새로운 무기", + "CoC7.EditWeapon": "무기 편집", + "CoC7.DeleteWeapon": "무기 삭제", + "CoC7.MeleeWeapons": "근접 무기", + "CoC7.RangeWeapons": "원거리 무기", + "CoC7.WeaponName": "이름", + "CoC7.WeaponSkill": "기능", + "CoC7.WeaponSkillAlt": "Alt-skill", + "CoC7.Inventory": "소지품", + "CoC7.InventoryIsCurrentlyEmpty": "현재 소지품이 없습니다.", + "CoC7.CharacterDevelopment": "성장", + "CoC7.OccupationSkill": "직업 기능", + "CoC7.ArchetypeSkill": "캐릭터 타입 기능", + "CoC7.UseFormula": "주사위 판정 사용", + "CoC7.EnterFormula": "수식 입력", + "CoC7.SanRollHint": "대상에 대한 이성수치 판정", + "CoC7.SANCheckTitle": "이성 감소 : {name} ({sanMin}/{sanMax})", + "CoC7.NoSkill": "기능 없음", + "CoC7.AddWeapontHint": "

                                  {actor} doesn't have a {weapon}.
                                  Do you want to create one ?

                                  ", + + "CoC7.LinkCheck": " {name} 판정", + "CoC7.LinkCheckDiff": "[{difficulty}] {name} 판정", + "CoC7.LinkCheckModif": " {name} 판정({modifier})", + "CoC7.LinkCheckDiffModif": "[{difficulty}] {name} 판정({modifier})", + "CoC7.LinkSanLoss": " 이성 감소 ({sanMin}/{sanMax})", + "CoC7.LinkSanLossDiff": "[{difficulty}] 이성 감소 ({sanMin}/{sanMax})", + "CoC7.LinkSanLossModif": " 이성 감소({modifier}) ({sanMin}/{sanMax})", + "CoC7.LinkSanLossDiffModif": "[{difficulty}] 이성 감소({modifier}) ({sanMin}/{sanMax})", + "CoC7.LinkItem": " {name}", + "CoC7.LinkItemDiff": "[{difficulty}] {name}", + "CoC7.LinkItemModif": " {name} ({modifier})", + "CoC7.LinkItemDiffModif": "[{difficulty}] {name} ({modifier})", + + "CoC7.ManualCreditValues": "Manual Credit Values", + "CoC7.MonetarySymbol": "상징 :", + "CoC7.MonetaryFactor": "요인 :", + "CoC7.AutoCreditValues": "자동 계산 토글", + "CoC7.MonetarySpendingLevel": "레벨 사용 :", + "CoC7.MonetaryCash": "현금 :", + "CoC7.MonetarySpent": "지출 :", + "CoC7.MonetaryAssets": "자산 :", + "CoC7.MonetaryAssetsDetails": "자산 상세", + + "CoC7.PossessionsNotes": "메모 :", + "CoC7.PossessionsNotesHolder": "메모", + + "CoC7.BackgroundNewSection": "새로운 문단 추가", + "CoC7.BackgroundSectionNameHolder": "문단 제목 입력", + "CoC7.BackgroundDeleteSection": "문단 삭제", + "CoC7.BackgroundSectionMoveUp": "위로", + "CoC7.BackgroundSectionMoveDown": "아래로", + + "CoC7.creatureFightingSkill": "근접전", + + "CoC7.InvoluntaryAction": "원치 않는 행동", + "CoC7.InvoluntaryActionPerfomed": "원치 않는 행동을 수행했습니다", + "CoC7.SanityCheck": "이성 판정", + "CoC7.IntCheck": "지능 판정", + "CoC7.NoSanLoss": "이성 손실 없음", + "CoC7.SANLoss": "이성 손실", + "CoC7.SanityCheckPerformed": "트라우마적 사건에 노출되었습니다.", + "CoC7.InvoluntaryActionPerformed": "잠시동안 스스로 제어할 수 없습니다.", + "CoC7.SanityLost": "이성치 손실", + "CoC7.MemoryRepressed": "당신은 그 기억을 상기시키고 당신의 무의식에 묻습니다.", + "CoC7.RememberEverything": "당신은 모든것을 기억합니다.", + "CoC7.BoutOfMadnesslasted": "당신의 장기적 광증이 지속됩니다.", + "CoC7.EnteringBoutOfMadness": "당신은 장기적 광증을 경험합니다.", + "CoC7.GrowingAccustomedToAwfulness": "당신은 공포에 익숙해집니다. (당신의 이성치 손실이 제한됩니다).", + "CoC7.ImmuneToAwfulness": "당신의 의식은 이런 두려움에 영향을 받지 않습니다. (이성치 손실 없음).", + "CoC7.InvestigatorPhobiaGained": "탐사자가 공포증을 가집니다", + "CoC7.PhobiaGained": "당신은 공포증을 가집니다", + "CoC7.InvestigatorManiaGained": "탐사자가 열광증을 가집니다", + "CoC7.ManiaGained": "당신은 열광증을 가집니다", + "CoC7.AlreadyUnderlyingInsanity": "탐사자는 이미 내재된 광기상태입니다.", + "CoC7.IndefinitelyInsane": "당신은 장기적으로 미치게됩니다.", + "CoC7.TemporaryInsane": "당신은 일시적으로 미치게됩니다", + "CoC7.GoodForAsylum": "You're good to be sent to the asylum", + "CoC7.BoutOfMadness": "Bout of madness", + "CoC7.BoutRealTime": "Bout of madness: Real time", + "CoC7.BoutSummary": "Bout of madness: Summary", + "CoC7.EndBoutOfMadness": "End bout of madness", + "CoC7.InsanityType": "광기의 종류", + "CoC7.Phobia": "공포증", + "CoC7.Mania": "열광증", + "CoC7.MaxSanloss": "최대 손실", + "CoC7.MinSanloss": "최소 손실", + "CoC7.AlreadyLost": "이미 잃어버림", + "CoC7.CreatureMaxLoss": "Creature max loss", + "CoC7.MaxLossToCreature": "Max loss to this creature", + "CoC7.ResetCreatureSan": "Reset creature's history", + "CoC7.ResetSpecieSan": "Reset specie's history", + "CoC7.KeepData": "Keep creature's data", + "CoC7.BoutActive": "(Bout) Immune to SAN loss", + "CoC7.AlreadyInABout": "You're already suffering a bout of madness and are immune to further loss of sanity.", + "CoC7.PlayerPermanentlyInsane": "Player Permanently Insane", + "CoC7.MythosFirstEncounter": "Award Mythos Experience (+5% First time)", + "CoC7.MythosAlreadyEncountered": "Award Mythos Experience (+1%)", + "CoC7.DisregardMythosGain": "No Mythos gain", + "CoC7.MythosGain": "Mythos gain", + "CoC7.YouGainedCthulhuMythos": "Your mind quail before the unearthly manifestation (+{value}% Cthulhu Mythos)", + "CoC7.CardResolved": "Card resolved", + + "CoC7.SpellCastingTime": "시전 시간", + "CoC7.SpellCastingCost": "시전 비용", + "CoC7.CallSpell": "외침", + "CoC7.DismissSpell": "취소", + "CoC7.ContactSpell": "접촉", + "CoC7.SummonSpell": "소환", + "CoC7.BindSpell": "속박", + "CoC7.EnchantmentSpell": "인챈트", + "CoC7.GateSpell": "Gate", + "CoC7.CombatSpell": "전투", + "CoC7.SpellType": "주문 타입", + + "CoC7.BookHasNothingMoreToTeach": "{book} has nothing more to teach. Cthulhu Mythos skill of {actor} is greater than this Mythos Rating.", + "CoC7.BookType": "서적 타입", + "CoC7.Content": "내용", + "CoC7.CthulhuMythosFinal": "Mythos Final", + "CoC7.CthulhuMythosInitial": "Mythos Initial", + "CoC7.Development": "성장", + "CoC7.DifficultyLevel": "난이도", + "CoC7.DragSpell": "Drag spells here to insert them into the book...", + "CoC7.FullStudies": "Full Studies", + "CoC7.Gains": "습득", + "CoC7.GainsForReading": "Skill gains for reading {book}.", + "CoC7.InitialReading": "첫 독서", + "CoC7.InitialReadingNeeded": "{actor} needs to perform an Initial Reading on {book} to be able to advance through Full Study progress.", + "CoC7.LearnSpellAttempt": "Attempt to learn spell {spell}, from {book}.", + "CoC7.MarkedForDevelopment": "Marked for development", + "CoC7.Mythos": "신화", + "CoC7.MythosRating": "신화 등급", + "CoC7.NotOwned": "This Item needs to be owned by an Actor to perform this action.", + "CoC7.Occult": "오컬트", + "CoC7.Points": "수치", + "CoC7.Progress": "진행", + "CoC7.RedoFullStudy": "Redo Full Study", + "CoC7.ReadAttempt": "Attempt to read {book} ({language}), {difficulty} difficulty.", + "CoC7.ReadingMythosTome": "Reading {book}.", + "CoC7.Specific": "특수한", + "CoC7.SpellsLearned": "주문을 배움", + "CoC7.StudyTime": "Study Time", + "CoC7.UnknownLanguage": "{actor} do not know the language in which this book is written.", + "CoC7.Unreadable": "해독 불가", + + "CoC7.Crew": "Crew", + "CoC7.Origin": "Origin", + "CoC7.ArmedVehicle": "군용 탈것", + + "CoC7.PulpTalents": "펄프 재능", + "CoC7.TalentType": "재능 타입", + "CoC7.PhysicalTalent": "신체적", + "CoC7.MentalTalent": "정신적", + "CoC7.CombatTalent": "전투", + "CoC7.MiscellaneousTalent": "잡다한", + "CoC7.BasicTalent": "기본", + "CoC7.InsaneTalent": "광기", + "CoC7.OtherTalent": "기타", + + "CoC7.Items": "아이템", + "CoC7.Vehicle": "탈것", + "CoC7.Books": "서적", + "CoC7.Status": "상태", + + "CoC7.Classic": "고전", + "CoC7.Lovecraftian": "Lovecraftian", + "CoC7.Pulp": "펄프", + "CoC7.Modern": "현대", + "CoC7.Related": "관련 직업", + "CoC7.OccupationType": "직업 타입", + "CoC7.OccupationPoints": "직업 점수", + "CoC7.Selected": "선택됨", + "CoC7.Multiplier": "배수", + "CoC7.Optional": "선택", + "CoC7.Or": "또는", + "CoC7.Minimum": "최소", + "CoC7.Maximum": "최대", + "CoC7.CommonSkills": "흔한 기능", + "CoC7.OptionSkills": "선택 기능 그룹", + "CoC7.ChoiceNumber": "선택지", + "CoC7.Choose": "Number to choose from", + "CoC7.Chosen": "Chosen", + "CoC7.EmptySkillList": "Add a skill by dropping it here.", + "CoC7.EmptyItemList": "Add an item by dropping it here.", + "CoC7.EmptyCharacterSkillList": "Add a setup, occupation, or skill by dropping it here.", + "CoC7.PersonalSpeciality": "Number of personal or era specialty", + "CoC7.AdditionalSkills": "추가 기능", + "CoC7.SkillSelectionWindow": "Select optional skills", + "CoC7.SelectPersonalSkills": "Select {number} skill(s) as personal interest skills", + "CoC7.ResetOccupation": "직업 초기화", + "CoC7.ResetOccupationHint": "Actor {name} already have an occupation. Do you want to reset it?", + "CoC7.ResetArchetype": "캐릭터 타입 초기화", + "CoC7.ResetArchetypeHint": "Actor {name} already have an archetype. Do you want to reset it?", + "CoC7.CreditOutOfRange": "Credit rating should be between {min} and {max}", + "CoC7.BioSections": "백스토리 문단", + "CoC7.BioSectionName": "백스토리 문단 이름", + "CoC7.SpendPoints": "특성치 점수 할당", + "CoC7.RollCharac": "특성치 굴림", + "CoC7.SelectCoreCharac": "주 특성치 선택", + "CoC7.SkillSpecSelectTitle": "Select/create skill of {specialization} specialization", + "CoC7.SkillSelectBase": "Select base value for skill {name}", + "CoC7.SelectSkill": "Select an existing skill", + "CoC7.CreateNewSkill": "새 기능 생성", + + "CoC7.Characteristics": "특성치", + "CoC7.Characteristic": "특성치", + "CoC7.EnableCharacteristics": "특성치 입력", + "CoC7.UsePoints": "점수 사용", + "CoC7.UseRolls": "판정 사용", + "CoC7.CoreCharacteristics": "주 특성치", + "CoC7.BonusPoints": "보너스 포인트", + "CoC7.SuggestedOccupations": "제안 직업", + "CoC7.SuggestedTraits": "제안 성격", + + "CoC7.PutGunAway": "Put your gun away", + "CoC7.DrawGun": "Draw your gun", + + "CoC7.GmTools": "수호자의 도구", + "CoC7.GmNotes": "수호자의 노트", + "CoC7.DevPhase": "성장 단계", + "CoC7.DevPhaseEnabled": "성장 단계 활성화", + "CoC7.DevPhaseDisabled": "성장 단계 비활성화", + "CoC7.CharCreationMode": "캐릭터 생성 모드", + "CoC7.CharCreationEnabled": "캐릭터 생성 모드 활성화", + "CoC7.CharCreationDisabled": "캐릭터 생성 모드 비활성화", + "CoC7.toggleXP": "경험치 습득", + "CoC7.XPGainEnabled": "캐릭터가 경험치를 얻을 수 있습니다", + "CoC7.XPGainDisabled": "캐릭터가 경험치를 얻을 수 없습니다", + "CoC7.WarnNoActorAvailable": "You do not have any actor controlled nor selected", + "CoC7.WarnMacroIncorrectType": "You can create macro for weapons and skills only", + "CoC7.WarnNoGlobalSpec": "You can't create macro for unspecified specializations", + "CoC7.WarnMacroNoItemFound": "No usable item found", + "CoC7.WarnNoControlledActor": "You don't have any controlled actor", + "CoC7.WarnFastTargetWithWrongMOV": "Fast selected on a target with less than 8 MOV. (MOV: {mov})", + "CoC7.WarnTooManyTarget": "Too many target selected. Keeping only last selected target", + + "CoC7.startRest": "휴식 시작", + "CoC7.dreaming": "The Investigators wait dreaming", + "CoC7.healthRecovered": "체력 1점 회복", + "CoC7.pulpHealthRecovered": "Recovered {number} Hit Points", + "CoC7.dailySanLossRestarted": "Daily Sanity loss counter restarted", + "CoC7.magicPointsRecovered": "Magic Points recovered", + "CoC7.hasCriticalWounds": "Unable to recover Hit Points due to Critical Wounds", + "CoC7.quickHealer": "Quick Healer", + + "CoC7.ErrorNoDodgeSkill": "Actor doesn't have a dodge skill", + "CoC7.ErrorNotEnoughLuck": "{actor} didn't have enough luck to pass the check", + "CoC7.ErrorManeuverNotPossible": "Your opponent is too strong for you to perform a maneuver", + "CoC7.ErrorNotFound": "{missing} not found!", + "CoC7.ErrorNotFoundForActor": "{missing} not found for actor {actor}!", + + "CoC7.InfoLessSkillThanOptions": "There's only {skillCount} and {optionsCount} options, adding all of them", + "CoC7.InfoAllSkillsAlreadySelected": "All skills are already selected.", + + "CoC7.MessageCheckRequestedWait": "{check} roll requested by your Keeper.
                                  Wait before clicking!
                                  ", + "CoC7.MessageTargetCheckRequested": "Your keeper has requested {name} make a {check} roll.", + "CoC7.MessageTitleSelectSingleUserForTarget": "Which user can respond to this attack", + "CoC7.MessageSelectSingleUserForTarget": "This token is controlled by multiple users, please select which user can respond to this attack.", + "CoC7.MessageBoutOfMadnessTableNotFound": "The result from the madness table was not found, please check all your roll tables are created", + "CoC7.MessageBoutOfMadnessItemNotFound": "The result from the madness table was not found, please check all your statuses are created", + + "CoC7.DealDamage": "Deal {damage} damage points to {target}?", + "CoC7.NoTargetSelected": "You have not selected a target for your {weapon} check. Do you want to proceed anyway?", + + "CoC7.Import": "Import", + "CoC7.Proceed": "Proceed", + "CoC7.Cancel": "Cancel", + + "CoC7.ActorImporter": "Actor Importer", + "CoC7.ActorImporterSummary": "Import an NPC or Creature from description and stats. Just paste the corresponding plain text", + "CoC7.PasteTheDataBelow": "Paste the raw text data below", + "CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed", + "CoC7.SelectActorType": "액터 타입 선택", + "CoC7.NonPlayingCharacter": "Non Playing Character (NPC)", + "CoC7.Creature": "크리쳐", + "CoC7.ConvertFrom6Edition": "Convert from 6 edition", + "CoC7.Convert": "Convert", + "CoC7.NoConvert": "No Convert", + "CoC7.Guess": "Guess", + "CoC7.English": "English", + "CoC7.Spanish": "Spanish", + "CoC7.French": "French", + "CoC7.Korean": "Korean", + "CoC7.TraditionalChinese": "Traditional Chinese", + "CoC7.SelectSourceLanguage": "Select the source text language", + "CoC7.ImportedUnnamedCharacter": "Imported unnamed character", + "CoC7.CreatedImportedCharactersFolder": "test", + "CoC7.ImportedCharactersFolder": "Imported characters", + "CoC7.ImportSkillItemLocations": "Look for skills/spells/weapons in", + "CoC7.ImportActorItemsNone": "None", + "CoC7.ImportActorItemsItem": "아이템", + "CoC7.ImportActorItemsItemWorldModuleSystem": "Items / World / Modules / System", + "CoC7.ImportActorItemsWorldModuleItemSystem": "World / Modules / Items / System", + + "CoC7.HowToTranslateTitle": "번역 방법", + "CoC7.HowToTranslateWarning": "신뢰할 수 없는 모듈은 설치하지 마십시오.", + "CoC7.HowToTranslateInstallBabele": "Install/Update Babele module from Foundry's module manager.", + "CoC7.HowToTranslateInstallTranslation": "Install/Update Translation from Foundry's module manager.", + "CoC7.HowToTranslateEnableTranslation": "Inside the Game World, under Configuration/Manage Modules activate both Babele and the translations.", + "CoC7.HowToTranslateNoTranslation": "Instructions for creating new language translations are available on existing translation modules.", + + "CoC7.Migrate.Title": "업데이트 필요", + "CoC7.Migrate.Message": "

                                  Your world requires an update to run version {version}.

                                  Please backup your world folder before starting the upgrade.

                                  If you do not update your world the system will not work correctly.

                                  The world may be restarted when completed.

                                  ", + "CoC7.Migrate.WithModulesMessage": "

                                  Your world or modules may require an update to run version {version}.

                                  Please backup your world and module folders listed below before starting the upgrade.

                                  If you do not update your world the system will not work correctly.

                                  The following modules contain actors or items so will also be checked.

                                  {modules}

                                  The world may be restarted when completed.

                                  ", + "CoC7.Migrate.GMRequired": "

                                  Your world requires an update to run version {version}.

                                  Please wait for your GM to update the system then refresh (F5) this page.

                                  ", + "CoC7.Migrate.RestartRequired": "

                                  Your world will now restart to enable these changes

                                  ", + "CoC7.Migrate.ButtonUpdate": "Update", + "CoC7.Migrate.ButtonSkip": "Skip", + "CoC7.Migrate.ButtonOkay": "Okay", + + "CoC7.Maximize": "최대화", + "CoC7.Summarize": "요약", + + "CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you", + "CoC7.UnableToCopyToClipboard": "Unable to copy to clipboard, this is likely due to your browser security settings.", + "CoC7.WarningCharacterSheetV1Depreciated": "This layout is obsolete and may not work correctly. It will be removed with the FoundryVTT v9 release, please get your Keeper to change the sheet type to CoC7.CoC7CharacterSheetV2", + + "CoC7.MessageTitleSelectUserToGiveTo": "Give item to another character", + "CoC7.MessageSelectUserToGiveTo": "Which character would you like to give this item to?", + "CoC7.MessageDistanceCalculationFailure": "Unable to calculate distance between tokens, please use the token character sheet.", + + "CoC7.ToolTipSkill": "
                                  1. Left click roll check with options
                                  2. Shift + Left click Immediate regular difficulty roll
                                  1. Right click Opposed check with options
                                  2. Shift + Right click Immediate opposed check
                                  1. Alt/Option + Right click Combined check with options
                                  ", + "CoC7.ToolTipKeeperSkill": "
                                  1. CTRL + Left click Create roll link
                                  2. {other}
                                  ", + "CoC7.ToolTipKeeperStandbySkill": "
                                3. Left click Request a roll from {name}
                                4. ", + "CoC7.ToolTipDB": "
                                  1. Left click Immediate regular difficulty roll
                                  ", + "CoC7.ToolTipKeeperSanity": "
                                5. CTRL + Alt/Option Create sanity check roll link
                                6. ", + "CoC7.ToolTipAutoToggle": "
                                  1. Left click Toggle automatic calculation / manual entry
                                  2. ", + "CoC7.ToolTipSkillFlagToggle": "
                                    1. Double Click Toggle flag status
                                    2. ", + "CoC7.ToolTipSkillFlagged": "Flagged for development", + "CoC7.ToolTipSkillUnflagged": "Not flagged for development", + + "SETTINGS.TitleRules": "룰", + "SETTINGS.TitleInitiative": "초기 세팅", + "SETTINGS.TitleRoll": "주사위 세팅", + "SETTINGS.TitleChatCards": "Chat Cards Settings", + "SETTINGS.TitleScene": "장면 세팅", + "SETTINGS.TitleSheet": "Sheet Settings", + "SETTINGS.TitleGameArtwork": "Game Artwork Settings", + "SETTINGS.TitleWeapon": "Weapon Settings", + "SETTINGS.TitleDiceSoNice": "Dice So Nice Settings", + "SETTINGS.TitleDeveloperDebug": "Developer And Debug Settings", + "SETTINGS.TitleRollTable": "", + "SETTINGS.DebugMode": "System Debug Mode", + "SETTINGS.DebugModeHint": "!!재시작 필요!!", + "SETTINGS.DefautDifficulty": "Default check difficulty", + "SETTINGS.DefaultDifficultyHint": "You can choose the default difficulty for checks. Unknown will roll checks without the player knowing the check difficulty.", + "SETTINGS.CheckDifficultyRegular": "Default difficulty", + "SETTINGS.CheckDifficultyUnknown": "Unknown difficulty", + "SETTINGS.showIconsOnly": "On summarized sheet, show only icons on skills list.", + "SETTINGS.UseToken": "Use token image", + "SETTINGS.UseTokenHint": "Use token image instead of portraits in chat-cards", + "SETTINGS.DisplayActorOnCard": "Display actor on card", + "SETTINGS.DisplayActorOnCardHint": "Display the actor's image/token on combat chat-cards", + "SETTINGS.InitiativeRule": "Select initiative rule", + "SETTINGS.InitiativeRuleHint": "You can select basic initiative rule (using DEX value) or optional rule (using a roll)", + "SETTINGS.InitiativeRuleBasic": "Basic", + "SETTINGS.InitiativeRuleOptional": "Optional", + "SETTINGS.displayInitDices": "Display init dice", + "SETTINGS.displayInitDicesHint": "Display the dices when rolling for initiative (Optional rules only)", + "SETTINGS.displayInitAsText": "Display init text", + "SETTINGS.displayInitAsTextHint": "Display initiative as text instead of number (Optional rules only)", + "SETTINGS.PulpRules": "Pulp rules", + "SETTINGS.PulpRulesHint": "Alow the usage of Pulp Rules (Archetype, Talent, HP), !early implementation!", + "SETTINGS.developmentRollForLuck": "Recoverable Luck points", + "SETTINGS.developmentRollForLuckHint": "Each player can make an improvement check for their Luck on Development Phase", + "SETTINGS.displayPlayerNameOnSheet": "Display player's name on sheet", + "SETTINGS.DisregardAmmo": "Disregard Ammo count.", + "SETTINGS.DisregardAmmoHint": "Enabling this will not take in account the number of bullets loaded in the gun.", + "SETTINGS.DisregardUsePerRound": "Disregard Uses per Rounds.", + "SETTINGS.DisregardUsePerRoundHint": "Enabling this will allow you to fire as much as you want, regardless of the uses per round of the weapon.", + "SETTINGS.RestrictGridSpaces": "Restrict measurement to grid spaces", + "SETTINGS.RestrictGridSpacesHint": "For range combat, if selected the distances will be measured in grid spaces, if not the 'real' (euclidean) distance will be used.", + "SETTINGS.StatusPlayerEditable": "Player can modify status", + "SETTINGS.StatusPlayerEditableHint": "Let your player modify their status (prone, unconscious, dying, dead) and reset their daily SAN loss", + "SETTINGS.SyncDice3D": "[DsN] Sync dice", + "SETTINGS.SyncDice3DHint": "When using DsN, sync dice between clients", + "SETTINGS.UnitDieColorset": "[DsN] Unit die colorset", + "SETTINGS.UnitDieColorsetHint": "When using DsN, colorset to use for unit die. (leave blank to use player default)", + "SETTINGS.TenDieNoMod": "[DsN] Ten die colorset", + "SETTINGS.TenDieNoModHint": "When using DsN, colorset to use for single ten die. (leave blank to use player default)", + "SETTINGS.TenDieBonus": "[DsN] Ten bonus dice colorset", + "SETTINGS.TenDieBonusHint": "When using DsN, colorset to use for ten bonus dice. (leave blank to use player default)", + "SETTINGS.TenDiePenalty": "[DsN] Ten penalty dice colorset", + "SETTINGS.TenDiePenaltyHint": "When using DsN, colorset to use for penalty bonus dice. (leave blank to use player default)", + "SETTINGS.OverrideGameArtwork": "Override game Artwork", + "SETTINGS.OverrideGameArtworkHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default", + "SETTINGS.ArtPauseImage": "Pause image", + "SETTINGS.ArtPauseImageHint": ". Type 'null' to remove image", + "SETTINGS.ArtPauseText": "Pause text", + "SETTINGS.ArtPauseTextHint": "Leave blank for default", + "SETTINGS.OverrideSheetArtwork": "Override Sheet Artwork", + "SETTINGS.OverrideSheetArtworkHint": "!!RESTART REQUIRED!! gives access to advance sheet config, leave blank for default", + "SETTINGS.ArtWorkSheetBackground": "Character sheet background", + "SETTINGS.ArtWorkSheetBackgroundHint": "type 'null' to remove background, blank for default", + "SETTINGS.ArtWorkSheetBackgroundType": "Background type", + "SETTINGS.BackgroundSlice": "Background image will be sliced (css:border-image)", + "SETTINGS.BackgroundAuto": "Scales the image maintening proportions (css:auto)", + "SETTINGS.BackgroundContain": "Scales to fill without croping/stretching (css:contain)", + "SETTINGS.BackgroundCover": "Scales to fill with croping/stretching (css:cover)", + "SETTINGS.ArtWorkOtherSheetBackground": "Other sheet background", + "SETTINGS.ArtWorkOtherSheetBackgroundHint": "type 'null' to remove background. Only for items and vehicle for now", + "SETTINGS.ArtworkSheetImage": "Character sheet image", + "SETTINGS.ArtworkSheetImageHint": "type 'null' to remove image", + "SETTINGS.ArtworkFrontColor": "Main color", + "SETTINGS.ArtworkFrontColorHint": "Used for all elements", + "SETTINGS.ArtworkBackgroundColor": "Secondary color", + "SETTINGS.ArtworkBackgroundColorHint": "Used for background and inputs", + "SETTINGS.ArtworkInteractiveColor": "Interactive elements color", + "SETTINGS.ArtworkInteractiveColorHint": "Used for interactives/rollables elements", + "SETTINGS.ArtworkFixedSkillLength": "Limit skill name length", + "SETTINGS.ArtworkFixedSkillLengthHint": "The skill length in the skill tab will be limited for a more compact sheet", + "SETTINGS.ArtworkMainFont": "Main font", + "SETTINGS.ArtworkMainFontBold": "Main font (bold)", + "SETTINGS.ArtworkMainFontSize": "Default font size (px)", + "SETTINGS.BoutOfMadnessSummaryTable": "Bout of madness (Summary) table", + "SETTINGS.BoutOfMadnessRealTimeTable": "Bout of madness (Real Time) table", + "SETTINGS.LetKeeperDecide": "Let keeper decide", + "SETTINGS.DisplayResultType": "Display dice result type (text)", + "SETTINGS.DisplayCheckSuccessLevel": "Display check level of success (stars)", + "SETTINGS.PlayerUnlockSheetMode": "Player can unlock sheet", + "SETTINGS.AlwaysEditable": "always", + "SETTINGS.CreationModeOnly": "in creation mode only", + "SETTINGS.NeverEditable": "never (Keeper only)", + "SETTINGS.StanbyGMRolls": "Standby Keeper rolls", + "SETTINGS.StanbyGMRollsHint": "When the Keeper is making a roll from an assigned character sheet, display a roll button instead of rolling", + "SETTINGS.AllowFlatDiceModifier": "Flat dice modifier", + "SETTINGS.AllowFlatDiceModifierHint": "Allows dice roll results to be modified by a flat value.", + "SETTINGS.AllowFlatThresholdModifier": "Flat value modifier", + "SETTINGS.AllowFlatThresholdModifierHint": "Allows checks success value to be modified by a flat value.", + "SETTINGS.OpposedRollTieBreaker": "Opposed rolls Viriato139ac tie breaker", + "SETTINGS.OpposedRollTieBreakerHint": "In case of a tie during opposed roll, winner is determined by highest rolled value, not higher skill.", + "SETTINGS.SelfRollWhisperTarget": "Self roll notification:", + "SETTINGS.SelfRollWhisperTargetHint": "As a GM, when doing self check roll, who do you want to send a notification to.", + "SETTINGS.DoNotAdvise": "Keep it for yourself.", + "SETTINGS.AdviseOwnersOnly": "Notify actor's owner", + "SETTINGS.AdviseAllPlayer": "Notify all players", + "SETTINGS.OneBlockBackStory": "One block backstory", + "SETTINGS.OneBlockBackStoryHint": "Turn backstory to one editor block, but you can format/add links.", + "SETTINGS.EnableStatusIcons": "Enable status icons", + "SETTINGS.EnableStatusIconsHint": "Set if combat and sanity effects icons are shown in tokens.", + "SETTINGS.ShowExperimentalFeatures": "Show Experimental Features", + "SETTINGS.ShowExperimentalFeaturesHint": "Your world may become unusable in a future release if you use these features. For testing only DO NOT use these in your game worlds", + "CoC7.ExperimentalFeaturesWarning": "This feature is a work in progress and is not recommended for use in your game world.", + "SETTINGS.CheckElevation": "Include elevation in distance", + "SETTINGS.CheckElevationHint": "Use elevation in range combat distance calculations", + "CoC7.toolTipDelay": "Millisecond delay before tooltip should show, 0 for never" +} diff --git a/lang/sv.json b/lang/sv.json index 3261585e..f81ac9fc 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -338,7 +338,6 @@ "CoC7.Eras": "Cthulhu-varianter", "CoC7.EraAvailability": "Tillgänglighet", - "CoC7.SkillNoAdjustments": "Ingen modifiering", "CoC7.SkillNoXpGain": "Ingen erfarenhet", "CoC7.SkillSpecial": "Specialicering", @@ -673,7 +672,7 @@ "CoC7.WarnTooManyTarget": "För många mål valda. Behåller bara det senast valda målet", "CoC7.allActors": "Alla karaktärer", - "CoC7.restTargets": "Vila valda mål", + "CoC7.restTargets": "Vila valda mål", "CoC7.startRest": "Påbörja vila", "CoC7.dreaming": "Utredaren väntar i drömmen", "CoC7.healthRecovered": "Återfick en kroppspoäng", @@ -720,7 +719,7 @@ "CoC7.English": "Engelska", "CoC7.Spanish": "Spanska", "CoC7.French": "Franska", - "CoC7.German": "Tyska", + "CoC7.German": "Tyska", "CoC7.Polish": "Polska", "CoC7.TraditionalChinese": "Traditionell kinesiska", "CoC7.SelectSourceLanguage": "Välj ursprungstextens språk", @@ -888,5 +887,4 @@ "CoC7.getTheExample": "Kopiera exempel", "CoC7.Copied": "Kopierade exempeltexten till Urklipp" - } diff --git a/module/actors/actor.js b/module/actors/actor.js index f3e382e7..2c6457d5 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -237,15 +237,15 @@ export class CoCActor extends Actor { } let boutDurationText = this.isInABoutOfMadness ? boutRealTime - ? `${duration} ${game.i18n.localize('CoC7.rounds')}` - : `${duration} ${game.i18n.localize('CoC7.hours')}` + ? `${duration} ${game.i18n.localize('CoC7.rounds')}` + : `${duration} ${game.i18n.localize('CoC7.hours')}` : null const insanityDurationText = insaneDuration ? this.isInsane - ? indefiniteInstanity - ? null - : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` - : null + ? indefiniteInstanity + ? null + : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` + : null : null if (this.isInsane && !insanityDurationText && !indefiniteInstanity) { indefiniteInstanity = true @@ -261,8 +261,8 @@ export class CoCActor extends Actor { durationText: boutDurationText || '', hint: this.isInABoutOfMadness ? `${game.i18n.localize('CoC7.BoutOfMadness')}${ - boutDurationText ? ': ' + boutDurationText : '' - }` + boutDurationText ? ': ' + boutDurationText : '' + }` : game.i18n.localize('CoC7.BoutOfMadness') }, underlying: { @@ -272,10 +272,10 @@ export class CoCActor extends Actor { durationText: insanityDurationText || '', hint: this.isInsane ? indefiniteInstanity - ? game.i18n.localize('CoC7.IndefiniteInsanity') - : `${game.i18n.localize( - 'CoC7.TemporaryInsanity' - )} ${insanityDurationText || ''}` + ? game.i18n.localize('CoC7.IndefiniteInsanity') + : `${game.i18n.localize('CoC7.TemporaryInsanity')} ${ + insanityDurationText || '' + }` : game.i18n.localize('CoC7.NotInsane') } } @@ -959,12 +959,10 @@ export class CoCActor extends Actor { data.data.characteristics.list.luck.value = isNaN(this.luck) ? null : this.luck - data.data.characteristics.list.luck.label = game.i18n.localize( - 'CoC7.Luck' - ) - data.data.characteristics.list.luck.shortName = game.i18n.localize( - 'CoC7.Luck' - ) + data.data.characteristics.list.luck.label = + game.i18n.localize('CoC7.Luck') + data.data.characteristics.list.luck.shortName = + game.i18n.localize('CoC7.Luck') if (!data.data.characteristics.values) { data.data.characteristics.values = {} @@ -1031,11 +1029,10 @@ export class CoCActor extends Actor { data.data.characteristics.values.pow updateData['data.attribs.san.oneFifthSanity'] = ' / ' + Math.floor(data.data.characteristics.values.pow / 5) - updateData['data.indefiniteInsanityLevel.max'] = updateData[ - 'data.attribs.mp.value' - ] = updateData['data.attribs.mp.max'] = Math.floor( - data.data.characteristics.values.pow / 5 - ) + updateData['data.indefiniteInsanityLevel.max'] = + updateData['data.attribs.mp.value'] = + updateData['data.attribs.mp.max'] = + Math.floor(data.data.characteristics.values.pow / 5) } await this.update(updateData) await this.update({ @@ -3413,6 +3410,7 @@ export class CoCActor extends Actor { let armorValue = 0 if (!options.ignoreArmor) { if (armorData === null) { + // nop } else if (CoC7Utilities.isFormula(armorData)) { armorValue = (await new Roll(armorData).roll({ async: true })).total } else if (!isNaN(Number(armorData))) { diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index e52c1683..8237cd2c 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -15,7 +15,7 @@ import { OpposedCheckCard } from '../../chat/cards/opposed-roll.js' import { CombinedCheckCard } from '../../chat/cards/combined-roll.js' import { DamageCard } from '../../chat/cards/damage.js' import { CoC7LinkCreationDialog } from '../../apps/link-creation-dialog.js' -import { testCard } from '../../chat/cards/test.js' +import { TestCard } from '../../chat/cards/test.js' /** * Extend the basic ActorSheet with some very simple modifications @@ -340,32 +340,32 @@ export class CoC7ActorSheet extends ActorSheet { a.data.properties.special && typeof a.data.specialization !== 'undefined' ? a.data.specialization - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + - a.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() + + a.name + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() : a.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() lcb = b.data.properties.special && typeof b.data.specialization !== 'undefined' ? b.data.specialization - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + - b.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() + + b.name + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() : b.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() } else { lca = a.name .normalize('NFD') @@ -389,30 +389,30 @@ export class CoC7ActorSheet extends ActorSheet { if (a.data.properties && b.data.properties) { lca = a.data.properties.special ? a.data.specialization - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + - a.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() + + a.name + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() : a.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() lcb = b.data.properties.special ? b.data.specialization - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + - b.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() + + b.name + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() : b.name - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .toLowerCase() + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() } else { lca = a.name .normalize('NFD') @@ -882,7 +882,7 @@ export class CoC7ActorSheet extends ActorSheet { .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) html.find('.test-trigger').click(async event => { - const test = new testCard({}) + const test = new TestCard({}) test.toMessage() // await OpposedCheckCard.dispatch({ // type: OpposedCheckCard.defaultConfig.type, @@ -972,8 +972,8 @@ export class CoC7ActorSheet extends ActorSheet { game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '' }) } @@ -1009,8 +1009,8 @@ export class CoC7ActorSheet extends ActorSheet { game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '' }) } @@ -1049,8 +1049,8 @@ export class CoC7ActorSheet extends ActorSheet { game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '' }) } @@ -1076,8 +1076,8 @@ export class CoC7ActorSheet extends ActorSheet { (game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '') }) } @@ -1434,9 +1434,7 @@ export class CoC7ActorSheet extends ActorSheet { _onInventoryHeader (event) { event.preventDefault() - $(event.currentTarget) - .siblings('li') - .toggle() + $(event.currentTarget).siblings('li').toggle() } async _onItemPopup (event) { @@ -1653,9 +1651,8 @@ export class CoC7ActorSheet extends ActorSheet { event.currentTarget.parentElement.dataset.characteristic roll.attribute = event.currentTarget.parentElement.dataset.attrib roll.item = event.currentTarget.closest('.item')?.dataset.itemId - roll.weaponAltSkill = event.currentTarget.classList.contains( - 'alternativ-skill' - ) + roll.weaponAltSkill = + event.currentTarget.classList.contains('alternativ-skill') roll.skillId = event.currentTarget.closest('.item')?.dataset.skillId roll.rollMode = game.settings.get('core', 'rollMode') roll.initiator = game.user.id @@ -1793,19 +1790,19 @@ export class CoC7ActorSheet extends ActorSheet { if (isCtrlKey(event) && game.user.isGM && ['lck', 'san'].includes(attrib)) { const linkData = event.altKey ? { - check: 'sanloss', - hasPlayerOwner: this.actor.hasPlayerOwner, - actorKey: this.actor.actorKey, - forceModifiers: event.shiftKey - } + check: 'sanloss', + hasPlayerOwner: this.actor.hasPlayerOwner, + actorKey: this.actor.actorKey, + forceModifiers: event.shiftKey + } : { - check: 'check', - type: 'attribute', - name: attrib, - hasPlayerOwner: this.actor.hasPlayerOwner, - actorKey: this.actor.actorKey, - forceModifiers: event.shiftKey - } + check: 'check', + type: 'attribute', + name: attrib, + hasPlayerOwner: this.actor.hasPlayerOwner, + actorKey: this.actor.actorKey, + forceModifiers: event.shiftKey + } if (game.settings.get('core', 'rollMode') === 'blindroll') { linkData.blind = true } @@ -2096,9 +2093,8 @@ export class CoC7ActorSheet extends ActorSheet { value: event.currentTarget.value }) ) - formData[event.currentTarget.name] = game.i18n.format( - 'CoC7.ErrorInvalid' - ) + formData[event.currentTarget.name] = + game.i18n.format('CoC7.ErrorInvalid') } } } @@ -2118,9 +2114,8 @@ export class CoC7ActorSheet extends ActorSheet { value: event.currentTarget.value }) ) - formData[event.currentTarget.name] = game.i18n.format( - 'CoC7.ErrorInvalid' - ) + formData[event.currentTarget.name] = + game.i18n.format('CoC7.ErrorInvalid') } } } diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index 096a8d35..dc6548a2 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -28,25 +28,33 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { await this.close() const options = this.summarized ? { - classes: ['coc7', 'actor', 'character', 'summarized'], - height: 200, - resizable: false, - width: 700 - } + classes: ['coc7', 'actor', 'character', 'summarized'], + height: 200, + resizable: false, + width: 700 + } : CoC7CharacterSheetV2.defaultOptions await this.render(true, options) } async getData () { const data = await super.getData() - if (this.isEditable && typeof this.actor.getFlag('CoC7', 'skillListMode') === 'undefined') { + if ( + this.isEditable && + typeof this.actor.getFlag('CoC7', 'skillListMode') === 'undefined' + ) { await this.actor.setFlag('CoC7', 'skillListMode', false) } - if (this.isEditable && typeof this.actor.getFlag('CoC7', 'skillShowUncommon') === 'undefined') { + if ( + this.isEditable && + typeof this.actor.getFlag('CoC7', 'skillShowUncommon') === 'undefined' + ) { await this.actor.setFlag('CoC7', 'skillShowUncommon', true) } - data.skillListModeValue = (this.actor.getFlag('CoC7', 'skillListMode') ?? false) - data.skillShowUncommon = (this.actor.getFlag('CoC7', 'skillShowUncommon') ?? true) + data.skillListModeValue = + this.actor.getFlag('CoC7', 'skillListMode') ?? false + data.skillShowUncommon = + this.actor.getFlag('CoC7', 'skillShowUncommon') ?? true data.showIconsOnly = game.settings.get('CoC7', 'showIconsOnly') if (this.actor.occupation) { @@ -118,8 +126,9 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { : '$' } - data.credit.spendingLevel = `${monetarySymbol}${this.actor.spendingLevel * - factor}` + data.credit.spendingLevel = `${monetarySymbol}${ + this.actor.spendingLevel * factor + }` data.credit.assets = `${monetarySymbol}${this.actor.assets * factor}` data.credit.cash = `${monetarySymbol}${this.actor.cash * factor}` } diff --git a/module/actors/sheets/container.js b/module/actors/sheets/container.js index 1ed90ab2..f2a62d61 100644 --- a/module/actors/sheets/container.js +++ b/module/actors/sheets/container.js @@ -1,4 +1,4 @@ -/* global ActorSheet, CONST, Dialog, game, mergeObject */ +/* global $, ActorSheet, CONST, Dialog, FormData, game, mergeObject */ import { CoC7Parser } from '../../apps/parser.js' export class CoC7ContainerSheet extends ActorSheet { /** @@ -246,8 +246,6 @@ export class CoC7ContainerSheet extends ActorSheet { _onInventoryHeader (event) { event.preventDefault() - $(event.currentTarget) - .siblings('li') - .slideToggle(200) + $(event.currentTarget).siblings('li').slideToggle(200) } } diff --git a/module/apps/actor-importer-dialog.js b/module/apps/actor-importer-dialog.js index 2bcdcdad..5d162bf5 100644 --- a/module/apps/actor-importer-dialog.js +++ b/module/apps/actor-importer-dialog.js @@ -43,26 +43,16 @@ export class CoC7ActorImporterDialog extends Dialog { */ static async getInputs () { const inputs = {} - inputs.entity = $('#coc-entity-type') - .val() - .trim() - inputs.convertFrom6E = $('#coc-convert-6E') - .val() - .trim() + inputs.entity = $('#coc-entity-type').val().trim() + inputs.convertFrom6E = $('#coc-convert-6E').val().trim() if (CONFIG.debug.CoC7Importer) { console.debug('entity type:', inputs.entity) } inputs.lang = CoC7ActorImporterRegExp.checkLanguage( - $('#coc-entity-lang') - .val() - .trim() + $('#coc-entity-lang').val().trim() ) - inputs.source = $('#source') - .val() - .trim() - let text = $('#coc-pasted-character-data') - .val() - .trim() + inputs.source = $('#source').val().trim() + let text = $('#coc-pasted-character-data').val().trim() if (CONFIG.debug.CoC7Importer) { console.debug('received text', '##' + text + '##') } @@ -101,19 +91,16 @@ export class CoC7ActorImporterDialog extends Dialog { submit (button) { if (button.cssClass === 'getExampleNow') { - var content = CoC7ActorImporterRegExp.getExampleText($('#coc-entity-lang :selected').val()) - CoC7Utilities.copyToClipboard(content) - .then(() => { - return ui.notifications.info( - game.i18n.localize('CoC7.Copied') - ) - }) + const content = CoC7ActorImporterRegExp.getExampleText( + $('#coc-entity-lang :selected').val() + ) + CoC7Utilities.copyToClipboard(content).then(() => { + return ui.notifications.info(game.i18n.localize('CoC7.Copied')) + }) return } if ( - $('#coc-pasted-character-data') - .val() - .trim() !== '' || + $('#coc-pasted-character-data').val().trim() !== '' || !button.callback ) { super.submit(button) diff --git a/module/apps/actor-importer-regexp.js b/module/apps/actor-importer-regexp.js index f56fd596..ea75d893 100644 --- a/module/apps/actor-importer-regexp.js +++ b/module/apps/actor-importer-regexp.js @@ -104,7 +104,9 @@ const keys = { ' Gun|Revolver|Pistole|Handgun|Derringer|Beretta|Luger|Desert Eagle| \\.38' + ')', rifle: - '(?' + 'Gewehr|Schrotflinte|Carabiner|Karabiner|Gauge |Lee-Enfield|Elefanten' + ')', + '(?' + + 'Gewehr|Schrotflinte|Carabiner|Karabiner|Gauge |Lee-Enfield|Elefanten' + + ')', smb: '(?' + 'Submachine Gun|Thompson' + ')', machineGun: '(?' + 'Browning|Vickers' + ')', launched: '(?' + 'Molotov|Granate|Dynamit' + ')', @@ -130,7 +132,9 @@ const keys = { ' Pistolet|Rewolwer|Derringer|Beretta|Luger|Desert Eagle| \\.38' + ')', rifle: - '(?' + 'Karabin|Strzelba|Wiatrówka|Garand|Gauge |Lee-Enfield|Strzelba na słonie' + ')', + '(?' + + 'Karabin|Strzelba|Wiatrówka|Garand|Gauge |Lee-Enfield|Strzelba na słonie' + + ')', smb: '(?' + 'Pistolet maszynowy|Thompson' + ')', machineGun: '(?' + 'Browning|Vickers' + ')', launched: '(?' + 'Mołotowa|Granat|Laska dynamitu|Dynamit' + ')', @@ -307,8 +311,7 @@ const translations = { }, de: { age: '(?\\d+)[,\\s]*', - occupation: - '[,\\s]*' + 'Beruf' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', + occupation: '[,\\s]*' + 'Beruf' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', str: '(?\\d+|-)[,\\s\n]*', con: '(?\\d+|-)[,\\s\n]*', siz: '(?\\d+|-)[,\\s\n]*', @@ -318,9 +321,13 @@ const translations = { app: '(?\\d+|-)[,\\s\n]*', edu: '(?\\d+|-)[,\\s\n]*', san: - '(?\\d+|-)[,\\s\n]*', + '(?\\d+|-)[,\\s\n]*', hp: - '(?\\d+|-)[,\\s\n]*', + '(?\\d+|-)[,\\s\n]*', mp: '(?[+-]?\\d+(?:d\\d+|D|W\\d+)?|' + keys.de.dbNone + ')[,\\s\n]*', - build: '(?[+-]?\\d+)[,\\s\n]*', + build: + '(?[+-]?\\d+)[,\\s\n]*', armor: '(?' + keys.de.armorNone + '|\\d+)[,\\s\n]*', - mov: '(?\\d+)[,\\s\n]*', + mov: + '(?\\d+)[,\\s\n]*', lck: '(?\\d+|-)[,\\s\n]*', attacksPerRound: '(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,;]?\\s*', - guessStartCombat: '(^|(?[\\.\\s' + nameCharacters + ']+)[,\\s\n]+', sections: '(' + @@ -388,8 +404,7 @@ const translations = { }, pl: { age: '(?\\d+)' + '\\s+(?:' + 'lata|lat|rok' + ')[,\\s]*', - occupation: - '[,\\s]*' + 'Zawód' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', + occupation: '[,\\s]*' + 'Zawód' + '(\\s*:)?\\s+(?.+)[,\\s\n]*', str: '(?\\d+|-)[,\\s\n]*', con: '(?\\d+|-)[,\\s\n]*', siz: '(?\\d+|-)[,\\s\n]*', @@ -399,9 +414,13 @@ const translations = { app: '(?\\d+|-)[,\\s\n]*', edu: '(?\\d+|-)[,\\s\n]*', san: - '(?\\d+|-)[,\\s\n]*', + '(?\\d+|-)[,\\s\n]*', hp: - '(?\\d+|-)[,\\s\n]*', + '(?\\d+|-)[,\\s\n]*', mp: '(?\\d+)[^d]%?\\)?(\\s*\\(\\d+/\\d+\\))?[\\.,]?\\s*', - guessStartCombat: '(^|(?[\\.\\s' + nameCharacters + ']+)[,\\s\n]+', sections: '(' + diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index 303fc6cc..03acb77e 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -52,17 +52,19 @@ export class CoC7ActorImporter { * @param {String} s the roll to be translated * @returns {String} the translated roll */ - translateRoll(s) { - if (typeof s == 'undefined') return s; + translateRoll (s) { + if (typeof s === 'undefined') return s if (typeof this.keys.diceShort !== 'undefined') { - let regEx = new RegExp('(?\\d+)' + this.keys.diceShort + '(?\\d+)', 'iug'); - let result = s.replace(regEx, '$D$'); - return s.replace(regEx, '$D$'); - } - else { - return s; + const regEx = new RegExp( + '(?\\d+)' + this.keys.diceShort + '(?\\d+)', + 'iug' + ) + return s.replace(regEx, '$D$') + } else { + return s } } + /** * toHTML, converts a string to HTML striping out empty lines or lines that contain just , or . * @param {String} s the string to convert @@ -499,7 +501,7 @@ export class CoC7ActorImporter { ) { this.parsed.db = '0' } - this.parsed.db = this.translateRoll(this.parsed.db); + this.parsed.db = this.translateRoll(this.parsed.db) // Get build this.check('build') // Get armor, if not found or none set to 0 @@ -519,7 +521,7 @@ export class CoC7ActorImporter { this.check('lck', { type: CoC7ActorImporter.asNumber }) // Get sanity loss this.check('sanLoss') - this.parsed.sanLoss = this.translateRoll(this.parsed.sanLoss); + this.parsed.sanLoss = this.translateRoll(this.parsed.sanLoss) // Get attacks per round, if not found or none set to 0 if ( this.check('attacksPerRound') && @@ -631,7 +633,8 @@ export class CoC7ActorImporter { * @returns {Actor} the created foundry `Actor` */ async createEntity (characterData, entityType) { - const importedCharactersFolder = await this.createImportCharactersFolderIfNotExists() + const importedCharactersFolder = + await this.createImportCharactersFolderIfNotExists() if (entityType !== 'npc') { entityType = 'creature' } diff --git a/module/apps/char-roll-dialog.js b/module/apps/char-roll-dialog.js index eae8a1f4..7ce7f5fd 100644 --- a/module/apps/char-roll-dialog.js +++ b/module/apps/char-roll-dialog.js @@ -185,9 +185,8 @@ export class CharacRollDialog extends Dialog { !Object.entries(this.rolled).find(el => !el) && Object.entries(this.rolled).length === 9 if (this.data.data.validate) { - const validateButton = this._element[0].querySelector( - 'button.validate' - ) + const validateButton = + this._element[0].querySelector('button.validate') validateButton.classList.remove('inactive') } } diff --git a/module/apps/parser.js b/module/apps/parser.js index c95aad41..fbc3ba07 100644 --- a/module/apps/parser.js +++ b/module/apps/parser.js @@ -321,8 +321,9 @@ export class CoC7Parser { data.dataset.type?.toLowerCase() ) ) { - humanName = CoC7Utilities.getCharacteristicNames(data.dataset.name) - ?.label + humanName = CoC7Utilities.getCharacteristicNames( + data.dataset.name + )?.label } title = game.i18n.format( `CoC7.LinkCheck${!data.dataset.difficulty ? '' : 'Diff'}${ diff --git a/module/apps/roll-dialog.js b/module/apps/roll-dialog.js index 21b88167..ce21bd85 100644 --- a/module/apps/roll-dialog.js +++ b/module/apps/roll-dialog.js @@ -43,8 +43,8 @@ export class RollDialog { const dlg = new Dialog({ title: options.displayName ? game.i18n.format('CoC7.BonusSelectionWindowNamed', { - name: options.displayName - }) + name: options.displayName + }) : game.i18n.localize('CoC7.BonusSelectionWindow'), content: html, buttons: { diff --git a/module/apps/sandata-dialog.js b/module/apps/sandata-dialog.js index aa588d52..becb0893 100644 --- a/module/apps/sandata-dialog.js +++ b/module/apps/sandata-dialog.js @@ -21,8 +21,8 @@ export class SanDataDialog extends Dialog { const dlg = new SanDataDialog({ title: options.displayName ? game.i18n.format('CoC7.SanDataSelectionWindowNamed', { - name: options.displayName - }) + name: options.displayName + }) : game.i18n.localize('CoC7.SanDataSelectionWindow'), // TODO: Remove SanDataSelectionWindowNamed content: html, buttons: { diff --git a/module/apps/skill-spec-select-dialog.js b/module/apps/skill-spec-select-dialog.js index c6821a90..e3b70330 100644 --- a/module/apps/skill-spec-select-dialog.js +++ b/module/apps/skill-spec-select-dialog.js @@ -22,8 +22,8 @@ export class SkillSpecSelectDialog { title: name ? game.i18n.format('CoC7.SkillSelectBase', { name: name }) : game.i18n.format('CoC7.SkillSpecSelectTitle', { - specialization: specializationName - }), + specialization: specializationName + }), content: html, buttons: { validate: { diff --git a/module/apps/tooltips.js b/module/apps/tooltips.js index b5071cad..9e8c0044 100644 --- a/module/apps/tooltips.js +++ b/module/apps/tooltips.js @@ -1,4 +1,4 @@ -/* global game */ +/* global $, game */ export class CoC7Tooltips { constructor () { this.ToolTipHover = null diff --git a/module/chat.js b/module/chat.js index d452b8bf..acd74289 100644 --- a/module/chat.js +++ b/module/chat.js @@ -223,12 +223,14 @@ export class CoC7Chat { } // Handle showing dropdown selection - html.find('.dropbtn').click(event => - event.currentTarget - .closest('.dropdown') - .querySelector('.dropdown-content') - .classList.toggle('show') - ) + html + .find('.dropbtn') + .click(event => + event.currentTarget + .closest('.dropdown') + .querySelector('.dropdown-content') + .classList.toggle('show') + ) html .find('.dropdown') .mouseleave(event => @@ -519,9 +521,8 @@ export class CoC7Chat { static _onChatCardRadioSwitch (event) { // console.log('-->CoC7Chat._onChatCardRadioSwitch'); event.preventDefault() - const optionList = event.currentTarget.parentElement.getElementsByClassName( - 'radio-switch' - ) + const optionList = + event.currentTarget.parentElement.getElementsByClassName('radio-switch') let index for (index = 0; index < optionList.length; index++) { const element = optionList[index] @@ -746,9 +747,8 @@ export class CoC7Chat { } } else { const actor = CoC7Chat._getChatCardActor(card) - const detailedResultPlaceHolder = card.querySelector( - '.result-details' - ) + const detailedResultPlaceHolder = + card.querySelector('.result-details') if (actor.spendLuck(luckAmount)) { const result = card.querySelector('.dice-total') diff --git a/module/chat/cards/test.js b/module/chat/cards/test.js index 90c6fa80..aa495757 100644 --- a/module/chat/cards/test.js +++ b/module/chat/cards/test.js @@ -1,6 +1,7 @@ -//TO BE REMOVED FOR PROD +/* global mergeObject */ +// TO BE REMOVED FOR PROD import { EnhancedChatCard } from '../../common/chatcardlib/src/chatcardlib.js' -export class testCard extends EnhancedChatCard { +export class TestCard extends EnhancedChatCard { /** * Extend and override the default options * @returns {Object} @@ -11,7 +12,7 @@ export class testCard extends EnhancedChatCard { }) } - getData(){ + getData () { const data = super.getData() data.mySelectOptions = { 0: 'option 1', diff --git a/module/check.js b/module/check.js index ca35d9e8..42ae071a 100644 --- a/module/check.js +++ b/module/check.js @@ -98,9 +98,8 @@ export class CoC7Check { // if (!this.actor || !this.actor.id) return undefined if (!this._rawValue) { if (this.characteristic) { - this.rawValue = this.actor.data.data.characteristics[ - this.characteristic - ].value + this.rawValue = + this.actor.data.data.characteristics[this.characteristic].value } if (this.skill) this.rawValue = this.skill.value if (this.attribute) { @@ -796,9 +795,8 @@ export class CoC7Check { } else { if (this.characteristic) { this.isCharactiristic = true - this.rawValue = this.actor.data.data.characteristics[ - this.characteristic - ].value + this.rawValue = + this.actor.data.data.characteristics[this.characteristic].value } if (this.skill) { @@ -1683,8 +1681,9 @@ export class CoC7Check { a.classList.add(...this.cssClassList) a.title = this.tooltipHeader a.dataset.roll = escape(this.JSONRollString) // TODO!IMPORTANT!!! - a.innerHTML = ` ${this - .modifiedResult || '??'}` + a.innerHTML = ` ${ + this.modifiedResult || '??' + }` return a } diff --git a/module/coc7.js b/module/coc7.js index 26ecb88f..d1b40c6d 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -22,7 +22,7 @@ import '../styles/system/index.less' import { CoC7ChaseSheet } from './items/sheets/chase.js' import { CoC7Socket } from './hooks/socket.js' import { DropActorSheetData } from './hooks/drop-actor-sheet-data.js' -import { testCard } from './chat/cards/test.js' +import { TestCard } from './chat/cards/test.js' import { initECC } from './common/chatcardlib/src/chatcardlib.js' Hooks.on('renderSettingsConfig', (app, html, options) => { @@ -141,10 +141,9 @@ Hooks.once('init', async function () { } } Combat.prototype.rollInitiative = rollInitiative - }) -initECC(testCard) //TO BE REMOVED FOR PROD +initECC(TestCard) // TO BE REMOVED FOR PROD Hooks.on('renderCombatTracker', (app, html, data) => CoC7Combat.renderCombatTracker(app, html, data) @@ -156,7 +155,6 @@ CoC7Hooks.listen() Hooks.once('socketlib.ready', CoC7Socket) Hooks.once('setup', function () { - // Localize CONFIG objects once up-front const toLocalize = [ 'spellProperties', @@ -342,14 +340,14 @@ Hooks.on('ready', async () => { game.settings.get('CoC7', 'boutOfMadnessSummaryTable') === 'none' ? null : game.tables.get( - game.settings.get('CoC7', 'boutOfMadnessSummaryTable') - ), + game.settings.get('CoC7', 'boutOfMadnessSummaryTable') + ), boutOfMadness_RealTime: game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') === 'none' ? null : game.tables.get( - game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') - ) + game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') + ) // maniasIndex: ge.settings.get('CoC7', 'boutOfMadnessPhobiasIndex'), // phobiasIndex: game.settings.get('CoC7', 'boutOfMadnessManiasIndex'), // phobias: ('none' == game.settings.get('CoC7', 'samplePhobiasTable'))?null:game.tables.get(game.settings.get('CoC7', 'samplePhobiasTable')), @@ -361,8 +359,8 @@ Hooks.on('ready', async () => { Hooks.on( 'renderCoC7ChaseSheet', - /**async*/ (app, html, data) => - /**await*/ CoC7ChaseSheet.setScroll(app, html, data) + /** async */ (app, html, data) => + /** await */ CoC7ChaseSheet.setScroll(app, html, data) ) Hooks.on('closeCoC7ChaseSheet', (app, html) => diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 02453929..1a88a0a8 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -1,3 +1,5 @@ +/* global $, ChatMessage, deepClone, FormDataExtended, foundry, fromUuid, game, Hooks, mergeObject, renderTemplate, socketlib, ui */ + const ECC_CLASS = 'enhanced-chat-card' const PERMISSION_TYPE = { @@ -23,7 +25,7 @@ export function initECC (...cardclass) { Hooks.once('socketlib.ready', function () { EnhancedChatCardLib.register(cardclass) - EnhancedChatCardLib.socket = socketlib.registerSystem(game.system.id) //Socket is attached to current system + EnhancedChatCardLib.socket = socketlib.registerSystem(game.system.id) // Socket is attached to current system EnhancedChatCardLib.socket.register('updateMessage', updateMessage) EnhancedChatCardLib.socket.register('advise', advise) // EnhancedChatCardLib.socket.register('gmtradeitemto', gmtradeitemto) @@ -37,14 +39,12 @@ export function initECC (...cardclass) { async function updateMessage (messageId, newContent) { const chatMessage = game.messages.get(messageId) - const msg = await chatMessage.update({ + await chatMessage.update({ content: newContent }) } -async function advise () { - return -} +async function advise () {} class EnhancedChatCardLib { constructor () { @@ -55,20 +55,20 @@ class EnhancedChatCardLib { static injectCSS () { let style = $('head').find('style') - if( !style?.length){ - $('head').append( $('')) + if (!style?.length) { + $('head').append($('')) style = $('head').find('style') } style.append( `.ecc-restricted {color: red} - .ecc-restricted:hover {cursor: not-allowed}`) - - return + .ecc-restricted:hover {cursor: not-allowed}` + ) } static set socket (x) { - if (!game.enhancedChatCardsLib) + if (!game.enhancedChatCardsLib) { game.enhancedChatCardsLib = new EnhancedChatCardLib() + } game.enhancedChatCardsLib.socket = x } @@ -85,8 +85,9 @@ class EnhancedChatCardLib { } static get types () { - if (!game.enhancedChatCardsLib) + if (!game.enhancedChatCardsLib) { game.enhancedChatCardsLib = new EnhancedChatCardLib() + } return game.enhancedChatCardsLib.types } @@ -135,8 +136,9 @@ export class EnhancedChatCard { if ( this.options.speaker && ChatMessage.getSpeakerActor(this.options.speaker) - ) + ) { return ChatMessage.getSpeakerActor(this.options.speaker) + } return game.user } @@ -155,7 +157,7 @@ export class EnhancedChatCard { toObject () { if (!this._data) return const data = {} - for (let k of Object.keys(this._data)) { + for (const k of Object.keys(this._data)) { const v = this._data[k] if (v instanceof Object) { data[k] = v.toObject ? v.toObject() : deepClone(v) @@ -165,14 +167,15 @@ export class EnhancedChatCard { } async toMessage (optionnalChatData = {}) { - //Map ecc card type if not registered already + // Map ecc card type if not registered already // this.registerECCClass() - //Publish by current user by default unless options.GMchatCard + // Publish by current user by default unless options.GMchatCard const html = await renderTemplate(this.template, this.getData()) const htmlCardElement = $(html)[0] - if (this.options.attachObject) + if (this.options.attachObject) { htmlCardElement.dataset.object = escape(this.objectDataString) + } htmlCardElement.dataset.eccClass = this.constructor.name htmlCardElement.classList.add(...this.options.classes) @@ -191,8 +194,9 @@ export class EnhancedChatCard { optionnalChatData ) - if (['gmroll', 'blindroll'].includes(this.rollMode)) + if (['gmroll', 'blindroll'].includes(this.rollMode)) { chatData.whisper = ChatMessage.getWhisperRecipients('GM') + } if (this.rollMode === 'selfroll') chatData.whisper = [game.user.id] if (this.rollMode === 'blindroll') chatData.blind = true @@ -273,9 +277,9 @@ export class EnhancedChatCard { setRadioState (element) { if (!element || !element.name) return const splited = element.name.split('.') - if ('data' != splited[0].toLowerCase()) return - if (this._data && undefined != this._data[splited[1]]) { - if (this._data[splited[1]] == element.value) { + if (splited[0].toLowerCase() !== 'data') return + if (this._data && undefined !== this._data[splited[1]]) { + if (this._data[splited[1]] === element.value) { element.checked = true } } @@ -290,14 +294,14 @@ export class EnhancedChatCard { async setPermission (element) { if (!element.dataset.eccPermissions) return const canYouMod = await this.hasPerm(element.dataset.eccPermissions) - if (!canYouMod){ + if (!canYouMod) { element.classList.add('ecc-restricted') - if( $(element).is('input')){ - if( 'range' == element.type) $(element).attr('disabled', true) - else $(element).attr('readonly', true) + if ($(element).is('input')) { + if (element.type === 'range') $(element).attr('disabled', true) + else $(element).attr('readonly', true) + } + if ($(element).is('select')) $(element).attr('disabled', true) } - if( $(element).is('select')) $(element).attr('disabled', true) - } } /** @@ -311,22 +315,26 @@ export class EnhancedChatCard { if (!restrictedTo.length) return true let permissionsArray = restrictedTo.split(' ') const whiteList = !permissionsArray.includes(PERMISSION_TYPE.BLACKLIST) - if (!whiteList) + if (!whiteList) { permissionsArray = permissionsArray.filter( - e => e != PERMISSION_TYPE.BLACKLIST + e => e !== PERMISSION_TYPE.BLACKLIST ) + } if (game.user.isGM) { - if (!vision) return true //GM can always modify everything ! Nah - if (permissionsArray.includes(PERMISSION_TYPE.GM)) + if (!vision) return true // GM can always modify everything ! Nah + if (permissionsArray.includes(PERMISSION_TYPE.GM)) { return true && whiteList - return false || !whiteList //If pass the filter return false unless it's a blacklist + } + return false || !whiteList // If pass the filter return false unless it's a blacklist } else { - permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.GM) + permissionsArray = permissionsArray.filter(e => e !== PERMISSION_TYPE.GM) } if (permissionsArray.includes(PERMISSION_TYPE.USER)) { - if (this.message.isAuthor) return true && whiteList //isAuthor vs user.isOwner ? - permissionsArray = permissionsArray.filter(e => e != PERMISSION_TYPE.USER) + if (this.message.isAuthor) return true && whiteList // isAuthor vs user.isOwner ? + permissionsArray = permissionsArray.filter( + e => e !== PERMISSION_TYPE.USER + ) } if (permissionsArray.includes(PERMISSION_TYPE.SPEAKER)) { @@ -348,14 +356,14 @@ export class EnhancedChatCard { // if (game.user.id == speaker.user) return true && whiteList // } permissionsArray = permissionsArray.filter( - e => e != PERMISSION_TYPE.SPEAKER + e => e !== PERMISSION_TYPE.SPEAKER ) } // All filter passed, array should contains only uuids or actor/token ids if (permissionsArray.length) { ui.notifications.info('Array permission is not empty !') } - return false || !whiteList //If pass the filter return false unless it's a blacklist + return false || !whiteList // If pass the filter return false unless it's a blacklist } static async bindListeners (html) { @@ -388,7 +396,7 @@ export class EnhancedChatCard { // button.style.display = 'none' //Avoid multiple push const action = button.dataset.action if (!action) { - console.warn(`no action associated with this button`) + console.warn('no action associated with this button') return } if (!this[action]) { @@ -426,8 +434,8 @@ export class EnhancedChatCard { /** * Retrieve the form from the card and update the data structure - * @param {HTMLElement} card - * @returns + * @param {HTMLElement} card + * @returns */ _update (card) { const forms = card.querySelectorAll('form') @@ -530,16 +538,14 @@ export class EnhancedChatCard { } static async fromData (data, cardClassName, messageId = null) { - const cardClass = game.enhancedChatCardsLib.types.get(cardClassName) + const CardClass = game.enhancedChatCardsLib.types.get(cardClassName) - if (!cardClass) { - console.error( - `Unknown chat card type: ${htmlCardElement.dataset.eccClass}` - ) + if (!CardClass) { + console.error(`Unknown chat card type: ${cardClassName}`) return } - const card = new cardClass(data) + const card = new CardClass(data) if (messageId) card.messageId = messageId await card.assignObject() return card diff --git a/module/hooks/render-pause.js b/module/hooks/render-pause.js index bdf5133d..a65333c9 100644 --- a/module/hooks/render-pause.js +++ b/module/hooks/render-pause.js @@ -1,4 +1,4 @@ -/* global Hooks */ +/* global game, Hooks */ export function listen () { Hooks.on('renderPause', async (data, html, options) => { @@ -6,11 +6,11 @@ export function listen () { if (game.settings.get('CoC7', 'artPauseImage').toLowerCase() === 'null') { html.find('img').remove() } - if (game.settings.get('CoC7', 'artPauseImage') != '') { + if (game.settings.get('CoC7', 'artPauseImage') !== '') { html.find('img').attr('src', game.settings.get('CoC7', 'artPauseImage')) } - if ('' != game.settings.get('CoC7', 'artPauseText')) { + if (game.settings.get('CoC7', 'artPauseText') !== '') { html.find('h3').html(game.settings.get('CoC7', 'artPauseText')) } } diff --git a/module/items/book/sheet.js b/module/items/book/sheet.js index c1429dac..3cba9551 100644 --- a/module/items/book/sheet.js +++ b/module/items/book/sheet.js @@ -57,9 +57,7 @@ export class CoC7BookSheet extends ItemSheet { html.find('.edit-spell').click(event => this._onSpellDetail(event)) html.find('.spell-name').click(event => this._onSpellDetail(event)) html.find('.teach-spell').click(event => { - const id = $(event.currentTarget) - .parents('li') - .data('id') + const id = $(event.currentTarget).parents('li').data('id') this.item.attemptSpellLearning(id) }) html.find('[name="data.study.necessary"]').change(event => { diff --git a/module/items/sheets/archetype.js b/module/items/sheets/archetype.js index 278d5bdf..d6536831 100644 --- a/module/items/sheets/archetype.js +++ b/module/items/sheets/archetype.js @@ -76,9 +76,7 @@ export class CoC7ArchetypeSheet extends ItemSheet { } async _onItemDelete (event, collectionName = 'items') { - const itemIndex = $(event.currentTarget) - .parents('.item') - .data('item-id') + const itemIndex = $(event.currentTarget).parents('.item').data('item-id') if (itemIndex) await this.removeItem(itemIndex, collectionName) } diff --git a/module/items/sheets/chase.js b/module/items/sheets/chase.js index b16b9d6d..2de3e6a1 100644 --- a/module/items/sheets/chase.js +++ b/module/items/sheets/chase.js @@ -1,4 +1,4 @@ -/* global DragDrop, duplicate, expandObject, flattenObject, FormDataExtended, game, getType, ItemSheet, mergeObject, ui */ +/* global $, Dialog, DragDrop, duplicate, expandObject, flattenObject, FormDataExtended, foundry, game, getType, ItemSheet, mergeObject, ui */ import { CoCActor } from '../../actors/actor.js' import { CoC7Chat } from '../../chat.js' @@ -80,40 +80,40 @@ export class CoC7ChaseSheet extends ItemSheet { data.preysMinMov = data.preys.length ? data.preys.reduce((prev, current) => - prev.adjustedMov < current.adjustedMov ? prev : current - ).adjustedMov + prev.adjustedMov < current.adjustedMov ? prev : current + ).adjustedMov : -1 data.preysMaxMov = data.preys.length ? data.preys.reduce((prev, current) => - prev.adjustedMov > current.adjustedMov ? prev : current - ).adjustedMov + prev.adjustedMov > current.adjustedMov ? prev : current + ).adjustedMov : -1 data.chasersMinMov = data.chasers.length ? data.chasers.reduce((prev, current) => - prev.adjustedMov < current.adjustedMov ? prev : current - ).adjustedMov + prev.adjustedMov < current.adjustedMov ? prev : current + ).adjustedMov : -1 data.chasersMaxMov = data.chasers.length ? data.chasers.reduce((prev, current) => - prev.adjustedMov > current.adjustedMov ? prev : current - ).adjustedMov + prev.adjustedMov > current.adjustedMov ? prev : current + ).adjustedMov : -1 data.chasers.forEach(p => { if (p.adjustedMov < data.preysMinMov) p.tooSlow() else p.includeInChase() - p.fastest = p.adjustedMov == data.chasersMaxMov - p.slowest = p.adjustedMov == data.chasersMinMov + p.fastest = p.adjustedMov === data.chasersMaxMov + p.slowest = p.adjustedMov === data.chasersMinMov }) data.preys.forEach(p => { if (p.adjustedMov > data.chasersMaxMov) p.escaped() else p.includeInChase() - p.fastest = p.adjustedMov == data.preysMaxMov - p.slowest = p.adjustedMov == data.preysMinMov + p.fastest = p.adjustedMov === data.preysMaxMov + p.slowest = p.adjustedMov === data.preysMinMov }) data.locations = this.locations @@ -157,15 +157,20 @@ export class CoC7ChaseSheet extends ItemSheet { )})` ) - game.CoC7.skillList?.forEach(s => { - if ( - !list.includes(s.fullName) && - !s.fullName - .toLowerCase() - .includes(`(${game.i18n.localize('CoC7.AnySpecName')})`.toLowerCase()) - ) - list.push(s.fullName) - }) // TODO: Remove ?? + if (typeof game.CoC7.skillList !== 'undefined') { + game.CoC7.skillList.forEach(s => { + if ( + !list.includes(s.fullName) && + !s.fullName + .toLowerCase() + .includes( + `(${game.i18n.localize('CoC7.AnySpecName')})`.toLowerCase() + ) + ) { + list.push(s.fullName) + } + }) // TODO: Remove ?? + } this.participants.forEach(p => { if (p.actor) { p.actor.skills.forEach(s => { @@ -231,13 +236,13 @@ export class CoC7ChaseSheet extends ItemSheet { // ui.notifications.error(`Type : ${typeof elem}`) let p if (typeof elem === 'string' || elem instanceof String) { - p = this.item.data.data.participants.find(p => elem == p.uuid) //Retrieve participant data from list. - } else if (elem.constructor.name == '_participant') { + p = this.item.data.data.participants.find(p => elem === p.uuid) // Retrieve participant data from list. + } else if (elem.constructor.name === '_participant') { p = undefined // participant is already processed. ui.notifications.warn('Participant was already processed.') } else p = undefined - if (undefined != p) { + if (undefined !== p) { l.participants[i] = new _participant(p) // replace uuid with _participant } else { // participants.push( null) @@ -264,31 +269,34 @@ export class CoC7ChaseSheet extends ItemSheet { get initTrack () { if ( !this.item.data.data.locations.list || - 0 === this.item.data.data.locations.list.length - ) + this.item.data.data.locations.list.length === 0 + ) { return undefined + } const locations = [] // !!!!!!! locations vs init locations !!! const init = this.startingLine let locationsIndexStart, initIndexStart, locationsLength - if (0 >= init.length) locationsIndexStart = 0 - else if (this.item.data.data.startingIndex >= init.length) + if (init.length <= 0) { locationsIndexStart = 0 - else locationsIndexStart = init.length - this.item.data.data.startingIndex + } else if (this.item.data.data.startingIndex >= init.length) { + locationsIndexStart = 0 + } else locationsIndexStart = init.length - this.item.data.data.startingIndex if (this.item.data.data.startingIndex <= 0) initIndexStart = 0 - else if (this.item.data.data.startingIndex <= init.length) + else if (this.item.data.data.startingIndex <= init.length) { initIndexStart = 0 - else initIndexStart = this.item.data.data.startingIndex - init.length + } else initIndexStart = this.item.data.data.startingIndex - init.length - if (0 == locationsIndexStart) + if (locationsIndexStart === 0) { locationsLength = this.item.data.data.locations.list.length - else + } else { locationsLength = this.item.data.data.locations.list.length + locationsIndexStart + } - if (0 != init.length) { + if (init.length !== 0) { if (this.item.data.data.startingIndex < 0) { for ( let index = 0; @@ -314,18 +322,22 @@ export class CoC7ChaseSheet extends ItemSheet { ) { location = duplicate(chaseLocations.list[index - locationsIndexStart]) location.init = false - location.participants?.forEach(p => { - if (null != p) participants.push(p) - }) + if (typeof location.participants !== 'undefined') { + location.participants.forEach(p => { + if (p !== null) participants.push(p) + }) + } } if (index >= initIndexStart && index - initIndexStart < init.length) { mergeObject(location, init[index - initIndexStart], { overwrite: false }) - init[index - initIndexStart].participants?.forEach(p => { - if (null != p) participants.push(p) - }) + if (typeof init[index - initIndexStart].participants !== 'undefined') { + init[index - initIndexStart].participants.forEach(p => { + if (p !== null) participants.push(p) + }) + } location.participants = participants } @@ -345,16 +357,16 @@ export class CoC7ChaseSheet extends ItemSheet { get previousLocation () { if (!this.locations) return undefined const activeIndex = this.locations.findIndex(l => l.active) - if (-1 == activeIndex) return undefined - if (0 == activeIndex) return undefined + if (activeIndex === -1) return undefined + if (activeIndex === 0) return undefined return this.locations[activeIndex - 1] } get nextLocation () { if (!this.locations) return undefined const activeIndex = this.locations.findIndex(l => l.active) - if (-1 == activeIndex) return undefined - if (activeIndex == this.locations.length - 1) return undefined + if (activeIndex === -1) return undefined + if (activeIndex === this.locations.length - 1) return undefined return this.locations[activeIndex + 1] } @@ -376,9 +388,9 @@ export class CoC7ChaseSheet extends ItemSheet { return } if (this.allHaveValidMov) { - //TODO : Check for speed roll ?? + // TODO : Check for speed roll ?? - //Calculate movement actions + // Calculate movement actions const participants = this.participants const minMov = this.findMinMov(participants) participants.forEach(p => { @@ -391,14 +403,14 @@ export class CoC7ChaseSheet extends ItemSheet { } get startingLine () { - //Get preys and check for escaped + // Get preys and check for escaped const preys = this.item.data.data.includeEscaped ? this.preys : this.preys?.filter(p => !p.data.escaped) - //Get chasers + // Get chasers const chasers = this.chasers - //If no prey or no chasser + // If no prey or no chasser // if (0 == chasers.length) { // ui.notifications.warn('No chasers') // return undefined @@ -408,7 +420,7 @@ export class CoC7ChaseSheet extends ItemSheet { // return undefined // } - //Build starting track + // Build starting track const track = [] const chasersMinMov = this.findMinMov(chasers) @@ -416,17 +428,17 @@ export class CoC7ChaseSheet extends ItemSheet { const preysMinMov = this.findMinMov(preys) const preysMaxMov = this.findMaxMov(preys) - if (-1 != chasersMinMov && -1 != chasersMaxMov) { + if (chasersMinMov !== -1 && chasersMaxMov !== -1) { // Add chasers to the track. for (let mov = chasersMinMov; mov <= chasersMaxMov; mov++) { - //Find all with that mov + // Find all with that mov const location = { uuid: this.generateNewUuid(), init: true, participants: [] } const locationParticipantsList = chasers - .filter(p => mov == p.adjustedMov) + .filter(p => mov === p.adjustedMov) .sort((a, b) => a.dex - b.dex) locationParticipantsList.forEach(p => location.participants.push(p.uuid) @@ -444,17 +456,17 @@ export class CoC7ChaseSheet extends ItemSheet { } } - if (-1 != preysMinMov && -1 != preysMaxMov) { + if (preysMinMov !== -1 && preysMaxMov !== -1) { // Add preys to the track. for (let mov = preysMinMov; mov <= preysMaxMov; mov++) { - //Find all with that mov + // Find all with that mov const location = { uuid: this.generateNewUuid(), init: true, participants: [] } const locationParticipantsList = preys - .filter(p => mov == p.adjustedMov) + .filter(p => mov === p.adjustedMov) .sort((a, b) => a.dex - b.dex) locationParticipantsList.forEach(p => location.participants.push(p.uuid) @@ -472,10 +484,10 @@ export class CoC7ChaseSheet extends ItemSheet { while (!unique) { uuid = foundry.utils.randomID(16) unique = - 0 === - this.item.data.data.participants.filter(p => p.uuid == uuid).length && - 0 === - this.item.data.data.locations.list.filter(p => p.uuid == uuid).length + this.item.data.data.participants.filter(p => p.uuid === uuid).length === + 0 && + this.item.data.data.locations.list.filter(p => p.uuid === uuid) + .length === 0 } return uuid @@ -578,7 +590,7 @@ export class CoC7ChaseSheet extends ItemSheet { if (updateData) data = mergeObject(data, updateData) else data = expandObject(data) - //Check that starting position is not outside of chase range. + // Check that starting position is not outside of chase range. if ( this.item.data.data.locations?.list?.length && data.data.startingIndex > this.item.data.data.locations.list.length @@ -590,8 +602,8 @@ export class CoC7ChaseSheet extends ItemSheet { const participants = duplicate(this.item.data.data.participants) // Handle participants array for (const [k, v] of Object.entries(data.data.participants)) { - const index = participants.findIndex(p => p.uuid == k) - if (-1 == index) ui.notifications.error('Participant table corrupted') + const index = participants.findIndex(p => p.uuid === k) + if (index === -1) ui.notifications.error('Participant table corrupted') else { const original = participants[index] const cleaned = clean(v) @@ -605,12 +617,12 @@ export class CoC7ChaseSheet extends ItemSheet { if (data.locations) { const locations = duplicate(this.item.data.data.locations.list) - //Handle locations list + // Handle locations list for (const [key, value] of Object.entries(data.locations)) { - const locationIndex = locations.findIndex(l => l.uuid == key) - if (-1 == locationIndex) + const locationIndex = locations.findIndex(l => l.uuid === key) + if (locationIndex === -1) { ui.notifications.error('Locations table corrupted') - else { + } else { const originalLocation = locations[locationIndex] const cleaned = clean(value) mergeObject(originalLocation, cleaned) @@ -662,7 +674,7 @@ export class CoC7ChaseSheet extends ItemSheet { super._updateObject(event, formData) } - static /**async */ setScroll (app, html, data) { + static /** async */ setScroll (app, html, data) { const track = html.find('.track') if (!track.length) return const element = $(track).find('.active') @@ -677,7 +689,7 @@ export class CoC7ChaseSheet extends ItemSheet { const trackElement = track[0] - if (-1 != originalPosition) { + if (originalPosition !== -1) { trackElement.scrollTo({ top: 0, left: originalPosition, @@ -729,19 +741,19 @@ export class CoC7ChaseSheet extends ItemSheet { // } findParticipantIndex (uuid) { - return this.item.data.data.participants.findIndex(p => p.uuid == uuid) + return this.item.data.data.participants.findIndex(p => p.uuid === uuid) } findLocationIndex (uuid) { - return this.item.data.data.locations.list.findIndex(p => p.uuid == uuid) + return this.item.data.data.locations.list.findIndex(p => p.uuid === uuid) } findIndex (list, uuid) { - return list.findIndex(p => p.uuid == uuid) + return list.findIndex(p => p.uuid === uuid) } async updateLocationsList (list) { - //Remove all unnecessary items (cssClass, ) + // Remove all unnecessary items (cssClass, ) const updatedList = duplicate(list) updatedList.forEach(l => { // delete l.active @@ -751,8 +763,9 @@ export class CoC7ChaseSheet extends ItemSheet { delete l.end if (l.participants && l.participants.length) { for (let i = 0; i < l.participants.length; i++) { - if (l.participants[i].data?.uuid) + if (l.participants[i].data?.uuid) { l.participants[i] = l.participants[i].data.uuid + } } } }) @@ -765,11 +778,11 @@ export class CoC7ChaseSheet extends ItemSheet { : [] list.forEach(p => { let data - if (p.constructor.name == '_participant') { + if (p.constructor.name === '_participant') { data = p.data } else data = p const index = this.findIndex(participantsData, data.uuid) - if (-1 === index) { + if (index === -1) { participantsData.push(data) ui.notifications.warn('Participant data missing') } else { @@ -777,7 +790,6 @@ export class CoC7ChaseSheet extends ItemSheet { } }) await this.item.update({ 'data.participants': participantsData }) - return } async _onToggle (event) { @@ -793,10 +805,10 @@ export class CoC7ChaseSheet extends ItemSheet { if (data.locations) { const locations = duplicate(this.item.data.data.locations.list) for (const [key, value] of Object.entries(data.locations)) { - const locationIndex = locations.findIndex(l => l.uuid == key) - if (-1 == locationIndex) + const locationIndex = locations.findIndex(l => l.uuid === key) + if (locationIndex === -1) { ui.notifications.error('Locations table corrupted') - else { + } else { const originalLocation = locations[locationIndex] const cleaned = clean(value) mergeObject(originalLocation, cleaned) @@ -828,22 +840,19 @@ export class CoC7ChaseSheet extends ItemSheet { const uuid = locationElement.dataset.uuid const locations = duplicate(this.item.data.data.locations.list) const locationIndex = this.findIndex(locations, uuid) - if (!locations[locationIndex].obstacleDetails) + if (!locations[locationIndex].obstacleDetails) { locations[locationIndex].obstacleDetails = {} + } if (target.classList.contains('barrier')) { - locations[locationIndex].obstacleDetails.barrier = !locations[ - locationIndex - ].obstacleDetails.barrier - locations[locationIndex].obstacleDetails.hazard = !locations[ - locationIndex - ].obstacleDetails.barrier + locations[locationIndex].obstacleDetails.barrier = + !locations[locationIndex].obstacleDetails.barrier + locations[locationIndex].obstacleDetails.hazard = + !locations[locationIndex].obstacleDetails.barrier } else if (target.classList.contains('hazard')) { - locations[locationIndex].obstacleDetails.hazard = !locations[ - locationIndex - ].obstacleDetails.hazard - locations[locationIndex].obstacleDetails.barrier = !locations[ - locationIndex - ].obstacleDetails.hazard + locations[locationIndex].obstacleDetails.hazard = + !locations[locationIndex].obstacleDetails.hazard + locations[locationIndex].obstacleDetails.barrier = + !locations[locationIndex].obstacleDetails.hazard } await this.updateLocationsList(locations) } @@ -858,7 +867,7 @@ export class CoC7ChaseSheet extends ItemSheet { const locationElement = target.closest('.chase-location') const uuid = locationElement.dataset.uuid const locationIndex = this.findIndex(locations, uuid) - if (-1 != locationIndex) { + if (locationIndex !== -1) { if (!active) locations[locationIndex].active = true await this.updateLocationsList(locations) } @@ -968,7 +977,9 @@ export class CoC7ChaseSheet extends ItemSheet { _onDragLeave (dragEvent) { const target = dragEvent.currentTarget - target.classList?.remove('drag-over') + if (typeof target.classList !== 'undefined') { + target.classList.remove('drag-over') + } } async _onDropParticipant (event) { @@ -1110,8 +1121,8 @@ export class CoC7ChaseSheet extends ItemSheet { data.sceneId && data.tokenId ? `${data.sceneId}.${data.tokenId}` : data.type === 'Actor' - ? data.id - : data.actorId || data.actorKey + ? data.id + : data.actorId || data.actorKey const participant = {} const actor = chatHelper.getActorFromKey(actorKey) if (actor) { @@ -1145,8 +1156,8 @@ export class CoC7ChaseSheet extends ItemSheet { break } - //TODO:Check for speed check, if none add speedcheck - //speedCheck = { + // TODO:Check for speed check, if none add speedcheck + // speedCheck = { // id: 'str' // type: 'characteristic' // } @@ -1209,8 +1220,8 @@ export class CoC7ChaseSheet extends ItemSheet { break } - //TODO:Check for speed check, if none add speedcheck con non vehicule, drive auto for vehicule - //speedCheck = { + // TODO:Check for speed check, if none add speedcheck con non vehicule, drive auto for vehicule + // speedCheck = { // id: 'con' // type: 'characteristic' // } @@ -1236,7 +1247,8 @@ export class CoC7ChaseSheet extends ItemSheet { let unique = false while (!unique) { participant.uuid = foundry.utils.randomID(16) - unique = 0 === participants.filter(p => p.uuid == participant.uuid).length + unique = + participants.filter(p => p.uuid === participant.uuid).length === 0 } participants.push(participant) @@ -1268,8 +1280,8 @@ export class CoC7ChaseSheet extends ItemSheet { async moveParticipant (participantUuid, locationUuid) { const locations = duplicate(this.item.data.data.locations.list) - //Find destination location. - const destination = locations.find(l => locationUuid == l.uuid) + // Find destination location. + const destination = locations.find(l => locationUuid === l.uuid) if (!destination) { console.error( `Failed to move ${participantUuid}. Location ${locationUuid} unknown` @@ -1277,7 +1289,7 @@ export class CoC7ChaseSheet extends ItemSheet { return } - //Find origin location + // Find origin location const origin = locations.find(l => l.participants?.includes(participantUuid) ) @@ -1297,7 +1309,7 @@ export class CoC7ChaseSheet extends ItemSheet { // destination.participants.sort(sortByRoleAndDex) const oldParticipantsList = origin.participants.filter( - p => participantUuid != p + p => participantUuid !== p ) origin.participants = oldParticipantsList @@ -1306,10 +1318,10 @@ export class CoC7ChaseSheet extends ItemSheet { } export function sortByRoleAndDex (a, b) { - //Put chasers first + // Put chasers first if (b.chaser && !a.chaser) return 1 if (a.chaser && !b.chaser) return -1 - //If sametype sort by dex + // If sametype sort by dex return a.dex - b.dex } @@ -1517,14 +1529,26 @@ export class _participant { this.data.slowest = x } + get slowest () { + return this.data.slowest + } + set fastest (x) { this.data.fastest = x } + get fastest () { + return this.data.fastest + } + set movementAction (x) { this.data.movementAction = x } + get movementAction () { + return this.data.movementAction + } + get cssClass () { const cssClasses = [] if (this.isChaser) cssClasses.push('chaser') diff --git a/module/items/sheets/item-sheetV2.js b/module/items/sheets/item-sheetV2.js index 0a33d10c..f846e7a2 100644 --- a/module/items/sheets/item-sheetV2.js +++ b/module/items/sheets/item-sheetV2.js @@ -104,8 +104,8 @@ export class CoC7ItemSheetV2 extends ItemSheet { async _onClickToggle (event) { event.preventDefault() - const propertyId = event.currentTarget.closest('.toggle-switch').dataset - .property + const propertyId = + event.currentTarget.closest('.toggle-switch').dataset.property await this.item.toggleProperty( propertyId, event.metaKey || diff --git a/module/items/sheets/occupation.js b/module/items/sheets/occupation.js index 7f3328b0..d7542c5d 100644 --- a/module/items/sheets/occupation.js +++ b/module/items/sheets/occupation.js @@ -39,9 +39,8 @@ export class CoC7OccupationSheet extends ItemSheet { event.preventDefault() event.stopPropagation() - const optionalSkill = event?.currentTarget?.classList?.contains( - 'optional-skills' - ) + const optionalSkill = + event?.currentTarget?.classList?.contains('optional-skills') const ol = event?.currentTarget?.closest('ol') const index = ol?.dataset?.group @@ -142,9 +141,7 @@ export class CoC7OccupationSheet extends ItemSheet { } async _onItemDelete (event, collectionName = 'items') { - const itemIndex = $(event.currentTarget) - .parents('.item') - .data('item-id') + const itemIndex = $(event.currentTarget).parents('.item').data('item-id') if (itemIndex) await this.removeItem(itemIndex, collectionName) } diff --git a/module/items/sheets/setup.js b/module/items/sheets/setup.js index ebf7dc22..ae119098 100644 --- a/module/items/sheets/setup.js +++ b/module/items/sheets/setup.js @@ -39,8 +39,8 @@ export class CoC7SetupSheet extends ItemSheet { async _onClickToggle (event) { event.preventDefault() - const propertyId = event.currentTarget.closest('.toggle-switch').dataset - .property + const propertyId = + event.currentTarget.closest('.toggle-switch').dataset.property await this.item.toggleProperty( propertyId, event.metaKey || @@ -118,9 +118,7 @@ export class CoC7SetupSheet extends ItemSheet { } async _onItemDelete (event, collectionName = 'items') { - const itemIndex = $(event.currentTarget) - .parents('.item') - .data('item-id') + const itemIndex = $(event.currentTarget).parents('.item').data('item-id') if (itemIndex) await this.removeItem(itemIndex, collectionName) } @@ -241,8 +239,8 @@ export class CoC7SetupSheet extends ItemSheet { } if (event.currentTarget?.name === 'data.characteristics.rolls.enabled') { - formData.data.characteristics.points.enabled = !event.currentTarget - .checked + formData.data.characteristics.points.enabled = + !event.currentTarget.checked } super._updateObject(event, formData) diff --git a/module/items/sheets/skill.js b/module/items/sheets/skill.js index a4a511d7..ba64bb28 100644 --- a/module/items/sheets/skill.js +++ b/module/items/sheets/skill.js @@ -104,8 +104,8 @@ export class CoC7SkillSheet extends ItemSheet { async _onClickToggle (event) { event.preventDefault() - const propertyId = event.currentTarget.closest('.toggle-switch').dataset - .property + const propertyId = + event.currentTarget.closest('.toggle-switch').dataset.property await this.item.toggleProperty( propertyId, event.metaKey || diff --git a/module/items/sheets/weapon-sheet.js b/module/items/sheets/weapon-sheet.js index 02fa936b..636aebc5 100644 --- a/module/items/sheets/weapon-sheet.js +++ b/module/items/sheets/weapon-sheet.js @@ -130,8 +130,8 @@ export class CoC7WeaponSheet extends ItemSheet { */ async _onClickToggle (event) { event.preventDefault() - const propertyId = event.currentTarget.closest('.toggle-switch').dataset - .property + const propertyId = + event.currentTarget.closest('.toggle-switch').dataset.property await this.item.toggleProperty( propertyId, event.metaKey || @@ -143,8 +143,8 @@ export class CoC7WeaponSheet extends ItemSheet { async _onPropertyClick (event) { event.preventDefault() - const property = event.currentTarget.closest('.weapon-property').dataset - .property + const property = + event.currentTarget.closest('.weapon-property').dataset.property const weaponId = event.currentTarget.closest('.weapon').dataset.itemId const actorKey = event.currentTarget.closest('.weapon').dataset.actorKey let weapon = null diff --git a/module/scripts/compendium-filter.js b/module/scripts/compendium-filter.js index 1bcba775..324ce006 100644 --- a/module/scripts/compendium-filter.js +++ b/module/scripts/compendium-filter.js @@ -1,4 +1,4 @@ -/* global game, Hooks */ +/* global $, game, Hooks */ import { COC7 } from '../config.js' async function performFilter (e) { @@ -33,10 +33,13 @@ async function performFilter (e) { filter = item.type === type } if (filter && era !== '') { - if (item.data.data.eras[era] === false || item.data.data.eras[era] === true) { + if ( + item.data.data.eras[era] === false || + item.data.data.eras[era] === true + ) { filter = item.data.data.eras[era] } else { - filter = (item.data.data.eras[era]?.selected ?? false) + filter = item.data.data.eras[era]?.selected ?? false } } if (filter) { @@ -44,7 +47,9 @@ async function performFilter (e) { } } app.find('ol.directory-list li').each(function () { - this.style.display = show.includes(this.dataset.documentId) ? 'flex' : 'none' + this.style.display = show.includes(this.dataset.documentId) + ? 'flex' + : 'none' }) } @@ -53,45 +58,111 @@ export function compendiumFilter () { if (app.collection.documentName === 'Item') { const types = [...new Set(data.index.map(item => item.type))] const select = [] - select.push('') + select.push( + '' + ) if (types.includes('archetype')) { - select.push('') + select.push( + '' + ) } if (types.includes('book')) { - select.push('') + select.push( + '' + ) } if (types.includes('item')) { - select.push('') + select.push( + '' + ) } if (types.includes('occupation')) { - select.push('') + select.push( + '' + ) } if (types.includes('setup')) { - select.push('') + select.push( + '' + ) } if (types.includes('skill')) { - select.push('') + select.push( + '' + ) } if (types.includes('spell')) { - select.push('') + select.push( + '' + ) } if (types.includes('status')) { - select.push('') + select.push( + '' + ) } if (types.includes('talent')) { - select.push('') + select.push( + '' + ) } if (types.includes('weapon')) { - select.push('') + select.push( + '' + ) } const eras = [] - eras.push('') + eras.push( + '' + ) for (const [key, value] of Object.entries(COC7.eras)) { - eras.push('') + eras.push( + '' + ) } html.data('packId', app.metadata.package + '.' + app.metadata.name) html.find('header.directory-header').remove() - html.find('div.compendium.directory').before('
                                      ') + html + .find('div.compendium.directory') + .before( + '
                                      ' + ) html.find('select').change(performFilter.bind(this)) html.find('input').keyup(performFilter.bind(this)) } diff --git a/module/updater.js b/module/updater.js index 73663401..6f969393 100644 --- a/module/updater.js +++ b/module/updater.js @@ -305,14 +305,13 @@ export class Updater { } static _migrateItemArtwork (item, updateData) { - const regEx = new RegExp(/systems\/CoC7\/artwork\/icons\/(.+)/) - let image = String(item.img).match(regEx) + let image = String(item.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) if (image !== null) { updateData.img = 'systems/CoC7/assets/icons/' + image[1] } if (item.type === 'setup') { for (const [k, v] of Object.entries(item.data.items)) { - image = String(v.img).match(regEx) + image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) if (image !== null) { if (typeof updateData['data.items'] === 'undefined') { updateData['data.items'] = item.data.items @@ -323,7 +322,7 @@ export class Updater { } } else if (item.type === 'occupation') { for (const [k, v] of Object.entries(item.data.skills)) { - image = String(v.img).match(regEx) + image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) if (image !== null) { if (typeof updateData['data.skills'] === 'undefined') { updateData['data.skills'] = item.data.skills @@ -334,7 +333,7 @@ export class Updater { } for (const [o, g] of Object.entries(item.data.groups)) { for (const [k, v] of Object.entries(g.skills)) { - image = String(v.img).match(regEx) + image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) if (image !== null) { if (typeof updateData['data.groups'] === 'undefined') { updateData['data.groups'] = item.data.groups @@ -346,7 +345,7 @@ export class Updater { } } else if (item.type === 'book') { for (const [k, v] of Object.entries(item.data.spells)) { - image = String(v.img).match(regEx) + image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) if (image !== null) { if (typeof updateData['data.spells'] === 'undefined') { updateData['data.spells'] = item.data.spells @@ -357,7 +356,7 @@ export class Updater { } } else if (item.type === 'archetype') { for (const [k, v] of Object.entries(item.data.skills)) { - image = String(v.img).match(regEx) + image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) if (image !== null) { if (typeof updateData['data.skills'] === 'undefined') { updateData['data.skills'] = item.data.skills @@ -450,7 +449,8 @@ export class Updater { } if (typeof item.data.keeperNotes !== 'undefined') { if (typeof updateData['data.description.keeper'] !== 'undefined') { - updateData['data.description.keeper'] = item.data.keeperNotes + updateData['data.description.keeper'] + updateData['data.description.keeper'] = + item.data.keeperNotes + updateData['data.description.keeper'] } else { updateData['data.description.keeper'] = item.data.keeperNotes } @@ -470,17 +470,16 @@ export class Updater { } static _migrateActorArtwork (actor, updateData) { - const regEx = new RegExp(/systems\/CoC7\/artwork\/icons\/(.+)/) - let image = String(actor.img).match(regEx) + let image = String(actor.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) if (image !== null) { updateData.img = 'systems/CoC7/assets/icons/' + image[1] } - image = String(actor.token.img).match(regEx) + image = String(actor.token.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) if (image !== null) { updateData['token.img'] = 'systems/CoC7/assets/icons/' + image[1] } for (const [k, v] of Object.entries(actor.effects)) { - image = String(v.icon).match(regEx) + image = String(v.icon).match(/systems\/CoC7\/artwork\/icons\/(.+)/) if (image !== null) { if (typeof updateData.effects === 'undefined') { updateData.effects = actor.effects @@ -577,8 +576,7 @@ export class Updater { } static _migrateMacroArtwork (table, updateData) { - const regEx = new RegExp(/systems\/CoC7\/artwork\/icons\/(.+)/) - const image = String(table.img).match(regEx) + const image = String(table.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) if (image !== null) { updateData.img = 'systems/CoC7/assets/icons/' + image[1] } @@ -586,13 +584,12 @@ export class Updater { } static _migrateTableArtwork (table, updateData) { - const regEx = new RegExp(/systems\/CoC7\/artwork\/icons\/(.+)/) - let image = String(table.img).match(regEx) + let image = String(table.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) if (image !== null) { updateData.img = 'systems/CoC7/assets/icons/' + image[1] } for (const [k, v] of Object.entries(table.results)) { - image = String(v.img).match(regEx) + image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) if (image !== null) { if (typeof updateData.results === 'undefined') { updateData.results = table.results diff --git a/module/utilities.js b/module/utilities.js index 0820a7a8..96e4062c 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -1,4 +1,4 @@ -/* global canvas, ChatMessage, CONST, game, getDocumentClass, Hooks, Macro, Roll, ui */ +/* global canvas, ChatMessage, CONST, Dialog, game, getDocumentClass, Hooks, Macro, Roll, ui */ import { CoC7Check } from './check.js' import { CoC7Item } from './items/item.js' @@ -417,50 +417,56 @@ export class CoC7Utilities { Hooks.call('toggleCharCreation', toggle) } - static async getTarget() { - let users = game.users.filter(user => user.active); - let actors = game.actors; + static async getTarget () { + const users = game.users.filter(user => user.active) + const actors = game.actors let checkOptions = `\n ` - let playerTokenIds = users.map(u => u.character?.id).filter(id => id !== undefined); - let selectedPlayerIds = canvas.tokens.controlled.map(token => { - return token.actor.id; - }); + const playerTokenIds = users + .map(u => u.character?.id) + .filter(id => id !== undefined) + const selectedPlayerIds = canvas.tokens.controlled.map(token => { + return token.actor.id + }) // Build checkbox list for all active players actors.forEach(actor => { - let checked = (selectedPlayerIds.includes(actor.id) || playerTokenIds.includes(actor.id)) && 'checked'; - checkOptions += ` + const checked = + (selectedPlayerIds.includes(actor.id) || + playerTokenIds.includes(actor.id)) && + 'checked' + checkOptions += `
                                      \n ` - }); + }) new Dialog({ - title: `${game.i18n.localize('CoC7.dreaming')}`, - content: `${game.i18n.localize('CoC7.restTargets')}: ${checkOptions}
                                      `, - buttons: { - whisper: { - label: `${game.i18n.localize('CoC7.startRest')}`, - callback: async (html) => { - let targets = []; - let all = false; - let users = html.find('[type="checkbox"]') - for (let user of users) { - if (user.name === "COCCheckAllPC" && user.checked) all = true; - if (user.checked || all) - targets.push(user.id); - } - await CoC7Utilities.startRest(targets)} + title: `${game.i18n.localize('CoC7.dreaming')}`, + content: `${game.i18n.localize( + 'CoC7.restTargets' + )}: ${checkOptions}
                                      `, + buttons: { + whisper: { + label: `${game.i18n.localize('CoC7.startRest')}`, + callback: async html => { + const targets = [] + let all = false + const users = html.find('[type="checkbox"]') + for (const user of users) { + if (user.name === 'COCCheckAllPC' && user.checked) all = true + if (user.checked || all) targets.push(user.id) } + await CoC7Utilities.startRest(targets) + } } - }).render(true); - -} + } + }).render(true) + } static async startRest (targets) { - if(!targets.length)return; + if (!targets.length) return const actors = game.actors.filter(actor => targets.includes(actor.id)) let chatContent = `${game.i18n.localize('CoC7.dreaming')}...
                                      ` for (const actor of actors) { @@ -682,8 +688,8 @@ export class CoC7Utilities { document.execCommand('copy') ? resolve() : reject( - new Error(game.i18n.localize('CoC7.UnableToCopyToClipboard')) - ) + new Error(game.i18n.localize('CoC7.UnableToCopyToClipboard')) + ) textArea.remove() }).catch(err => ui.notifications.error(err)) } diff --git a/webpack.config.js b/webpack.config.js index 630ce484..2fb8a209 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -42,25 +42,25 @@ function buildDestination () { const optimization = buildMode === 'production' ? { - minimize: true, - minimizer: [ - new TerserPlugin({ - terserOptions: { - mangle: false - } - }), - new CssMinimizerPlugin() - ], - splitChunks: { - chunks: 'all', - cacheGroups: { - default: { - name: 'main', - test: 'module/coc7.js' - } + minimize: true, + minimizer: [ + new TerserPlugin({ + terserOptions: { + mangle: false + } + }), + new CssMinimizerPlugin() + ], + splitChunks: { + chunks: 'all', + cacheGroups: { + default: { + name: 'main', + test: 'module/coc7.js' } } } + } : undefined /** From f48dae4a2c1899fdc1f51f22914e74306466dbc7 Mon Sep 17 00:00:00 2001 From: HavlockV Date: Sun, 2 Jan 2022 22:42:38 +0300 Subject: [PATCH 376/726] Return flow --- lang/en.json | 2 +- module/chat/cards/chase-obstacle.js | 84 ++++++---- module/chat/cards/damage.js | 2 +- styles/chat/obstacle-card.less | 2 +- templates/chat/cards/chase-obstacle.html | 199 ++++++++++++----------- 5 files changed, 162 insertions(+), 127 deletions(-) diff --git a/lang/en.json b/lang/en.json index c85a22ab..b2fe8e94 100644 --- a/lang/en.json +++ b/lang/en.json @@ -249,7 +249,6 @@ "CoC7.Tie": "Tie", "CoC7.DamageInflicted": "Damage inflicted", "CoC7.TotalDamage": "Total damage", - "CoC7.Unarmed": "Unarmed", "CoC7.combatCard.dive4cover": "Dive for Cover", @@ -384,6 +383,7 @@ "CoC7.CreditRatingSkillName": "Credit Rating", "CoC7.DriveAutoSkillName": "Drive Auto", "CoC7.FightingSpecializationName": "Fighting", + "CoC7.UnarmedWeaponName": "Unarmed", "CoC7.FirearmSpecializationName": "Firearms", "CoC7.DriveSpecializationName": "Drive", "CoC7.PilotSpecializationName": "Pilot", diff --git a/module/chat/cards/chase-obstacle.js b/module/chat/cards/chase-obstacle.js index 61e2c562..c557f9c1 100644 --- a/module/chat/cards/chase-obstacle.js +++ b/module/chat/cards/chase-obstacle.js @@ -37,7 +37,7 @@ export class ChaseObstacleCard extends EnhancedChatCard { ) { data.data.states.tryToPass = true data.data.states.tryToBreak = false - data.data.states.actionDefined = true + data.data.states.breakOrPassDefined = true } if (this.participant.actor) { @@ -279,17 +279,22 @@ export class ChaseObstacleCard extends EnhancedChatCard { get validFailledRolls () { if (!this.data.objects?.check?.isFailure) return false - if ( - this.data.obstacle.hasDamage && - !Roll.validate(this.data.obstacle.failedCheckDamage) - ) - return false - if ( - this.data.obstacle.hazard && - this.data.obstacle.hasActionCost && - !Roll.validate(this.data.obstacle.failedActionCost) - ) - return false + if (this.data.obstacle.hasDamage) { + if (!this.data.obstacle.failedCheckDamage) return false + if ( + this.data.obstacle.failedCheckDamage && + !Roll.validate(this.data.obstacle.failedCheckDamage) + ) + return false + } + if (this.data.obstacle.hazard && this.data.obstacle.hasActionCost) { + if (!this.data.obstacle.failedActionCost) return false + if ( + this.data.obstacle.failedActionCost && + !Roll.validate(this.data.obstacle.failedActionCost) + ) + return false + } return true } @@ -298,7 +303,7 @@ export class ChaseObstacleCard extends EnhancedChatCard { this.participant.actor?.itemTypes?.weapon?.forEach(w => { let formula = w.data.data.range.normal.damage let db = this.participant.actor.db - if (null === db) { + if (null === db || 0 === Number(db)) { db = '' } else { db = `${db}` @@ -321,17 +326,28 @@ export class ChaseObstacleCard extends EnhancedChatCard { return 0 }) - let db = '' - if (this.participant.actor) { - db = this.participant.actor.db - if (db && !db.startsWith('-')) db = '+' + db - } + if ( + !weapons.find(w => + w.name + .toUpperCase() + .startsWith( + game.i18n.localize('CoC7.UnarmedWeaponName')?.toUpperCase() + ) + ) + ) { + let db = '' + if (this.participant.actor) { + db = this.participant.actor.db + if (db && !db.startsWith('-')) db = '+' + db + if (null === db || 0 === Number(db)) db = '' + } - weapons.unshift({ - name: `${game.i18n.localize('CoC7.Unarmed')} (1D3${db})`, - damage: `1D3${db}`, - uuid: 'unarmed' - }) + weapons.unshift({ + name: `${game.i18n.localize('CoC7.UnarmedWeaponName')} (1D3${db})`, + damage: `1D3${db}`, + uuid: 'unarmed' + }) + } weapons.push({ name: game.i18n.localize('CoC7.Other'), @@ -379,29 +395,37 @@ export class ChaseObstacleCard extends EnhancedChatCard { } async tryToPassObstacle (options) { - this.data.states.actionDefined = true + this.data.states.breakOrPassDefined = true this.data.states.tryToPass = true this.data.states.tryToBreak = false return true } async tryToreakThroughObstacle (options) { - this.data.states.actionDefined = true + this.data.states.breakOrPassDefined = true this.data.states.tryToPass = false this.data.states.tryToBreak = true return true } async cancelObstacleDefinition (options) { - this.data.states.actionDefined = false + this.data.states.obstacleDefined = false + this.data.states.breakOrPassDefined = false + this.data.states.tryToPass = false + this.data.states.tryToBreak = false + return true + } + + async cancelBreakOrPassChoice (options) { + if (!this.data.obstacle.hasHitPoints) return this.cancelObstacleDefinition() + this.data.states.breakOrPassDefined = false this.data.states.tryToPass = false this.data.states.tryToBreak = false return true } async requestRoll (options) { - this.data.states.waitForRoll = true - this.data.states.checkDefined = true + this.data.states.playerActionDefined = true return true } @@ -452,7 +476,7 @@ export class ChaseObstacleCard extends EnhancedChatCard { } async askRollObstacleDamage (options) { - this.data.states.waitForDamageRoll = true - return false + this.data.states.playerActionDefined = true + return true } } diff --git a/module/chat/cards/damage.js b/module/chat/cards/damage.js index 30ceb058..2cc28434 100644 --- a/module/chat/cards/damage.js +++ b/module/chat/cards/damage.js @@ -238,7 +238,7 @@ export class DamageCard extends InteractiveChatCard { const range = this.range let formula = this.weapon?.data?.data?.range[range]?.damage let db = this.actor.db - if (db === null) { + if (null === db || 0 === Number(db)) { db = '' } else { db = `${db}` diff --git a/styles/chat/obstacle-card.less b/styles/chat/obstacle-card.less index 76fc468d..ec477572 100644 --- a/styles/chat/obstacle-card.less +++ b/styles/chat/obstacle-card.less @@ -7,7 +7,7 @@ border-top: 2px groove #fff; .movement-action { - display: inline; + display: inline-block; } .warning { diff --git a/templates/chat/cards/chase-obstacle.html b/templates/chat/cards/chase-obstacle.html index 2ced0595..c396f2bb 100644 --- a/templates/chat/cards/chase-obstacle.html +++ b/templates/chat/cards/chase-obstacle.html @@ -29,7 +29,7 @@
                                      {{#if data.states.obstacleDefined}}
                                      {{strings.obstacleDefined}}
                                      - {{#if data.states.checkDefined}} + {{#if data.states.playerActionDefined}}
                                      **** playerIntentions {{ strings.playerIntentions }} ****
                                      {{#unless dummyActor}} {{#if data.states.checkRolled}} @@ -48,9 +48,12 @@ {{/if}} {{/if}} {{else}} -
                                      - -
                                      + {{#if data.states.tryToBreak}} + {{else}} +
                                      + +
                                      + {{/if}} {{/if}} {{/unless}} {{else}} @@ -64,22 +67,48 @@
                                      {{#if data.states.obstacleDefined}} - {{#if data.states.actionDefined}} + {{#if data.states.breakOrPassDefined}} {{#if data.states.tryToPass}} - {{#if data.states.rolled}} - {{else}} - {{#if data.states.waitForRoll}} - {{#if data.states.checkRolled}} - {{#if data.objects.check.passed}} - Check passed + {{#if data.states.playerActionDefined}} + {{#if data.states.checkRolled}} + {{#if data.objects.check.passed}} + Check passed + {{else}} + Check failled + {{#if data.states.cardResolved}} {{else}} - Check failled - {{#if data.states.cardResolved}} - {{else}} - {{#if data.obstacle.barrier}} - Barier failled + {{#if data.obstacle.barrier}} + Barier failled +
                                      +
                                      +
                                      +
                                      + + + + {{#if data.obstacle.hasDamage }} + + {{/if}} +
                                      +
                                      +
                                      + {{#if validFailledRolls}} + + {{/if}} +
                                      + {{/if}} + {{#if data.obstacle.hazard}} + Hazard failled + {{#if data.states.obstacleFailledResolved}} + {{else}}
                                      + + + + {{#if data.obstacle.hasActionCost }} + + {{/if}}
                                      - {{#if validFailledRolls}} + {{#if card.validFailledRolls}} {{/if}}
                                      {{/if}} - {{#if data.obstacle.hazard}} - Hazard failled - {{#if data.states.obstacleFailledResolved}} - {{else}} -
                                      -
                                      - - - - {{#if data.obstacle.hasActionCost }} - - {{/if}} -
                                      -
                                      - - - - {{#if data.obstacle.hasDamage }} - - {{/if}} -
                                      -
                                      -
                                      - {{#if card.validFailledRolls}} - - {{/if}} -
                                      - {{/if}} - {{/if}} {{/if}} {{/if}} - {{else}} - {{ localize 'CoC7.WaitForPlayerInput' }} {{/if}} {{else}} -
                                      - {{#if card.participant.hasBonusDice}} - - {{/if}} - + {{ localize 'CoC7.WaitForPlayerInput' }} + {{/if}} + {{else}} +
                                      + {{#if card.participant.hasBonusDice}} + + {{/if}} + + {{#if data.obstacle.barrier}} + + {{else}} + {{/if}} +
                                      +
                                      + + {{#if validSkill}} + : {{skill.value.value}}% + {{else}} + : + {{/if}} +
                                      +
                                      + {{#if validCheck}} + + {{/if}} +
                                      + {{/if}} + {{/if}} + {{#if data.states.tryToBreak}} + {{#if data.states.playerActionDefined}} + {{else}} +
                                      + + + +
                                      +
                                      + + +
                                      + {{#if customWeapon}} +
                                      +
                                      +
                                      + + +
                                      -
                                      - - {{#if validSkill}} - : {{skill.value.value}}% - {{else}} - : - {{/if}} -
                                      + {{/if}} + {{#if card.validObstacleDamage}}
                                      - {{#if validCheck}} - - {{/if}} +
                                      {{/if}} {{/if}} - {{else}} -
                                      - - - -
                                      -
                                      - - -
                                      - {{#if customWeapon}} -
                                      -
                                      -
                                      - - -
                                      -
                                      - {{/if}} - {{#if card.validObstacleDamage}} -
                                      - -
                                      - {{/if}} {{/if}} {{else}} -
                                      {{ localize 'CoC7.WaitForPlayerInput' }}
                                      +
                                      +
                                      {{ localize 'CoC7.WaitForPlayerInput' }}
                                      + +
                                      @@ -210,7 +221,7 @@
                                      - actions : + actions : {{#each card.participant.movementActionArray as |actionClass|}} {{/each}} From fb201af1f5f7ddfbc64076843afa542ba430aca7 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 3 Jan 2022 17:47:27 +0000 Subject: [PATCH 377/726] Prevent missing ToolTipHover error message Remove unused variable --- module/actors/sheets/base.js | 10 +++++----- module/actors/sheets/container.js | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 8237cd2c..1b8a96fc 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -953,7 +953,7 @@ export class CoC7ActorSheet extends ActorSheet { const sheet = this game.CoC7Tooltips.ToolTipHover = event.currentTarget game.CoC7Tooltips.toolTipTimer = setTimeout(function () { - if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined') { + if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && game.CoC7Tooltips.ToolTipHover !== null) { const item = game.CoC7Tooltips.ToolTipHover.closest('.item') if (typeof item !== 'undefined') { const skillId = item.dataset.skillId @@ -990,7 +990,7 @@ export class CoC7ActorSheet extends ActorSheet { const sheet = this game.CoC7Tooltips.ToolTipHover = event.currentTarget game.CoC7Tooltips.toolTipTimer = setTimeout(function () { - if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined') { + if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && game.CoC7Tooltips.ToolTipHover !== null) { const char = game.CoC7Tooltips.ToolTipHover.closest('.char-box') if (typeof char !== 'undefined') { const charId = char.dataset.characteristic @@ -1027,7 +1027,7 @@ export class CoC7ActorSheet extends ActorSheet { const sheet = this game.CoC7Tooltips.ToolTipHover = event.currentTarget game.CoC7Tooltips.toolTipTimer = setTimeout(function () { - if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined') { + if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && game.CoC7Tooltips.ToolTipHover !== null) { const attrib = game.CoC7Tooltips.ToolTipHover.closest('.attribute') if (typeof attrib !== 'undefined') { const attributeId = attrib.dataset.attrib @@ -1095,7 +1095,7 @@ export class CoC7ActorSheet extends ActorSheet { if (delay > 0) { game.CoC7Tooltips.ToolTipHover = event.currentTarget game.CoC7Tooltips.toolTipTimer = setTimeout(function () { - if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined') { + if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && game.CoC7Tooltips.ToolTipHover !== null) { const toolTip = game.i18n.localize('CoC7.ToolTipAutoToggle') game.CoC7Tooltips.displayToolTip(toolTip) } @@ -1109,7 +1109,7 @@ export class CoC7ActorSheet extends ActorSheet { const sheet = this game.CoC7Tooltips.ToolTipHover = event.currentTarget game.CoC7Tooltips.toolTipTimer = setTimeout(function () { - if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined') { + if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && game.CoC7Tooltips.ToolTipHover !== null) { const item = game.CoC7Tooltips.ToolTipHover.closest('.item') if (typeof item !== 'undefined') { const skillId = item.dataset.skillId diff --git a/module/actors/sheets/container.js b/module/actors/sheets/container.js index f2a62d61..6f4044e7 100644 --- a/module/actors/sheets/container.js +++ b/module/actors/sheets/container.js @@ -88,7 +88,6 @@ export class CoC7ContainerSheet extends ActorSheet { sheetData.showInventoryBooks || sheetData.showInventorySpells || sheetData.showInventoryTalents || - sheetData.showInventoryStatuses || sheetData.showInventoryWeapons return sheetData From 5db8414c9144813ae133b7095c09bf173b64256e Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 3 Jan 2022 18:07:45 +0000 Subject: [PATCH 378/726] Update rest to only add up to maximum so chat message reflects increase value Update magic point recovery to take pow into account (still hard coded to seven hours) --- module/utilities.js | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/module/utilities.js b/module/utilities.js index 96e4062c..0ebe04f7 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -420,8 +420,8 @@ export class CoC7Utilities { static async getTarget () { const users = game.users.filter(user => user.active) const actors = game.actors - let checkOptions = `\n - ` + let checkOptions = `\n + ` const playerTokenIds = users .map(u => u.character?.id) .filter(id => id !== undefined) @@ -487,27 +487,23 @@ export class CoC7Utilities { ' / ' + Math.floor(actor.data.data.attribs.san.value / 5) const mpValue = actor.data.data.attribs.mp.value const mpMax = actor.data.data.attribs.mp.max + const pow = actor.data.data.characteristics.pow.value chatContent = chatContent + `
                                      ${actor.name}. ` if (isCriticalWounds === false && hpValue < hpMax) { - if (game.settings.get('CoC7', 'pulpRules') && quickHealer === true) { - chatContent = - chatContent + - `${game.i18n.format( - 'CoC7.pulpHealthRecovered', - { number: 3 } - )}. ` - actor.update({ - 'data.attribs.hp.value': actor.data.data.attribs.hp.value + 3 - }) - } else if (game.settings.get('CoC7', 'pulpRules')) { + if (game.settings.get('CoC7', 'pulpRules')) { + let healAmount = 2 + if (quickHealer === true) { + healAmount = 3 + } + healAmount = Math.min(healAmount, hpMax - hpValue) chatContent = chatContent + `${game.i18n.format( 'CoC7.pulpHealthRecovered', - { number: 2 } + { number: healAmount } )}. ` actor.update({ - 'data.attribs.hp.value': actor.data.data.attribs.hp.value + 2 + 'data.attribs.hp.value': actor.data.data.attribs.hp.value + healAmount }) } else { chatContent = @@ -537,14 +533,17 @@ export class CoC7Utilities { 'data.attribs.san.oneFifthSanity': oneFifthSanity }) } - if (mpValue < mpMax) { + const hours = 7 + if (hours > 0 && mpValue < mpMax) { + let magicAmount = hours * Math.ceil(pow / 100) + magicAmount = Math.min(magicAmount, mpMax - mpValue) chatContent = chatContent + `${game.i18n.format( 'CoC7.magicPointsRecovered' - )}: 7.` + )}: ${magicAmount}.` actor.update({ - 'data.attribs.mp.value': actor.data.data.attribs.mp.value + 7 + 'data.attribs.mp.value': actor.data.data.attribs.mp.value + magicAmount }) } } From 7b4c712136d855b3e87c2a48b0c634ab27f2949d Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 3 Jan 2022 18:09:39 +0000 Subject: [PATCH 379/726] Update NPC sheet to use same icons for prone, unconscious, tempoInsane, indefInsane, and Dead as Character sheets Update ActiveEffect edits missing translated names to use translation strings --- module/coc7.js | 4 ++-- styles/system/main.less | 3 +++ templates/actors/npc-sheet.html | 10 +++++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/module/coc7.js b/module/coc7.js index d1b40c6d..e06d0c1f 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -197,12 +197,12 @@ Hooks.once('setup', function () { }, { id: 'criticalWounds', - label: 'criticalWounds', + label: 'CoC7.CriticalWounds', icon: 'systems/CoC7/assets/icons/arm-sling.svg' }, { id: 'dying', - label: 'dying', + label: 'CoC7.Dying', icon: 'systems/CoC7/assets/icons/heart-beats.svg' } ) diff --git a/styles/system/main.less b/styles/system/main.less index 9504c231..5771a42d 100644 --- a/styles/system/main.less +++ b/styles/system/main.less @@ -334,6 +334,9 @@ flex: 0 0 auto; height: 16px; } + .status-monitors { + font-size: 1rem; + } .status-monitor { flex: 0 0 25px; color: darkgrey; diff --git a/templates/actors/npc-sheet.html b/templates/actors/npc-sheet.html index 850b4065..a29e4948 100644 --- a/templates/actors/npc-sheet.html +++ b/templates/actors/npc-sheet.html @@ -228,13 +228,13 @@ {{#if isDying}} {{else}} - - + + - - + +
                                      @@ -285,7 +285,7 @@ {{/unless}} {{#if isDead}}
                                      - +
                                      {{else}} {{#if isDying}} From 14b4fce09d7bd89931d84e7aee835efc95a26b32 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 3 Jan 2022 18:11:26 +0000 Subject: [PATCH 380/726] Rerun npm run format --- module/actors/sheets/base.js | 25 ++++++++++++++++++++----- module/utilities.js | 6 ++++-- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 1b8a96fc..0faccc21 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -953,7 +953,10 @@ export class CoC7ActorSheet extends ActorSheet { const sheet = this game.CoC7Tooltips.ToolTipHover = event.currentTarget game.CoC7Tooltips.toolTipTimer = setTimeout(function () { - if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && game.CoC7Tooltips.ToolTipHover !== null) { + if ( + typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && + game.CoC7Tooltips.ToolTipHover !== null + ) { const item = game.CoC7Tooltips.ToolTipHover.closest('.item') if (typeof item !== 'undefined') { const skillId = item.dataset.skillId @@ -990,7 +993,10 @@ export class CoC7ActorSheet extends ActorSheet { const sheet = this game.CoC7Tooltips.ToolTipHover = event.currentTarget game.CoC7Tooltips.toolTipTimer = setTimeout(function () { - if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && game.CoC7Tooltips.ToolTipHover !== null) { + if ( + typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && + game.CoC7Tooltips.ToolTipHover !== null + ) { const char = game.CoC7Tooltips.ToolTipHover.closest('.char-box') if (typeof char !== 'undefined') { const charId = char.dataset.characteristic @@ -1027,7 +1033,10 @@ export class CoC7ActorSheet extends ActorSheet { const sheet = this game.CoC7Tooltips.ToolTipHover = event.currentTarget game.CoC7Tooltips.toolTipTimer = setTimeout(function () { - if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && game.CoC7Tooltips.ToolTipHover !== null) { + if ( + typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && + game.CoC7Tooltips.ToolTipHover !== null + ) { const attrib = game.CoC7Tooltips.ToolTipHover.closest('.attribute') if (typeof attrib !== 'undefined') { const attributeId = attrib.dataset.attrib @@ -1095,7 +1104,10 @@ export class CoC7ActorSheet extends ActorSheet { if (delay > 0) { game.CoC7Tooltips.ToolTipHover = event.currentTarget game.CoC7Tooltips.toolTipTimer = setTimeout(function () { - if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && game.CoC7Tooltips.ToolTipHover !== null) { + if ( + typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && + game.CoC7Tooltips.ToolTipHover !== null + ) { const toolTip = game.i18n.localize('CoC7.ToolTipAutoToggle') game.CoC7Tooltips.displayToolTip(toolTip) } @@ -1109,7 +1121,10 @@ export class CoC7ActorSheet extends ActorSheet { const sheet = this game.CoC7Tooltips.ToolTipHover = event.currentTarget game.CoC7Tooltips.toolTipTimer = setTimeout(function () { - if (typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && game.CoC7Tooltips.ToolTipHover !== null) { + if ( + typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && + game.CoC7Tooltips.ToolTipHover !== null + ) { const item = game.CoC7Tooltips.ToolTipHover.closest('.item') if (typeof item !== 'undefined') { const skillId = item.dataset.skillId diff --git a/module/utilities.js b/module/utilities.js index 0ebe04f7..5ad946e7 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -503,7 +503,8 @@ export class CoC7Utilities { { number: healAmount } )}. ` actor.update({ - 'data.attribs.hp.value': actor.data.data.attribs.hp.value + healAmount + 'data.attribs.hp.value': + actor.data.data.attribs.hp.value + healAmount }) } else { chatContent = @@ -543,7 +544,8 @@ export class CoC7Utilities { 'CoC7.magicPointsRecovered' )}: ${magicAmount}.` actor.update({ - 'data.attribs.mp.value': actor.data.data.attribs.mp.value + magicAmount + 'data.attribs.mp.value': + actor.data.data.attribs.mp.value + magicAmount }) } } From 9935b2add73b4aa3b7d01a336471eacb0a831267 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 4 Jan 2022 11:04:42 +0000 Subject: [PATCH 381/726] Updated translations list --- .github/TRANSLATIONS.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 1d719eb7..6f2af7b9 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -21,36 +21,36 @@ The following translations have been abandoned **cn**, **cs**, [are you able to ##### CoC7.Copied -`"CoC7.Copied": "Copied the Example Text to Clipboard",` +` "CoC7.Copied": "Copied the Example Text to Clipboard",` ##### CoC7.EraAvailability -`"CoC7.EraAvailability": "Availability",` +` "CoC7.EraAvailability": "Availability",` ##### CoC7.German -`"CoC7.German": "German",` +` "CoC7.German": "German",` ##### CoC7.NotEnoughMagicPoints -`"CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would you like to take the remaining {convertedHitPoints} from your Hit Points? You will take {convertedHitPoints} damage if you proceed.",` +` "CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would you like to take the remaining {convertedHitPoints} from your Hit Points? You will take {convertedHitPoints} damage if you proceed.",` ##### CoC7.Polish -`"CoC7.Polish": "Polish",` +` "CoC7.Polish": "Polish",` ##### CoC7.allActors -`"CoC7.allActors": "All Actors",` +` "CoC7.allActors": "All Actors",` ##### CoC7.getTheExample -`"CoC7.getTheExample": "Copy Example",` +` "CoC7.getTheExample": "Copy Example",` ##### CoC7.restTargets -`"CoC7.restTargets": "Rest Targets",` +` "CoC7.restTargets": "Rest Targets",` ##### SETTINGS.DefaultDifficulty -`"SETTINGS.DefaultDifficulty": "Default check difficulty",` +` "SETTINGS.DefaultDifficulty": "Default check difficulty",` From 0b31ad6a0d24999ca0cd0471f75968a864559b0b Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 5 Jan 2022 03:53:00 +0100 Subject: [PATCH 382/726] Obstacle Damage --- lang/en.json | 3 + module/chat/cards/chase-obstacle.js | 140 +++++++++++++++++------ module/check.js | 1 + module/items/chase/data.js | 30 +++++ styles/chat/obstacle-card.less | 106 +++++++++++------ styles/system/variables.less | 6 + templates/chat/cards/chase-obstacle.html | 49 ++++++-- 7 files changed, 253 insertions(+), 82 deletions(-) diff --git a/lang/en.json b/lang/en.json index b2fe8e94..86be6bd4 100644 --- a/lang/en.json +++ b/lang/en.json @@ -546,6 +546,9 @@ "CoC7.WaitForPlayerInput": "Wait for player's input", "CoC7.AskRoll": "Roll {name} ({value}%)", "CoC7.ActionCost": "Action cost", + "CoC7.PlayerTryToBreakObstacle": "You try to break through that obstacle", + "CoC7.Negotiate": "Negotiate", + "CoC7.BreakDown": "Break Down", "CoC7.SpellCastingTime": "Casting Time", "CoC7.SpellCastingCost": "Casting Cost", diff --git a/module/chat/cards/chase-obstacle.js b/module/chat/cards/chase-obstacle.js index c557f9c1..d6c58864 100644 --- a/module/chat/cards/chase-obstacle.js +++ b/module/chat/cards/chase-obstacle.js @@ -1,5 +1,6 @@ import { CoC7Check } from '../../check.js' import { EnhancedChatCard } from '../../common/chatcardlib/src/chatcardlib.js' +import { CoC7Dice } from '../../dice.js' import { _participant } from '../../items/chase/participant.js' import { CoC7Utilities } from '../../utilities.js' import { createInlineRoll } from '../helper.js' @@ -35,7 +36,7 @@ export class ChaseObstacleCard extends EnhancedChatCard { (data.data.obstacle.hazard || (data.data.obstacle.barrier && !data.data.obstacle.hasHitPoints)) ) { - data.data.states.tryToPass = true + data.data.states.tryToNegotiate = true data.data.states.tryToBreak = false data.data.states.breakOrPassDefined = true } @@ -69,14 +70,14 @@ export class ChaseObstacleCard extends EnhancedChatCard { checkName = data.data.obstacle.checkName value = data.data.card.checkThreshold } - data.strings.rollRequest = game.i18n.format('CoC7.AskRoll', { + data.strings.checkRollRequest = game.i18n.format('CoC7.AskRoll', { name: checkName, value: value }) if (data.data.card.bonusDice != 0) { if (data.data.card.bonusDice > 0) - data.strings.rollRequest += ` (+${data.data.card.bonusDice})` - else data.strings.rollRequest += ` (${data.data.card.bonusDice})` + data.strings.checkRollRequest += ` (+${data.data.card.bonusDice})` + else data.strings.checkRollRequest += ` (${data.data.card.bonusDice})` } } @@ -118,6 +119,19 @@ export class ChaseObstacleCard extends EnhancedChatCard { }) } + if (this.data.states.tryToBreak) { + let damageStatus = game.i18n.localize('CoC7.BreakDown') + if (this.data.objects?.obstacleDamageRoll?.total) + damageStatus += ` :${this.data.objects.obstacleDamageRoll.total}` + data.status.push({ + name: damageStatus + }) + } + + if (this.data.states.tryToNegotiate) { + data.status.push({ name: game.i18n.localize('CoC7.Negotiate') }) + } + if (this.data.objects?.check) { if (this.data.objects.check.passed) data.status.push({ @@ -143,16 +157,25 @@ export class ChaseObstacleCard extends EnhancedChatCard { else data.htmlCheck = await this.data.objects.check.getHtmlRoll() } + if( this.data.objects?.failedDamageRoll){ + if( !data.data.card.armor){ + if( this.participant.actor) data.data.card.armor = this.participant.actor.data.data.attribs.armor.value || 0 + } + if( data.data.card.armor){ + if( isNaN(Number(data.data.card.armor))) data.data.card.armor = null + } + } + if (this.data.states.cardResolved) { if (this.data.obstacle.hasDamage && this.data.objects?.check?.isFailure) { data.damageTaken = true data.inlineDamageTakenRoll = createInlineRoll( - this.data.objects.failledDamageRoll + this.data.objects.failedDamageRoll )?.outerHTML data.status.push({ name: game.i18n.localize('CoC7.TotalDamage') + - ` :${this.data.objects.failledDamageRoll.total}` + ` :${this.data.objects.failedDamageRoll.total}` }) } @@ -163,12 +186,12 @@ export class ChaseObstacleCard extends EnhancedChatCard { ) { data.actionLost = true data.inlineActionLostRoll = createInlineRoll( - this.data.objects.failledActionRoll + this.data.objects.failedActionRoll )?.outerHTML data.status.push({ name: game.i18n.localize('CoC7.ActionCost') + - ` :${this.data.objects.failledActionRoll.total}` + ` :${this.data.objects.failedActionRoll.total}` }) } } @@ -177,12 +200,17 @@ export class ChaseObstacleCard extends EnhancedChatCard { /** @override */ async GMUpdate () { - // ui.notifications.info( `I am ${game.user.id}. Doing GMUpdate`) + if (!game.user.isGM) { + console.error('CoC7: GMUpdate called from non GM user') + return + } if (this.data.states.cardResolved) { - if (game.user.isGM) - ui.notifications.info( - `I am the GM ${game.user.id}. I will update the card and chase ${this.data.chaseUuid}` - ) + if( this.data.states.failedConsequencesRolled){ + if( this.data.objects?.failedActionRoll?.total) await this.chase.alterParticipantMovementAction( 0 - this.data.objects.failedActionRoll.total) + if( this.data.objects?.failedDamageRoll?.total) { + if( this.participant.actor) await this.participant.actor.dealDamage(this.data.objects.failedDamageRoll.total, { ignoreArmor: false }) + } + } } } @@ -194,15 +222,36 @@ export class ChaseObstacleCard extends EnhancedChatCard { /** @override */ async assignObjects () { - if (this.data.states.checkRolled) { - if (this.data.objects.check) { - if (this.data.objects.check?.constructor?.name === 'Object') { - this.data.objects.check = Object.assign( - new CoC7Check(), - this.data.objects.check - ) - } - } + if ( + this.data.objects?.check && + this.data.objects.check?.constructor?.name === 'Object' + ) { + this.data.objects.check = CoC7Check.fromData(this.data.objects.check) + } + + if ( + this.data.objects?.obstacleDamageRoll && + this.data.objects.obstacleDamageRoll?.constructor?.name === 'Object' + ) { + this.data.objects.obstacleDamageRoll = Roll.fromData( + this.data.objects.obstacleDamageRoll + ) + } + if ( + this.data.objects?.failedDamageRoll && + this.data.objects.failedDamageRoll?.constructor?.name === 'Object' + ) { + this.data.objects.failedDamageRoll = Roll.fromData( + this.data.objects.failedDamageRoll + ) + } + if ( + this.data.objects?.failedActionRoll && + this.data.objects.failedActionRoll?.constructor?.name === 'Object' + ) { + this.data.objects.failedActionRoll = Roll.fromData( + this.data.objects.failedActionRoll + ) } } @@ -277,7 +326,7 @@ export class ChaseObstacleCard extends EnhancedChatCard { return rollData || undefined } - get validFailledRolls () { + get validFailedRolls () { if (!this.data.objects?.check?.isFailure) return false if (this.data.obstacle.hasDamage) { if (!this.data.obstacle.failedCheckDamage) return false @@ -358,6 +407,12 @@ export class ChaseObstacleCard extends EnhancedChatCard { } get usedWeapon () { + if (!this.data.card?.weaponChoice) { + if (!this.weaponsOptions) return undefined + if (!this.data.card) this.data.card = {} + this.data.card.weaponChoice = this.weaponsOptions[0].uuid + } + if (this.data.card.weaponChoice) { const weapon = this.weaponsOptions.find( e => e.uuid == this.data.card.weaponChoice @@ -387,6 +442,13 @@ export class ChaseObstacleCard extends EnhancedChatCard { return false } + get strings () { + const strings = {} + strings.damageRollRequest = this.usedWeapon.name + + return strings + } + //Actions : async defineObstacle (options) { if (!this.data.states) this.data.states = {} @@ -394,16 +456,16 @@ export class ChaseObstacleCard extends EnhancedChatCard { return true } - async tryToPassObstacle (options) { + async tryToNegotiateObstacle (options) { this.data.states.breakOrPassDefined = true - this.data.states.tryToPass = true + this.data.states.tryToNegotiate = true this.data.states.tryToBreak = false return true } - async tryToreakThroughObstacle (options) { + async tryToBreakDownObstacle (options) { this.data.states.breakOrPassDefined = true - this.data.states.tryToPass = false + this.data.states.tryToNegotiate = false this.data.states.tryToBreak = true return true } @@ -411,7 +473,7 @@ export class ChaseObstacleCard extends EnhancedChatCard { async cancelObstacleDefinition (options) { this.data.states.obstacleDefined = false this.data.states.breakOrPassDefined = false - this.data.states.tryToPass = false + this.data.states.tryToNegotiate = false this.data.states.tryToBreak = false return true } @@ -419,7 +481,7 @@ export class ChaseObstacleCard extends EnhancedChatCard { async cancelBreakOrPassChoice (options) { if (!this.data.obstacle.hasHitPoints) return this.cancelObstacleDefinition() this.data.states.breakOrPassDefined = false - this.data.states.tryToPass = false + this.data.states.tryToNegotiate = false this.data.states.tryToBreak = false return true } @@ -454,24 +516,25 @@ export class ChaseObstacleCard extends EnhancedChatCard { async rollFailConsequences (options) { if (!this.data.objects) this.data.objects = {} if (this.data.obstacle.hasDamage && this.data.objects.check?.isFailure) { - this.data.objects.failledDamageRoll = new Roll( + this.data.objects.failedDamageRoll = new Roll( this.data.obstacle.failedCheckDamage ) - await this.data.objects.failledDamageRoll.evaluate({ async: true }) + await this.data.objects.failedDamageRoll.evaluate({ async: true }) } if (this.data.obstacle.hazard) { if ( this.data.obstacle.hasActionCost && this.data.objects.check?.isFailure ) { - this.data.objects.failledActionRoll = new Roll( + this.data.objects.failedActionRoll = new Roll( this.data.obstacle.failedActionCost ) - await this.data.objects.failledActionRoll.evaluate({ async: true }) + await this.data.objects.failedActionRoll.evaluate({ async: true }) } } - this.data.states.cardResolved = true + this.data.states.failedConsequencesRolled = true + if( !this.data.objects?.failedDamageRoll?.total) this.data.states.cardResolved = true return true } @@ -479,4 +542,13 @@ export class ChaseObstacleCard extends EnhancedChatCard { this.data.states.playerActionDefined = true return true } + + async rollObstacleDamage (options) { + if (!this.data.objects) this.data.objects = {} + this.data.objects.obstacleDamageRoll = new Roll(this.usedWeapon?.damage) + await this.data.objects.obstacleDamageRoll.evaluate({ async: true }) + await CoC7Dice.showRollDice3d(this.data.objects.obstacleDamageRoll) + this.data.states.obstacleDamageRolled = true + return true + } } diff --git a/module/check.js b/module/check.js index dfe3e508..b34080ae 100644 --- a/module/check.js +++ b/module/check.js @@ -1175,6 +1175,7 @@ export class CoC7Check { } this.luckSpent = true this.isSuccess = true + this.isFailure = false this.totalLuckSpent = !parseInt(this.totalLuckSpent) ? 0 : parseInt(this.totalLuckSpent) diff --git a/module/items/chase/data.js b/module/items/chase/data.js index a929f00e..421f6ef8 100644 --- a/module/items/chase/data.js +++ b/module/items/chase/data.js @@ -276,6 +276,36 @@ export class CoC7Chase extends CoC7Item { ) } + async alterParticipantMovementAction ( + participantUuid, + count, + { render = true } = {} + ) { + const participant = this.getParticipant(participantUuid) + + if (!participant) { + ui.notifications.error(`Cannot find participant ${participantUuid}`) + return undefined + } + + const participantsData = foundry.utils.duplicate( + this.data.data.participants + ) + const participantIndex = participantsData.findIndex( + p => participantUuid == p.uuid + ) + + participant.alterMovementActions(count) + + participantsData[participantIndex] = foundry.utils.duplicate( + participant.data + ) + await this.update( + { 'data.participants': participantsData }, + { render: render } + ) + } + async activateNexParticpantTurn ({ scrollToLocation = true, activateLocation = true, diff --git a/styles/chat/obstacle-card.less b/styles/chat/obstacle-card.less index ec477572..7e31e0ab 100644 --- a/styles/chat/obstacle-card.less +++ b/styles/chat/obstacle-card.less @@ -57,52 +57,86 @@ } } - .form-group.small { - .toggle-icon, - .icon { - font-size: 1rem; - line-height: 1.25rem; - padding: 1px 6px; - display: inline; - flex: 0; - - &.bigger { - padding: 1px 4px; - font-size: 1.4rem; + .form-group { + &.small { + .toggle-icon, + .icon { + font-size: 1rem; + line-height: 1.25rem; + padding: 1px 6px; + display: inline; + flex: 0; + + &.bigger { + padding: 1px 4px; + font-size: 1.4rem; + } + + &.switched-off { + display: inline; + } + &.switched-on { + color: red; + text-shadow: 0 0 8px red; + border: none; + background: none; + box-shadow: none; + } } - &.switched-off { - display: inline; + input { + margin: 0; + line-height: 1.25rem; + height: calc(100% - 2px); } - &.switched-on { - color: red; - text-shadow: 0 0 8px red; - border: none; - background: none; - box-shadow: none; + + button { + &.button-icon { + line-height: 1.25rem; + padding: 1px 6px; + display: inline; + flex: 0; + background: none; + border: none; + font-size: 1rem; + &:hover { + box-shadow: none; + text-shadow: 0 0 8px red; + } + } } } - input { - margin: 0; - line-height: 1.25rem; - height: calc(100% - 2px); - } + &.armor { + height: 16px; + line-height: 16px; + .ecc-switch { + color: grey; + border: none; + box-shadow: none; + font-weight: bold; - button { - &.button-icon { - line-height: 1.25rem; - padding: 1px 6px; - display: inline; + font-size: 20px; flex: 0; - background: none; - border: none; - font-size: 1rem; - &:hover { - box-shadow: none; - text-shadow: 0 0 8px red; + + &.switched-off { + color: black; } } + + label { + height: 16px; + line-height: 16px; + color: black; + font-weight: bold; + flex: 0 0 content; + } + + input { + height: 16px; + flex: 0 0 40px; + text-align: end; + } } } diff --git a/styles/system/variables.less b/styles/system/variables.less index 60597cfd..c071022b 100644 --- a/styles/system/variables.less +++ b/styles/system/variables.less @@ -29,6 +29,9 @@ .flex4 { flex: 4; } + .flex-end { + justify-content: flex-end; + } } .flexcol { display: flex; @@ -49,4 +52,7 @@ .flex4 { flex: 4; } + .flex-end { + justify-content: flex-end; + } } diff --git a/templates/chat/cards/chase-obstacle.html b/templates/chat/cards/chase-obstacle.html index c396f2bb..7dc715e7 100644 --- a/templates/chat/cards/chase-obstacle.html +++ b/templates/chat/cards/chase-obstacle.html @@ -37,7 +37,7 @@ {{#if data.objects.check.passed}}
                                      **** obstaclePassed {{ strings.obstaclePassed }} ****
                                      {{else}} -
                                      **** checkFailled {{ strings.checkFailled }} ****
                                      +
                                      **** checkFailed {{ strings.checkFailed }} ****
                                      {{#if data.states.cardResolved}} {{#if damageTaken}}
                                      **** damageTaken {{ strings.damageTaken}} **** : {{{inlineDamageTakenRoll}}}
                                      @@ -49,9 +49,13 @@ {{/if}} {{else}} {{#if data.states.tryToBreak}} +
                                      {{ localize 'CoC7.PlayerTryToBreakObstacle' }}
                                      +
                                      + +
                                      {{else}}
                                      - +
                                      {{/if}} {{/if}} @@ -68,17 +72,17 @@
                                      {{#if data.states.obstacleDefined}} {{#if data.states.breakOrPassDefined}} - {{#if data.states.tryToPass}} + {{#if data.states.tryToNegotiate}} {{#if data.states.playerActionDefined}} {{#if data.states.checkRolled}} {{#if data.objects.check.passed}} Check passed {{else}} - Check failled + Check failed {{#if data.states.cardResolved}} {{else}} {{#if data.obstacle.barrier}} - Barier failled + Barier failed
                                      @@ -92,14 +96,35 @@
                                      - {{#if validFailledRolls}} + {{#if cardvalidFailedRolls}} {{/if}}
                                      {{/if}} {{#if data.obstacle.hazard}} - Hazard failled - {{#if data.states.obstacleFailledResolved}} + Hazard failed + {{#if data.states.failedConsequencesRolled}} + {{#if data.obstacle.hasDamage}} + {{#if data.states.failedCheckDamageApplied}} + {{else}} +
                                      +
                                      + + {{#if data.flags.ignoreArmor}} + + {{else}} + + {{/if}} + + {{#unless data.flags.ignoreArmor}} + + + {{/unless}} + +
                                      +
                                      + {{/if}} + {{/if}} {{else}}
                                      @@ -120,7 +145,7 @@
                                      - {{#if card.validFailledRolls}} + {{#if card.validFailedRolls}} {{/if}}
                                      @@ -196,8 +221,8 @@
                                      - - + +
                                      {{/if}} {{else}} @@ -212,7 +237,7 @@ {{/if}}
                                      - +
                                      From f9dd4347806898a072e97ff752c14d45c83f9488 Mon Sep 17 00:00:00 2001 From: HavlockV Date: Thu, 6 Jan 2022 00:36:43 +0300 Subject: [PATCH 383/726] next location def --- module/chat/cards/chase-obstacle.js | 4 +++ module/items/chase/data.js | 2 +- module/items/chase/sheet.js | 39 +++++++++++++--------- styles/chat/obstacle-card.less | 9 ++++++ templates/chat/cards/chase-obstacle.html | 4 +-- templates/items/chase.html | 41 ++++++++++++++++++++---- 6 files changed, 74 insertions(+), 25 deletions(-) diff --git a/module/chat/cards/chase-obstacle.js b/module/chat/cards/chase-obstacle.js index d6c58864..8465f3b1 100644 --- a/module/chat/cards/chase-obstacle.js +++ b/module/chat/cards/chase-obstacle.js @@ -492,6 +492,9 @@ export class ChaseObstacleCard extends EnhancedChatCard { } async rollSkillCheck (options) { + const target = options.event.currentTarget + if( target.classList.contains('disabled')) return + target.classList.toggle('disabled') if (!this.roll) { ui.notifications.error('Nothing to roll !!') return @@ -502,6 +505,7 @@ export class ChaseObstacleCard extends EnhancedChatCard { this.data.objects.check.canBePushed = false //Obstacle check can't be pushed await this.data.objects.check._perform({ forceDSN: true }) this.data.states.checkRolled = true + target.classList.toggle('disabled') return true } diff --git a/module/items/chase/data.js b/module/items/chase/data.js index 421f6ef8..1ff6a983 100644 --- a/module/items/chase/data.js +++ b/module/items/chase/data.js @@ -389,7 +389,7 @@ export class CoC7Chase extends CoC7Item { } else return participantsDataUpdate } - async activeParticipantObstacleCheck ( + activeParticipantObstacleCheck ( locationUuid, { moveParticipant = true } = {} ) { diff --git a/module/items/chase/sheet.js b/module/items/chase/sheet.js index 1e1f1623..7d3aa612 100644 --- a/module/items/chase/sheet.js +++ b/module/items/chase/sheet.js @@ -521,21 +521,28 @@ export class CoC7ChaseSheet extends ItemSheet { const locationIndex = this.findIndex(locations, uuid) if (!locations[locationIndex].obstacleDetails) locations[locationIndex].obstacleDetails = {} - if (target.classList.contains('barrier')) { - locations[locationIndex].obstacleDetails.barrier = !locations[ - locationIndex - ].obstacleDetails.barrier - locations[locationIndex].obstacleDetails.hazard = !locations[ - locationIndex - ].obstacleDetails.barrier - } else if (target.classList.contains('hazard')) { - locations[locationIndex].obstacleDetails.hazard = !locations[ - locationIndex - ].obstacleDetails.hazard - locations[locationIndex].obstacleDetails.barrier = !locations[ - locationIndex - ].obstacleDetails.hazard - } + const obstacle = locations[locationIndex].obstacleDetails + const type = target.classList.contains('barrier')?'barrier':'hazard' + const active = obstacle[type] + obstacle.barrier = false + obstacle.hazard = false + obstacle[type] = !active + locations[locationIndex].obstacle = !active + // if (target.classList.contains('barrier')) { + // locations[locationIndex].obstacleDetails.barrier = !locations[ + // locationIndex + // ].obstacleDetails.barrier + // locations[locationIndex].obstacleDetails.hazard = !locations[ + // locationIndex + // ].obstacleDetails.barrier + // } else if (target.classList.contains('hazard')) { + // locations[locationIndex].obstacleDetails.hazard = !locations[ + // locationIndex + // ].obstacleDetails.hazard + // locations[locationIndex].obstacleDetails.barrier = !locations[ + // locationIndex + // ].obstacleDetails.hazard + // } await this.item.updateLocationsList(locations) } @@ -591,7 +598,7 @@ export class CoC7ChaseSheet extends ItemSheet { if (!locationUuid) return switch (target.dataset.control) { case 'obstacle-skill-check': - return await this.item.activeParticipantObstacleCheck(locationUuid) + return this.item.activeParticipantObstacleCheck(locationUuid) } } diff --git a/styles/chat/obstacle-card.less b/styles/chat/obstacle-card.less index 7e31e0ab..022eec17 100644 --- a/styles/chat/obstacle-card.less +++ b/styles/chat/obstacle-card.less @@ -39,6 +39,15 @@ } } + button { + &.disabled{ + background: rgba(255, 255, 255, 0.5) !important; + &:hover{ + box-shadow: none !important; + } + } + } + .card-buttons { span { line-height: 1.5rem; diff --git a/templates/chat/cards/chase-obstacle.html b/templates/chat/cards/chase-obstacle.html index 7dc715e7..b723c5a0 100644 --- a/templates/chat/cards/chase-obstacle.html +++ b/templates/chat/cards/chase-obstacle.html @@ -227,8 +227,8 @@ {{/if}} {{else}}
                                      -
                                      barrier
                                      -
                                      hazard
                                      +
                                      {{ localize 'CoC7.Barrier' }}
                                      +
                                      {{ localize 'CoC7.Hazard' }}
                                      {{#if data.obstacle.barrier}}
                                      diff --git a/templates/items/chase.html b/templates/items/chase.html index 9de2c36f..1b630320 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -68,14 +68,43 @@
                                      {{#unless activeLocation.last}} -
                                      {{ localize "CoC7.Obstacle"}}
                                      +
                                      +
                                      {{ localize "CoC7.Obstacle"}}
                                      +
                                      {{/unless}} {{#if nextLocation.obstacle}} -
                                      -
                                      barrier
                                      -
                                      hazard
                                      -
                                      - +
                                      +
                                      barrier
                                      +
                                      hazard
                                      +
                                      +
                                      + +
                                      +
                                      + + + + +
                                      +
                                      +
                                      {{ localize "CoC7.Damage"}}
                                      + {{#if nextLocation.obstacleDetails.hasDamage}} + + {{/if}} +
                                      +
                                      + {{#if nextLocation.obstacleDetails.barrier}} +
                                      {{ localize "CoC7.HitPoints"}}
                                      + {{#if nextLocation.obstacleDetails.hasHitPoints}} + + {{/if}} + {{else}} +
                                      {{ localize "CoC7.ActionCost"}}
                                      + {{#if nextLocation.obstacleDetails.hasActionCost}} + + {{/if}} + {{/if}} +
                                      {{/if}}
                                      From da659ef200307191c6f7d9d4fd9ae2913bd5e241 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 9 Jan 2022 14:09:48 +0000 Subject: [PATCH 384/726] Update status/effect toggles replace with conditions If ActiveEffect icons are enabled when adding or removing a condition create/remove the ActiveEffect If ActiveEffect icons are disabled or when adding/removing and ActiveEffect apply/remove the condition Correctly allow adding conditions from the FoundryVTT effects menu or marking as dead from the combat tracker Prevent UI toggle/on/off for statuses being called twice Add Clear All Conditions button after Keeper Notes for NPC/Creature and Characters --- .editorconfig | 3 + lang/en.json | 5 + module/actors/actor.js | 627 +++++++---------------- module/actors/sheets/base.js | 48 +- module/chat/cards/san-check.js | 40 +- module/chat/concheck.js | 17 +- module/coc7.js | 59 ++- module/settings-directory.js | 33 ++ module/updater.js | 89 ++++ module/utilities.js | 5 +- styles/sheets/summary.less | 6 +- styles/system/main.less | 8 +- template.json | 9 +- templates/actors/character-sheet-v2.html | 5 +- templates/actors/character-sheet.html | 20 +- templates/actors/character/summary.html | 18 +- templates/actors/npc-sheet.html | 21 +- templates/actors/parts/vitals.html | 20 +- templates/chat/cards/san-check.html | 458 ++++++++--------- 19 files changed, 689 insertions(+), 802 deletions(-) create mode 100644 module/settings-directory.js diff --git a/.editorconfig b/.editorconfig index 0f178672..f8cf5964 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,3 +7,6 @@ indent_size = 2 indent_style = space insert_final_newline = true trim_trailing_whitespace = true + +[*.{html,svg}] +insert_final_newline = false diff --git a/lang/en.json b/lang/en.json index 5f903aad..80d78495 100644 --- a/lang/en.json +++ b/lang/en.json @@ -740,6 +740,11 @@ "CoC7.Migrate.ButtonSkip": "Skip", "CoC7.Migrate.ButtonOkay": "Okay", + "CoC7.Migrate.TriggerButton": "Trigger Data Migration", + "CoC7.Migrate.TriggerTitle": "Trigger Data Migration", + "CoC7.Migrate.TriggerContents": "

                                      Turn on data migration and restart

                                      ", + "CoC7.Migrate.TriggerRestart": "Save and restart", + "CoC7.Maximize": "Maximize", "CoC7.Summarize": "Summarize", diff --git a/module/actors/actor.js b/module/actors/actor.js index 2c6457d5..4c861cfe 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -1,4 +1,4 @@ -/* global Actor, CONST, Dialog, Die, duplicate, game, getProperty, Hooks, mergeObject, Roll, TextEditor, Token, ui */ +/* global Actor, CONFIG, CONST, Dialog, Die, duplicate, game, getProperty, Hooks, mergeObject, Roll, TextEditor, Token, ui */ import { COC7 } from '../config.js' import { CoC7Check } from '../check.js' @@ -200,85 +200,16 @@ export class CoCActor extends Actor { } } - get boutOfMadness () { - return this.effects.find( - e => e.data.label === game.i18n.localize('CoC7.BoutOfMadnessName') - ) + get hasTempoInsane () { + return this.hasConditionStatus(COC7.status.tempoInsane) } - get insanity () { - return this.effects.find( - e => e.data.label === game.i18n.localize('CoC7.InsanityName') - ) + get getTempoInsaneDurationText () { + return this.hasConditionValue(COC7.status.tempoInsane, 'durationText') } - get isInABoutOfMadness () { - if (!this.boutOfMadness) return false - return !this.boutOfMadness.data.disabled - } - - get isInsane () { - if (!this.insanity) return false - return !this.insanity.data.disabled - } - - get sanity () { - const boutRealTime = !!this.boutOfMadness?.data.flags?.CoC7?.realTime - let duration = boutRealTime - ? this.boutOfMadness?.data?.duration?.rounds - : this.boutOfMadness?.data?.duration.seconds - if (!boutRealTime && duration) duration = Math.round(duration / 3600) - let indefiniteInstanity = !!this.insanity?.data.flags?.CoC7?.indefinite - let insaneDuration = indefiniteInstanity - ? null - : this.insanity?.data?.duration.seconds - if (!indefiniteInstanity && insaneDuration) { - insaneDuration = insaneDuration / 3600 - } - let boutDurationText = this.isInABoutOfMadness - ? boutRealTime - ? `${duration} ${game.i18n.localize('CoC7.rounds')}` - : `${duration} ${game.i18n.localize('CoC7.hours')}` - : null - const insanityDurationText = insaneDuration - ? this.isInsane - ? indefiniteInstanity - ? null - : `${insaneDuration} ${game.i18n.localize('CoC7.hours')}` - : null - : null - if (this.isInsane && !insanityDurationText && !indefiniteInstanity) { - indefiniteInstanity = true - } - if (!duration) boutDurationText = '' - - return { - boutOfMadness: { - active: this.isInABoutOfMadness, - realTime: this.isInABoutOfMadness ? boutRealTime : undefined, - summary: this.isInABoutOfMadness ? !boutRealTime : undefined, - duration: this.isInABoutOfMadness ? duration : undefined, - durationText: boutDurationText || '', - hint: this.isInABoutOfMadness - ? `${game.i18n.localize('CoC7.BoutOfMadness')}${ - boutDurationText ? ': ' + boutDurationText : '' - }` - : game.i18n.localize('CoC7.BoutOfMadness') - }, - underlying: { - active: this.isInsane, - indefintie: this.isInsane ? indefiniteInstanity : undefined, - duration: insaneDuration, - durationText: insanityDurationText || '', - hint: this.isInsane - ? indefiniteInstanity - ? game.i18n.localize('CoC7.IndefiniteInsanity') - : `${game.i18n.localize('CoC7.TemporaryInsanity')} ${ - insanityDurationText || '' - }` - : game.i18n.localize('CoC7.NotInsane') - } - } + get hasIndefInsane () { + return this.hasConditionStatus(COC7.status.indefInsane) } get portrait () { @@ -350,95 +281,14 @@ export class CoCActor extends Actor { // If it's not a real time no need to activate the bout if (!realTime) return result - if (this.boutOfMadness) { - await this.boutOfMadness.update({ - disabled: false, - duration: { - rounds: realTime && duration ? duration : undefined, - seconds: realTime ? undefined : duration * 3600, - turns: 1 - }, - flags: { - CoC7: { - realTime: realTime - } - } - }) - } else { - // const effectData = - await super.createEmbeddedDocuments('ActiveEffect', [ - { - label: game.i18n.localize('CoC7.BoutOfMadnessName'), - icon: 'systems/CoC7/assets/icons/hanging-spider.svg', - origin: this.uuid, - duration: { - rounds: realTime && duration ? duration : undefined, - seconds: realTime ? undefined : duration * 3600, - turns: 1 - }, - flags: { - CoC7: { - madness: true, - realTime: realTime - } - }, - // tint: '#ff0000', - disabled: false - } - ]) - // const effect = this.effects.get( effectData._id); - // effect.sheet.render(true); - } + this.setCondition(COC7.status.tempoInsane, { realTime: realTime, duration: duration }) + // const effect = this.effects.get( effectData._id); // effect.sheet.render(true); return result } - async enterInsanity (indefinite = true, duration = undefined) { - if (this.insanity) { - await this.insanity.update({ - disabled: false, - duration: { - seconds: !indefinite && duration ? duration * 3600 : undefined, - turns: 1 - }, - flags: { - CoC7: { - indefinite: indefinite - } - } - }) - } else { - await super.createEmbeddedDocuments('ActiveEffect', [ - { - label: game.i18n.localize('CoC7.InsanityName'), - icon: 'systems/CoC7/assets/icons/tentacles-skull.svg', - origin: this.uuid, - duration: { - seconds: !indefinite && duration ? duration * 3600 : undefined, - turns: 1 - }, - flags: { - CoC7: { - madness: true, - indefinite: indefinite - } - }, - disabled: false - } - ]) - } - } - - async exitBoutOfMadness () { - return await this.boutOfMadness?.delete() - } - - async exitInsanity () { - return await this.insanity?.delete() - } - /** * Called upon new actor creation. * @param {*} data @@ -2213,9 +2063,9 @@ export class CoCActor extends Actor { ? parseInt(this.data.data.attribs.san.dailyLoss) : 0 totalLoss = totalLoss + loss - if (loss >= 5) this.setStatus(COC7.status.tempoInsane) + if (loss >= 5) this.setCondition(COC7.status.tempoInsane) if (totalLoss >= Math.floor(this.san / 5)) { - this.setStatus(COC7.status.indefInsane) + this.setCondition(COC7.status.indefInsane) } return await this.update({ 'data.attribs.san.value': value, @@ -3054,161 +2904,181 @@ export class CoCActor extends Actor { await skill.unflagForDevelopement() } - async toggleStatus (statusName) { - let statusValue = this.data.data.status[statusName]?.value - if (!(typeof statusValue === 'boolean')) { - statusValue = statusValue === 'false' // Necessary, incorrect template initialization + hasConditionStatus (conditionName) { + const conditionValue = this.data.data.conditions?.[conditionName]?.value + if (typeof conditionValue !== 'boolean') { + return false // Necessary, incorrect template initialization } - if (COC7.status.criticalWounds === statusName) { - if (statusValue) await this.cureMajorWound() - else await this.inflictMajorWound() - return + return conditionValue + } + + hasConditionValue (conditionName, field) { + if (!this.hasConditionStatus(conditionName)) { + return undefined + } + if (conditionName === COC7.status.tempoInsane && field === 'durationText') { + const realTime = this.hasConditionValue(conditionName, 'realTime') + const duration = this.hasConditionValue(conditionName, 'duration') + if (typeof duration !== 'undefined') { + if (realTime === true) { + return duration + ' ' + game.i18n.localize('CoC7.rounds') + } else if (realTime === false) { + return duration + ' ' + game.i18n.localize('CoC7.hours') + } + } + return '' + } + return this.data.data.conditions?.[conditionName]?.[field] + } + + async toggleCondition (conditionName) { + const conditionValue = this.hasConditionStatus(conditionName) + if (!conditionValue) { + await this.setCondition(conditionName) + } else { + await this.unsetCondition(conditionName) } - // await this.update({ [`data.status.${statusName}.value`]: !statusValue }) - let effectEffect - switch (statusName) { - case 'dead': - if (statusValue) { - await this.unsetStatus('dead') - effectEffect = await this.hasActiveEffect('dead') - if (effectEffect.length > 0) { - for (const effect of effectEffect) { - effect.delete() + } + + async setCondition (conditionName, { forceValue = false, justThis = false, realTime = null, duration = null } = {}) { + if (!forceValue && game.settings.get('CoC7', 'enableStatusIcons')) { + const effects = this.effects.filter(effect => effect.data.flags.core?.statusId === conditionName).map(effect => effect.id) + const custom = {} + switch (conditionName) { + case COC7.status.dead: + custom.flags = { + core: { + overlay: true } } - } else this.fallDead() - break - case 'dying': - if (statusValue) { - await this.unsetStatus('dying') - effectEffect = await this.hasActiveEffect('dying') - if (effectEffect.length > 0) { - for (const effect of effectEffect) { - effect.delete() + break + case COC7.status.tempoInsane: + custom.flags = { + CoC7: { + realTime: undefined } } - } else this.fallDying() - break - case 'prone': - if (statusValue) { - await this.unsetStatus('prone') - effectEffect = await this.hasActiveEffect('prone') - if (effectEffect.length > 0) { - for (const effect of effectEffect) { - effect.delete() - } + custom.duration = { + rounds: undefined, + seconds: undefined } - } else this.fallProne() - break - case 'unconscious': - if (statusValue) { - await this.unsetStatus('unconscious') - effectEffect = await this.hasActiveEffect('unconscious') - if (effectEffect.length > 0) { - for (const effect of effectEffect) { - effect.delete() + if (realTime === true || realTime === false) { + custom.flags.CoC7.realTime = realTime + custom.flags = { + CoC7: { + realTime: realTime + } + } + if (duration !== null && typeof duration !== 'undefined') { + if (realTime) { + custom.duration.rounds = duration + } else { + custom.duration.seconds = duration * 3600 + } } } - } else this.fallUnconscious() - break - } - } - - async hasActiveEffect (effectLabel) { - const effectList = this.effects - .map(effect => { - return effect - }) - .filter(effect => effect.data.label === effectLabel) - return effectList - } - - async toggleEffect (effectName) { - switch (effectName) { - case 'boutOfMadness': - if (this.boutOfMadness) { - await this.boutOfMadness.delete() - // if( boutOfMadness){ - // await boutOfMadness.update({ disabled: !boutOfMadness.data.disabled, duration: {seconds: undefined, rounds: undefined, turns: 1}}); - // } + break + } + if (effects.length === 0) { + const effect = CONFIG.statusEffects.filter(effect => effect.id === conditionName) + if (effect.length === 1) { + const effectData = mergeObject({ + label: game.i18n.localize(effect[0].label), + icon: effect[0].icon, + flags: { + core: { + statusId: effect[0].id + } + }, + disabled: false + }, custom) + await super.createEmbeddedDocuments('ActiveEffect', [effectData]) } else { - await super.createEmbeddedDocuments('ActiveEffect', [ - { - label: game.i18n.localize('CoC7.BoutOfMadnessName'), - icon: game.settings.get('CoC7', 'enableStatusIcons') - ? 'systems/CoC7/assets/icons/hanging-spider.svg' - : null, - origin: this.uuid, - duration: { - seconds: undefined, - rounds: undefined, - turns: 1 - }, - flags: { - CoC7: { - madness: true, - realTime: true - } - }, - disabled: false - } - ]) + // This doesn't exist in FoundryVTT ActiveEffects? + forceValue = true } - - break - case 'insanity': - if (this.insanity) { - this.insanity.delete() - // if( insanity){ - // await insanity.update({ disabled: !insanity.data.disabled, duration: {seconds: undefined, rounds: undefined, turns: 1}}); - // } - } else { - await super.createEmbeddedDocuments('ActiveEffect', [ - { - label: game.i18n.localize('CoC7.InsanityName'), - icon: game.settings.get('CoC7', 'enableStatusIcons') - ? 'systems/CoC7/assets/icons/tentacles-skull.svg' - : null, - origin: this.uuid, - duration: { - seconds: undefined, - rounds: undefined, - turns: 1 - }, - flags: { - CoC7: { - madness: true, - indefinite: true - } - }, - // tint: '#ff0000', - disabled: false + } else { + custom._id = effects[0] + await super.updateEmbeddedDocuments('ActiveEffect', [custom]) + forceValue = true + } + } + if (forceValue || !game.settings.get('CoC7', 'enableStatusIcons')) { + switch (conditionName) { + case COC7.status.indefInsane: + case COC7.status.unconscious: + case COC7.status.criticalWounds: + case COC7.status.dying: + case COC7.status.prone: + case COC7.status.dead: + await this.update({ [`data.conditions.${conditionName}.value`]: true }) + break + case COC7.status.tempoInsane: + { + const fields = {} + fields[`data.conditions.${conditionName}.value`] = true + if (realTime === true || realTime === false) { + fields[`data.conditions.${conditionName}.realTime`] = realTime + if (duration !== null && typeof duration !== 'undefined') { + fields[`data.conditions.${conditionName}.duration`] = duration + } + } + if (!Object.prototype.hasOwnProperty.call(fields, `data.conditions.${conditionName}.realTime`)) { + fields[`data.conditions.${conditionName}.-=realTime`] = null } - ]) + if (!Object.prototype.hasOwnProperty.call(fields, `data.conditions.${conditionName}.duration`)) { + fields[`data.conditions.${conditionName}.-=duration`] = null + } + await this.update(fields) + } + break + } + if (!justThis) { + // Does setting the condition also trigger other actions? + // - If ActiveEffects are added hasConditionStatus for recently added conditions may return incorrectly + switch (conditionName) { + case COC7.status.criticalWounds: + await this.setCondition(COC7.status.prone) + if ( + !this.hasConditionStatus(COC7.status.unconscious) && + !this.hasConditionStatus(COC7.status.dead) + ) { + const conCheck = new CoC7ConCheck(this.isToken ? this.tokenKey : this.id) + conCheck.toMessage() + } + break + case COC7.status.dead: + await this.unsetCondition(COC7.status.criticalWounds) + await this.unsetCondition(COC7.status.dying) + await this.unsetCondition(COC7.status.unconscious) + break } - break - - default: - break + } } } - getStatus (statusName) { - if (!this.data.data.status) return false - let statusValue = this.data.data.status[statusName]?.value - if (undefined === statusValue) return false - if (!(typeof statusValue === 'boolean')) { - statusValue = statusValue === 'false' // Necessary, incorrect template initialization + async unsetCondition (conditionName, { forceValue = false } = {}) { + if (!forceValue && game.settings.get('CoC7', 'enableStatusIcons')) { + const effects = this.effects.filter(effect => effect.data.flags.core?.statusId === conditionName).map(effect => effect.id) + if (effects.length > 0) { + await super.deleteEmbeddedDocuments('ActiveEffect', effects) + } else { + forceValue = true + } + } + if (forceValue) { + switch (conditionName) { + case COC7.status.tempoInsane: + case COC7.status.indefInsane: + case COC7.status.unconscious: + case COC7.status.criticalWounds: + case COC7.status.dying: + case COC7.status.prone: + case COC7.status.dead: + await this.update({ [`data.conditions.${conditionName}.value`]: false }) + break + } } - return statusValue - } - - async setStatus (statusName) { - await this.update({ [`data.status.${statusName}.value`]: true }) - } - - async unsetStatus (statusName) { - await this.update({ [`data.status.${statusName}.value`]: false }) } async resetCounter (counter) { @@ -3425,178 +3295,39 @@ export class CoCActor extends Actor { if (netDamage <= 0) return 0 await this.setHp(this.hp - netDamage) if (netDamage >= this.hpMax) { - await this.fallDead() + await this.setCondition(COC7.status.dead) } else { if (netDamage >= Math.floor(this.hpMax / 2)) { - await this.inflictMajorWound() + await this.setCondition(COC7.status.criticalWounds) } if (this.hp === 0) { - if (!this.getStatus(COC7.status.unconscious)) { - await this.fallUnconscious() + await this.setCondition(COC7.status.unconscious) + if (this.majorWound) { + this.setCondition(COC7.status.dying) } - if (this.majorWound) this.fallDying() } } return netDamage } - async inflictMajorWound () { - if (!this.majorWound) { - await this.setStatus(COC7.status.criticalWounds) - const criticalWoundsEffect = await this.hasActiveEffect('criticalWounds') - if (criticalWoundsEffect.length === 0) { - await super.createEmbeddedDocuments('ActiveEffect', [ - { - label: 'criticalWounds', - icon: game.settings.get('CoC7', 'enableStatusIcons') - ? 'systems/CoC7/assets/icons/arm-sling.svg' - : null, - origin: this.uuid, - duration: { - seconds: undefined, - rounds: undefined, - turns: 1 - }, - disabled: false - } - ]) - } - } - await this.fallProne() - if ( - !this.getStatus(COC7.status.unconscious) && - !this.getStatus(COC7.status.dead) - ) { - const conCheck = new CoC7ConCheck(this.isToken ? this.tokenKey : this.id) - conCheck.toMessage() - } - } - - async cureMajorWound () { - await this.unsetStatus(COC7.status.criticalWounds) - const criticalWoundsEffect = await this.hasActiveEffect('criticalWounds') - if (criticalWoundsEffect.length > 0) { - for (const effect of criticalWoundsEffect) { - effect.delete() - } - } - } - - async fallProne () { - await this.setStatus(COC7.status.prone) - const proneEffect = await this.hasActiveEffect('prone') - if (proneEffect.length === 0) { - await super.createEmbeddedDocuments('ActiveEffect', [ - { - label: 'prone', - icon: game.settings.get('CoC7', 'enableStatusIcons') - ? 'systems/CoC7/assets/icons/falling.svg' - : null, - origin: this.uuid, - duration: { - seconds: undefined, - rounds: undefined, - turns: 1 - }, - disabled: false - } - ]) - } - } - - async fallUnconscious () { - await this.setStatus(COC7.status.unconscious) - const unconsciousEffect = await this.hasActiveEffect('unconscious') - if (unconsciousEffect.length === 0) { - await super.createEmbeddedDocuments('ActiveEffect', [ - { - label: 'unconscious', - icon: game.settings.get('CoC7', 'enableStatusIcons') - ? 'systems/CoC7/assets/icons/knocked-out-stars.svg' - : null, - origin: this.uuid, - duration: { - seconds: undefined, - rounds: undefined, - turns: 1 - }, - disabled: false - } - ]) - } - } - - async fallDying () { - await this.setStatus(COC7.status.dying) - const dyingEffect = await this.hasActiveEffect('dying') - if (dyingEffect.length === 0) { - await super.createEmbeddedDocuments('ActiveEffect', [ - { - label: 'dying', - icon: game.settings.get('CoC7', 'enableStatusIcons') - ? 'systems/CoC7/assets/icons/heart-beats.svg' - : null, - origin: this.uuid, - duration: { - seconds: undefined, - rounds: undefined, - turns: 1 - }, - disabled: false - } - ]) - } - } - - async fallDead () { - await this.unsetStatus(COC7.status.criticalWounds) - await this.unsetStatus(COC7.status.dying) - await this.unsetStatus(COC7.status.unconscious) - await this.setStatus(COC7.status.dead) - const deadEffect = await this.hasActiveEffect('dead') - if (deadEffect.length === 0) { - await super.createEmbeddedDocuments('ActiveEffect', [ - { - label: 'dead', - icon: game.settings.get('CoC7', 'enableStatusIcons') - ? 'systems/CoC7/assets/icons/tombstone.svg' - : null, - origin: this.uuid, - duration: { - seconds: undefined, - rounds: undefined, - turns: 1 - }, - disabled: false - } - ]) - } - const dyingEffect = await this.hasActiveEffect('dying') - if (!this.dying && dyingEffect.length > 0) { - for (const effect of dyingEffect) { - effect.delete() - } - } - } - get majorWound () { - return this.getStatus(COC7.status.criticalWounds) + return this.hasConditionStatus(COC7.status.criticalWounds) } get dying () { - return this.getStatus(COC7.status.dying) + return this.hasConditionStatus(COC7.status.dying) } get unconscious () { - return this.getStatus(COC7.status.unconscious) + return this.hasConditionStatus(COC7.status.unconscious) } get dead () { - return this.getStatus(COC7.status.dead) + return this.hasConditionStatus(COC7.status.dead) } get prone () { - return this.getStatus(COC7.status.prone) + return this.hasConditionStatus(COC7.status.prone) } // static updateActor( actor, dataUpdate){ diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 0faccc21..d3e62f90 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -158,18 +158,6 @@ export class CoC7ActorSheet extends ActorSheet { } } - if (!data.data.status) { - data.data.status = { - criticalWounds: { type: 'Boolean', value: false }, - unconscious: { type: 'Boolean', value: false }, - dying: { type: 'Boolean', value: false }, - dead: { type: 'Boolean', value: false }, - prone: { type: 'Boolean', value: false }, - tempoInsane: { type: 'boolean', value: false }, - indefInsane: { type: 'boolean', value: false } - } - } - if (!data.data.biography) { data.data.biography = { personalDescription: { type: 'string', value: '' } @@ -213,10 +201,6 @@ export class CoC7ActorSheet extends ActorSheet { if (!data.data.biography) data.data.biography = [] if (!data.data.encounteredCreatures) data.data.encounteredCreatures = [] - data.isInABoutOfMadness = this.actor.isInABoutOfMadness - data.isInsane = this.actor.isInsane - data.boutOfMadness = this.actor.boutOfMadness - data.sanity = this.actor.sanity data.pulpCharacter = game.settings.get('CoC7', 'pulpRules') } @@ -745,7 +729,7 @@ export class CoC7ActorSheet extends ActorSheet { // Status monitor if (game.user.isGM || game.settings.get('CoC7', 'statusPlayerEditable')) { html.find('.reset-counter').click(this._onResetCounter.bind(this)) - html.find('.status-monitor').click(this._onStatusToggle.bind(this)) + html.find('.condition-monitor').click(this._onConditionToggle.bind(this)) html.find('.is-dying').click(this.heal.bind(this)) html.find('.is-dead').click(this.revive.bind(this)) } @@ -876,6 +860,24 @@ export class CoC7ActorSheet extends ActorSheet { } }) + html.find('.clear_conditions').click(event => { + if (typeof this.actor.data.data.conditions !== 'undefined') { + const disable = {} + for (const condition in this.actor.data.data.conditions) { + if (typeof this.actor.data.data.conditions[condition].value !== 'undefined' && this.actor.data.data.conditions[condition].value === true) { + disable[`data.conditions.${condition}.value`] = false + } + } + if (Object.keys(disable).length > 0) { + this.actor.update(disable) + } + } + const effects = this.actor.effects.map(effect => effect.id) + if (effects.length > 0) { + this.actor.deleteEmbeddedDocuments('ActiveEffect', effects) + } + }) + html.find('a.coc7-link').on('click', event => CoC7Parser._onCheck(event)) html .find('a.coc7-link') @@ -1264,21 +1266,19 @@ export class CoC7ActorSheet extends ActorSheet { await super._onDrop(event) } - async _onStatusToggle (event) { + async _onConditionToggle (event) { event.preventDefault() - if (event.currentTarget.dataset.status) { - await this.actor.toggleStatus(event.currentTarget.dataset.status) - } else if (event.currentTarget.dataset.effect) { - await this.actor.toggleEffect(event.currentTarget.dataset.effect) + if (event.currentTarget.dataset.condition) { + await this.actor.toggleCondition(event.currentTarget.dataset.condition) } } async revive () { - if (game.user.isGM) this.actor.unsetStatus(COC7.status.dead) + if (game.user.isGM) this.actor.unsetCondition(COC7.status.dead) } async heal () { - if (game.user.isGM) this.actor.unsetStatus(COC7.status.dying) + if (game.user.isGM) this.actor.unsetCondition(COC7.status.dying) } async checkForDeath (event) { diff --git a/module/chat/cards/san-check.js b/module/chat/cards/san-check.js index b55fc5f8..899e4198 100644 --- a/module/chat/cards/san-check.js +++ b/module/chat/cards/san-check.js @@ -1,5 +1,6 @@ /* global $, game, renderTemplate, Roll, ui */ +import { COC7 } from '../../config.js' import { CoC7Check } from '../../check.js' import { CoC7Dice } from '../../dice.js' import { CoC7Utilities } from '../../utilities.js' @@ -152,7 +153,7 @@ export class SanCheckCard extends ChatCardActor { get isActorLoosingSan () { // No san loss during bout of mad. - if (this.actor.isInABoutOfMadness) { + if (this.actor.hasTempoInsane) { return false } @@ -189,17 +190,6 @@ export class SanCheckCard extends ChatCardActor { return null } - get alreadyInsaneText () { - if (this.actor.sanity.underlying.indefintie) { - return game.i18n.localize('CoC7.AlreadyUnderlyingInsanity') - } else { - return ( - game.i18n.localize('CoC7.AlreadyUnderlyingInsanity') + - ` (${this.actor.sanity.underlying.durationText})` - ) - } - } - get youGainCthulhuMythosString () { if (this.mythosGain) { return game.i18n.format('CoC7.YouGainedCthulhuMythos', { @@ -250,7 +240,7 @@ export class SanCheckCard extends ChatCardActor { break } case 'boutOfMadnessOver': { - await this.actor.exitBoutOfMadness() + await this.actor.unsetCondition(COC7.status.tempoInsane) await this.triggerInsanity() break } @@ -310,7 +300,7 @@ export class SanCheckCard extends ChatCardActor { this.state.involuntaryActionPerformed = this.sanCheck.passed if (!this.isActorLoosingSan) { this.state.finish = true - if (this.actor.isInABoutOfMadness) { + if (this.actor.hasTempoInsane) { this.state.immuneAlreadyInBout = true if (!this.sanCheck.passed) this.state.finish = false } @@ -392,7 +382,7 @@ export class SanCheckCard extends ChatCardActor { if (this.sanLoss < 5) { this.state.intRolled = true - if (this.actor.isInsane) { + if (this.actor.isIndefInsane) { this.state.insanity = true this.state.shaken = true this.state.insanityTableRolled = false @@ -447,23 +437,7 @@ export class SanCheckCard extends ChatCardActor { async triggerInsanity () { this.state.boutOfMadnessOver = true - if (this.state.indefinitelyInsane) await this.actor.enterInsanity(true) - if (this.state.temporaryInsane) { - if ( - this.actor.sanity.underlying.active && - this.actor.sanity.underlying.indefintie - ) { - // Already indefinite insanity - this.state.finish = true - return - } - this.insanityDurationRoll = await new Roll('1D10').roll({ async: true }) - this.insanityDuration = this.insanityDurationRoll.total - if (this.actor.sanity.underlying.duration) { - this.insanityDuration += this.actor.sanity.underlying.duration - } - await this.actor.enterInsanity(false, this.insanityDuration) - } + if (this.state.indefinitelyInsane) await this.actor.setCondition(COC7.status.indefInsane) this.state.finish = true } @@ -541,7 +515,7 @@ export class SanCheckCard extends ChatCardActor { static async create (...args) { const chatCard = new SanCheckCard(...args) - if (chatCard.actor.isInsane) { + if (chatCard.actor.isIndefInsane) { chatCard.state.alreadyInsane = true } diff --git a/module/chat/concheck.js b/module/chat/concheck.js index 3cf4e7f7..f036bce4 100644 --- a/module/chat/concheck.js +++ b/module/chat/concheck.js @@ -1,5 +1,6 @@ /* global $, ChatMessage, game, renderTemplate, ui */ +import { COC7 } from '../config.js' import { CoC7Check } from '../check.js' import { chatHelper, CoC7Roll } from './helper.js' @@ -132,9 +133,12 @@ export class CoC7ConCheck { async rollCon () { this.check.hideDiceResult = true await this.check._perform() - if (!this.isSuccess && !this.isBlind) { - if (this.stayAlive) await this.actor.fallDead() - else await this.actor.fallUnconscious() + if (!this.isBlind && !this.isRolled && !this.isSuccess) { + if (this.stayAlive) { + await this.actor.setCondition(COC7.status.dead) + } else { + await this.actor.setCondition(COC7.status.unconscious) + } } this.applied = true } @@ -149,8 +153,11 @@ export class CoC7ConCheck { check.replaceWith(await this.getCheckElement()) if (!this.isBlind && this.isRolled && !this.isSuccess) { - if (this.stayAlive) await this.actor.fallDead() - else await this.actor.fallUnconscious() + if (this.stayAlive) { + await this.actor.setCondition(COC7.status.dead) + } else { + await this.actor.setCondition(COC7.status.unconscious) + } } if (!this.messageId) return diff --git a/module/coc7.js b/module/coc7.js index e06d0c1f..fc2a9793 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -14,6 +14,7 @@ import { OpposedCheckCard } from './chat/cards/opposed-roll.js' import { CombinedCheckCard } from './chat/cards/combined-roll.js' import { DamageCard } from './chat/cards/damage.js' import { CoC7Canvas } from './apps/canvas.js' +import { CoC7SettingsDirectory } from './settings-directory.js' import { CoC7CompendiumDirectory } from './compendium-directory.js' import { CoC7ActorDirectory } from './actor-directory.js' import { CoC7Hooks } from './hooks/index.js' @@ -174,40 +175,85 @@ Hooks.once('setup', function () { }, {}) } - let effectIndex = CONFIG.statusEffects.findIndex(t => t.id === 'dead') + let effectIndex = CONFIG.statusEffects.findIndex(t => t.id === COC7.status.dead) if (effectIndex !== -1) { CONFIG.statusEffects[effectIndex].icon = 'systems/CoC7/assets/icons/tombstone.svg' } - effectIndex = CONFIG.statusEffects.findIndex(t => t.id === 'unconscious') + effectIndex = CONFIG.statusEffects.findIndex(t => t.id === COC7.status.unconscious) if (effectIndex !== -1) { CONFIG.statusEffects[effectIndex].icon = 'systems/CoC7/assets/icons/knocked-out-stars.svg' } CONFIG.statusEffects.unshift( { - id: 'boutOfMadness', + id: COC7.status.tempoInsane, label: 'CoC7.BoutOfMadnessName', icon: 'systems/CoC7/assets/icons/hanging-spider.svg' }, { - id: 'insanity', + id: COC7.status.indefInsane, label: 'CoC7.InsanityName', icon: 'systems/CoC7/assets/icons/tentacles-skull.svg' }, { - id: 'criticalWounds', + id: COC7.status.criticalWounds, label: 'CoC7.CriticalWounds', icon: 'systems/CoC7/assets/icons/arm-sling.svg' }, { - id: 'dying', + id: COC7.status.dying, label: 'CoC7.Dying', icon: 'systems/CoC7/assets/icons/heart-beats.svg' } ) }) +Hooks.on('createActiveEffect', (data, options, userId) => { + if (typeof data.data.flags.core !== 'undefined' && typeof data.data.flags.core.statusId !== 'undefined') { + switch (data.data.flags.core.statusId) { + case COC7.status.indefInsane: + case COC7.status.unconscious: + case COC7.status.criticalWounds: + case COC7.status.dying: + case COC7.status.prone: + case COC7.status.dead: + data.parent.setCondition(data.data.flags.core.statusId, { forceValue: true }) + break + case COC7.status.tempoInsane: + { + const realTime = data.data.flags.CoC7?.realTime + let duration = null + if (realTime === true) { + duration = data.data.duration?.rounds + } else if (realTime === false) { + duration = data.data.duration?.seconds + if (!isNaN(duration)) { + duration = Math.floor(duration / 3600) + } + } + data.parent.setCondition(COC7.status.tempoInsane, { forceValue: true, realTime: realTime, duration: duration }) + } + break + } + } +}) + +Hooks.on('deleteActiveEffect', (data, options, userId) => { + if (typeof data.data.flags.core !== 'undefined' && typeof data.data.flags.core.statusId !== 'undefined') { + switch (data.data.flags.core.statusId) { + case COC7.status.tempoInsane: + case COC7.status.indefInsane: + case COC7.status.unconscious: + case COC7.status.criticalWounds: + case COC7.status.dying: + case COC7.status.prone: + case COC7.status.dead: + data.parent.unsetCondition(data.data.flags.core.statusId, { forceValue: true }) + } + } +}) + Hooks.on('hotbarDrop', async (bar, data, slot) => CoC7Utilities.createMacro(bar, data, slot) ) @@ -476,5 +522,6 @@ function _onLeftClick (event) { return event.shiftKey } +CONFIG.ui.settings = CoC7SettingsDirectory CONFIG.ui.compendium = CoC7CompendiumDirectory CONFIG.ui.actors = CoC7ActorDirectory diff --git a/module/settings-directory.js b/module/settings-directory.js new file mode 100644 index 00000000..8db4d42d --- /dev/null +++ b/module/settings-directory.js @@ -0,0 +1,33 @@ +/* global Dialog, game, Settings */ + +export class CoC7SettingsDirectory extends Settings { + activateListeners (html) { + super.activateListeners(html) + html.find('#settings-game').append('') + html.find('.trigger-data-migration').click(() => { + new Dialog( + { + title: game.i18n.localize('CoC7.Migrate.TriggerTitle'), + content: game.i18n.localize('CoC7.Migrate.TriggerContents'), + buttons: { + migrate: { + icon: '', + label: game.i18n.localize('CoC7.Migrate.TriggerRestart'), + callback: async () => { + await game.settings.set('CoC7', 'systemUpdateVersion', 0) + window.location.reload() + } + }, + close: { + icon: '', + label: game.i18n.localize('Cancel'), + callback: () => {} + } + }, + default: 'close' + }, + {} + ).render(true) + }) + } +} diff --git a/module/updater.js b/module/updater.js index 6f969393..256ca73b 100644 --- a/module/updater.js +++ b/module/updater.js @@ -163,6 +163,7 @@ export class Updater { Updater._migrateActorArtwork(actor, updateData) Updater._migrateActorKeeperNotes(actor, updateData) Updater._migrateActorNpcCreature(actor, updateData) + Updater._migrateActorStatusEffectActive(actor, updateData) // Migrate World Actor Items if (actor.items) { @@ -501,6 +502,94 @@ export class Updater { return updateData } + static _migrateActorStatusEffectActive (actor, updateData) { + if (typeof actor.data.status !== 'undefined' || typeof actor.data.conditions === 'undefined') { + updateData['data.conditions.criticalWounds.value'] = false + updateData['data.conditions.unconscious.value'] = false + updateData['data.conditions.dying.value'] = false + updateData['data.conditions.dead.value'] = false + updateData['data.conditions.prone.value'] = false + updateData['data.conditions.tempoInsane.value'] = false + updateData['data.conditions.indefInsane.value'] = false + if (typeof actor.data.status.criticalWounds.value !== 'undefined' && actor.data.status.criticalWounds.value) { + updateData['data.conditions.criticalWounds.value'] = true + } + if (typeof actor.data.status.unconscious.value !== 'undefined' && actor.data.status.unconscious.value) { + updateData['data.conditions.unconscious.value'] = true + } + if (typeof actor.data.status.dying.value !== 'undefined' && actor.data.status.dying.value) { + updateData['data.conditions.dying.value'] = true + } + if (typeof actor.data.status.dead.value !== 'undefined' && actor.data.status.dead.value) { + updateData['data.conditions.dead.value'] = true + } + if (typeof actor.data.status.prone.value !== 'undefined' && actor.data.status.prone.value) { + updateData['data.conditions.prone.value'] = true + } + if (typeof actor.data.status.tempoInsane.value !== 'undefined' && actor.data.status.tempoInsane.value) { + updateData['data.conditions.tempoInsane.value'] = true + } + if (typeof actor.data.status.indefInsane.value !== 'undefined' && actor.data.status.indefInsane.value) { + updateData['data.conditions.indefInsane.value'] = true + } + const effects = actor.effects + let changed = false + for (let i = 0, im = effects.length; i < im; i++) { + const effect = effects[i] + const match = effect.icon.match(/\/(hanging-spider|tentacles-skull|arm-sling|heart-beats|tombstone|knocked-out-stars|falling|skull|unconscious)\./) + if (match !== null) { + let statusId = '' + switch (match[1]) { + case 'hanging-spider': + statusId = 'tempoInsane' + break + case 'tentacles-skull': + statusId = 'indefInsane' + break + case 'arm-sling': + statusId = 'criticalWounds' + break + case 'heart-beats': + statusId = 'dying' + break + case 'tombstone': + case 'skull': + statusId = 'dead' + break + case 'knocked-out-stars': + case 'unconscious': + statusId = 'unconscious' + break + case 'falling': + statusId = 'prone' + break + } + if (statusId !== '') { + if (!updateData[`data.conditions.${statusId}.value`]) { + updateData[`data.conditions.${statusId}.value`] = true + changed = true + } + if (effect.flags.core?.statusId !== statusId) { + effects[i] = mergeObject(effect, { + flags: { + core: { + statusId: statusId + } + } + }) + changed = true + } + } + } + } + if (changed) { + updateData.effects = effects + } + updateData['data.-=status'] = null + } + return updateData + } + static _migrateActorNpcCreature (actor, updateData) { if (['npc'].includes(actor.type)) { if (typeof actor.data.special === 'undefined') { diff --git a/module/utilities.js b/module/utilities.js index 5ad946e7..e87b545e 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -1,5 +1,6 @@ /* global canvas, ChatMessage, CONST, Dialog, game, getDocumentClass, Hooks, Macro, Roll, ui */ +import { COC7 } from './config.js' import { CoC7Check } from './check.js' import { CoC7Item } from './items/item.js' import { RollDialog } from './apps/roll-dialog.js' @@ -14,7 +15,7 @@ export class CoC7Utilities { // if (speaker.token) actor = game.actors.tokens[speaker.token]; // if (!actor) actor = game.actors.get(speaker.actor); - // actor.inflictMajorWound(); + // actor.setCondition(COC7.status.criticalWounds); // } static isFormula (x) { @@ -479,7 +480,7 @@ export class CoC7Utilities { } } } - const isCriticalWounds = actor.data.data.status.criticalWounds.value + const isCriticalWounds = actor.hasCondition(COC7.status.criticalWounds) const dailySanityLoss = actor.data.data.attribs.san.dailyLoss const hpValue = actor.data.data.attribs.hp.value const hpMax = actor.data.data.attribs.hp.max diff --git a/styles/sheets/summary.less b/styles/sheets/summary.less index 290091ba..6455125f 100644 --- a/styles/sheets/summary.less +++ b/styles/sheets/summary.less @@ -31,14 +31,14 @@ label { line-height: 1; } - .status-monitor { + .condition-monitor { color: darkgrey; text-align: center; } - .status-monitor.invert { + .condition-monitor.invert { transform: rotateZ(180deg); } - .status-monitor.status-on { + .condition-monitor.status-on { color: darkred; } .status { diff --git a/styles/system/main.less b/styles/system/main.less index 5771a42d..e6330001 100644 --- a/styles/system/main.less +++ b/styles/system/main.less @@ -334,19 +334,19 @@ flex: 0 0 auto; height: 16px; } - .status-monitors { + .condition-monitors { font-size: 1rem; } - .status-monitor { + .condition-monitor { flex: 0 0 25px; color: darkgrey; padding: 1px 6px; text-align: center; } - .status-monitor.invert { + .condition-monitor.invert { transform: rotateZ(180deg); } - .status-monitor.status-on { + .condition-monitor.status-on { color: darkred; } .sheet-body { diff --git a/template.json b/template.json index 1001222a..ab81e9b4 100644 --- a/template.json +++ b/template.json @@ -122,33 +122,26 @@ } }, "status": { - "status": { + "conditions": { "criticalWounds": { - "type": "Boolean", "value": false }, "unconscious": { - "type": "Boolean", "value": false }, "dying": { - "type": "Boolean", "value": false }, "dead": { - "type": "Boolean", "value": false }, "prone": { - "type": "Boolean", "value": false }, "tempoInsane": { - "type": "boolean", "value": false }, "indefInsane": { - "type": "boolean", "value": false } } diff --git a/templates/actors/character-sheet-v2.html b/templates/actors/character-sheet-v2.html index 014577bf..c2483e56 100644 --- a/templates/actors/character-sheet-v2.html +++ b/templates/actors/character-sheet-v2.html @@ -200,7 +200,10 @@ {{#if isGM}}
                                      - {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
                                      + {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
                                      +
                                      {{/if}}
                                      diff --git a/templates/actors/character-sheet.html b/templates/actors/character-sheet.html index 027d8948..d8652025 100644 --- a/templates/actors/character-sheet.html +++ b/templates/actors/character-sheet.html @@ -145,7 +145,7 @@
                                      -
                                      +
                                      @@ -154,21 +154,21 @@ {{data.attribs.san.dailyLoss}}
                                      - - - - - + + + + +
                                      {{#if isDying}} - + {{else}}
                                      {{/if}}
                                      - - + +
                                      {{#if data.flags.locked}} @@ -309,4 +309,4 @@
                                      {{/if}}
                      - + \ No newline at end of file diff --git a/templates/actors/character/summary.html b/templates/actors/character/summary.html index 0f1bf676..ba659835 100644 --- a/templates/actors/character/summary.html +++ b/templates/actors/character/summary.html @@ -29,14 +29,14 @@ {{/if}}
              - - - - + + + + {{#if data.status.dead.value}} - + {{else}} - + {{/if}}
              @@ -58,8 +58,8 @@
              - - + +
              @@ -207,4 +207,4 @@
              - + \ No newline at end of file diff --git a/templates/actors/npc-sheet.html b/templates/actors/npc-sheet.html index a29e4948..ba479c9f 100644 --- a/templates/actors/npc-sheet.html +++ b/templates/actors/npc-sheet.html @@ -224,17 +224,17 @@
              -
              +
              {{#if isDying}} {{else}} - - - - + + + + - - + +
              @@ -284,12 +284,12 @@
              {{/unless}} {{#if isDead}} -
              +
              {{else}} {{#if isDying}} -
              +
              {{else}} @@ -369,10 +369,11 @@

              {{localize 'CoC7.GmNotes'}} {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +

              {{/if}}
              {{/unless}} - + \ No newline at end of file diff --git a/templates/actors/parts/vitals.html b/templates/actors/parts/vitals.html index 973864f7..65f30553 100644 --- a/templates/actors/parts/vitals.html +++ b/templates/actors/parts/vitals.html @@ -21,17 +21,17 @@
              - - - - + + + +
              - +
              - {{#if data.status.dead.value}} - + {{#if data.conditions.dead.value}} + {{else}} - + {{/if}}
              @@ -61,8 +61,8 @@
              - - + +
              diff --git a/templates/chat/cards/san-check.html b/templates/chat/cards/san-check.html index 8f3d833c..2dede5b3 100644 --- a/templates/chat/cards/san-check.html +++ b/templates/chat/cards/san-check.html @@ -15,250 +15,250 @@
              {{/unless}} -
              -
              -
              -
              -
              +
              +
              +
              +
              +
              -
              -
              {{localize 'CoC7.DailyLoss'}}: {{actor.dailySanLoss}}
              -
              {{localize 'CoC7.Sanity'}}: {{actor.san}}/{{actor.sanMax}}
              - {{#if creature}} - {{#if creatureEncountered}}
              Creature encountered
              {{/if}} - {{#if creatureSpecieEncountered}}
              Specie encountered
              {{/if}} -
              Already lost: {{sanLostToThisCreature}}
              -
              Creature max loss: {{creature.sanLossMax}}
              -
              Max loss to this creature: {{maxSanLossToThisCreature}}
              - {{else}} -
              Max loss: {{maxSanLoss}}
              - {{/if}} - {{#if state.sanRolled}} - {{#if sanCheck.failed}} -
              Check failed
              -
              {{localize 'CoC7.InvoluntaryAction'}} {{#if state.involuntaryActionPerformed}}{{/if}}
              - {{else}} -
              Check passed
              - {{/if}} - {{#if state.sanLossRolled}} -
              {{ localize 'CoC7.SANLoss' }}: {{sanLoss}} {{#if state.sanLossApplied}}{{/if}}
              - {{/if}} - {{/if}} - {{#if state.insanity}} -
              Insanity
              - {{/if}} - {{#if state.sane}} -
              Sane
              - {{/if}} - {{#if state.memoryRepressed}} -
              Memory repressed
              - {{/if}} - {{#if state.inSanity}} -
              Insanity
              - {{/if}} - {{#if state.temporaryInsane}} -
              Temporary insannity
              - {{/if}} - {{#if state.indefinitelyInsane}} -
              Indefinitely insane
              - {{/if}} - {{#if state.definitelyInsane}} -
              Good for the asylum
              - {{/if}} +
              +
              {{localize 'CoC7.DailyLoss'}}: {{actor.dailySanLoss}}
              +
              {{localize 'CoC7.Sanity'}}: {{actor.san}}/{{actor.sanMax}}
              + {{#if creature}} + {{#if creatureEncountered}}
              Creature encountered
              {{/if}} + {{#if creatureSpecieEncountered}}
              Specie encountered
              {{/if}} +
              Already lost: {{sanLostToThisCreature}}
              +
              Creature max loss: {{creature.sanLossMax}}
              +
              Max loss to this creature: {{maxSanLossToThisCreature}}
              + {{else}} +
              Max loss: {{maxSanLoss}}
              + {{/if}} + {{#if state.sanRolled}} + {{#if sanCheck.failed}} +
              Check failed
              +
              {{localize 'CoC7.InvoluntaryAction'}} {{#if state.involuntaryActionPerformed}}{{/if}}
              + {{else}} +
              Check passed
              + {{/if}} + {{#if state.sanLossRolled}} +
              {{ localize 'CoC7.SANLoss' }}: {{sanLoss}} {{#if state.sanLossApplied}}{{/if}}
              + {{/if}} + {{/if}} + {{#if state.insanity}} +
              Insanity
              + {{/if}} + {{#if state.sane}} +
              Sane
              + {{/if}} + {{#if state.memoryRepressed}} +
              Memory repressed
              + {{/if}} + {{#if state.inSanity}} +
              Insanity
              + {{/if}} + {{#if state.temporaryInsane}} +
              Temporary insannity
              + {{/if}} + {{#if state.indefinitelyInsane}} +
              Indefinitely insane
              + {{/if}} + {{#if state.definitelyInsane}} +
              Good for the asylum
              + {{/if}} - {{#if state.finish}} -
              --F-I-N-I-S-H--
              - {{/if}} + {{#if state.finish}} +
              --F-I-N-I-S-H--
              + {{/if}} -
              +
              -
              - {{#if state.sanRolled}} -
              {{ localize 'CoC7.SanityCheckPerformed' }} {{#unless isBypassed}} {{{__inlineSanCheck}}} {{/unless}}
              - {{#if state.involuntaryActionPerformed}} - {{#unless sanCheck.passed}} -
              {{ localize 'CoC7.InvoluntaryActionPerformed' }}
              - {{/unless}} - {{#if state.sanLossRolled}} - {{#if state.sanLossApplied}} - {{#if state.actorLostSan}} -
              {{ localize 'CoC7.SanityLost' }}: {{#if __inlineSanLossRoll}}{{{__inlineSanLossRoll}}}{{else}}{{sanLoss}}{{/if}}
              - {{#if state.limitedLossToCreature}} -
              {{ localize 'CoC7.GrowingAccustomedToAwfulness' }}: {{sanLoss}}
              - {{/if}} - {{else}} - {{#if state.immuneAlreadyInBout}} -
              {{ localize 'CoC7.AlreadyInABout' }}
              - {{/if}} - {{#if state.immuneToCreature}} -
              {{ localize 'CoC7.ImmuneToAwfulness' }}
              - {{/if}} - {{/if}} - {{#if state.intRolled}} - {{#if state.memoryRepressed}} -
              {{{__inlineIntCheck}}} {{ localize 'CoC7.MemoryRepressed' }}
              - {{/if}} - {{#if state.temporaryInsane}} -
              {{{__inlineIntCheck}}} {{ localize 'CoC7.RememberEverything' }}
              - {{/if}} - {{#if state.insanity}} - {{#unless state.boutOfMadnessOver}} -
              {{ localize 'CoC7.EnteringBoutOfMadness' }} {{#if state.boutOfMadnessResolved}}({{actor.sanity.boutOfMadness.durationText}}){{/if}}
              - {{/unless}} - {{#if state.permanentlyInsane}} -
              {{ localize 'CoC7.GoodForAsylum' }}
              - {{/if}} - {{#if state.boutOfMadnessResolved}} - {{#if boutResult.phobia}} -
              {{ localize 'CoC7.PhobiaGained' }}: {{boutResult.name}}
              - {{/if}} +
              + {{#if state.sanRolled}} +
              {{ localize 'CoC7.SanityCheckPerformed' }} {{#unless isBypassed}} {{{__inlineSanCheck}}} {{/unless}}
              + {{#if state.involuntaryActionPerformed}} + {{#unless sanCheck.passed}} +
              {{ localize 'CoC7.InvoluntaryActionPerformed' }}
              + {{/unless}} + {{#if state.sanLossRolled}} + {{#if state.sanLossApplied}} + {{#if state.actorLostSan}} +
              {{ localize 'CoC7.SanityLost' }}: {{#if __inlineSanLossRoll}}{{{__inlineSanLossRoll}}}{{else}}{{sanLoss}}{{/if}}
              + {{#if state.limitedLossToCreature}} +
              {{ localize 'CoC7.GrowingAccustomedToAwfulness' }}: {{sanLoss}}
              + {{/if}} + {{else}} + {{#if state.immuneAlreadyInBout}} +
              {{ localize 'CoC7.AlreadyInABout' }}
              + {{/if}} + {{#if state.immuneToCreature}} +
              {{ localize 'CoC7.ImmuneToAwfulness' }}
              + {{/if}} + {{/if}} + {{#if state.intRolled}} + {{#if state.memoryRepressed}} +
              {{{__inlineIntCheck}}} {{ localize 'CoC7.MemoryRepressed' }}
              + {{/if}} + {{#if state.temporaryInsane}} +
              {{{__inlineIntCheck}}} {{ localize 'CoC7.RememberEverything' }}
              + {{/if}} + {{#if state.insanity}} + {{#unless state.boutOfMadnessOver}} +
              {{ localize 'CoC7.EnteringBoutOfMadness' }}{{#if (and state.boutOfMadnessResolved actor.getTempoInsaneDurationText)}} ({{actor.getTempoInsaneDurationText}}){{/if}}
              + {{/unless}} + {{#if state.permanentlyInsane}} +
              {{ localize 'CoC7.GoodForAsylum' }}
              + {{/if}} + {{#if state.boutOfMadnessResolved}} + {{#if boutResult.phobia}} +
              {{ localize 'CoC7.PhobiaGained' }}: {{boutResult.name}}
              + {{/if}} - {{#if boutResult.mania}} -
              {{ localize 'CoC7.ManiaGained' }}: {{boutResult.name}}
              - {{/if}} + {{#if boutResult.mania}} +
              {{ localize 'CoC7.ManiaGained' }}: {{boutResult.name}}
              + {{/if}} - {{#if state.boutOfMadnessOver}} -
              {{ localize 'CoC7.BoutOfMadnesslasted' }} {{boutDuration}} {{#if boutRealTime}}{{ localize 'CoC7.rounds'}}{{/if}}{{#if boutSummary}}{{ localize 'CoC7.hours'}}{{/if}}
              + {{#if state.boutOfMadnessOver}} +
              {{ localize 'CoC7.BoutOfMadnesslasted' }} {{boutDuration}} {{#if boutRealTime}}{{ localize 'CoC7.rounds'}}{{/if}}{{#if boutSummary}}{{ localize 'CoC7.hours'}}{{/if}}
              - {{#if state.indefinitelyInsane}} -
              {{ localize 'CoC7.IndefinitelyInsane' }}
              - {{/if}} - {{#if state.temporaryInsane}} -
              {{ localize 'CoC7.TemporaryInsane' }} ({{actor.sanity.underlying.durationText}})
              - {{/if}} - {{/if}} - {{/if}} - {{else}} -
              - {{/if}} - {{else}} -
              - -
              - {{/if}} - {{/if}} - {{else}} -
              - -
              - {{/if}} - {{/if}} - {{else}} - {{#if state.permanentlyInsane}} -
              {{ localize 'CoC7.PlayerPermanentlyInsane' }}
              - {{else}} -
              - -
              - {{/if}} - {{/if}} + {{#if state.indefinitelyInsane}} +
              {{ localize 'CoC7.IndefinitelyInsane' }}
              + {{/if}} + {{#if state.temporaryInsane}} +
              {{ localize 'CoC7.TemporaryInsane' }}
              + {{/if}} + {{/if}} + {{/if}} + {{else}} +
              + {{/if}} + {{else}} +
              + +
              + {{/if}} + {{/if}} + {{else}} +
              + +
              + {{/if}} + {{/if}} + {{else}} + {{#if state.permanentlyInsane}} +
              {{ localize 'CoC7.PlayerPermanentlyInsane' }}
              + {{else}} +
              + +
              + {{/if}} + {{/if}} - {{#if state.cthulhuMythosAwarded}} -
              {{youGainCthulhuMythosString}}
              - {{/if}} -
              + {{#if state.cthulhuMythosAwarded}} +
              {{youGainCthulhuMythosString}}
              + {{/if}} +
              -
              - {{#if state.alreadyInsane}} -
              {{alreadyInsaneText}}
              - {{/if}} - {{#if state.boutOfMadnessResolved}} - {{#if boutResult.phobia}} -
              {{ localize 'CoC7.InvestigatorPhobiaGained'}}
              - {{/if}} - {{#if boutResult.mania}} -
              -
              {{ localize 'CoC7.InvestigatorManiaGained'}}
              -
              - {{/if}} -
              {{{boutResult.description}}}
              - {{#unless state.boutOfMadnessOver}} -
              - -
              - {{/unless}} - {{/if}} - {{#if state.insanity}} - {{#if state.permanentlyInsane}} -
              - {{ localize 'CoC7.PlayerPermanentlyInsane'}} -
              - {{else}} - {{#unless state.boutOfMadnessResolved}} -
              - - -
              - {{/unless}} - {{/if}} - {{/if}} - {{#if sanCheck.failed}} - {{#unless state.involuntaryActionPerformed}} -
              - -
              - {{/unless}} - {{/if}} +
              + {{#if state.alreadyInsane}} +
              {{ localize 'CoC7.AlreadyUnderlyingInsanity'}}
              + {{/if}} + {{#if state.boutOfMadnessResolved}} + {{#if boutResult.phobia}} +
              {{ localize 'CoC7.InvestigatorPhobiaGained'}}
              + {{/if}} + {{#if boutResult.mania}} +
              +
              {{ localize 'CoC7.InvestigatorManiaGained'}}
              +
              + {{/if}} +
              {{{boutResult.description}}}
              + {{#unless state.boutOfMadnessOver}} +
              + +
              + {{/unless}} + {{/if}} + {{#if state.insanity}} + {{#if state.permanentlyInsane}} +
              + {{ localize 'CoC7.PlayerPermanentlyInsane'}} +
              + {{else}} + {{#unless state.boutOfMadnessResolved}} +
              + + +
              + {{/unless}} + {{/if}} + {{/if}} + {{#if sanCheck.failed}} + {{#unless state.involuntaryActionPerformed}} +
              + +
              + {{/unless}} + {{/if}} - {{#if state.sanLossRolled}} - {{#unless state.sanLossApplied}} -
              - -
              - {{/unless}} - {{/if}} + {{#if state.sanLossRolled}} + {{#unless state.sanLossApplied}} +
              + +
              + {{/unless}} + {{/if}} - {{#if actor.isInABoutOfMadness}} -
              {{ localize 'CoC7.BoutActive'}}
              - {{/if}} + {{#if actor.hasTempoInsane}} +
              {{ localize 'CoC7.BoutActive'}}
              + {{/if}} - {{#if creature}} - {{#if state.insanity}} - {{#if sanLoss}} - {{#unless state.cthulhuMythosAwarded}} -
              - {{#if firstEncounter}} - - {{else}} - - {{/if}} - -
              - {{/unless}} - {{/if}} - {{/if}} + {{#if creature}} + {{#if state.insanity}} + {{#if sanLoss}} + {{#unless state.cthulhuMythosAwarded}} +
              + {{#if firstEncounter}} + + {{else}} + + {{/if}} + +
              + {{/unless}} + {{/if}} + {{/if}} - {{#if creatureEncountered}}
              Creature encountered
              {{/if}} - {{#if creatureHasSpecie}}{{#if creatureSpecieEncountered}}
              Specie encountered
              {{/if}}{{/if}} -
              {{ localize 'CoC7.AlreadyLost'}}: {{sanLostToThisCreature}}
              -
              {{ localize 'CoC7.CreatureMaxLoss'}}: {{creature.sanLossMax}}
              -
              {{ localize 'CoC7.MaxLossToCreature'}}: {{maxSanLossToThisCreature}}
              + {{#if creatureEncountered}}
              Creature encountered
              {{/if}} + {{#if creatureHasSpecie}}{{#if creatureSpecieEncountered}}
              Specie encountered
              {{/if}}{{/if}} +
              {{ localize 'CoC7.AlreadyLost'}}: {{sanLostToThisCreature}}
              +
              {{ localize 'CoC7.CreatureMaxLoss'}}: {{creature.sanLossMax}}
              +
              {{ localize 'CoC7.MaxLossToCreature'}}: {{maxSanLossToThisCreature}}
              - {{#unless state.keepCreatureSanData}} -
              + {{#unless state.keepCreatureSanData}} +
              - {{#if creatureEncountered}} - - {{/if}} - {{#if creatureHasSpecie}} - {{#if creatureSpecieEncountered}} - - {{/if}} - {{/if}} - -
              - {{/unless}} + {{#if creatureEncountered}} + + {{/if}} + {{#if creatureHasSpecie}} + {{#if creatureSpecieEncountered}} + + {{/if}} + {{/if}} + +
              + {{/unless}} - {{else}} -
              {{localize 'CoC7.MaxSanloss'}}: {{maxSanLoss}}
              - {{/if}} + {{else}} +
              {{localize 'CoC7.MaxSanloss'}}: {{maxSanLoss}}
              + {{/if}} - {{#if mythosGain}} -
              {{localize 'CoC7.MythosGain'}}: {{mythosGain}}%
              - {{/if}} + {{#if mythosGain}} +
              {{localize 'CoC7.MythosGain'}}: {{mythosGain}}%
              + {{/if}} - {{#if state.finish}} -
              {{localize 'CoC7.CardResolved'}}
              - {{/if}} -
              -
              + {{#if state.finish}} +
              {{localize 'CoC7.CardResolved'}}
              + {{/if}} +
              +
              \ No newline at end of file From a44d067e879d6d4eda5b5a0e1445f29367120947 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 9 Jan 2022 22:06:36 +0000 Subject: [PATCH 385/726] Updated translations list --- .github/TRANSLATIONS.md | 46 ++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 6f2af7b9..3b91e5a9 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,22 +2,24 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **es**, **sv** - The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | fr | ja | ko | pl | pt-BR | zh-TW | -| :------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **6** | **2** | **2** | **9** | **8** | **2** | **2** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| Key | de | es | fr | ja | ko | pl | pt-BR | sv | zh-TW | +| :---------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **10** | **4** | **6** | **6** | **13** | **12** | **6** | **4** | **6** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ##### CoC7.Copied @@ -31,6 +33,22 @@ The following translations have been abandoned **cn**, **cs**, [are you able to ` "CoC7.German": "German",` +##### CoC7.Migrate.TriggerButton + +` "CoC7.Migrate.TriggerButton": "Trigger Data Migration",` + +##### CoC7.Migrate.TriggerContents + +` "CoC7.Migrate.TriggerContents": "

              Turn on data migration and restart

              ",` + +##### CoC7.Migrate.TriggerRestart + +` "CoC7.Migrate.TriggerRestart": "Save and restart",` + +##### CoC7.Migrate.TriggerTitle + +` "CoC7.Migrate.TriggerTitle": "Trigger Data Migration",` + ##### CoC7.NotEnoughMagicPoints ` "CoC7.NotEnoughMagicPoints": "{spell} costs {originalMagicPoints} Magic Points, but you only have {actorMagicPoints}. Would you like to take the remaining {convertedHitPoints} from your Hit Points? You will take {convertedHitPoints} damage if you proceed.",` From 7c2492d1e4a9be393b82ac5cdb4a09bd35e74b65 Mon Sep 17 00:00:00 2001 From: snap01 Date: Sun, 9 Jan 2022 22:06:37 +0000 Subject: [PATCH 386/726] [create-pull-request] automated change --- .github/ABANDONED.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index a9acd4cf..8900c402 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -295,6 +295,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Migrate.ButtonUpdate": "Update", "CoC7.Migrate.ButtonSkip": "Skip", "CoC7.Migrate.ButtonOkay": "Okay", +"CoC7.Migrate.TriggerButton": "Trigger Data Migration", +"CoC7.Migrate.TriggerTitle": "Trigger Data Migration", +"CoC7.Migrate.TriggerContents": "

              Turn on data migration and restart

              ", +"CoC7.Migrate.TriggerRestart": "Save and restart", "CoC7.Maximize": "Maximize", "CoC7.Summarize": "Summarize", "CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you", @@ -510,6 +514,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Migrate.ButtonUpdate": "Update", "CoC7.Migrate.ButtonSkip": "Skip", "CoC7.Migrate.ButtonOkay": "Okay", +"CoC7.Migrate.TriggerButton": "Trigger Data Migration", +"CoC7.Migrate.TriggerTitle": "Trigger Data Migration", +"CoC7.Migrate.TriggerContents": "

              Turn on data migration and restart

              ", +"CoC7.Migrate.TriggerRestart": "Save and restart", "CoC7.Maximize": "Maximize", "CoC7.Summarize": "Summarize", "CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you", From b9aa7ea06eedd9c4d1f87980b955a3a73af33753 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 9 Jan 2022 22:16:38 +0000 Subject: [PATCH 387/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index b2ee077f..e983875a 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -2,7 +2,12 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. +- Updated system for supporting conditions and allow activating conditions from FoundryVTT combat tracker and effects menu +- Update to rest function to prevent adding more than max hp and mp for chat message +- Update to NPC sheet to use same icons for dead, indefInsane, prone, tempoInsane, and unconscious as PCs +- New Korean localization, thanks to @Mero-Pe - Update to Spanish localization, thanks to @lozalojo +- Update to Swedish localization, thanks to @Rangertheman ## Version 0.7.3: From 0fc72a4e8534a8f437c0fb9d1cbdff83c621ea12 Mon Sep 17 00:00:00 2001 From: Grischa Brockhaus Date: Thu, 13 Jan 2022 16:43:24 +0100 Subject: [PATCH 388/726] Added German entry for "Okkult". As this entry is used to find the ability to raise while reading okkult books, it has to be the same as the German ability "Okkultismus". --- lang/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/de.json b/lang/de.json index 763be9cb..c0baafdc 100644 --- a/lang/de.json +++ b/lang/de.json @@ -559,7 +559,7 @@ "CoC7.Mythos": "Mythos", "CoC7.MythosRating": "Mythoswert", "CoC7.NotOwned": "Der Gegenstand muss sich im Besitz eines Spielers befinden, damit diese Aktion ausgeführt werden kann.", - "CoC7.Occult": "Okkult", + "CoC7.Occult": "Okkultismus", "CoC7.Points": "Punkt(e)", "CoC7.Progress": "Fortschritt", "CoC7.RedoFullStudy": "Eingehendes Studium wiederholen", From 1ff74959c744a34a2d3b3f37a1a027c5c71f20fa Mon Sep 17 00:00:00 2001 From: HavlockV Date: Thu, 13 Jan 2022 22:30:21 +0300 Subject: [PATCH 389/726] header redisign --- module/items/chase/sheet.js | 30 +- styles/sheets/chase.less | 27 + templates/chat/cards/chase-obstacle.html | 2 +- templates/items/chase.html | 782 ++++++++++++----------- 4 files changed, 440 insertions(+), 401 deletions(-) diff --git a/module/items/chase/sheet.js b/module/items/chase/sheet.js index 7d3aa612..ccfbf42e 100644 --- a/module/items/chase/sheet.js +++ b/module/items/chase/sheet.js @@ -203,7 +203,7 @@ export class CoC7ChaseSheet extends ItemSheet { html.find('.name-container').click(this._onLocationClick.bind(this)) html.find('.obstacle-type').click(this._onObstacleTypeClick.bind(this)) - html.find('.obstacle-toggle').click(this._onObstacleToggleClick.bind(this)) + // html.find('.obstacle-toggle').click(this._onObstacleToggleClick.bind(this)) html.find('.toggle').click(this._onToggle.bind(this)) html .find('.participant-control') @@ -498,20 +498,20 @@ export class CoC7ChaseSheet extends ItemSheet { } } - async _onObstacleToggleClick (event) { - const target = event.currentTarget - const locationElement = target.closest('.obstacle') - const uuid = locationElement.dataset.uuid - const locations = duplicate(this.item.data.data.locations.list) - const locationIndex = this.findIndex(locations, uuid) - locations[locationIndex].obstacle = !locations[locationIndex].obstacle - if (!locations[locationIndex].obstacleDetails) { - locations[locationIndex].obstacleDetails = { - barrier: true - } - } - await this.item.updateLocationsList(locations) - } + // async _onObstacleToggleClick (event) { + // const target = event.currentTarget + // const locationElement = target.closest('.obstacle') + // const uuid = locationElement.dataset.uuid + // const locations = duplicate(this.item.data.data.locations.list) + // const locationIndex = this.findIndex(locations, uuid) + // locations[locationIndex].obstacle = !locations[locationIndex].obstacle + // if (!locations[locationIndex].obstacleDetails) { + // locations[locationIndex].obstacleDetails = { + // barrier: true + // } + // } + // await this.item.updateLocationsList(locations) + // } async _onObstacleTypeClick (event) { const target = event.currentTarget diff --git a/styles/sheets/chase.less b/styles/sheets/chase.less index dc68c6b9..0f70b11c 100644 --- a/styles/sheets/chase.less +++ b/styles/sheets/chase.less @@ -6,6 +6,30 @@ .form-group { flex-wrap: nowrap; height: 19.5px; + + .icon { //duplicate of chase-card + font-size: 1rem; + line-height: 1.25rem; + padding: 1px 6px; + display: inline; + flex: 0; + + &.bigger { + padding: 1px 4px; + font-size: 1.4rem; + } + + &.switched-off { + display: inline; + } + &.switched-on { + color: red; + text-shadow: 0 0 8px red; + border: none; + background: none; + box-shadow: none; + } + } } .flex-auto { @@ -41,6 +65,9 @@ height: auto; font-size: 0.8rem; } + .icon{ + font-size: 1.25rem; + } } .location-name { flex: 0 0 auto; diff --git a/templates/chat/cards/chase-obstacle.html b/templates/chat/cards/chase-obstacle.html index b723c5a0..eb184090 100644 --- a/templates/chat/cards/chase-obstacle.html +++ b/templates/chat/cards/chase-obstacle.html @@ -237,7 +237,7 @@ {{/if}}
              - +
              diff --git a/templates/items/chase.html b/templates/items/chase.html index 1b630320..d12af7a6 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -1,410 +1,422 @@
              -
              -
              - {{#unless started}} -
              - - -
              +
              +
              + {{#unless started}} +
              + + +
              + {{/unless}} +
              + {{#if activeLocation}} + + {{#each item.allSkillsAndCharacteristics as |o|}} + + {{/each}} + + + {{#each item.activeActorSkillsAndCharacteristics as |o|}} + + {{/each}} + +
              + +
              +
              +
              + {{#unless activeLocation.first}} +
              +
              barrier
              +
              hazard
              +
              + {{#if activeLocation.obstacle}} +
              + +
              +
              + + + + +
              +
              +
              {{ localize "CoC7.Damage"}}
              + {{#if activeLocation.obstacleDetails.hasDamage}} + + {{/if}} +
              +
              + {{#if activeLocation.obstacleDetails.barrier}} +
              {{ localize "CoC7.HitPoints"}}
              + {{#if activeLocation.obstacleDetails.hasHitPoints}} + + {{/if}} + {{else}} +
              {{ localize "CoC7.ActionCost"}}
              + {{#if activeLocation.obstacleDetails.hasActionCost}} + + {{/if}} + {{/if}} +
              +
              +
              + + + + {{#if activeLocation.obstacleDetails.hasDamage}} + + {{/if}} +
              + {{#if activeLocation.obstacleDetails.barrier}} +
              + + + + {{#if activeLocation.obstacleDetails.hasHitPoints}} + + {{/if}} +
              + {{/if}} +
              + {{/if}} {{/unless}} - -
              - - {{#if activeLocation}} - - {{#each item.allSkillsAndCharacteristics as |o|}} - - {{/each}} - - - {{#each item.activeActorSkillsAndCharacteristics as |o|}} - - {{/each}} - +
              +
              + {{#unless activeLocation.last}} +
              +
              barrier
              +
              hazard
              +
              + {{#if nextLocation.obstacle}} +
              + +
              - + + + +
              -
              -
              - {{#unless activeLocation.first}} -
              -
              {{ localize "CoC7.Obstacle"}}
              -
              - {{/unless}} - {{#if activeLocation.obstacle}} -
              -
              barrier
              -
              hazard
              -
              -
              - -
              -
              - - - - -
              -
              -
              {{ localize "CoC7.Damage"}}
              - {{#if activeLocation.obstacleDetails.hasDamage}} - - {{/if}} -
              -
              - {{#if activeLocation.obstacleDetails.barrier}} -
              {{ localize "CoC7.HitPoints"}}
              - {{#if activeLocation.obstacleDetails.hasHitPoints}} - - {{/if}} - {{else}} -
              {{ localize "CoC7.ActionCost"}}
              - {{#if activeLocation.obstacleDetails.hasActionCost}} - - {{/if}} - {{/if}} -
              - {{/if}} -
              -
              - {{#unless activeLocation.last}} -
              -
              {{ localize "CoC7.Obstacle"}}
              -
              - {{/unless}} - {{#if nextLocation.obstacle}} -
              -
              barrier
              -
              hazard
              -
              -
              - -
              -
              - - - - -
              -
              -
              {{ localize "CoC7.Damage"}}
              - {{#if nextLocation.obstacleDetails.hasDamage}} - - {{/if}} -
              -
              - {{#if nextLocation.obstacleDetails.barrier}} -
              {{ localize "CoC7.HitPoints"}}
              - {{#if nextLocation.obstacleDetails.hasHitPoints}} - - {{/if}} - {{else}} -
              {{ localize "CoC7.ActionCost"}}
              - {{#if nextLocation.obstacleDetails.hasActionCost}} - - {{/if}} - {{/if}} -
              - {{/if}} -
              +
              +
              {{ localize "CoC7.Damage"}}
              + {{#if nextLocation.obstacleDetails.hasDamage}} + + {{/if}}
              - {{/if}} -
              +
              + {{#if nextLocation.obstacleDetails.barrier}} +
              {{ localize "CoC7.HitPoints"}}
              + {{#if nextLocation.obstacleDetails.hasHitPoints}} + + {{/if}} + {{else}} +
              {{ localize "CoC7.ActionCost"}}
              + {{#if nextLocation.obstacleDetails.hasActionCost}} + + {{/if}} + {{/if}} +
              + {{/if}} + {{/unless}} +
              +
              + {{/if}} +
              -
              +
              - + -
              -
              - {{#if locations}} +
              +
              + {{#if locations}} - {{#if started}} -
              - {{#each item.participantsByInitiative as |p i|}} -
              -
              -
              {{p.name}}
              -
              - - - -
              -
              -
              -
              - -
              -
              -
              INIT: {{p.initiative}}
              -
              ADJ. MOV: {{p.adjustedMov}}
              -
              HP: -
              -
              -
              -
              - {{#each movementActionArray as |actionClass|}} - - {{/each}} -
              -
              - - - - - - -
              - - - - - {{#unless p.hasNoMvtActions}} -
              - - - - - {{#if p.canAssist}} - - {{/if}} - {{#if p.canBeCautious}} - - - {{/if}} - {{/unless}} -
              -
              - {{/each}} + {{#if started}} +
              + {{#each item.participantsByInitiative as |p i|}} +
              +
              +
              {{p.name}}
              +
              + + + +
              +
              +
              +
              + +
              +
              +
              INIT: {{p.initiative}}
              +
              ADJ. MOV: {{p.adjustedMov}}
              +
              HP:
              - {{/if}} +
              +
              +
              + {{#each movementActionArray as |actionClass|}} + + {{/each}} +
              +
              + + + + + + +
              + + + + + {{#unless p.hasNoMvtActions}} +
              + + + + + {{#if p.canAssist}} + + {{/if}} + {{#if p.canBeCautious}} + + + {{/if}} + {{/unless}} +
              +
              + {{/each}} +
              + {{/if}} -
              - {{#each locations as |location i|}} -
              -
              - {{#unless location.first}} - {{#if location.obstacle}} -
              - {{/if}} - {{/unless}} -
              - {{#each location.participants as |p|}} - {{#if p}} -
              - -
              - {{/if}} - {{/each}} -
              -
              -
              - {{#unless location.first}} - {{#if location.obstacle}} -
              -
              - {{#if location.obstacleDetails.barrier}} - - {{else}} - - {{/if}} -
              -
              - {{/if}} - {{/unless}} - -
              - {{#if location.first}} -
              - {{else}} -
              - {{/if}} +
              + {{#each locations as |location i|}} +
              +
              + {{#unless location.first}} + {{#if location.obstacle}} +
              + {{/if}} + {{/unless}} +
              + {{#each location.participants as |p|}} + {{#if p}} +
              + +
              + {{/if}} + {{/each}} +
              +
              +
              + {{#unless location.first}} + {{#if location.obstacle}} +
              +
              + {{#if location.obstacleDetails.barrier}} + + {{else}} + + {{/if}} +
              +
              + {{/if}} + {{/unless}} + +
              + {{#if location.first}} +
              + {{else}} +
              + {{/if}} -
              {{location.name}}
              +
              {{location.name}}
              - {{#if location.last}} -
              - {{else}} -
              - {{/if}} -
              + {{#if location.last}} +
              + {{else}} +
              + {{/if}} +
              -
              -
              - {{/each}} -
              - {{else}} -
              -
              - - -
              {{localize 'CoC7.Initialize'}}
              -
              -
              - {{/if}} - +
              --> -
              - {{#unless started}} - - - -
              - - -
              -
              - - -
              - {{/unless}} +
              + {{#unless started}} + + + +
              + + +
              +
              + + +
              + {{/unless}} - {{#if locations}} - {{#if started}} -
              {{localize 'CoC7.Restart'}}
              - {{else}} -
              {{localize 'CoC7.Reset'}}
              -
              {{localize 'CoC7.cut2chase'}}
              - {{/if}} - {{/if}} -
              + {{#if locations}} + {{#if started}} +
              {{localize 'CoC7.Restart'}}
              + {{else}} +
              {{localize 'CoC7.Reset'}}
              +
              {{localize 'CoC7.cut2chase'}}
              + {{/if}} + {{/if}} +
              +
              +
              +
              +
              + {{#each participants as |p i|}} +
              +
              + {{#if p.isChaser}} + + {{else}} + + {{/if}} +
              +
              + +
              +
              +
              + {{#if p.isActor}} + {{p.name}} + {{else}} + + {{/if}} +
              +
              + +
              +
              + +
              +
              + + {{#each p.speedCheck.options as |o|}} + + {{/each}} + + +
              +
              + {{#if p.speedCheck.refSet}} + {{p.speedCheck.score}} + {{else}} + + {{/if}} +
              +
              + {{#if p.speedCheck.rolled}} + {{{p.speedCheck.inlineRoll}}} + {{else}} + + {{/if}} +
              +
              + {{#if p.speedCheck.rolled}} + {{#if p.speedCheck.hasModifier}} + + {{else}} + + {{/if}} + {{/if}} +
              +
              + {{p.adjustedMov}} +
              +
              + {{#if p.speedCheck.rolled}} + + {{else}} + + {{/if}} +
              +
              + {{p.data.movementAction}} +
              -
              -
              -
              - {{#each participants as |p i|}} -
              -
              - {{#if p.isChaser}} - - {{else}} - - {{/if}} -
              -
              - -
              -
              -
              - {{#if p.isActor}} - {{p.name}} - {{else}} - - {{/if}} -
              -
              - -
              -
              - -
              -
              - - {{#each p.speedCheck.options as |o|}} - - {{/each}} - - -
              -
              - {{#if p.speedCheck.refSet}} - {{p.speedCheck.score}} - {{else}} - - {{/if}} -
              -
              - {{#if p.speedCheck.rolled}} - {{{p.speedCheck.inlineRoll}}} - {{else}} - - {{/if}} -
              -
              - {{#if p.speedCheck.rolled}} - {{#if p.speedCheck.hasModifier}} - - {{else}} - - {{/if}} - {{/if}} -
              -
              - {{p.adjustedMov}} -
              -
              - {{#if p.speedCheck.rolled}} - - {{else}} - - {{/if}} -
              -
              - {{p.data.movementAction}} -
              -
              - {{#if p.hasDriver}} -
              -
              -
              - -
              -
              {{p.driver.name}}
              -
              - -
              -
              - {{/if}} - {{/each}} -
              -
              -
              - -
              -
              + {{#if p.hasDriver}} +
              +
              +
              + +
              +
              {{p.driver.name}}
              +
              +
              -
              - -
              -
              Preys Min : {{preysMinMov}}
              -
              Preys Max : {{preysMaxMov}}
              -
              Chasers Min : {{chasersMinMov}}
              -
              Chasers Max : {{chasersMaxMov}}
              -
              - {{#if isKeeper}} -
              - {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}}
              {{/if}} -
              -
              + {{/each}} +
              +
              +
              + +
              +
              +
              +
              + +
              +
              Preys Min : {{preysMinMov}}
              +
              Preys Max : {{preysMaxMov}}
              +
              Chasers Min : {{chasersMinMov}}
              +
              Chasers Max : {{chasersMaxMov}}
              +
              + {{#if isKeeper}} +
              + {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} +
              + {{/if}} +

    + From c4fb8652d95a899aa11bfdaa43ad342dca06ac78 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 13 Jan 2022 20:47:13 +0000 Subject: [PATCH 390/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index e983875a..a33019be 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -6,6 +6,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV and @sn - Update to rest function to prevent adding more than max hp and mp for chat message - Update to NPC sheet to use same icons for dead, indefInsane, prone, tempoInsane, and unconscious as PCs - New Korean localization, thanks to @Mero-Pe +- Update to German localization, thanks to @brockhaus - Update to Spanish localization, thanks to @lozalojo - Update to Swedish localization, thanks to @Rangertheman From 25a8e0fc5c0d16c1c1cc427b916855a07cb2aeea Mon Sep 17 00:00:00 2001 From: Grischa Brockhaus Date: Fri, 14 Jan 2022 16:02:04 +0100 Subject: [PATCH 391/726] Spell learning from book * Update template.json: spell.learned flag * Spells not learned yet won't open description (else actors can spell before learning) * Spells can't be deleted from books when not keeper * Learning success will update spell.learned = true * Learning success will add that spell to the actors items --- lang/de.json | 2 ++ lang/en.json | 2 ++ module/items/book/data.js | 45 +++++++++++++++++++++++++++++----- template.json | 1 + templates/items/book/main.html | 6 +++++ 5 files changed, 50 insertions(+), 6 deletions(-) diff --git a/lang/de.json b/lang/de.json index c0baafdc..406643d4 100644 --- a/lang/de.json +++ b/lang/de.json @@ -540,6 +540,8 @@ "CoC7.GateSpell": "Reise- und Transportzauber", "CoC7.CombatSpell": "Kampfzauber", "CoC7.SpellType": "Zaubertyp", + "CoC7.SpellSuccessfullyLearned": "Zauber wurde erfolgreich gelernt!", + "CoC7.SpellAlreadyLearned": "Zauber mit diesem Namen wurde bereits gelernt.", "CoC7.BookHasNothingMoreToTeach": "{book} kann nichts mehr lehren. Cthulhu Mythos Fertigkeit von {actor} ist größer als der Mythoswert.", "CoC7.BookType": "Buch Typ", diff --git a/lang/en.json b/lang/en.json index 80d78495..82af52ad 100644 --- a/lang/en.json +++ b/lang/en.json @@ -541,6 +541,8 @@ "CoC7.GateSpell": "Gate", "CoC7.CombatSpell": "Combat", "CoC7.SpellType": "Spell Type", + "CoC7.SpellSuccessfullyLearned": "Spell was learned successfully!", + "CoC7.SpellAlreadyLearned": "Spell of that name was already learned.", "CoC7.BookHasNothingMoreToTeach": "{book} has nothing more to teach. Cthulhu Mythos skill of {actor} is greater than this Mythos Rating.", "CoC7.BookType": "Book Type", diff --git a/module/items/book/data.js b/module/items/book/data.js index f3e5e7a2..95ff88c5 100644 --- a/module/items/book/data.js +++ b/module/items/book/data.js @@ -48,7 +48,9 @@ export class CoC7Book extends CoC7Item { const data = this.data.data.spells[index] const parent = this.actor ? this.actor : null const spell = new CoC7Spell(data, { parent, bookId: this.id }) - return await spell.sheet.render(true) + if (spell.data.data.learned) { + return await spell.sheet.render(true) + } } /** @@ -267,10 +269,39 @@ export class CoC7Book extends CoC7Item { return await this.update({ 'data.initialReading': true }) } - async grantSpellLearning () { - return ui.notifications.warn( - 'Automation of learning spells from books is not currently supported and will be added in future updates.' - ) + /** + * + * @param {Item} spelllearned The spell that was learned successfully from book + * @returns + */ + async grantSpellLearning (spelllearned) { + for (const spell of this.data.data.spells) { + if (spell._id === spelllearned._id) { + spell.data.learned = true; + // Does the actor already has a spell of that name? Then do not add the spell + const existingSpell = await this.actor.items.find( + item => + item.data.type === 'spell' && item.data.name === spelllearned.name + ) + if (!existingSpell) { + spelllearned.data.learned = true + } + else { + ui.notifications.warn(game.i18n.localize('CoC7.SpellAlreadyLearned')) + } + break + } + } + // Save spell list of book + await this.update({ 'data.spells': this.data.data.spells }) + // Add learned spell to actor + if (spelllearned.data.learned) { + ui.notifications.info(game.i18n.localize('CoC7.SpellSuccessfullyLearned')) + const actorSpell = await this.actor.createEmbeddedDocuments('Item', [ + duplicate(spelllearned) + ]) + } + return; } /** @@ -434,6 +465,7 @@ export class CoC7Book extends CoC7Item { spell: spell.name }) check.context = 'SPELL_LEARNING' + check.spell = spell await check.rollCharacteristic('int') await check.toMessage() } @@ -442,12 +474,13 @@ export class CoC7Book extends CoC7Item { /** Listen to changes on the check card */ async updateRoll (roll) { const check = CoC7Check.fromRollString(roll) + /** Will know if user push the roll or spend Luck */ if (check.passed) { if (check.context === 'INITIAL_READING') { return await this.grantInitialReading() } else if (check.context === 'SPELL_LEARNING') { - return await this.grantSpellLearning() + return await this.grantSpellLearning(check.spell) } } } diff --git a/template.json b/template.json index ab81e9b4..7c8e2a08 100644 --- a/template.json +++ b/template.json @@ -550,6 +550,7 @@ }, "effects": [], "source": "", + "learned": false, "type": { "bind": false, "call": false, diff --git a/templates/items/book/main.html b/templates/items/book/main.html index 488ea2cc..6df934a5 100644 --- a/templates/items/book/main.html +++ b/templates/items/book/main.html @@ -170,12 +170,18 @@
    + {{#if (or isKeeper spell.data.learned)}} + {{/if}} + {{#if (isKeeper)}} + {{/if}}
    + {{#if (not spell.data.learned)}}
    + {{/if}} {{/each}} From 5f688668b8e688bd5ac4a473c49610dbbedea626 Mon Sep 17 00:00:00 2001 From: Grischa Brockhaus Date: Fri, 14 Jan 2022 18:40:40 +0100 Subject: [PATCH 392/726] Spell learning notifications naming spell name now. --- lang/de.json | 4 ++-- lang/en.json | 4 ++-- module/items/book/data.js | 13 +++++++++++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/lang/de.json b/lang/de.json index 406643d4..89325c3f 100644 --- a/lang/de.json +++ b/lang/de.json @@ -540,8 +540,8 @@ "CoC7.GateSpell": "Reise- und Transportzauber", "CoC7.CombatSpell": "Kampfzauber", "CoC7.SpellType": "Zaubertyp", - "CoC7.SpellSuccessfullyLearned": "Zauber wurde erfolgreich gelernt!", - "CoC7.SpellAlreadyLearned": "Zauber mit diesem Namen wurde bereits gelernt.", + "CoC7.SpellSuccessfullyLearned": "Zauber '{spell}' wurde erfolgreich gelernt!", + "CoC7.SpellAlreadyLearned": "Zauber mit dem Namen '{spell}' wurde bereits gelernt.", "CoC7.BookHasNothingMoreToTeach": "{book} kann nichts mehr lehren. Cthulhu Mythos Fertigkeit von {actor} ist größer als der Mythoswert.", "CoC7.BookType": "Buch Typ", diff --git a/lang/en.json b/lang/en.json index 82af52ad..39c8b576 100644 --- a/lang/en.json +++ b/lang/en.json @@ -541,8 +541,8 @@ "CoC7.GateSpell": "Gate", "CoC7.CombatSpell": "Combat", "CoC7.SpellType": "Spell Type", - "CoC7.SpellSuccessfullyLearned": "Spell was learned successfully!", - "CoC7.SpellAlreadyLearned": "Spell of that name was already learned.", + "CoC7.SpellSuccessfullyLearned": "Spell '{spell}' was learned successfully!", + "CoC7.SpellAlreadyLearned": "Spell named ('{spell}') was already learned.", "CoC7.BookHasNothingMoreToTeach": "{book} has nothing more to teach. Cthulhu Mythos skill of {actor} is greater than this Mythos Rating.", "CoC7.BookType": "Book Type", diff --git a/module/items/book/data.js b/module/items/book/data.js index 95ff88c5..8eade046 100644 --- a/module/items/book/data.js +++ b/module/items/book/data.js @@ -287,7 +287,11 @@ export class CoC7Book extends CoC7Item { spelllearned.data.learned = true } else { - ui.notifications.warn(game.i18n.localize('CoC7.SpellAlreadyLearned')) + ui.notifications.warn( + game.i18n.format('CoC7.SpellAlreadyLearned', { + spell: spelllearned.name, + book: this.name + }) ) } break } @@ -296,7 +300,12 @@ export class CoC7Book extends CoC7Item { await this.update({ 'data.spells': this.data.data.spells }) // Add learned spell to actor if (spelllearned.data.learned) { - ui.notifications.info(game.i18n.localize('CoC7.SpellSuccessfullyLearned')) + ui.notifications.info( + game.i18n.format('CoC7.SpellSuccessfullyLearned', { + spell: spelllearned.name, + book: this.name + }) + ) const actorSpell = await this.actor.createEmbeddedDocuments('Item', [ duplicate(spelllearned) ]) From 9c4d900ce53d3fe294e7887e481eb1ab1ce7cac7 Mon Sep 17 00:00:00 2001 From: Rangertheman <81484515+Rangertheman@users.noreply.github.com> Date: Fri, 14 Jan 2022 21:48:00 +0100 Subject: [PATCH 393/726] Update sv.json --- lang/sv.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lang/sv.json b/lang/sv.json index 0d2a237e..18bebe74 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -749,6 +749,11 @@ "CoC7.Migrate.ButtonSkip": "Hoppa över", "CoC7.Migrate.ButtonOkay": "Ok", + "CoC7.Migrate.TriggerButton": "Starta datamigrering", + "CoC7.Migrate.TriggerTitle": "Starta datamigrering", + "CoC7.Migrate.TriggerContents": "

    Slå igång datamigrering och starta om

    ", + "CoC7.Migrate.TriggerRestart": "Spara och starta om", + "CoC7.Maximize": "Maximera", "CoC7.Summarize": "Begränsad vy", From 0dfbcc892e719128a09937d7a12385ea212222e6 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 15 Jan 2022 15:39:58 +0000 Subject: [PATCH 394/726] Updated translations list --- .github/TRANSLATIONS.md | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 3b91e5a9..5de41c6d 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,24 +2,26 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! +The **sv** translation is currently up to date + The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | ja | ko | pl | pt-BR | sv | zh-TW | -| :---------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **10** | **4** | **6** | **6** | **13** | **12** | **6** | **4** | **6** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| Key | de | es | fr | ja | ko | pl | pt-BR | zh-TW | +| :---------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **10** | **4** | **6** | **6** | **13** | **12** | **6** | **6** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.Copied From 10f9c7426acfbd2208bf448619e0c818ef526e61 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 16 Jan 2022 12:13:15 +0000 Subject: [PATCH 395/726] Split Pulp Cthulhu rules into individual rules --- lang/en.json | 10 ++ module/coc7.js | 10 +- module/scripts/game-rules.js | 139 ++++++++++++++++++++++++++++ module/scripts/register-settings.js | 65 ++----------- templates/system/rule-settings.html | 68 ++++++++++++++ 5 files changed, 228 insertions(+), 64 deletions(-) create mode 100644 module/scripts/game-rules.js create mode 100644 templates/system/rule-settings.html diff --git a/lang/en.json b/lang/en.json index 80d78495..48a00ee8 100644 --- a/lang/en.json +++ b/lang/en.json @@ -745,6 +745,16 @@ "CoC7.Migrate.TriggerContents": "

    Turn on data migration and restart

    ", "CoC7.Migrate.TriggerRestart": "Save and restart", + "CoC7.Settings.CoreRules.Title": "Core Rule Book Optional Rules", + "CoC7.Settings.Rules.Name": "Variant Rules", + "CoC7.Settings.Rules.Label": "Configure Variant Rules", + "CoC7.Settings.Rules.Hint": "Configure variant rules like Pulp Cthulhu.", + "CoC7.Settings.HouseRules.Title": "Common House Rules", + "CoC7.Settings.PulpRules.DoubleMaxHealth.Name": "Double maximum health", + "CoC7.Settings.PulpRules.DoubleMaxHealth.Hint": "Maximum health is (CON + SIZ) / 5", + "CoC7.Settings.PulpRules.DevelopmentRollLuck.Name": "Increase Development Rolls For Luck", + "CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint": "Increase luck for failed and successful luck development roll", + "CoC7.Maximize": "Maximize", "CoC7.Summarize": "Summarize", diff --git a/module/coc7.js b/module/coc7.js index fc2a9793..5e352e6c 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -29,15 +29,7 @@ import { initECC } from './common/chatcardlib/src/chatcardlib.js' Hooks.on('renderSettingsConfig', (app, html, options) => { const systemTab = $(app.form).find('.tab[data-tab=system]') systemTab - .find('input[name=CoC7\\.pulpRules]') - .closest('div.form-group') - .before( - '

    ' + - game.i18n.localize('SETTINGS.TitleRules') + - '

    ' - ) - systemTab - .find('select[name=CoC7\\.initiativeRule]') + .find('select[name=CoC7\\.displayInitDices]') .closest('div.form-group') .before( '

    ' + diff --git a/module/scripts/game-rules.js b/module/scripts/game-rules.js new file mode 100644 index 00000000..a97ca948 --- /dev/null +++ b/module/scripts/game-rules.js @@ -0,0 +1,139 @@ +/* global CONFIG, FormApplication, game, mergeObject */ +const SETTINGS = { + // pulpRules: { + // name: 'SETTINGS.PulpRules', + // hint: 'SETTINGS.PulpRulesHint', + // scope: 'world', + // config: true, + // default: false, + // type: Boolean + // } + optionalDevelopmentRollForLuck: { + name: 'SETTINGS.developmentRollForLuck', + hint: 'SETTINGS.developmentRollForLuckHint', + scope: 'world', + config: false, + default: false, + type: Boolean + }, + optionalInitiativeRule: { + name: 'SETTINGS.InitiativeRule', + hint: 'SETTINGS.InitiativeRuleHint', + scope: 'world', + config: false, + default: 'basic', + type: String, + choices: { + basic: 'SETTINGS.InitiativeRuleBasic', + optional: 'SETTINGS.InitiativeRuleOptional' + }, + onChange: rule => _setInitiativeOptions(rule) + }, + pulpRuleDoubleMaxHealth: { + name: 'CoC7.Settings.PulpRules.DoubleMaxHealth.Name', + hint: 'CoC7.Settings.PulpRules.DoubleMaxHealth.Hint', + scope: 'world', + config: false, + default: false, + type: Boolean + }, + houseRulesOpposedRollTieBreaker: { + name: 'SETTINGS.OpposedRollTieBreaker', + hint: 'SETTINGS.OpposedRollTieBreakerHint', + scope: 'world', + config: false, + default: false, + type: Boolean + } +} + +function _setInitiativeOptions (rule) { + let decimals = 0 + switch (rule) { + case 'optional': + decimals = 2 + break + case 'basic': + decimals = 0 + break + } + CONFIG.Combat.initiative = { + formula: null, + decimals: decimals + } +} + +export class CoC7GameRuleSettings extends FormApplication { + static get defaultOptions () { + return mergeObject(super.defaultOptions, { + title: 'CoC7.Settings.Rules.Title', + id: 'rules-settings', + template: 'systems/CoC7/templates/system/rule-settings.html', + width: 550, + height: 'auto', + closeOnSubmit: true + }) + } + + getData () { + const options = {} + const pulpRules = { + true: false, + false: false + } + for (const [k, v] of Object.entries(SETTINGS)) { + options[k] = { + value: game.settings.get('CoC7', k), + setting: v + } + if (k.match(/^pulpRule/)) { + pulpRules[(options[k].value)] = true + } + } + options.pulpSelection = (pulpRules.true ? (pulpRules.false ? 'some' : 'all') : 'none') + return options + } + + static registerSettings () { + for (const [k, v] of Object.entries(SETTINGS)) { + game.settings.register('CoC7', k, v) + } + _setInitiativeOptions(game.settings.get('CoC7', 'houseRulesInitiativeRule')) + } + + activateListeners (html) { + super.activateListeners(html) + html.find('#pulpRulesSelect').on('change', (event) => this.onChangePulpSelect(event)) + html.find('input.pulpRulesSelect[type=checkbox]').on('click', (event) => this.onClickPulp(event)) + } + + onChangePulpSelect (event) { + const val = $(event.currentTarget).val() + if (val === 'none' || val === 'all') { + $('#rules-settings').find('input.pulpRulesSelect[type=checkbox]').each(function () { + const checkbox = $(this) + if (val === 'none') { + checkbox.prop('checked', false) + } else { + checkbox.prop('checked', true) + } + }) + } + } + + onClickPulp (event) { + const pulpRules = { + true: false, + false: false + } + $('#rules-settings').find('input.pulpRulesSelect[type=checkbox]').each(function () { + const checkbox = $(this) + if (checkbox.prop('checked')) { + pulpRules.true = true + } else { + pulpRules.false = true + } + }) + $('#pulpRulesSelect').val((pulpRules.true ? (pulpRules.false ? 'some' : 'all') : 'none')) + } +} diff --git a/module/scripts/register-settings.js b/module/scripts/register-settings.js index ab8f8011..ac2e467c 100644 --- a/module/scripts/register-settings.js +++ b/module/scripts/register-settings.js @@ -1,52 +1,24 @@ /* global CONFIG, game */ import { CoC7DecaderDie } from '../apps/decader-die.js' +import { CoC7GameRuleSettings } from './game-rules.js' export function registerSettings () { /** * Rules */ - game.settings.register('CoC7', 'pulpRules', { - name: 'SETTINGS.PulpRules', - hint: 'SETTINGS.PulpRulesHint', - scope: 'world', - config: true, - default: false, - type: Boolean - }) - game.settings.register('CoC7', 'developmentRollForLuck', { - name: 'SETTINGS.developmentRollForLuck', - hint: 'SETTINGS.developmentRollForLuckHint', - scope: 'world', - config: true, - default: false, - type: Boolean - }) - game.settings.register('CoC7', 'opposedRollTieBreaker', { - name: 'SETTINGS.OpposedRollTieBreaker', - hint: 'SETTINGS.OpposedRollTieBreakerHint', - scope: 'wolrd', - config: true, - default: false, - type: Boolean - }) + game.settings.registerMenu('CoC7', 'gameRules', { + name: 'CoC7.Settings.Rules.Name', + label: 'CoC7.Settings.Rules.Label', + hint: 'CoC7.Settings.Rules.Hint', + icon: 'fas fa-book', + type: CoC7GameRuleSettings, + restricted: true + }) + CoC7GameRuleSettings.registerSettings() /** * Initiative */ - /** Set the initiative rule */ - game.settings.register('CoC7', 'initiativeRule', { - name: 'SETTINGS.InitiativeRule', - hint: 'SETTINGS.InitiativeRuleHint', - scope: 'world', - config: true, - default: 'basic', - type: String, - choices: { - basic: 'SETTINGS.InitiativeRuleBasic', - optional: 'SETTINGS.InitiativeRuleOptional' - }, - onChange: rule => _setInitiativeOptions(rule) - }) /** Set displaying dices for init roll */ game.settings.register('CoC7', 'displayInitDices', { name: 'SETTINGS.displayInitDices', @@ -494,22 +466,5 @@ export function registerSettings () { decimals: 4 } CONFIG.debug.hooks = !!game.settings.get('CoC7', 'debugmode') - function _setInitiativeOptions (rule) { - let decimals = 0 - switch (rule) { - case 'optional': - decimals = 2 - break - case 'basic': - decimals = 0 - break - } - CONFIG.Combat.initiative = { - formula: null, - decimals: decimals - } - } - _setInitiativeOptions(game.settings.get('CoC7', 'initiativeRule')) - CONFIG.Dice.terms.t = CoC7DecaderDie } diff --git a/templates/system/rule-settings.html b/templates/system/rule-settings.html new file mode 100644 index 00000000..a31c33c0 --- /dev/null +++ b/templates/system/rule-settings.html @@ -0,0 +1,68 @@ +
    +

    {{localize 'CoC7.Settings.CoreRules.Title'}}

    +
    + +
    + +
    +

    {{localize 'SETTINGS.developmentRollForLuckHint'}}

    +
    +
    + +
    + +
    +

    {{localize 'SETTINGS.InitiativeRuleHint'}}

    +
    + +

    {{localize 'SETTINGS.PulpRules'}}

    +
    + +
    + +
    +

    {{localize 'SETTINGS.PulpRulesHint'}}

    +
    +
    + +
    + +
    +

    {{localize 'CoC7.Settings.PulpRules.DoubleMaxHealth.Hint'}}

    +
    +
    + +
    + +
    +

    {{localize 'CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint'}}

    +
    + +

    {{localize 'CoC7.Settings.HouseRules.Title'}}

    +
    + +
    + +
    +

    {{localize 'SETTINGS.OpposedRollTieBreakerHint'}}

    +
    +
    + + +
    +
    \ No newline at end of file From 653c70549939c0c842d6bf086bf960f2c756ed9c Mon Sep 17 00:00:00 2001 From: Stefano1975t <97825580+Stefano1975t@users.noreply.github.com> Date: Sun, 16 Jan 2022 16:00:07 +0100 Subject: [PATCH 396/726] Italian translation Italian translation: main it.json file and changes to the system.json file. --- lang/it.json | 883 +++++++++++++++++++++++++++++++++++++++++++++++++++ system.json | 5 + 2 files changed, 888 insertions(+) create mode 100644 lang/it.json diff --git a/lang/it.json b/lang/it.json new file mode 100644 index 00000000..193cf96d --- /dev/null +++ b/lang/it.json @@ -0,0 +1,883 @@ +{ + "CoC7.title": "Il Richiamo di Cthulhu 7h Edizione (Non ufficiale)", + + "CoC7.Entities.Character": "Personaggio", + "CoC7.Entities.Container": "Contenitore", + "CoC7.Entities.Creature": "Creatura", + "CoC7.Entities.Npc": "PNG", + "CoC7.Entities.Vehicle": "Veicolo", + + "CoC7.Entities.Archetype": "Archetipo", + "CoC7.Entities.Book": "Libro", + "CoC7.Entities.Chase": "Inseguimento", + "CoC7.Entities.Item": "Oggetto", + "CoC7.Entities.Occupation": "Professione", + "CoC7.Entities.Setup": "Configurazione", + "CoC7.Entities.Skill": "Abilità", + "CoC7.Entities.Spell": "Incantesimo", + "CoC7.Entities.Status": "Condizione", + "CoC7.Entities.Talent": "Talento", + "CoC7.Entities.Weapon": "Arma", + + "CHARAC.STR": "FOR", + "CHARAC.Strengh": "Forza", + "CHARAC.Strength": "Forza", + "CHARAC.CON": "COS", + "CHARAC.Constitution": "Costituzione", + "CHARAC.SIZ": "TAG", + "CHARAC.Size": "Taglia", + "CHARAC.DEX": "DES", + "CHARAC.Dexterity": "Destrezza", + "CHARAC.APP": "FAS", + "CHARAC.Appearance": "Fascino", + "CHARAC.INT": "INT", + "CHARAC.Intelligence": "Intelligenza", + "CHARAC.POW": "POT", + "CHARAC.Power": "Potere", + "CHARAC.EDU": "IST", + "CHARAC.Education": "Istruzione", + "CoC7.PlayerName": "Giocatore", + "CoC7.Name": "Nome", + "CoC7.Archetype": "Archetipo", + "CoC7.Occupation": "Professione", + "CoC7.Age": "Età", + "CoC7.Sex": "Sesso", + "CoC7.Residence": "Residente a", + "CoC7.Birthplace": "Nato a", + "CoC7.Organization": "Organizzazione", + "CoC7.HitPoints": "Punti Ferita", + "CoC7.HP": "PF", + "CoC7.MagicPoints": "Punti Magia", + "CoC7.MP": "PM", + "CoC7.SanityPoints": "Punti Sanità", + "CoC7.Sanity": "Sanità", + "CoC7.SAN": "SAN", + "CoC7.DailySanLoss": "Perdita San al giorno", + "CoC7.DailyLoss": "Al giorno", + "CoC7.Luck": "Fortuna", + "CoC7.Movement": "Movimento", + "CoC7.Mov": "Mov", + "CoC7.BonusDamage": "Bonus al Danno", + "CoC7.DB": "BD", + "CoC7.Build": "Struttura", + "CoC7.Skills": "Abilità", + "CoC7.Skill": "Abilità", + "CoC7.Combat": "Combattimento", + "CoC7.Possessions": "Attrezzatura & Contanti", + "CoC7.Background": "Trascorsi", + "CoC7.Notes": "Note", + "CoC7.DailySanIconOver": "Azzera", + "CoC7.Prone": "A terra", + "CoC7.Unconsious": "Svenuto", + "CoC7.CriticalWounds": "Ferita grave", + "CoC7.Dying": "Morente", + "CoC7.DyingCheck": "Tira per vedere se muori immediatamente", + "CoC7.Dead": "Morto", + "CoC7.Resist": "Resisti", + "CoC7.UnderlyingInsanity": "Follia latente", + "CoC7.TemporaryInsanity": "Follia temporanea", + "CoC7.IndefiniteInsanity": "Follia permanente", + "CoC7.NotInsane": "Nulla", + "CoC7.UnlockActor": "Sblocca Personaggio", + "CoC7.LockActor": "Blocca Personaggio", + "CoC7.NpcRollCharacteristics": "Tira per le Caratteristiche", + "CoC7.NpcAvarageCharacteristics": "Caratteristiche medie", + "CoC7.NpcCharacteristicsFormula": "Formula", + "CoC7.NpcCharacteristicsValues": "Valori", + "CoC7.language": "Lingua", + "CoC7.Author": "Autore", + "CoC7.Date": "Data", + "CoC7.Spells": "Incantesimi", + "CoC7.Spell": "Incantesimo", + "CoC7.Spells&Notes": "Incantesimi & Note", + "CoC7.Weapons": "Armi", + "CoC7.Effects": "Effetti", + "CoC7.Cost": "Costo", + "CoC7.Source": "Origine", + "CoC7.SpellDetails": "Dettagli dell'Incantesimo", + "CoC7.Details": "Dettagli", + "CoC7.Other": "Altro", + "CoC7.rounds": "turno(i)", + "CoC7.hours": "ora(e)", + "CoC7.weeks": "settimana(e)", + "CoC7.remove": "Rimuovi", + "CoC7.Any": "Uno", + "CoC7.All": "Tutto", + "CoC7.Success": "Successo", + "CoC7.CustomLabel": "Etichetta personalizzata", + "CoC7.SpecificLocations": "Luoghi specifici", + "CoC7.ArmourPlating": "Corazzatura", + "CoC7.Location": "Luogo", + "CoC7.Properties": "Proprietà", + "CoC7.Attributes": "Attributi", + "CoC7.Attribute": "Attributo", + "CoC7.Collapse": "Comprimi", + "CoC7.Expand": "Espandi", + "CoC7.Blind": "Al buio", + "CoC7.Label": "Etichetta", + "CoC7.Icon": "Icona", + "CoC7.Check": "Tiro", + "CoC7.ItemWeapon": "Oggetto (Arma)", + "CoC7.AttacksPerRound": "Attachi per turno", + + "CoC7.Cast": "Lanciare", + "CoC7.SanityCost": "Costo in Sanità", + "CoC7.PowerCost": "Costo in Potere", + "CoC7.HitPointsCost": "Costo in Punti Ferita", + "CoC7.MagicPointsCost": "Costo in Punti Magia", + "CoC7.OtherCosts": "Altri Costi", + "CoC7.CastingSpell": "Sta lanciando {spell}.", + "CoC7.NotEnoughMagicPoints": "{spell} costa {originalMagicPoints} Punti Magia, ma hai soltanto {actorMagicPoints}. Vorresti prendere i restanti {convertedHitPoints} dai tuoi Punti Ferita? Subirai {convertedHitPoints} danni se procedi.", + + "CoC7.CopyToClipboard": "Copia negli appunti", + "CoC7.WhisperToSelection": "Sussurra alle pedine selezionate", + "CoC7.WhisperTo": "Sussurra a", + "CoC7.SendToChat": "Invia nella chat", + + "CoC7.RegularSuccess": "Successo Normale", + "CoC7.HardSuccess": "Successo Arduo", + "CoC7.ExtremeSuccess": "Successo Estremo", + "CoC7.CriticalSuccess": "Successo Critico", + "CoC7.Fumble": "Fallimento Critico", + "CoC7.Failure": "Fallimento", + "CoC7.Malfunction": "{itemName} ha avuto un malfunzionamento", + + "CoC7.Dice": "Dadi", + "CoC7.DiceModifierBonus": "bonus", + "CoC7.DiceModifierPenalty": "penalità", + "CoC7.Modifiers": "Modificatori", + "CoC7.BonusDice": "Dadi Bonus", + "CoC7.UnitsDie": "1 unità di dado", + "CoC7.TensDie": "dado da 10", + "CoC7.TensDice": "dadi da 10", + "CoC7.SuccessRequired": "{successRequired} successo richiesto.", + "CoC7.Roll": "Tirare", + "CoC7.Pushing": "Forzare", + "CoC7.PushingSkill": ": forzare l'Abilità!", + "CoC7.PushSkill": "Forzare", + "CoC7.PushedRoll": "(tiro forzato)", + "CoC7.SpendLuck": "Devi spendere {luckNeededValue} Fortuna per passare", + "CoC7.LuckSpent": "{luckAmount} Fortuna spesa per passare", + "CoC7.LuckSpentAlt": "Fortuna spesa", + "CoC7.LuckError": "{actorName} non ha abbastanza Fortuna per passare il tiro", + "CoC7.check.AutoSuccess": "Successo automatico", + "CoC7.check.AutoFailure": "Fallimento automatico", + "CoC7.RevealCheck": "Rivela Tiro", + "CoC7.RevealSanLoss": "Rivela perdita SAN", + "CoC7.check.ForcePass": "Forza passare", + "CoC7.check.ForceFail": "Forza fallimento", + "CoC7.check.FlagForDevelopment": "Premia con Esperienza", + "CoC7.IncreaseSuccessLevel": "Aumenta successo", + "CoC7.check.DecreaseSuccessLevel": "Diminuisci successo", + "CoC7.RollSecretDice": "Il Custode ha tirato in privato alcuni dadi", + "CoC7.KeeperSentDecoy": "Tiro diversivo inviato ai giocatori", + "CoC7.FakeRoll": "Invia un tiro diversivo ai giocatori", + + "CoC7.ConstitutionCheck": "Tiro Costituzione", + + "CoC7.SanDataSelectionWindow": "Selezionare perdita di SAN", + "CoC7.BonusSelectionWindow": "Finestra di selezione Bonus", + "CoC7.BonusSelectionWindowNamed": "Selezionare il modificatore per il tiro {name}", + "CoC7.SkillDetailsWindow": "Finestra dei dettaglia dell'Abilità", + "CoC7.RegularDifficulty": "normale", + "CoC7.HardDifficulty": "arduo", + "CoC7.ExtremeDifficulty": "estremo", + "CoC7.CriticalDifficulty": "critico", + "CoC7.UnknownDifficulty": "sconosciuto", + "CoC7.RollDifficulty": "Difficoltà del Tiro", + "CoC7.RollThreshold": "Livello del Tiro", + "CoC7.FlatDiceModifier": "Modificatore fisso dei dadi", + "CoC7.FlatModifier": "Modificatore fisso", + "CoC7.RollDifficultyUnknown": "Al buio", + "CoC7.RollDifficultyRegular": "Normale", + "CoC7.RollDifficultyHard": "Arduo", + "CoC7.RollDifficultyExtreme": "Estremo", + "CoC7.RollDifficultyCritical": "Critico", + "CoC7.RollResult.LuckSpendText": "{luckAmount} Fortuna spesa, {successLevel} successo", + "CoC7.RollDice": "Tira !", + "CoC7.CreateLink": "Crea collegamento", + "CoC7.SuccesLevelHint": "{value} livello(i) di successo", + "CoC7.FailureLevelHint": "Fallito per {value} livello(i)", + "CoC7.CombinedRollCard": "Scheda Tiri combinati", + "CoC7.OpposedRollCard": "Scheda Tiri contrapposti", + "CoC7.CombinedAnyHint": "Un Tiro deve avere successo", + "CoC7.CombinedAllHint": "Tutti i Tiri devono avere successo", + "CoC7.CloseCard": "Chiudi scheda", + + "CoC7.CheckResult": "Tiro {name} ({value}%) - {difficulty} difficoltà", + "CoC7.ItemCheckResult": "{item} - tiro {skill} ({value}%) - {difficulty} difficoltà", + "CoC7.CheckRawValue": "({rawvalue}%) - {difficulty} difficoltà", + + "CoC7.ArmorAbsorbsDamage": "L'Armatura assorbe tutti i danni", + "CoC7.Critical": "Critico", + "CoC7.Impale": "Trafiggere", + "CoC7.CriticalTitle": "Il colpo è critico", + "CoC7.ImpaleTitle": "L'arma può trafiggere", + "CoC7.Target": "Bersaglio", + "CoC7.TargetOutOfRange": "Bersaglio fuori portata", + "CoC7.NoTargetToDamage": "Non c'è alcun bersaglio a cui applicare il danno", + "CoC7.ShotIsImpossible": "È impossibile sparare", + "CoC7.OutOfAmmo": "Munizioni esaurite", + "CoC7.OutOfShots": "Spari finiti", + + "CoC7.BonusDamageRoll": "Sto tirando il Bonus al Danno", + "CoC7.Type": "Tipo", + "CoC7.FightBack": "Contrattaccare", + "CoC7.Dodge": "Schivare", + "CoC7.Maneuver": "Manovra", + "CoC7.NoResponse": "Nessuna risposta", + "CoC7.OutNumbered": "Inferiorità numerica", + "CoC7.combatCard.surprised": "Sorpresa", + "CoC7.combatCard.autoSuccess": "Successo automatico", + "CoC7.Advantage": "Vantaggio", + "CoC7.Disadvantage": "Svantaggio", + "CoC7.TitleAdvantage": "Aggiungi 1 dado bonus (il bersaglio è a terra, legato...)", + "CoC7.TitleDisadvantage": "Aggiungi 1 dado penalità (per essere a terra, legato...)", + "CoC7.TitleOutNumbered": "Aggiungi 1 dado bonus perché il bersaglio è in inferiorità numerica", + "CoC7.TitleSurprised": "Aggiungi 1 dado bonus perché il bersaglio è stato sorpreso", + "CoC7.TitleAutoSuccess": "L'attacco colpisce automaticamente", + "CoC7.WinnerRollDamage": "{name} ha vinto. Tira per i danni.", + "CoC7.InitiatorMissed": "{name} ha mancato.", + "CoC7.NoWinner": "Entrambi i contendenti hanno fallito.", + "CoC7.DodgeSuccess": "{name} ha schivato!", + "CoC7.ManeuverSuccess": "La manovra di {name} ha avuto successo.", + "CoC7.AttackSuccess": "{name} ha sferrato un colpo.", + "CoC7.InflictPain": "Infligge dolore", + "CoC7.AdvantageAttacker": "Vantaggio: Attaccante", + "CoC7.AdvantageDefender": "Vantaggio: Difensore", + "CoC7.Tie": "Pareggio", + "CoC7.DamageInflicted": "Danno inflitto", + "CoC7.TotalDamage": "Danno totale", + + "CoC7.combatCard.dive4cover": "Si butta in copertura", + + "CoC7.rangeCombatCard.SingleShot": "Sparo singolo", + "CoC7.rangeCombatCard.MultipleShots": "Spari multipli", + "CoC7.AutomaticFire": "Fuoco automatico", + "CoC7.rangeCombatCard.Burst": "Raffica di fuoco", + "CoC7.rangeCombatCard.FullAuto": "Fuoco automatico", + "CoC7.rangeCombatCard.BaseRange": "Gittata Base", + "CoC7.rangeCombatCard.LongRange": "Gittata Lontana", + "CoC7.rangeCombatCard.ExtremeRange": "Gittata Estrema", + "CoC7.rangeCombatCard.OutOfRange": "Fuori portata", + "CoC7.rangeCombatCard.Cover": "In copertura", + "CoC7.rangeCombatCard.PointBlankRange": "A bruciapelo", + "CoC7.rangeCombatCard.NormalTarget": "Bersaglio normale", + "CoC7.rangeCombatCard.BigTarget": "Bersaglio grande", + "CoC7.combatCard.SmallTarget": "Bersaglio piccolo", + "CoC7.rangeCombatCard.FastMovingTarget": "Veloce", + "CoC7.rangeCombatCard.InMelee": "In corpo a corpo", + "CoC7.rangeCombatCard.aiming": "Sta prendendo la mira", + "CoC7.rangeCombatDamage": "{name} subisce {total} punti di danno", + "CoC7.rangeCombatDamageArmor": "{name} subisce {total} danni. (attenuati da {armor})", + "CoC7.RollDamage": "Tira per il danno", + "CoC7.BulletsFired": "Proiettili sparati", + "CoC7.Shots": "Colpi", + "CoC7.Shoot": "Spara", + "CoC7.ShotBullets": "Spari {bullets} proiettili al bersaglio {actor}.", + "CoC7.ShotVoley": "Sta sparando una raffica di {bullets} proiettili al bersaglio {actor}.", + "CoC7.rangeCombatCard.AimingTitle": "Aggiungi 1 dado bonus per il primo colpo", + "CoC7.rangeCombatCard.CoverTitle": "1 dado penalità. Il bersaglio è in copertura o si è tuffato con successo in copertura", + "CoC7.rangeCombatCard.PointBlankRangeTitle": "1 dado bonus. Il bersaglio è a bruciapelo", + "CoC7.rangeCombatCard.BigTargetTitle": "1 dado bonus per un bersaglio grosso (Struttura > 4)", + "CoC7.rangeCombatCard.SmallTargetTitle": "1 dado penalità per un bersaglio piccolo", + "CoC7.rangeCombatCard.NormalTargetTitle": "Il bersaglio è di taglia media, nessun bonus/penalità", + "CoC7.rangeCombatCard.InMeleeTitle": "1 dado penalità. Il bersaglio è impegnato nel combattimento corpo a corpo", + "CoC7.rangeCombatCard.FastMovingTargetTitle": "1 dado penalità. Il bersaglio è veloce (MOV 8+) e si sta muovendo alla velocità massima", + + "CoC7.meleeCombatDamageTakes": "subisce", + "CoC7.meleeCombatDamageFrom": "da", + "CoC7.meleeCombatDamageDeals": "infligge", + "CoC7.meleeCombatDamageWith": "con", + + "CoC7.DropZone": "DropZone", + + "CoC7.Value": "Valore", + "CoC7.SkillValue": "Valore dell'abilità", + "CoC7.SkillBase": "Base", + "CoC7.BaseSkillValue": "Valore base dell'abilità", + "CoC7.SkillExperience": "Esperienza", + "CoC7.SkillArchetype": "Archetipo", + "CoC7.SkillOccupation": "Professione", + "CoC7.SkillPersonal": "Personale", + + "CoC7.SkillTotalExperience": "Punti esperienza", + "CoC7.SkillTotalArchetype": "Punti Archetipo", + "CoC7.SkillTotalOccupation": "Punti professione", + "CoC7.SkillTotalPersonal": "Punti personali", + "CoC7.CharacteristicsPoints": "Punti caratteristiche", + "CoC7.TotalPoints": "Punti totali per la professione", + + "CoC7.ItemQuantity": "Quantità", + "CoC7.ItemWeight": "Peso", + "CoC7.ItemDetails": "Dettagli", + "CoC7.Description": "Descrizione", + "CoC7.Reload": "Cliccare con Sinistro/Destro : aggiungi/rimuovi 1 proiettile\nShift + cliccare con Sinistro/Destro : Ricarica/Svuota", + "CoC7.WeaponRange": "Gittata", + "CoC7.WeaponDamage": "Danno", + "CoC7.Weapon.BlastRadius": "Raggio dell'esplosione", + "CoC7.WeaponMalfunction": "Malfunzionamento", + "CoC7.WeaponUsesPerRound": "Utilizzi per Turno", + "CoC7.WeaponUsesPerRoundHint": "Attaccchi per turno (1/3 : 1 attaccco ogni 3 turni)", + "CoC7.WeaponSheet.RoundsPerUse.Info": "Numero di turni necessari affinché l'arma sia pronta a sparare", + "CoC7.WeaponMax": "Max usi/turno", + "CoC7.BurstSize": "Dimensione della raffica", + "CoC7.BurstSizeHint": "Numero di proiettili per raffica", + "CoC7.WeaponBulletsInMag": "Caricatore", + "CoC7.WeaponSpecial": "Speciale", + "CoC7.ItemPrice": "Prezzo", + "CoC7.Armor": "Armatura", + + "CoC7.EraNvct": "Invictus", + "CoC7.EraDrka": "Secoli Bui", + "CoC7.EraDdts": "Down Darker Trails", + "CoC7.EraGlit": "Cthulhu by Gaslight", + "CoC7.Era1920": "1920s", + "CoC7.EraPulp": "Pulp Cthulhu", + "CoC7.EraMdrn": "Moderno", + "CoC7.Eras": "Tipologie di Cthulhu", + "CoC7.EraAvailability": "Disponibilità", + + "CoC7.SkillNoAdjustments": "Nessuna correzione", + "CoC7.SkillNoXpGain": "Nessuna Esperienza", + "CoC7.SkillSpecial": "Specializzazione", + "CoC7.SkillRarity": "Non comune", + "CoC7.SkillPush": "Forzato", + "CoC7.SkillCombat": "Combatttimento", + "CoC7.SkillFighting": "Combattere", + "CoC7.SkillFirearm": "Armi da fuoco", + + "CoC7.WeaponRngd": "Gittata", + "CoC7.WeaponProperyManeuver": "Manovra", + "CoC7.WeaponTouch": "Contatto", + "CoC7.WeaponImpl": "Trafiggere", + "CoC7.WeaponRare": "Raro", + "CoC7.WeaponAhdb": "+BD/2", + "CoC7.WeaponAddb": "+BD", + "CoC7.WeaponSlnt": "Silenzioso", + "CoC7.WeaponXplv": "Esplosivi", + "CoC7.WeaponBrst": "Raffica", + "CoC7.WeaponAuto": "Fuoco automatico", + "CoC7.WeaponSpcl": "Speciale", + "CoC7.WeaponMont": "Montato", + "CoC7.WeaponDbrl": "Doppia canna", + "CoC7.WeaponBlst": "Esplosione", + "CoC7.WeaponStun": "Stordire", + "CoC7.Weapon.Property.Melee": "Corpo a corpo", + "CoC7.Weapon.Property.Thrown": "Da lancio", + "CoC7.Weapon.Property.Burn": "Ustione", + "CoC7.Weapon.Property.Shotgun": "Shotgun", + + "CoC7.ErrorItem": "Impossibile individuare l'oggetto", + "CoC7.ErrorActor": "Impossibile individuare il personaggio", + "CoC7.ErrorInvalidFormula": "{value} non è una formula valida", + "CoC7.ErrorInvalid": "invalido", + "CoC7.Validate": "Convalida", + "CoC7.Apply": "Applica", + + "CoC7.NewBioSectionName": "Nuova Sezione", + + "CoC7.DodgeSkillName": "Schivare", + "CoC7.CthulhuMythosName": "Miti di Cthulhu", + "CoC7.CreditRatingSkillName": "Valore di Credito", + "CoC7.DriveAutoSkillName": "Guidare Auto", + "CoC7.FightingSpecializationName": "Combattere", + "CoC7.FirearmSpecializationName": "Armi da Fuoco", + "CoC7.DriveSpecializationName": "Guidare", + "CoC7.PilotSpecializationName": "Pilotare", + "CoC7.AnySpecName": "Generico", + "CoC7.BoutOfMadnessName": "Attacco di follia", + "CoC7.InsanityName": "Follia", + + "CoC7.NewSkillName": "nuova abilità", + "CoC7.AddSkill": "Aggiungi abilità", + "CoC7.DevelopemmentPhase": "Fase di sviluppo", + "CoC7.RecoverLuckPoints": "Recupero dei Punti Fortuna", + "CoC7.SkillCantGainXp": "L'abilità non può guadagnare Esperienza automaticamente", + "CoC7.SkillUnflagForDevelopement": "Deseleziona per lo sviluppo", + "CoC7.SkillFlagForDevelopement": "Seleziona per lo sviluppo", + "CoC7.RollAll4Dev": "Vengono tirate tutte le abilità per lo sviluppo", + "CoC7.RollLuck4Dev": "Viene tirata la Fortuna per lo sviluppo", + "CoC7.DevRollTitle": "Viene tirato {item} per lo sviluppo: {die}/{score}%", + "CoC7.DevSuccessDetails": "{item} migliorato di {augment}%", + "CoC7.SanGained": "Guadagnati 2d6 ({results} = {sanGained}) Sanità dopo aver padroneggiato {skill} con un {skillValue}%", + "CoC7.DevFailureDetails": "{item} NON migliorato", + "CoC7.DevSuccess": "{item} migliorato ({die}/{score}%) di {augment}%", + "CoC7.DevFailure": "{item} NON migliorato ({die}/{score}%)", + "CoC7.LuckIncreased": "Fortuna recuperata ({die}/{score}): {augment} punti", + "CoC7.LuckNotIncreased": "Fortuna NON recuperata ({die}/{score})", + "CoC7.DevelopAttribWarn": "Non è possibile accedere ad alcuni attributi in fase di sviluppo/creazione.", + "CoC7.SkillDetail": "Dettagli", + "CoC7.EditSkill": "Modifica abilità", + "CoC7.DeleteSkill": "Cancella abilità", + "CoC7.RangeSkills": "Abilità a distanza", + "CoC7.MeleeSkills": "Abilità corpo a corpo", + "CoC7.NewItemName": "nuovo oggetto", + "CoC7.AddItem": "Aggiungi oggetto", + "CoC7.EditItem": "Modifica oggetto", + "CoC7.DeleteItem": "Cancella oggetto", + "CoC7.TradeItem": "Scambia / Immagazzina Oggetto", + "CoC7.SortBySkillName": "Ordina per nome abilità", + "CoC7.SortBySkillValue": "Ordina per percentuale dell'abilità ", + "CoC7.UncommonSkillsShow": "Mostra abilità non comuni", + "CoC7.UncommonSkillsHide": "Nascondi abilità non comuni", + + "CoC7.NewBookName": "nuovo libro", + "CoC7.AddBook": "Aggiungi libro", + "CoC7.NewSpellName": "nuovo incantesimo", + "CoC7.AddSpell": "Aggiungi incantesimo", + + "CoC7.AddWeapon": "Aggiungi arma", + "CoC7.NewWeaponName": "nuova arma", + "CoC7.EditWeapon": "Modifica arma", + "CoC7.DeleteWeapon": "Cancella arma", + "CoC7.MeleeWeapons": "Armi da corpo a corpo", + "CoC7.RangeWeapons": "Armi a distanza", + "CoC7.WeaponName": "Nome", + "CoC7.WeaponSkill": "Abilità", + "CoC7.WeaponSkillAlt": "Abilità alternativa", + "CoC7.Inventory": "Inventario", + "CoC7.InventoryIsCurrentlyEmpty": "L'inventario è attualmente vuoto.", + "CoC7.CharacterDevelopment": "Sviluppo", + "CoC7.OccupationSkill": "Abilità da Professione", + "CoC7.ArchetypeSkill": "Abilità da Archetipo", + "CoC7.UseFormula": "Usa tiro dei dadi", + "CoC7.EnterFormula": "Immetti formula", + "CoC7.SanRollHint": "Tiro Sanità per i bersagli", + "CoC7.SANCheckTitle": "Perdita SAN : {name} ({sanMin}/{sanMax})", + "CoC7.NoSkill": "Nessuna abilità", + "CoC7.AddWeapontHint": "

    {actor} non ha {weapon}.
    Vuoi crearne una?

    ", + + "CoC7.LinkCheck": " Tiro {name}", + "CoC7.LinkCheckDiff": "[Tiro {difficulty}] {name}", + "CoC7.LinkCheckModif": " Tiro {name} ({modifier})", + "CoC7.LinkCheckDiffModif": "[Tiro {difficulty}] {name} ({modifier})", + "CoC7.LinkSanLoss": " Perdita SAN ({sanMin}/{sanMax})", + "CoC7.LinkSanLossDiff": "[{difficulty}] perdita SAN ({sanMin}/{sanMax})", + "CoC7.LinkSanLossModif": " Perdita SAN ({modifier}) ({sanMin}/{sanMax})", + "CoC7.LinkSanLossDiffModif": "[{difficulty}] Perdita SAN ({modifier}) ({sanMin}/{sanMax})", + "CoC7.LinkItem": " {name}", + "CoC7.LinkItemDiff": "[{difficulty}] {name}", + "CoC7.LinkItemModif": " {name} ({modifier})", + "CoC7.LinkItemDiffModif": "[{difficulty}] {name} ({modifier})", + + "CoC7.ManualCreditValues": "Valori di Credito manuali", + "CoC7.MonetarySymbol": "Simbolo :", + "CoC7.MonetaryFactor": "Fattore :", + "CoC7.AutoCreditValues": "Attiva/Disattiva calcolo automatico", + "CoC7.MonetarySpendingLevel": "Livello di spesa :", + "CoC7.MonetaryCash": "Contanti :", + "CoC7.MonetarySpent": "Spesi :", + "CoC7.MonetaryAssets": "Proprietà :", + "CoC7.MonetaryAssetsDetails": "Dettagli delle proprietà", + + "CoC7.PossessionsNotes": "Note :", + "CoC7.PossessionsNotesHolder": "Note", + + "CoC7.BackgroundNewSection": "Aggiungi nuova sezione", + "CoC7.BackgroundSectionNameHolder": "Inserisci il titolo della sezione", + "CoC7.BackgroundDeleteSection": "Cancellare sezione", + "CoC7.BackgroundSectionMoveUp": "Muovi Su", + "CoC7.BackgroundSectionMoveDown": "Muovi Giù", + + "CoC7.creatureFightingSkill": "Combattere", + + "CoC7.InvoluntaryAction": "Azione involontaria", + "CoC7.InvoluntaryActionPerfomed": "Azione involontaria eseguita", + "CoC7.SanityCheck": "Tiro Sanità", + "CoC7.IntCheck": "Tiro Intelligenza", + "CoC7.NoSanLoss": "Nessuna perdità di SAN", + "CoC7.SANLoss": "Perdita di Sanità", + "CoC7.SanityCheckPerformed": "Sei stato esposto a un evento traumatico.", + "CoC7.InvoluntaryActionPerformed": "Per un momento hai perso l'autocontrollo.", + "CoC7.SanityLost": "Punti Sanità persi", + "CoC7.MemoryRepressed": "La tua mente ha represso la memoria e l'ha seppellita nel tuo subconscio.", + "CoC7.RememberEverything": "Ricordi TUTTO.", + "CoC7.BoutOfMadnesslasted": "Il tuo attacco di follia è durato", + "CoC7.EnteringBoutOfMadness": "Stai vivendo un attacco di follia", + "CoC7.GrowingAccustomedToAwfulness": "Ti stai abituando all'orrore. (La tua perdita di sanità è limitata).", + "CoC7.ImmuneToAwfulness": "La tua mente è immune a questo orrore. (Nessuna perdita di sanità).", + "CoC7.InvestigatorPhobiaGained": "L'investigatore acquisisce una fobia", + "CoC7.PhobiaGained": "Acquisisci una fobia", + "CoC7.InvestigatorManiaGained": "L'investigatore acquisisce una mania", + "CoC7.ManiaGained": "Acquisisci una mania", + "CoC7.AlreadyUnderlyingInsanity": "L'investigatore è già in uno stato di follia latente.", + "CoC7.IndefinitelyInsane": "Diventi permanentemente pazzo.", + "CoC7.TemporaryInsane": "Diventi temporaneamente pazzo.", + "CoC7.GoodForAsylum": "Sei pronto per essere mandato in manicomio", + "CoC7.BoutOfMadness": "Attacco di follia", + "CoC7.BoutRealTime": "Attacco di follia: Tempo reale", + "CoC7.BoutSummary": "Attacco di follia: Riassunto", + "CoC7.EndBoutOfMadness": "Fine dell'attacco di follia ", + "CoC7.InsanityType": "Tipo di follia", + "CoC7.Phobia": "Fobia", + "CoC7.Mania": "Mania", + "CoC7.MaxSanloss": "Perdita Max", + "CoC7.MinSanloss": "Perdita Min", + "CoC7.AlreadyLost": "Già perso", + "CoC7.CreatureMaxLoss": "Perdità Max della creatura", + "CoC7.MaxLossToCreature": "Perdita Max per questa creatura", + "CoC7.ResetCreatureSan": "Ripristina la cronologia della creatura", + "CoC7.ResetSpecieSan": "Ripristina la cronologia della specie", + "CoC7.KeepData": "Conserva i dati della creatura", + "CoC7.BoutActive": "(Attacco) Immune alla perdita di SAN", + "CoC7.AlreadyInABout": "Stai già soffrendo un attacco di follia e sei immune a un'ulteriore perdita di sanità.", + "CoC7.PlayerPermanentlyInsane": "Giocatore definitivamente folle", + "CoC7.MythosFirstEncounter": "Assegna Esperienza per i Miti (+5% prima volta)", + "CoC7.MythosAlreadyEncountered": "Assegna Esperienza per i Miti (+1%)", + "CoC7.DisregardMythosGain": "Nessun guadagno per i Miti", + "CoC7.MythosGain": "Guadagno per i Miti", + "CoC7.YouGainedCthulhuMythos": "La tua mente trema davanti alla manifestazione ultraterrena (+{value}% Miti di Cthulhu)", + "CoC7.CardResolved": "Scheda risolta", + + "CoC7.SpellCastingTime": "Tempo di lancio", + "CoC7.SpellCastingCost": "Costo di lancio", + "CoC7.CallSpell": "Richiamare", + "CoC7.DismissSpell": "Congedare", + "CoC7.ContactSpell": "Contattare", + "CoC7.SummonSpell": "Evocare", + "CoC7.BindSpell": "Vincolare", + "CoC7.EnchantmentSpell": "Incantare", + "CoC7.GateSpell": "Portale", + "CoC7.CombatSpell": "Combattere", + "CoC7.SpellType": "Tipo di Incantesimo", + + "CoC7.BookHasNothingMoreToTeach": "{book} non ha più niente da insegnare. L'abilità Miti di Cthulhu di {actor} è maggiore del Valore di questo Mito.", + "CoC7.BookType": "Tipo di libro", + "CoC7.Content": "Contenuto", + "CoC7.CthulhuMythosFinal": "Mito Finale", + "CoC7.CthulhuMythosInitial": "Mito Iniziale", + "CoC7.Development": "Sviluppo", + "CoC7.DifficultyLevel": "Livello di difficoltà", + "CoC7.DragSpell": "Trascina qui gli incantesimi per inserirli nel libro...", + "CoC7.FullStudies": "Studi completati", + "CoC7.Gains": "Guadagna", + "CoC7.GainsForReading": "Guadagno di abilità per la lettura di {book}.", + "CoC7.InitialReading": "Lettura Iniziale", + "CoC7.InitialReadingNeeded": "{actor} deve eseguire una Lettura Iniziale di {book} per essere in grado di avanzare attraverso il progresso dello Studio Completo.", + "CoC7.LearnSpellAttempt": "Tenta di imparare l'incantesimo {spell}, da {book}.", + "CoC7.MarkedForDevelopment": "Contrassegnato per lo sviluppo", + "CoC7.Mythos": "Miti", + "CoC7.MythosRating": "Valore dei Miti", + "CoC7.NotOwned": "Questo Oggetto deve essere posseduto da un personaggio per poter eseguire questa azione.", + "CoC7.Occult": "Occultismo", + "CoC7.Points": "punto(i)", + "CoC7.Progress": "Progresso", + "CoC7.RedoFullStudy": "Ripeti lo Studio Completo", + "CoC7.ReadAttempt": "Tenti di leggere {book} ({language}), difficoltà {difficulty}.", + "CoC7.ReadingMythosTome": "Sta leggendo {book}.", + "CoC7.Specific": "Specifico", + "CoC7.SpellsLearned": "Incantesimi appresi", + "CoC7.StudyTime": "Tempo di Studio", + "CoC7.UnknownLanguage": "{actor} non conosce la lingua in cui è scritto questo libro.", + "CoC7.Unreadable": "Illeggibile", + + "CoC7.Crew": "Equipaggio", + "CoC7.Origin": "Origine", + "CoC7.ArmedVehicle": "Veicolo armato", + + "CoC7.PulpTalents": "Talenti Pulp", + "CoC7.TalentType": "Tipologia del Talento", + "CoC7.PhysicalTalent": "Fisico", + "CoC7.MentalTalent": "Mentale", + "CoC7.CombatTalent": "Combattimento", + "CoC7.MiscellaneousTalent": "Vari", + "CoC7.BasicTalent": "Base", + "CoC7.InsaneTalent": "Folli", + "CoC7.OtherTalent": "Altri", + + "CoC7.Items": "Oggetti", + "CoC7.Vehicle": "Veicolo", + "CoC7.Books": "Libri", + "CoC7.Status": "Condizione", + + "CoC7.Classic": "Classico", + "CoC7.Lovecraftian": "Lovecraftiano", + "CoC7.Pulp": "Pulp", + "CoC7.Modern": "Moderno", + "CoC7.Related": "Collegato alla Professione", + "CoC7.OccupationType": "Tipologia di professione", + "CoC7.OccupationPoints": "Punti professione", + "CoC7.Selected": "Selezionato", + "CoC7.Multiplier": "Moltiplicatore", + "CoC7.Optional": "Optionale", + "CoC7.Or": "o", + "CoC7.Minimum": "Minimo", + "CoC7.Maximum": "Massimo", + "CoC7.CommonSkills": "Abilità comuni", + "CoC7.OptionSkills": "Gruppo di abilità opzionali", + "CoC7.ChoiceNumber": "Opzioni", + "CoC7.Choose": "Numero tra cui scegliere", + "CoC7.Chosen": "Scelto", + "CoC7.EmptySkillList": "Aggiungi un'abilità rilasciandola qui.", + "CoC7.EmptyItemList": "Aggiungi un oggetto rilasciandolo qui.", + "CoC7.EmptyCharacterSkillList": "Aggiungi una configurazione, una professione o un'abilità rilasciandola qui.", + "CoC7.PersonalSpeciality": "Numero di specialità personali o dell'epoca", + "CoC7.AdditionalSkills": "Abilità aggiuntive", + "CoC7.SkillSelectionWindow": "Seleziona abilità facoltative", + "CoC7.SelectPersonalSkills": "Seleziona {number} abilità come abilità di interesse personale", + "CoC7.ResetOccupation": "Azzera la Professione", + "CoC7.ResetOccupationHint": "Il personaggio {name} ha già una Professione. Vuoi azzerarla?", + "CoC7.ResetArchetype": "Azzera Archetipo", + "CoC7.ResetArchetypeHint": "Il personaggio {name} ha già un Archetipo. Vuoi azzerarlo?", + "CoC7.CreditOutOfRange": "Il Valore di Credito dovrebbe essere compreso tra {min} e {max}", + "CoC7.BioSections": "Sezioni della biografia", + "CoC7.BioSectionName": "Nome della Sezione della biografia", + "CoC7.SpendPoints": "Assegna punti caratteristiche", + "CoC7.RollCharac": "Tira per le caratteristiche", + "CoC7.SelectCoreCharac": "Seleziona la caratteristica principale", + "CoC7.SkillSpecSelectTitle": "Seleziona/crea l'abilità della specializzazione di {specialization}", + "CoC7.SkillSelectBase": "Seleziona il valore di base per l'abilità {name}", + "CoC7.SelectSkill": "Seleziona un'abilità esistente", + "CoC7.CreateNewSkill": "Crea una nuova abilità", + + "CoC7.Characteristics": "Caratteristiche", + "CoC7.Characteristic": "Caratteristica", + "CoC7.EnableCharacteristics": "Autorizza caratteristiche", + "CoC7.UsePoints": "Usa i punti", + "CoC7.UseRolls": "Usa i tiri", + "CoC7.CoreCharacteristics": "Caratteristiche principali", + "CoC7.BonusPoints": "Punti bonus", + "CoC7.SuggestedOccupations": "Professioni consigliate", + "CoC7.SuggestedTraits": "Tratti consigliati", + + "CoC7.PutGunAway": "Metti via la tua pistola", + "CoC7.DrawGun": "Estrai la tua pistola", + + "CoC7.GmTools": "Strumenti del Custode", + "CoC7.GmNotes": "Note del Custode", + "CoC7.DevPhase": "Fase di sviluppo", + "CoC7.DevPhaseEnabled": "Fase di sviluppo abilitata", + "CoC7.DevPhaseDisabled": "Fase di sviluppo disabilitata", + "CoC7.CharCreationMode": "Modalità di creazione del personaggio", + "CoC7.CharCreationEnabled": "Modalità di creazione del personaggio abilitata", + "CoC7.CharCreationDisabled": "Modalità di creazione del personaggio disabilitata", + "CoC7.toggleXP": "Guadagno Esp.", + "CoC7.XPGainEnabled": "Il personaggio può guadagnare Esp.", + "CoC7.XPGainDisabled": "Il personaggio non può guadagnare Esp.", + "CoC7.WarnNoActorAvailable": "Non hai nessun personaggio controllato né selezionato", + "CoC7.WarnMacroIncorrectType": "Puoi creare macro solo per armi e abilità", + "CoC7.WarnNoGlobalSpec": "Non puoi creare macro per specializzazioni non specificate", + "CoC7.WarnMacroNoItemFound": "Nessun oggetto utilizzabile trovato", + "CoC7.WarnNoControlledActor": "Non controlli nessun personaggio", + "CoC7.WarnFastTargetWithWrongMOV": "Selezionato Veloce per un bersaglio con meno di 8 MOV. (MOV: {mov})", + "CoC7.WarnTooManyTarget": "Selezionati troppi bersagli. Si mantiene solo l'ultimo bersaglio selezionato", + + "CoC7.allActors": "Tutti i personaggi", + "CoC7.restTargets": "Fai riposare i bersagli", + "CoC7.startRest": "Inizi a riposare", + "CoC7.dreaming": "Gli investigatori aspettano sognando", + "CoC7.healthRecovered": "Hai recuperato un Punto Ferita", + "CoC7.pulpHealthRecovered": "Hai recuperato {number} Punti Ferita", + "CoC7.dailySanLossRestarted": "Il contatore della perdita giornaliera di Sanità è stato azzerato", + "CoC7.magicPointsRecovered": "Punti Magia recuperati", + "CoC7.hasCriticalWounds": "Impossibile recuperare Punti Ferita a causa di Ferite Critiche", + "CoC7.quickHealer": "Guaritore rapido", + + "CoC7.ErrorNoDodgeSkill": "Il personaggio non ha un'abilità per schivare", + "CoC7.ErrorNotEnoughLuck": "{actor} non ha avuto abbastanza Fortuna per poter passare il tiro", + "CoC7.ErrorManeuverNotPossible": "Il tuo avversario è troppo forte per te per poter eseguire una manovra", + "CoC7.ErrorNotFound": "{missing} non trovato!", + "CoC7.ErrorNotFoundForActor": "{missing} non trovato per il personaggio {actor}!", + + "CoC7.InfoLessSkillThanOptions": "Ci sono solo {skillCount} e {optionsCount} opzioni, le aggiungo tutte quante", + "CoC7.InfoAllSkillsAlreadySelected": "Tutte le abilità sono già selezionate.", + + "CoC7.MessageCheckRequestedWait": "Tiro {check} richiesto dal tuo Custode.
    Attendi prima di premere!
    ", + "CoC7.MessageTargetCheckRequested": "Il tuo Custode ha richiesto che {name} effettui un Tiro {check}.", + "CoC7.MessageTitleSelectSingleUserForTarget": "Quale utente può rispondere a questo attacco", + "CoC7.MessageSelectSingleUserForTarget": "Questa pedina è controllata da più utenti, seleziona quale utente può rispondere a questo attacco.", + "CoC7.MessageBoutOfMadnessTableNotFound": "Non è stato trovato il risultato dalla Tabella della Follia, controlla che tutte le tue tabelle dei tiri siano state create", + "CoC7.MessageBoutOfMadnessItemNotFound": "Il risultato dalla Tabella della Follia non è stato trovato, controlla che tutte le tue condizioni siano state create", + + "CoC7.DealDamage": "Infliggi {damage} punti di danno a {target}?", + "CoC7.NoTargetSelected": "Non hai selezionato un bersaglio per il tuo tiro {weapon}. Vuoi procedere comunque?", + + "CoC7.Import": "Importa", + "CoC7.Proceed": "Procedi", + "CoC7.Cancel": "Cancella", + + "CoC7.ActorImporter": "Importa Personaggio", + "CoC7.ActorImporterSummary": "Importa un PNG o una Creatura dalla descrizione e dalle statistiche. Basta incollare il testo corrispondente", + "CoC7.PasteTheDataBelow": "Incolla qui sotto i dati di testo grezzo", + "CoC7.TextFieldInvalidCharacters": "Sono presenti caratteri non validi nel testo, correggili o verranno rimossi", + "CoC7.SelectActorType": "Seleziona la tipologia del personaggio", + "CoC7.NonPlayingCharacter": "Personaggio Non Giocante (PNG)", + "CoC7.Creature": "Creatura", + "CoC7.ConvertFrom6Edition": "Converti dalla 6a edizione", + "CoC7.Convert": "Converti", + "CoC7.NoConvert": "Non Convertire", + "CoC7.Guess": "Ipotesi", + "CoC7.English": "Inglese", + "CoC7.Spanish": "Spagnolo", + "CoC7.French": "Francese", + "CoC7.German": "Tedesco", + "CoC7.Polish": "Polacco", + "CoC7.TraditionalChinese": "Cinese tradizionale", + "CoC7.SelectSourceLanguage": "Seleziona la lingua del testo di origine", + "CoC7.ImportedUnnamedCharacter": "Personaggio senza nome importato", + "CoC7.CreatedImportedCharactersFolder": "Creata la cartella dei 'Personaggi importati'", + "CoC7.ImportedCharactersFolder": "Personaggi importati", + "CoC7.ImportSkillItemLocations": "Cerca abilità/incantesimi/armi in", + "CoC7.ImportActorItemsNone": "Nessuno", + "CoC7.ImportActorItemsItem": "Oggetti", + "CoC7.ImportActorItemsItemWorldModuleSystem": "Oggetti / Mondi / Moduli / Sistema", + "CoC7.ImportActorItemsWorldModuleItemSystem": "Mondi / Moduli / Oggetti / Sistema", + + "CoC7.HowToTranslateTitle": "Come tradurre?", + "CoC7.HowToTranslateWarning": "Non installare moduli di cui non ti fidi.", + "CoC7.HowToTranslateInstallBabele": "Installa/aggiorna il modulo Babele dal gestore dei moduli di Foundry.", + "CoC7.HowToTranslateInstallTranslation": "Installa/Aggiorna la traduzione dal gestore dei moduli di Foundry.", + "CoC7.HowToTranslateEnableTranslation": "All'interno del Mondo di Gioco, in Configuration/Manage Modules attiva sia Babele che le traduzioni.", + "CoC7.HowToTranslateNoTranslation": "Le istruzioni per la creazione di traduzioni in nuove lingue sono disponibili nei moduli di traduzione esistenti.", + + "CoC7.Migrate.Title": "Aggiornamento richiesto", + "CoC7.Migrate.Message": "

    Il tuo mondo richiede un aggiornamento per eseguire la versione {version}.

    Si prega di eseguire il backup della cartella del mondo prima di avviare l'aggiornamento.

    Se non aggiorni il tuo mondo il sistema non funzionerà correttamente.

    Il mondo potrebbe essere riavviato una volta completata l'operazione.

    ", + "CoC7.Migrate.WithModulesMessage": "

    Il tuo mondo o i tuoi moduli potrebbero richiedere un aggiornamento per eseguire la versione {version}.

    Esegui il backup delle cartelle del mondo e dei moduli elencate di seguito prima di avviare l'aggiornamento.

    Se non aggiorni il tuo mondo il sistema non funzionerà correttamente.

    I seguenti moduli contengono personaggi o oggetti, quindi verranno controllati.

    {modules}

    Il mondo potrebbe essere riavviato una volta completata l'operazione.

    ", + "CoC7.Migrate.GMRequired": "

    Il tuo mondo richiede un aggiornamento per eseguire la versione {version}.

    Attendi che il tuo GM aggiorni il sistema, quindi aggiorna (F5) questa pagina.

    ", + "CoC7.Migrate.RestartRequired": "

    Il tuo mondo ora si riavvierà per abilitare queste modifiche

    ", + "CoC7.Migrate.ButtonUpdate": "Aggiorna", + "CoC7.Migrate.ButtonSkip": "Ignora", + "CoC7.Migrate.ButtonOkay": "Okay", + + "CoC7.Maximize": "Massimizza", + "CoC7.Summarize": "Riassumi", + + "CoC7.UnableToInteractWithChatCard": "Non sei in grado di interagire con questo messaggio, se devi apportare una modifica chiedi al tuo Custode di selezionare le opzioni per te", + "CoC7.UnableToCopyToClipboard": "Impossibile copiare negli appunti, ciò è probabilmente dovuto alle impostazioni di sicurezza del tuo browser.", + "CoC7.WarningCharacterSheetV1Depreciated": "Questo layout è obsoleto e potrebbe non funzionare correttamente. Verrà rimosso con la versione FoundryVTT v9, chiedi al tuo Custode di cambiare il tipo di scheda in CoC7.CoC7CharacterSheetV2", + + "CoC7.MessageTitleSelectUserToGiveTo": "Dai l'oggetto a un altro personaggio", + "CoC7.MessageSelectUserToGiveTo": "A quale personaggio vorresti dare questo oggetto?", + "CoC7.MessageDistanceCalculationFailure": "Impossibile calcolare la distanza tra le pedine, utilizza la scheda del personaggio della pedina.", + + "CoC7.ToolTipSkill": "
    1. Cliccare col sinistro Tiro con opzioni
    2. Shift + Cliccare col sinistro Tiro immediato con difficoltà Normale
    1. Cliccare col destro Tiro contrapposto con opzioni
    2. Shift + Cliccare col destro Tiro contrapposto immediato
    1. Alt/Optione + Cliccare col destro Tiro combinato con opzioni
    ", + "CoC7.ToolTipKeeperSkill": "
    1. CTRL + Cliccare col sinistro Crea collegamento al tiro
    2. {other}
    ", + "CoC7.ToolTipKeeperStandbySkill": "
  • Cliccare col sinistro Richiedi un tiro a {name}
  • ", + "CoC7.ToolTipDB": "
    1. Cliccare col sinistro Tiro immediato con difficoltà Normale
    ", + "CoC7.ToolTipKeeperSanity": "
  • CTRL + Alt/Optione Crea collegamento al Tiro Sanità
  • ", + "CoC7.ToolTipAutoToggle": "
    1. Cliccare col sinistro Attiva/disattiva calcolo automatico o inserimento manuale
    2. ", + "CoC7.ToolTipSkillFlagToggle": "
      1. Cliccare due volte Attiva/disattiva il contrassegnare la condizione
      2. ", + "CoC7.ToolTipSkillFlagged": "Segnalato per lo sviluppo", + "CoC7.ToolTipSkillUnflagged": "Non segnalato per lo sviluppo", + + "SETTINGS.TitleRules": "Regolamento", + "SETTINGS.TitleInitiative": "Impostazioni per l'iniziativa", + "SETTINGS.TitleRoll": "Impostazioni per il tiro", + "SETTINGS.TitleChatCards": "Impostazioni delle schede di chat", + "SETTINGS.TitleScene": "Impostazioni per la scena", + "SETTINGS.TitleSheet": "Impostazioni per la scheda", + "SETTINGS.TitleGameArtwork": "Impostazioni della grafica del gioco", + "SETTINGS.TitleWeapon": "Impostazioni per l'arma", + "SETTINGS.TitleDiceSoNice": "Impostazioni per Dice So Nice", + "SETTINGS.TitleDeveloperDebug": "Impostazioni per sviluppatori e debug", + "SETTINGS.TitleRollTable": "Impostazioni per Tabella Tiri", + "SETTINGS.DebugMode": "Modalità di debug del sistema", + "SETTINGS.DebugModeHint": "!!NECESSARIO RIAVVIO!!", + "SETTINGS.DefaultDifficulty": "Difficoltà di tiro predefinita", + "SETTINGS.DefaultDifficultyHint": "Puoi scegliere la difficoltà predefinita per i tiri. 'Sconosciuta' lancerà i tiri senza che il giocatore conosca la difficoltà del tiro.", + "SETTINGS.CheckDifficultyRegular": "Difficoltà predefinita", + "SETTINGS.CheckDifficultyUnknown": "Difficoltà sconosciuta", + "SETTINGS.showIconsOnly": "Nella scheda riepilogativa, mostra solo le icone nell'elenco delle abilità.", + "SETTINGS.UseToken": "Usa l'immagine della pedina", + "SETTINGS.UseTokenHint": "Usa l'immagine della pedina invece dei ritratti nelle schede della chat", + "SETTINGS.DisplayActorOnCard": "Mostra il personaggio sulla scheda", + "SETTINGS.DisplayActorOnCardHint": "mostra l'immagine/la pedina del personaggio sulle schede della chat di combattimento", + "SETTINGS.InitiativeRule": "Seleziona regola per l'iniziativa", + "SETTINGS.InitiativeRuleHint": "Puoi selezionare la regola dell'iniziativa di base (usando il valore di DES) o la regola facoltativa (usando un tiro)", + "SETTINGS.InitiativeRuleBasic": "Base", + "SETTINGS.InitiativeRuleOptional": "Optionale", + "SETTINGS.displayInitDices": "Visualizza i dadi dell'iniziativa", + "SETTINGS.displayInitDicesHint": "Mostra i dadi quando tiri per l'iniziativa (solo regole facoltative)", + "SETTINGS.displayInitAsText": "Visualizza il testo dell'iniziativa", + "SETTINGS.displayInitAsTextHint": "Visualizza l'iniziativa come testo anziché come numero (solo regole facoltative)", + "SETTINGS.PulpRules": "Regole Pulp", + "SETTINGS.PulpRulesHint": "Consenti l'utilizzo delle Regole Pulp (Archetipo, Talento, PF), !implementazione anticipata!", + "SETTINGS.developmentRollForLuck": "Punti Fortuna recuperabili", + "SETTINGS.developmentRollForLuckHint": "Ogni giocatore può effettuare un tiro di miglioramento per la propria Fortuna durante la Fase di Sviluppo", + "SETTINGS.displayPlayerNameOnSheet": "Mostra il nome del giocatore sulla scheda", + "SETTINGS.DisregardAmmo": "Ignora il conteggio delle munizioni.", + "SETTINGS.DisregardAmmoHint": "Attivandola non verrà tenuto conto del numero di proiettili caricati nella pistola.", + "SETTINGS.DisregardUsePerRound": "Ignora gli utilizzi per turno.", + "SETTINGS.DisregardUsePerRoundHint": "Attivandola ti permetterà di sparare quanto vuoi, indipendentemente dagli utilizzi per turno dell'arma.", + "SETTINGS.RestrictGridSpaces": "Limita la misurazione agli spazi della griglia", + "SETTINGS.RestrictGridSpacesHint": "Per il combattimento a distanza, se selezionata le distanze verranno misurate in spazi della griglia, altrimenti verrà utilizzata la distanza 'reale' (euclidea).", + "SETTINGS.StatusPlayerEditable": "Il giocatore può modificare la condizione", + "SETTINGS.StatusPlayerEditableHint": "Consenti al tuo giocatore di modificare la propria condizione (a terra, privo di sensi, morente, morto) e di azzerare la perdita giornaliera di SAN", + "SETTINGS.SyncDice3D": "[DsN] Sincronizza i dadi", + "SETTINGS.SyncDice3DHint": "Quando usi DsN, sincronizzi i dadi tra i client", + "SETTINGS.UnitDieColorset": "[DsN] Set di colori per unità di dado", + "SETTINGS.UnitDieColorsetHint": "Quando utilizzi DsN, il set di colori da utilizzare per l'unità di dado. (lascia vuoto per usare l'impostazione predefinita del giocatore)", + "SETTINGS.TenDieNoMod": "[DsN] Set di colori per dado da dieci", + "SETTINGS.TenDieNoModHint": "Quando utilizzi DsN, il set di colori da utilizzare per un singolo dado da dieci. (lascia vuoto per usare l'impostazione predefinita del giocatore)", + "SETTINGS.TenDieBonus": "[DsN] Set di colori per dado da dieci bonus", + "SETTINGS.TenDieBonusHint": "Quando utilizzi DsN, il set di colori da utilizzare per il dado da dieci bonus. (lascia vuoto per usare l'impostazione predefinita del giocatore)", + "SETTINGS.TenDiePenalty": "[DsN] Set di colori per dado da dieci penalità", + "SETTINGS.TenDiePenaltyHint": "Quando utilizzi DsN, il set di colori da utilizzare per il dado da dieci penalità. (lascia vuoto per usare l'impostazione predefinita del giocatore)", + "SETTINGS.OverrideGameArtwork": "Sostituisci la grafica del gioco", + "SETTINGS.OverrideGameArtworkHint": "!!NECESSARIO RIAVVIO!! Dà accesso alla configurazione avanzata del gioco, lascia vuoto per l'impostazione predefinita", + "SETTINGS.ArtPauseImage": "Immagine per la pausa", + "SETTINGS.ArtPauseImageHint": ". Digita 'null' per rimuovere l'immagine", + "SETTINGS.ArtPauseText": "Testo per la pausa", + "SETTINGS.ArtPauseTextHint": "Lascia vuoto per l'impostazione predefinita", + "SETTINGS.OverrideSheetArtwork": "Sostituisci la grafica della scheda", + "SETTINGS.OverrideSheetArtworkHint": "!!NECESSARIO RIAVVIO!! Dà accesso alla configurazione avanzata della scheda, lascia vuoto per l'impostazione predefinita", + "SETTINGS.ArtWorkSheetBackground": "Sfondo della scheda del personaggio", + "SETTINGS.ArtWorkSheetBackgroundHint": "digita 'null' per rimuovere lo sfondo, vuoto per l'impostazione predefinita", + "SETTINGS.ArtWorkSheetBackgroundType": "Tipologia dello sfondo", + "SETTINGS.BackgroundSlice": "L'immagine di sfondo verrà tagliata (css:border-image)", + "SETTINGS.BackgroundAuto": "Ridimensiona l'immagine mantenendo le proporzioni (css:auto)", + "SETTINGS.BackgroundContain": "Ridimensiona per riempire senza ritagliare/allungare (css:contain)", + "SETTINGS.BackgroundCover": "Ridimensiona per riempire con ritaglio/allungamento (css:cover)", + "SETTINGS.ArtWorkOtherSheetBackground": "Altro sfondo della scheda", + "SETTINGS.ArtWorkOtherSheetBackgroundHint": "digita 'null' per rimuovere lo sfondo. Solo per oggetti e veicolo per ora", + "SETTINGS.ArtworkSheetImage": "Immagine della scheda del personaggio", + "SETTINGS.ArtworkSheetImageHint": "digita 'null' per rimuovere l'immagine", + "SETTINGS.ArtworkFrontColor": "Colore principale", + "SETTINGS.ArtworkFrontColorHint": "Utilizzato per tutti gli elementi", + "SETTINGS.ArtworkBackgroundColor": "Colore secondario", + "SETTINGS.ArtworkBackgroundColorHint": "Utilizzato per sfondo e immissioni", + "SETTINGS.ArtworkInteractiveColor": "Colore degli elementi interattivi", + "SETTINGS.ArtworkInteractiveColorHint": "Utilizzato per elementi interattivi/da tirare", + "SETTINGS.ArtworkFixedSkillLength": "Limita la lunghezza del nome dell'abilità", + "SETTINGS.ArtworkFixedSkillLengthHint": "La lunghezza dell'abilità nella sezione delle abilità sarà limitata per una scheda più compatta", + "SETTINGS.ArtworkMainFont": "Font principale", + "SETTINGS.ArtworkMainFontBold": "Font principale (grassetto)", + "SETTINGS.ArtworkMainFontSize": "Dimensione predefinita del carattere (punti)", + "SETTINGS.BoutOfMadnessSummaryTable": "Tabella dell'Attacco di Follia (Riepilogo)", + "SETTINGS.BoutOfMadnessRealTimeTable": "Tabella dell'Attacco di Follia (Tempo reale)", + "SETTINGS.LetKeeperDecide": "Lascia decidere al Custode", + "SETTINGS.DisplayResultType": "Visualizza il tipo di risultato dei dadi (testo)", + "SETTINGS.DisplayCheckSuccessLevel": "Visualizza il livello di successo del tiro (stelle)", + "SETTINGS.PlayerUnlockSheetMode": "Il giocatore può sbloccare la scheda", + "SETTINGS.AlwaysEditable": "sempre", + "SETTINGS.CreationModeOnly": "solo in modalità creazione", + "SETTINGS.NeverEditable": "mai (solo il Custode)", + "SETTINGS.StanbyGMRolls": "Attendi, il Custode sta tirando", + "SETTINGS.StanbyGMRollsHint": "Quando il Custode sta effettuando un tiro da una scheda personaggio assegnata, mostra un pulsante per tirare invece di tirare direttamente", + "SETTINGS.AllowFlatDiceModifier": "Modificatore fisso per i dadi", + "SETTINGS.AllowFlatDiceModifierHint": "Consente di modificare i risultati del lancio dei dadi di un valore fisso.", + "SETTINGS.AllowFlatThresholdModifier": "Modificatore fisso per i valori", + "SETTINGS.AllowFlatThresholdModifierHint": "Consente di modificare il valore del successo dei tiri di un valore fisso.", + "SETTINGS.OpposedRollTieBreaker": "Spareggio di Viriato139ac ai tiri contrapposti", + "SETTINGS.OpposedRollTieBreakerHint": "In caso di pareggio durante il tiro contrapposto, il vincitore è determinato dal valore più alto ottenuto, non dall'abilità più alta.", + "SETTINGS.SelfRollWhisperTarget": "Notifica di tiro a se stesso:", + "SETTINGS.SelfRollWhisperTargetHint": "In qualità di GM, quando esegui tu un tiro, a chi vuoi inviare una notifica.", + "SETTINGS.DoNotAdvise": "Tienilo per te.", + "SETTINGS.AdviseOwnersOnly": "Avvisa il proprietario del personaggio", + "SETTINGS.AdviseAllPlayer": "Avvisa tutti i giocatori", + "SETTINGS.OneBlockBackStory": "Un blocco di trascorsi", + "SETTINGS.OneBlockBackStoryHint": "Trasforma i trascorsi in un blocco editabile, ma puoi formattare/aggiungere collegamenti.", + "SETTINGS.EnableStatusIcons": "Abilita icone di condizione", + "SETTINGS.EnableStatusIconsHint": "Imposta se le icone degli effetti di combattimento e di sanità vengono mostrate nelle pedine.", + "SETTINGS.ShowExperimentalFeatures": "Mostra caratteristiche sperimentali", + "SETTINGS.ShowExperimentalFeaturesHint": "Il tuo mondo potrebbe diventare inutilizzabile in una versione futura se utilizzi queste funzionalità. Solo per i test, NON usarli nei tuoi mondi di gioco", + "CoC7.ExperimentalFeaturesWarning": "Questa funzione è in lavorazione e non è consigliata per l'uso nel tuo mondo di gioco.", + "SETTINGS.CheckElevation": "Includi l'elevazione in distanza", + "SETTINGS.CheckElevationHint": "Usa l'elevazione nei calcoli della distanza dei combattimento a distanza", + "CoC7.toolTipDelay": "Ritardo in millisecondi prima che la descrizione del comando venga visualizzata, 0 per mai", + + "CoC7.getTheExample": "Copia Esempio", + "CoC7.Copied": "Copiato il testo di esempio negli Appunti" + +} diff --git a/system.json b/system.json index 766f36ad..61d17f4c 100644 --- a/system.json +++ b/system.json @@ -111,6 +111,11 @@ "name": "한국어", "path": "lang/ko.json" } + { + "lang": "it", + "name": "Italiano", + "path": "lang/it.json" + } ], "socket": true, "gridDistance": 5, From 8d7843d8848990304d6ac0822fe3727b508bce12 Mon Sep 17 00:00:00 2001 From: Stefano1975t <97825580+Stefano1975t@users.noreply.github.com> Date: Sun, 16 Jan 2022 16:06:21 +0100 Subject: [PATCH 397/726] Update it.json Corrected a spelling error. --- lang/it.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/it.json b/lang/it.json index 193cf96d..5ee6a041 100644 --- a/lang/it.json +++ b/lang/it.json @@ -1,5 +1,5 @@ { - "CoC7.title": "Il Richiamo di Cthulhu 7h Edizione (Non ufficiale)", + "CoC7.title": "Il Richiamo di Cthulhu 7a Edizione (Non ufficiale)", "CoC7.Entities.Character": "Personaggio", "CoC7.Entities.Container": "Contenitore", From e242136e35189e0ebee5bbf0ef5b7e48780d353c Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 16 Jan 2022 16:08:24 +0000 Subject: [PATCH 398/726] Updated translations list --- .github/TRANSLATIONS.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 5de41c6d..d0ffaf83 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -6,22 +6,22 @@ The **sv** translation is currently up to date The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | ja | ko | pl | pt-BR | zh-TW | -| :---------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **10** | **4** | **6** | **6** | **13** | **12** | **6** | **6** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| Key | de | es | fr | it | ja | ko | pl | pt-BR | zh-TW | +| :---------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **10** | **4** | **6** | **4** | **6** | **13** | **12** | **6** | **6** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.Copied From ffdd92acfd470141c9d61d0325c7c7695c3f26d5 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 16 Jan 2022 19:04:11 +0000 Subject: [PATCH 399/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index a33019be..f79dae55 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -5,8 +5,9 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV and @sn - Updated system for supporting conditions and allow activating conditions from FoundryVTT combat tracker and effects menu - Update to rest function to prevent adding more than max hp and mp for chat message - Update to NPC sheet to use same icons for dead, indefInsane, prone, tempoInsane, and unconscious as PCs +- New Italian localization, thanks to @Stefano1975t - New Korean localization, thanks to @Mero-Pe -- Update to German localization, thanks to @brockhaus +- Update to German localization, thanks to @brockhaus - Update to Spanish localization, thanks to @lozalojo - Update to Swedish localization, thanks to @Rangertheman From e72f7b4d83b5285e81d5e10a964498d7fbef4315 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 17 Jan 2022 11:08:42 +0000 Subject: [PATCH 400/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index f79dae55..a5ba8338 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,9 +1,9 @@ ## Changes coming in a future release: -When not specified, all changes were made by @castanhocorreia, @HavlockV and @snap01. +When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. -- Updated system for supporting conditions and allow activating conditions from FoundryVTT combat tracker and effects menu -- Update to rest function to prevent adding more than max hp and mp for chat message +- Replace effect and status with conditions. Allow activating conditions from FoundryVTT combat tracker and effects menu as well as the character sheets +- Update rest function to prevent showing more than max hp or mp was added to the chat summary message - Update to NPC sheet to use same icons for dead, indefInsane, prone, tempoInsane, and unconscious as PCs - New Italian localization, thanks to @Stefano1975t - New Korean localization, thanks to @Mero-Pe From fd58ba38f7d88c2d3f17a82e316c403663ff29fd Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 17 Jan 2022 21:48:59 +0000 Subject: [PATCH 401/726] Split Pulp Cthulhu rules into individual rules --- lang/en.json | 14 +- module/actors/actor.js | 85 ++++++-- module/actors/sheets/base.js | 16 +- module/actors/sheets/character.js | 2 +- module/actors/sheets/container.js | 2 +- module/actors/sheets/npc-sheet.js | 2 +- module/coc7.js | 34 ++- module/items/item.js | 9 +- module/scripts/game-rules.js | 147 +++++++++---- module/updater.js | 55 ++++- module/utilities.js | 52 ++--- templates/actors/character-sheet-v2.html | 6 +- templates/actors/character-sheet.html | 4 +- templates/actors/npc-sheet.html | 2 +- .../actors/parts/actor-inventory-items.html | 196 +++++++++--------- .../parts/character-development-v2.html | 10 +- .../actors/parts/character-development.html | 10 +- .../actors/parts/development-controls.html | 162 +++++++-------- templates/system/rule-settings.html | 36 +++- 19 files changed, 531 insertions(+), 313 deletions(-) diff --git a/lang/en.json b/lang/en.json index 48a00ee8..ea12642f 100644 --- a/lang/en.json +++ b/lang/en.json @@ -746,14 +746,22 @@ "CoC7.Migrate.TriggerRestart": "Save and restart", "CoC7.Settings.CoreRules.Title": "Core Rule Book Optional Rules", - "CoC7.Settings.Rules.Name": "Variant Rules", - "CoC7.Settings.Rules.Label": "Configure Variant Rules", - "CoC7.Settings.Rules.Hint": "Configure variant rules like Pulp Cthulhu.", + "CoC7.Settings.Rules.Name": "Variant/Optional Rules", + "CoC7.Settings.Rules.Label": "Configure Variant/Optional Rules", + "CoC7.Settings.Rules.Hint": "Configure variant/optional rules like Pulp Cthulhu.", "CoC7.Settings.HouseRules.Title": "Common House Rules", "CoC7.Settings.PulpRules.DoubleMaxHealth.Name": "Double maximum health", "CoC7.Settings.PulpRules.DoubleMaxHealth.Hint": "Maximum health is (CON + SIZ) / 5", "CoC7.Settings.PulpRules.DevelopmentRollLuck.Name": "Increase Development Rolls For Luck", "CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint": "Increase luck for failed and successful luck development roll", + "CoC7.Settings.PulpRules.Archetype.Name": "Pulp Archetypes", + "CoC7.Settings.PulpRules.Archetype.Hint": "", + "CoC7.Settings.PulpRules.Organization.Name": "Hero Organization", + "CoC7.Settings.PulpRules.Organization.Hint": "", + "CoC7.Settings.PulpRules.Talents.Name": "Pulp Talents", + "CoC7.Settings.PulpRules.Talents.Hint": "", + "CoC7.Settings.PulpRules.FasterRecovery.Name": "Faster Recovery", + "CoC7.Settings.PulpRules.FasterRecovery.Hint": "Natural healing is increased to two hit points per day", "CoC7.Maximize": "Maximize", "CoC7.Summarize": "Summarize", diff --git a/module/actors/actor.js b/module/actors/actor.js index 4c861cfe..6de04cbe 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -281,7 +281,10 @@ export class CoCActor extends Actor { // If it's not a real time no need to activate the bout if (!realTime) return result - this.setCondition(COC7.status.tempoInsane, { realTime: realTime, duration: duration }) + this.setCondition(COC7.status.tempoInsane, { + realTime: realTime, + duration: duration + }) // const effect = this.effects.get( effectData._id); // effect.sheet.render(true); @@ -1437,7 +1440,7 @@ export class CoCActor extends Actor { return Math.floor( (this.data.data.characteristics.siz.value + this.data.data.characteristics.con.value) / - (game.settings.get('CoC7', 'pulpRules') && + (game.settings.get('CoC7', 'pulpRuleDoubleMaxHealth') && this.data.type === 'character' ? 5 : 10) @@ -2826,11 +2829,14 @@ export class CoCActor extends Actor { async developLuck (fastForward = false) { const currentLuck = this.data.data.attribs.lck.value if (!currentLuck) await this.update({ 'data.attribs.lck.value': 0 }) - const pulpRulesActivated = game.settings.get('CoC7', 'pulpRules') + const pulpRuleDevelopmentRollLuck = game.settings.get( + 'CoC7', + 'pulpRuleDevelopmentRollLuck' + ) const upgradeRoll = (await new Roll('1D100').roll({ async: true })).total const higherThanCurrentLuck = upgradeRoll > currentLuck let augmentRoll - if (pulpRulesActivated) { + if (pulpRuleDevelopmentRollLuck) { higherThanCurrentLuck ? (augmentRoll = '2D10+10') : (augmentRoll = '1D10+5') @@ -2839,7 +2845,7 @@ export class CoCActor extends Actor { } const title = game.i18n.localize('CoC7.RollLuck4Dev') let message = '

        ' - if (pulpRulesActivated || higherThanCurrentLuck) { + if (pulpRuleDevelopmentRollLuck || higherThanCurrentLuck) { const augmentValue = (await new Roll(augmentRoll).roll({ async: true })) .total await this.update({ @@ -2940,9 +2946,19 @@ export class CoCActor extends Actor { } } - async setCondition (conditionName, { forceValue = false, justThis = false, realTime = null, duration = null } = {}) { + async setCondition ( + conditionName, + { + forceValue = false, + justThis = false, + realTime = null, + duration = null + } = {} + ) { if (!forceValue && game.settings.get('CoC7', 'enableStatusIcons')) { - const effects = this.effects.filter(effect => effect.data.flags.core?.statusId === conditionName).map(effect => effect.id) + const effects = this.effects + .filter(effect => effect.data.flags.core?.statusId === conditionName) + .map(effect => effect.id) const custom = {} switch (conditionName) { case COC7.status.dead: @@ -2980,18 +2996,23 @@ export class CoCActor extends Actor { break } if (effects.length === 0) { - const effect = CONFIG.statusEffects.filter(effect => effect.id === conditionName) + const effect = CONFIG.statusEffects.filter( + effect => effect.id === conditionName + ) if (effect.length === 1) { - const effectData = mergeObject({ - label: game.i18n.localize(effect[0].label), - icon: effect[0].icon, - flags: { - core: { - statusId: effect[0].id - } + const effectData = mergeObject( + { + label: game.i18n.localize(effect[0].label), + icon: effect[0].icon, + flags: { + core: { + statusId: effect[0].id + } + }, + disabled: false }, - disabled: false - }, custom) + custom + ) await super.createEmbeddedDocuments('ActiveEffect', [effectData]) } else { // This doesn't exist in FoundryVTT ActiveEffects? @@ -3011,7 +3032,9 @@ export class CoCActor extends Actor { case COC7.status.dying: case COC7.status.prone: case COC7.status.dead: - await this.update({ [`data.conditions.${conditionName}.value`]: true }) + await this.update({ + [`data.conditions.${conditionName}.value`]: true + }) break case COC7.status.tempoInsane: { @@ -3023,10 +3046,20 @@ export class CoCActor extends Actor { fields[`data.conditions.${conditionName}.duration`] = duration } } - if (!Object.prototype.hasOwnProperty.call(fields, `data.conditions.${conditionName}.realTime`)) { + if ( + !Object.prototype.hasOwnProperty.call( + fields, + `data.conditions.${conditionName}.realTime` + ) + ) { fields[`data.conditions.${conditionName}.-=realTime`] = null } - if (!Object.prototype.hasOwnProperty.call(fields, `data.conditions.${conditionName}.duration`)) { + if ( + !Object.prototype.hasOwnProperty.call( + fields, + `data.conditions.${conditionName}.duration` + ) + ) { fields[`data.conditions.${conditionName}.-=duration`] = null } await this.update(fields) @@ -3043,7 +3076,9 @@ export class CoCActor extends Actor { !this.hasConditionStatus(COC7.status.unconscious) && !this.hasConditionStatus(COC7.status.dead) ) { - const conCheck = new CoC7ConCheck(this.isToken ? this.tokenKey : this.id) + const conCheck = new CoC7ConCheck( + this.isToken ? this.tokenKey : this.id + ) conCheck.toMessage() } break @@ -3059,7 +3094,9 @@ export class CoCActor extends Actor { async unsetCondition (conditionName, { forceValue = false } = {}) { if (!forceValue && game.settings.get('CoC7', 'enableStatusIcons')) { - const effects = this.effects.filter(effect => effect.data.flags.core?.statusId === conditionName).map(effect => effect.id) + const effects = this.effects + .filter(effect => effect.data.flags.core?.statusId === conditionName) + .map(effect => effect.id) if (effects.length > 0) { await super.deleteEmbeddedDocuments('ActiveEffect', effects) } else { @@ -3075,7 +3112,9 @@ export class CoCActor extends Actor { case COC7.status.dying: case COC7.status.prone: case COC7.status.dead: - await this.update({ [`data.conditions.${conditionName}.value`]: false }) + await this.update({ + [`data.conditions.${conditionName}.value`]: false + }) break } } diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index d3e62f90..cfa8e5c2 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -201,7 +201,11 @@ export class CoC7ActorSheet extends ActorSheet { if (!data.data.biography) data.data.biography = [] if (!data.data.encounteredCreatures) data.data.encounteredCreatures = [] - data.pulpCharacter = game.settings.get('CoC7', 'pulpRules') + data.pulpRuleArchetype = game.settings.get('CoC7', 'pulpRuleArchetype') + data.pulpRuleOrganization = game.settings.get( + 'CoC7', + 'pulpRuleOrganization' + ) } data.isDead = this.actor.dead @@ -729,7 +733,9 @@ export class CoC7ActorSheet extends ActorSheet { // Status monitor if (game.user.isGM || game.settings.get('CoC7', 'statusPlayerEditable')) { html.find('.reset-counter').click(this._onResetCounter.bind(this)) - html.find('.condition-monitor').click(this._onConditionToggle.bind(this)) + html + .find('.condition-monitor') + .click(this._onConditionToggle.bind(this)) html.find('.is-dying').click(this.heal.bind(this)) html.find('.is-dead').click(this.revive.bind(this)) } @@ -864,7 +870,11 @@ export class CoC7ActorSheet extends ActorSheet { if (typeof this.actor.data.data.conditions !== 'undefined') { const disable = {} for (const condition in this.actor.data.data.conditions) { - if (typeof this.actor.data.data.conditions[condition].value !== 'undefined' && this.actor.data.data.conditions[condition].value === true) { + if ( + typeof this.actor.data.data.conditions[condition].value !== + 'undefined' && + this.actor.data.data.conditions[condition].value === true + ) { disable[`data.conditions.${condition}.value`] = false } } diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index dc6548a2..bdc2da37 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -189,7 +189,7 @@ export class CoC7CharacterSheetV2 extends CoC7ActorSheet { !data.data.flags.locked data.showInventoryTalents = Object.prototype.hasOwnProperty.call(data.itemsByType, 'talent') || - !data.data.flags.locked + (!data.data.flags.locked && game.settings.get('CoC7', 'pulpRuleTalents')) data.showInventoryStatuses = Object.prototype.hasOwnProperty.call(data.itemsByType, 'status') || !data.data.flags.locked diff --git a/module/actors/sheets/container.js b/module/actors/sheets/container.js index 6f4044e7..6ab068ba 100644 --- a/module/actors/sheets/container.js +++ b/module/actors/sheets/container.js @@ -78,7 +78,7 @@ export class CoC7ContainerSheet extends ActorSheet { !sheetData.data.flags.locked sheetData.showInventoryTalents = Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'talent') || - !sheetData.data.flags.locked + (!data.data.flags.locked && game.settings.get('CoC7', 'pulpRuleTalents')) sheetData.showInventoryWeapons = Object.prototype.hasOwnProperty.call(sheetData.itemsByType, 'weapon') || !sheetData.data.flags.locked diff --git a/module/actors/sheets/npc-sheet.js b/module/actors/sheets/npc-sheet.js index 83c5e60d..c6f83224 100644 --- a/module/actors/sheets/npc-sheet.js +++ b/module/actors/sheets/npc-sheet.js @@ -39,7 +39,7 @@ export class CoC7NPCSheet extends CoC7ActorSheet { !data.data.flags.locked data.showInventoryTalents = Object.prototype.hasOwnProperty.call(data.itemsByType, 'talent') || - !data.data.flags.locked + (!data.data.flags.locked && game.settings.get('CoC7', 'pulpRuleTalents')) data.showInventoryStatuses = Object.prototype.hasOwnProperty.call(data.itemsByType, 'status') || !data.data.flags.locked diff --git a/module/coc7.js b/module/coc7.js index 5e352e6c..5e17c93c 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -29,7 +29,7 @@ import { initECC } from './common/chatcardlib/src/chatcardlib.js' Hooks.on('renderSettingsConfig', (app, html, options) => { const systemTab = $(app.form).find('.tab[data-tab=system]') systemTab - .find('select[name=CoC7\\.displayInitDices]') + .find('input[name=CoC7\\.displayInitDices]') .closest('div.form-group') .before( '

        ' + @@ -167,12 +167,16 @@ Hooks.once('setup', function () { }, {}) } - let effectIndex = CONFIG.statusEffects.findIndex(t => t.id === COC7.status.dead) + let effectIndex = CONFIG.statusEffects.findIndex( + t => t.id === COC7.status.dead + ) if (effectIndex !== -1) { CONFIG.statusEffects[effectIndex].icon = 'systems/CoC7/assets/icons/tombstone.svg' } - effectIndex = CONFIG.statusEffects.findIndex(t => t.id === COC7.status.unconscious) + effectIndex = CONFIG.statusEffects.findIndex( + t => t.id === COC7.status.unconscious + ) if (effectIndex !== -1) { CONFIG.statusEffects[effectIndex].icon = 'systems/CoC7/assets/icons/knocked-out-stars.svg' @@ -202,7 +206,10 @@ Hooks.once('setup', function () { }) Hooks.on('createActiveEffect', (data, options, userId) => { - if (typeof data.data.flags.core !== 'undefined' && typeof data.data.flags.core.statusId !== 'undefined') { + if ( + typeof data.data.flags.core !== 'undefined' && + typeof data.data.flags.core.statusId !== 'undefined' + ) { switch (data.data.flags.core.statusId) { case COC7.status.indefInsane: case COC7.status.unconscious: @@ -210,7 +217,9 @@ Hooks.on('createActiveEffect', (data, options, userId) => { case COC7.status.dying: case COC7.status.prone: case COC7.status.dead: - data.parent.setCondition(data.data.flags.core.statusId, { forceValue: true }) + data.parent.setCondition(data.data.flags.core.statusId, { + forceValue: true + }) break case COC7.status.tempoInsane: { @@ -224,7 +233,11 @@ Hooks.on('createActiveEffect', (data, options, userId) => { duration = Math.floor(duration / 3600) } } - data.parent.setCondition(COC7.status.tempoInsane, { forceValue: true, realTime: realTime, duration: duration }) + data.parent.setCondition(COC7.status.tempoInsane, { + forceValue: true, + realTime: realTime, + duration: duration + }) } break } @@ -232,7 +245,10 @@ Hooks.on('createActiveEffect', (data, options, userId) => { }) Hooks.on('deleteActiveEffect', (data, options, userId) => { - if (typeof data.data.flags.core !== 'undefined' && typeof data.data.flags.core.statusId !== 'undefined') { + if ( + typeof data.data.flags.core !== 'undefined' && + typeof data.data.flags.core.statusId !== 'undefined' + ) { switch (data.data.flags.core.statusId) { case COC7.status.tempoInsane: case COC7.status.indefInsane: @@ -241,7 +257,9 @@ Hooks.on('deleteActiveEffect', (data, options, userId) => { case COC7.status.dying: case COC7.status.prone: case COC7.status.dead: - data.parent.unsetCondition(data.data.flags.core.statusId, { forceValue: true }) + data.parent.unsetCondition(data.data.flags.core.statusId, { + forceValue: true + }) } } }) diff --git a/module/items/item.js b/module/items/item.js index 6f31fd2a..16ed05a1 100644 --- a/module/items/item.js +++ b/module/items/item.js @@ -642,10 +642,11 @@ export class CoC7Item extends Item { value += this.data.data.adjustments?.experience ? parseInt(this.data.data.adjustments?.experience) : 0 - if (game.settings.get('CoC7', 'pulpRules')) { - if (this.data.data.adjustments?.archetype) { - value += parseInt(this.data.data.adjustments?.archetype) - } + if ( + game.settings.get('CoC7', 'pulpRuleArchetype') && + this.data.data.adjustments?.archetype + ) { + value += parseInt(this.data.data.adjustments?.archetype) } } else { value = parseInt(this.data.data.value) diff --git a/module/scripts/game-rules.js b/module/scripts/game-rules.js index a97ca948..6083eb5b 100644 --- a/module/scripts/game-rules.js +++ b/module/scripts/game-rules.js @@ -1,22 +1,14 @@ -/* global CONFIG, FormApplication, game, mergeObject */ +/* global $, CONFIG, FormApplication, game, mergeObject */ const SETTINGS = { - // pulpRules: { - // name: 'SETTINGS.PulpRules', - // hint: 'SETTINGS.PulpRulesHint', - // scope: 'world', - // config: true, - // default: false, - // type: Boolean - // } - optionalDevelopmentRollForLuck: { - name: 'SETTINGS.developmentRollForLuck', - hint: 'SETTINGS.developmentRollForLuckHint', + pulpRules: { + name: '', + hint: '', scope: 'world', config: false, default: false, type: Boolean }, - optionalInitiativeRule: { + initiativeRule: { name: 'SETTINGS.InitiativeRule', hint: 'SETTINGS.InitiativeRuleHint', scope: 'world', @@ -29,6 +21,14 @@ const SETTINGS = { }, onChange: rule => _setInitiativeOptions(rule) }, + developmentRollForLuck: { + name: 'SETTINGS.developmentRollForLuck', + hint: 'SETTINGS.developmentRollForLuckHint', + scope: 'world', + config: false, + default: false, + type: Boolean + }, pulpRuleDoubleMaxHealth: { name: 'CoC7.Settings.PulpRules.DoubleMaxHealth.Name', hint: 'CoC7.Settings.PulpRules.DoubleMaxHealth.Hint', @@ -37,7 +37,47 @@ const SETTINGS = { default: false, type: Boolean }, - houseRulesOpposedRollTieBreaker: { + pulpRuleDevelopmentRollLuck: { + name: 'CoC7.Settings.PulpRules.DevelopmentRollLuck.Name', + hint: 'CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint', + scope: 'world', + config: false, + default: false, + type: Boolean + }, + pulpRuleArchetype: { + name: 'CoC7.Settings.PulpRules.Archetype.Name', + hint: 'CoC7.Settings.PulpRules.Archetype.Hint', + scope: 'world', + config: false, + default: false, + type: Boolean + }, + pulpRuleOrganization: { + name: 'CoC7.Settings.PulpRules.Organization.Name', + hint: 'CoC7.Settings.PulpRules.Organization.Hint', + scope: 'world', + config: false, + default: false, + type: Boolean + }, + pulpRuleTalents: { + name: 'CoC7.Settings.PulpRules.Talents.Name', + hint: 'CoC7.Settings.PulpRules.Talents.Hint', + scope: 'world', + config: false, + default: false, + type: Boolean + }, + pulpRuleFasterRecovery: { + name: 'CoC7.Settings.PulpRules.FasterRecovery.Name', + hint: 'CoC7.Settings.PulpRules.FasterRecovery.Hint', + scope: 'world', + config: false, + default: false, + type: Boolean + }, + opposedRollTieBreaker: { name: 'SETTINGS.OpposedRollTieBreaker', hint: 'SETTINGS.OpposedRollTieBreakerHint', scope: 'world', @@ -66,7 +106,7 @@ function _setInitiativeOptions (rule) { export class CoC7GameRuleSettings extends FormApplication { static get defaultOptions () { return mergeObject(super.defaultOptions, { - title: 'CoC7.Settings.Rules.Title', + title: 'SETTINGS.TitleRules', id: 'rules-settings', template: 'systems/CoC7/templates/system/rule-settings.html', width: 550, @@ -86,11 +126,15 @@ export class CoC7GameRuleSettings extends FormApplication { value: game.settings.get('CoC7', k), setting: v } - if (k.match(/^pulpRule/)) { - pulpRules[(options[k].value)] = true + if (k.match(/^pulpRule.{2,}$/)) { + pulpRules[options[k].value] = true } } - options.pulpSelection = (pulpRules.true ? (pulpRules.false ? 'some' : 'all') : 'none') + options.pulpSelection = pulpRules.true + ? pulpRules.false + ? 'some' + : 'all' + : 'none' return options } @@ -98,26 +142,35 @@ export class CoC7GameRuleSettings extends FormApplication { for (const [k, v] of Object.entries(SETTINGS)) { game.settings.register('CoC7', k, v) } - _setInitiativeOptions(game.settings.get('CoC7', 'houseRulesInitiativeRule')) + _setInitiativeOptions(game.settings.get('CoC7', 'initiativeRule')) } activateListeners (html) { super.activateListeners(html) - html.find('#pulpRulesSelect').on('change', (event) => this.onChangePulpSelect(event)) - html.find('input.pulpRulesSelect[type=checkbox]').on('click', (event) => this.onClickPulp(event)) + html + .find('#pulpRulesSelect') + .on('change', event => this.onChangePulpSelect(event)) + html + .find('input.pulpRulesSelect[type=checkbox]') + .on('click', event => this.onClickPulp(event)) + html + .find('button[name=reset]') + .on('click', event => this.onResetDefaults(event)) } onChangePulpSelect (event) { const val = $(event.currentTarget).val() if (val === 'none' || val === 'all') { - $('#rules-settings').find('input.pulpRulesSelect[type=checkbox]').each(function () { - const checkbox = $(this) - if (val === 'none') { - checkbox.prop('checked', false) - } else { - checkbox.prop('checked', true) - } - }) + $('#rules-settings') + .find('input.pulpRulesSelect[type=checkbox]') + .each(function () { + const checkbox = $(this) + if (val === 'none') { + checkbox.prop('checked', false) + } else { + checkbox.prop('checked', true) + } + }) } } @@ -126,14 +179,32 @@ export class CoC7GameRuleSettings extends FormApplication { true: false, false: false } - $('#rules-settings').find('input.pulpRulesSelect[type=checkbox]').each(function () { - const checkbox = $(this) - if (checkbox.prop('checked')) { - pulpRules.true = true - } else { - pulpRules.false = true - } - }) - $('#pulpRulesSelect').val((pulpRules.true ? (pulpRules.false ? 'some' : 'all') : 'none')) + $('#rules-settings') + .find('input.pulpRulesSelect[type=checkbox]') + .each(function () { + const checkbox = $(this) + if (checkbox.prop('checked')) { + pulpRules.true = true + } else { + pulpRules.false = true + } + }) + $('#pulpRulesSelect').val( + pulpRules.true ? (pulpRules.false ? 'some' : 'all') : 'none' + ) + } + + async onResetDefaults (event) { + event.preventDefault() + for await (const [k, v] of Object.entries(SETTINGS)) { + await game.settings.set('CoC7', k, v?.default) + } + return this.render() + } + + async _updateObject (event, data) { + for await (const key of Object.keys(SETTINGS)) { + game.settings.set('CoC7', key, data[key]) + } } } diff --git a/module/updater.js b/module/updater.js index 256ca73b..ce2c51c5 100644 --- a/module/updater.js +++ b/module/updater.js @@ -150,6 +150,17 @@ export class Updater { } } + // Migrate Settings + if (game.settings.get('CoC7', 'pulpRules')) { + game.settings.set('CoC7', 'pulpRules', false) + game.settings.set('CoC7', 'pulpRuleDoubleMaxHealth', true) + game.settings.set('CoC7', 'pulpRuleDevelopmentRollLuck', true) + game.settings.set('CoC7', 'pulpRuleArchetype', true) + game.settings.set('CoC7', 'pulpRuleOrganization', true) + game.settings.set('CoC7', 'pulpRuleTalents', true) + game.settings.set('CoC7', 'pulpRuleFasterRecovery', true) + } + const settings = mergeObject(this.updatedModules || {}, this.currentModules) game.settings.set('CoC7', 'systemUpdatedModuleVersion', settings) game.settings.set('CoC7', 'systemUpdateVersion', game.system.data.version) @@ -503,7 +514,10 @@ export class Updater { } static _migrateActorStatusEffectActive (actor, updateData) { - if (typeof actor.data.status !== 'undefined' || typeof actor.data.conditions === 'undefined') { + if ( + typeof actor.data.status !== 'undefined' || + typeof actor.data.conditions === 'undefined' + ) { updateData['data.conditions.criticalWounds.value'] = false updateData['data.conditions.unconscious.value'] = false updateData['data.conditions.dying.value'] = false @@ -511,32 +525,55 @@ export class Updater { updateData['data.conditions.prone.value'] = false updateData['data.conditions.tempoInsane.value'] = false updateData['data.conditions.indefInsane.value'] = false - if (typeof actor.data.status.criticalWounds.value !== 'undefined' && actor.data.status.criticalWounds.value) { + if ( + typeof actor.data.status.criticalWounds.value !== 'undefined' && + actor.data.status.criticalWounds.value + ) { updateData['data.conditions.criticalWounds.value'] = true } - if (typeof actor.data.status.unconscious.value !== 'undefined' && actor.data.status.unconscious.value) { + if ( + typeof actor.data.status.unconscious.value !== 'undefined' && + actor.data.status.unconscious.value + ) { updateData['data.conditions.unconscious.value'] = true } - if (typeof actor.data.status.dying.value !== 'undefined' && actor.data.status.dying.value) { + if ( + typeof actor.data.status.dying.value !== 'undefined' && + actor.data.status.dying.value + ) { updateData['data.conditions.dying.value'] = true } - if (typeof actor.data.status.dead.value !== 'undefined' && actor.data.status.dead.value) { + if ( + typeof actor.data.status.dead.value !== 'undefined' && + actor.data.status.dead.value + ) { updateData['data.conditions.dead.value'] = true } - if (typeof actor.data.status.prone.value !== 'undefined' && actor.data.status.prone.value) { + if ( + typeof actor.data.status.prone.value !== 'undefined' && + actor.data.status.prone.value + ) { updateData['data.conditions.prone.value'] = true } - if (typeof actor.data.status.tempoInsane.value !== 'undefined' && actor.data.status.tempoInsane.value) { + if ( + typeof actor.data.status.tempoInsane.value !== 'undefined' && + actor.data.status.tempoInsane.value + ) { updateData['data.conditions.tempoInsane.value'] = true } - if (typeof actor.data.status.indefInsane.value !== 'undefined' && actor.data.status.indefInsane.value) { + if ( + typeof actor.data.status.indefInsane.value !== 'undefined' && + actor.data.status.indefInsane.value + ) { updateData['data.conditions.indefInsane.value'] = true } const effects = actor.effects let changed = false for (let i = 0, im = effects.length; i < im; i++) { const effect = effects[i] - const match = effect.icon.match(/\/(hanging-spider|tentacles-skull|arm-sling|heart-beats|tombstone|knocked-out-stars|falling|skull|unconscious)\./) + const match = effect.icon.match( + /\/(hanging-spider|tentacles-skull|arm-sling|heart-beats|tombstone|knocked-out-stars|falling|skull|unconscious)\./ + ) if (match !== null) { let statusId = '' switch (match[1]) { diff --git a/module/utilities.js b/module/utilities.js index e87b545e..5527bedc 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -490,39 +490,41 @@ export class CoC7Utilities { const mpMax = actor.data.data.attribs.mp.max const pow = actor.data.data.characteristics.pow.value chatContent = chatContent + `
        ${actor.name}. ` - if (isCriticalWounds === false && hpValue < hpMax) { - if (game.settings.get('CoC7', 'pulpRules')) { - let healAmount = 2 - if (quickHealer === true) { - healAmount = 3 - } - healAmount = Math.min(healAmount, hpMax - hpValue) + if (hpValue < hpMax) { + if (isCriticalWounds === true) { chatContent = chatContent + - `${game.i18n.format( - 'CoC7.pulpHealthRecovered', - { number: healAmount } + `${game.i18n.localize( + 'CoC7.hasCriticalWounds' )}. ` + } else { + let healAmount = 1 + if (game.settings.get('CoC7', 'pulpRuleFasterRecovery')) { + healAmount = 2 + } + if (quickHealer === true) { + healAmount++ + } + healAmount = Math.min(healAmount, hpMax - hpValue) + if (healAmount === 1) { + chatContent = + chatContent + + `${game.i18n.localize( + 'CoC7.healthRecovered' + )}. ` + } else { + chatContent = + chatContent + + `${game.i18n.format( + 'CoC7.pulpHealthRecovered', + { number: healAmount } + )}. ` + } actor.update({ 'data.attribs.hp.value': actor.data.data.attribs.hp.value + healAmount }) - } else { - chatContent = - chatContent + - `${game.i18n.localize( - 'CoC7.healthRecovered' - )}. ` - actor.update({ - 'data.attribs.hp.value': actor.data.data.attribs.hp.value + 1 - }) } - } else if (isCriticalWounds === true && hpValue < hpMax) { - chatContent = - chatContent + - `${game.i18n.localize( - 'CoC7.hasCriticalWounds' - )}. ` } if (dailySanityLoss > 0) { chatContent = diff --git a/templates/actors/character-sheet-v2.html b/templates/actors/character-sheet-v2.html index c2483e56..97cce76b 100644 --- a/templates/actors/character-sheet-v2.html +++ b/templates/actors/character-sheet-v2.html @@ -17,7 +17,7 @@ {{/if}} - {{#if pulpCharacter}} + {{#if pulpRuleArchetype}}
        {{#if data.infos.archetypeSet}} @@ -29,6 +29,8 @@ {{/if}}
        + {{/if}} + {{#if pulpRuleOrganization}}
        @@ -210,4 +212,4 @@
        - + \ No newline at end of file diff --git a/templates/actors/character-sheet.html b/templates/actors/character-sheet.html index d8652025..4d8c485a 100644 --- a/templates/actors/character-sheet.html +++ b/templates/actors/character-sheet.html @@ -8,7 +8,7 @@ - {{#if pulpCharacter}} + {{#if pulpRuleArchetype}}
        {{#if data.infos.archetypeSet}} @@ -20,6 +20,8 @@ {{/if}}
        + {{/if}} + {{#if pulpRuleOrganization}}
        diff --git a/templates/actors/npc-sheet.html b/templates/actors/npc-sheet.html index ba479c9f..6d28ef99 100644 --- a/templates/actors/npc-sheet.html +++ b/templates/actors/npc-sheet.html @@ -23,7 +23,7 @@
        - {{#if pulpCharacter}} + {{#if pulpRuleOrganization}}
        diff --git a/templates/actors/parts/actor-inventory-items.html b/templates/actors/parts/actor-inventory-items.html index c5107e52..5f223614 100644 --- a/templates/actors/parts/actor-inventory-items.html +++ b/templates/actors/parts/actor-inventory-items.html @@ -7,52 +7,52 @@

        {{localize 'CoC7.InventoryIsCurrentlyEmpty'}}

        1. -
          -

          {{localize 'CoC7.Items'}}

          - {{#unless data.flags.locked}} -
          -
          {{localize 'CoC7.AddItem'}}
          -
          - {{/unless}} -
          +
          +

          {{localize 'CoC7.Items'}}

          + {{#unless data.flags.locked}} +
          +
          {{localize 'CoC7.AddItem'}}
          +
          + {{/unless}} +
        2. {{#each itemsByType.item as |item id|}} -
        3. -
          -

          {{item.name}}

          -
          - - - -
          -
        4. +
        5. +
          +

          {{item.name}}

          +
          + + + +
          +
        6. {{/each}}
        {{/if}} {{#if showInventoryBooks}}
        -
          +
          1. -
            -

            {{localize 'CoC7.Books'}}

            - {{#unless data.flags.locked}} -
            -
            {{localize 'CoC7.AddBook'}}
            -
            - {{/unless}} -
            +
            +

            {{localize 'CoC7.Books'}}

            + {{#unless data.flags.locked}} +
            +
            {{localize 'CoC7.AddBook'}}
            +
            + {{/unless}} +
          2. {{#each itemsByType.book as |item id|}} -
          3. -
            -

            {{item.name}}

            -
            - - - -
            -
          4. +
          5. +
            +

            {{item.name}}

            +
            + + + +
            +
          6. {{/each}}
        @@ -61,99 +61,99 @@

        {{item.name}}

        1. -
          -

          {{localize 'CoC7.Spells'}}

          - {{#unless data.flags.locked}} -
          -
          {{localize 'CoC7.AddSpell'}}
          -
          - {{/unless}} -
          +
          +

          {{localize 'CoC7.Spells'}}

          + {{#unless data.flags.locked}} +
          +
          {{localize 'CoC7.AddSpell'}}
          +
          + {{/unless}} +
        2. {{#each itemsByType.spell as |item id|}} -
        3. -
          -

          {{item.name}}

          -
          - - - -
          -
        4. +
        5. +
          +

          {{item.name}}

          +
          + + + +
          +
        6. {{/each}}
        {{/if}} - {{#if (and pulpCharacter showInventoryTalents)}} + {{#if showInventoryTalents}}
        1. -
          -

          {{localize 'CoC7.PulpTalents'}}

          -
          +
          +

          {{localize 'CoC7.PulpTalents'}}

          +
        2. {{#each itemsByType.talent as |item id|}} -
        3. -
          -

          {{item.name}}

          -
          - - -
          -
        4. +
        5. +
          +

          {{item.name}}

          +
          + + +
          +
        6. {{/each}} -
        +

      {{/if}} {{#if showInventoryWeapons}}
      1. -
        -

        {{localize 'CoC7.Weapons'}}

        - {{#unless data.flags.locked}} -
        -
        {{localize 'CoC7.AddWeapon'}}
        -
        - {{/unless}} -
        +
        +

        {{localize 'CoC7.Weapons'}}

        + {{#unless data.flags.locked}} +
        +
        {{localize 'CoC7.AddWeapon'}}
        +
        + {{/unless}} +
      2. {{#each itemsByType.weapon as |item id|}} -
      3. -
        -

        {{item.name}}

        -
        - - - -
        -
      4. +
      5. +
        +

        {{item.name}}

        +
        + + + +
        +
      6. {{/each}} -
      +
    {{/if}} {{#if showInventoryStatuses}}
    1. -
      -

      {{localize 'CoC7.Status'}}

      -
      +
      +

      {{localize 'CoC7.Status'}}

      +
    2. {{#each itemsByType.status as |item id|}} -
    3. -
      -

      {{item.name}}

      -
      - {{#if ../isGM}} - - - {{/if}} -
      -
    4. +
    5. +
      +

      {{item.name}}

      +
      + {{#if ../isGM}} + + + {{/if}} +
      +
    6. {{/each}} -
    +
    {{/if}} - + \ No newline at end of file diff --git a/templates/actors/parts/character-development-v2.html b/templates/actors/parts/character-development-v2.html index 4d7092fe..a253ef4a 100644 --- a/templates/actors/parts/character-development-v2.html +++ b/templates/actors/parts/character-development-v2.html @@ -1,6 +1,6 @@
      {{#each skills as |skill id|}} -
    1. +
    2. {{#unless skill.data.properties.noadjustments}}
      @@ -10,7 +10,7 @@ {{/if}}
      - {{#if ../pulpCharacter}} + {{#if ../pulpRuleArchetype}}
      {{#if skill.data.flags.archetype}} @@ -21,7 +21,7 @@ {{/if}} {{/unless}}
      - + {{#if skill.data.properties.special}}{{skill.data.specialization}} :{{/if}}{{skill.name}}
      {{skill.data.base}} @@ -46,7 +46,7 @@ {{skill.data.adjustments.occupation}} {{/if}}
      - {{#if ../pulpCharacter}} + {{#if ../pulpRuleArchetype}}
      {{#if ../allowCharCreation}} {{#if skill.data.flags.archetype}} @@ -71,4 +71,4 @@
    3. {{/each}} -
    + \ No newline at end of file diff --git a/templates/actors/parts/character-development.html b/templates/actors/parts/character-development.html index 83de18cd..37330dcb 100644 --- a/templates/actors/parts/character-development.html +++ b/templates/actors/parts/character-development.html @@ -10,7 +10,7 @@ {{totalOccupation}}/ - {{#if pulpCharacter}} + {{#if pulpRuleArchetype}}
    {{totalArchetype}}/ @@ -67,7 +67,7 @@ {{/if}}
    - {{#if ../pulpCharacter}} + {{#if ../pulpRuleArchetype}}
    {{#if skill.data.flags.archetype}} @@ -78,7 +78,7 @@ {{/if}} {{/unless}}
    - + {{#if skill.data.properties.special}}{{skill.data.specialization}} :{{/if}}{{skill.name}}
    @@ -97,7 +97,7 @@ {{/if}}
    - {{#if ../pulpCharacter}} + {{#if ../pulpRuleArchetype}}
    {{#if skill.data.flags.archetype}} @@ -114,4 +114,4 @@
    {{/each}} - + \ No newline at end of file diff --git a/templates/actors/parts/development-controls.html b/templates/actors/parts/development-controls.html index f863298c..4748a775 100644 --- a/templates/actors/parts/development-controls.html +++ b/templates/actors/parts/development-controls.html @@ -1,91 +1,91 @@
    -
    - {{#if allowCharCreation}} -
    - -
    -
    {{totalPersonal}}
    -
    /
    -
    - {{#if allowCharCreation}} - - {{else}} - {{data.development.personal}} - {{/if}} -
    -
    +
    + {{#if allowCharCreation}} +
    + +
    +
    {{totalPersonal}}
    +
    /
    +
    + {{#if allowCharCreation}} + + {{else}} + {{data.development.personal}} + {{/if}} +
    +
    +
    +
    + +
    +
    {{totalOccupation}}
    +
    /
    +
    + {{#if allowCharCreation}} + + {{else}} + {{data.development.occupation}} + {{/if}} +
    -
    - -
    -
    {{totalOccupation}}
    -
    /
    -
    - {{#if allowCharCreation}} - - {{else}} - {{data.development.occupation}} - {{/if}} -
    +
    + {{#if pulpRuleArchetype}} +
    + +
    +
    {{totalArchetype}}
    +
    /
    +
    + {{#if allowCharCreation}} + + {{else}} + {{data.development.archetype}} + {{/if}}
    +
    - {{#if pulpCharacter}} -
    - -
    -
    {{totalArchetype}}
    -
    /
    -
    - {{#if allowCharCreation}} - - {{else}} - {{data.development.archetype}} - {{/if}} -
    -
    -
    - {{/if}} - {{/if}} -
    + {{/if}} + {{/if}} +
    -
    - {{#if allowCharCreation}} - {{#if data.infos.occupationSet}} -
    - -
    - {{/if}} - {{#if data.infos.archetypeSet}} -
    - -
    - {{/if}} +
    + {{#if allowCharCreation}} + {{#if data.infos.occupationSet}} +
    + +
    + {{/if}} + {{#if data.infos.archetypeSet}} +
    + +
    + {{/if}} - {{#unless allowDevelopment}} -
    - - {{totalExperience}} -
    - {{/unless}} - {{/if}} + {{#unless allowDevelopment}} +
    + + {{totalExperience}} +
    + {{/unless}} + {{/if}} -
    +
    -
    - {{#if allowDevelopment}} -
    - {{#if hasSkillFlaggedForExp}} -
    {{localize 'CoC7.DevelopemmentPhase'}}
    - {{/if}} - {{#if developmentRollForLuck}} -
    {{localize 'CoC7.RecoverLuckPoints'}}
    - {{/if}} -

    - - {{totalExperience}} -
    +
    + {{#if allowDevelopment}} +
    + {{#if hasSkillFlaggedForExp}} +
    {{localize 'CoC7.DevelopemmentPhase'}}
    + {{/if}} + {{#if developmentRollForLuck}} +
    {{localize 'CoC7.RecoverLuckPoints'}}
    {{/if}} -
    +

    + + {{totalExperience}} +
    + {{/if}} +
    - -
    + +
    \ No newline at end of file diff --git a/templates/system/rule-settings.html b/templates/system/rule-settings.html index a31c33c0..a14439e8 100644 --- a/templates/system/rule-settings.html +++ b/templates/system/rule-settings.html @@ -3,15 +3,15 @@

    {{localize 'CoC7.Settings.CoreRules.Title'}}

    - +

    {{localize 'SETTINGS.developmentRollForLuckHint'}}

    - + {{#select initiativeRule.value}} {{/select}} @@ -48,12 +48,40 @@

    {{localize 'SETTINGS.PulpRules'}}

    {{localize 'CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint'}}

    +
    + +
    + +
    +

    {{localize 'CoC7.Settings.PulpRules.Archetype.Hint'}}

    +
    +
    + +
    + +
    +

    {{localize 'CoC7.Settings.PulpRules.Organization.Hint'}}

    +
    +
    + +
    + +
    +

    {{localize 'CoC7.Settings.PulpRules.Talents.Hint'}}

    +
    +
    + +
    + +
    +

    {{localize 'CoC7.Settings.PulpRules.FasterRecovery.Hint'}}

    +

    {{localize 'CoC7.Settings.HouseRules.Title'}}

    - +

    {{localize 'SETTINGS.OpposedRollTieBreakerHint'}}

    From d1da34de034293383339990fdaf24a46832b3774 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trouver=20Objet=20Cach=C3=A9?= <44206935+vonv@users.noreply.github.com> Date: Fri, 21 Jan 2022 21:43:34 +0100 Subject: [PATCH 402/726] Update fr.json --- lang/fr.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lang/fr.json b/lang/fr.json index 492bc290..ff66c3db 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -336,6 +336,7 @@ "CoC7.EraPulp": "Cthulhu Pulp", "CoC7.EraMdrn": "Moderne", "CoC7.Eras": "Époques Cthulhiennes", + "CoC7.EraAvailability": "Disponiblité", "CoC7.SkillNoAdjustments": "Pas d'ajustement", "CoC7.SkillNoXpGain": "Pas de gain d'XP", @@ -711,6 +712,7 @@ "CoC7.Spanish": "Espagnol", "CoC7.French": "Français", "CoC7.German": "Allemand", + "CoC7.Polish": "Polonais", "CoC7.TraditionalChinese": "Chinois Traditionnel", "CoC7.SelectSourceLanguage": "Sélectionnez la langue du texte copié", "CoC7.ImportedUnnamedCharacter": "Personnage importé sans nom", @@ -738,6 +740,11 @@ "CoC7.Migrate.ButtonSkip": "Passer", "CoC7.Migrate.ButtonOkay": "OK", + "CoC7.Migrate.TriggerButton": "Déclencher la Migration de Données", + "CoC7.Migrate.TriggerTitle": "Déclencher la Migration de Données", + "CoC7.Migrate.TriggerContents": "

    Lance la migration de données puis redémarre

    ", + "CoC7.Migrate.TriggerRestart": "Sauvegarde et redémarrage", + "CoC7.Maximize": "Développer", "CoC7.Summarize": "Compacter", From b6cb336989ad94a8ac274f6b6436628258e67bce Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 22 Jan 2022 15:41:27 +0000 Subject: [PATCH 403/726] Pulp Rule Ignore Major Wounds Reinstate pulpRules setting for future proofing adding more Pulp Rules --- lang/en.json | 2 ++ module/actors/actor.js | 33 +++++++++++++++++++++++------ module/scripts/game-rules.js | 16 ++++++++++++++ module/updater.js | 4 ++-- module/utilities.js | 2 +- templates/system/rule-settings.html | 7 ++++++ 6 files changed, 54 insertions(+), 10 deletions(-) diff --git a/lang/en.json b/lang/en.json index ea12642f..fac3d41b 100644 --- a/lang/en.json +++ b/lang/en.json @@ -762,6 +762,8 @@ "CoC7.Settings.PulpRules.Talents.Hint": "", "CoC7.Settings.PulpRules.FasterRecovery.Name": "Faster Recovery", "CoC7.Settings.PulpRules.FasterRecovery.Hint": "Natural healing is increased to two hit points per day", + "CoC7.Settings.PulpRules.IgnoreMajorWounds.Name": "Ignore Major Wounds", + "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "", "CoC7.Maximize": "Maximize", "CoC7.Summarize": "Summarize", diff --git a/module/actors/actor.js b/module/actors/actor.js index 6de04cbe..d855dab7 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -3336,13 +3336,32 @@ export class CoCActor extends Actor { if (netDamage >= this.hpMax) { await this.setCondition(COC7.status.dead) } else { - if (netDamage >= Math.floor(this.hpMax / 2)) { - await this.setCondition(COC7.status.criticalWounds) - } - if (this.hp === 0) { - await this.setCondition(COC7.status.unconscious) - if (this.majorWound) { - this.setCondition(COC7.status.dying) + if (game.settings.get('CoC7', 'pulpRuleIgnoreMajorWounds')) { + if (this.hp === 0) { + if (netDamage >= Math.floor(this.hpMax / 2)) { + this.setCondition(COC7.status.dying) + } else { + this.setCondition(COC7.status.unconscious) + } + } else if (netDamage >= Math.floor(this.hpMax / 2)) { + const conCheck = new CoC7ConCheck( + this.isToken ? this.tokenKey : this.id + ) + conCheck.toMessage() + } + } else { + let hasMajorWound = false + if (netDamage >= Math.floor(this.hpMax / 2)) { + await this.setCondition(COC7.status.criticalWounds) + hasMajorWound = true + } else { + hasMajorWound = this.hasConditionStatus(COC7.status.criticalWounds) + } + if (this.hp === 0) { + await this.setCondition(COC7.status.unconscious) + if (hasMajorWound) { + this.setCondition(COC7.status.dying) + } } } } diff --git a/module/scripts/game-rules.js b/module/scripts/game-rules.js index 6083eb5b..25bb8562 100644 --- a/module/scripts/game-rules.js +++ b/module/scripts/game-rules.js @@ -77,6 +77,14 @@ const SETTINGS = { default: false, type: Boolean }, + pulpRuleIgnoreMajorWounds: { + name: 'CoC7.Settings.PulpRules.IgnoreMajorWounds.Name', + hint: 'CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint', + scope: 'world', + config: false, + default: false, + type: Boolean + }, opposedRollTieBreaker: { name: 'SETTINGS.OpposedRollTieBreaker', hint: 'SETTINGS.OpposedRollTieBreakerHint', @@ -203,8 +211,16 @@ export class CoC7GameRuleSettings extends FormApplication { } async _updateObject (event, data) { + const pulpRules = { + true: false, + false: false + } for await (const key of Object.keys(SETTINGS)) { game.settings.set('CoC7', key, data[key]) + if (key.match(/^pulpRule.{2,}$/)) { + pulpRules[data[key]] = true + } } + game.settings.set('CoC7', 'pulpRules', pulpRules.true && !pulpRules.false) } } diff --git a/module/updater.js b/module/updater.js index ce2c51c5..7de2c175 100644 --- a/module/updater.js +++ b/module/updater.js @@ -150,15 +150,15 @@ export class Updater { } } - // Migrate Settings + // Migrate Settings if Pulp Rules is enabled turn on all rules if (game.settings.get('CoC7', 'pulpRules')) { - game.settings.set('CoC7', 'pulpRules', false) game.settings.set('CoC7', 'pulpRuleDoubleMaxHealth', true) game.settings.set('CoC7', 'pulpRuleDevelopmentRollLuck', true) game.settings.set('CoC7', 'pulpRuleArchetype', true) game.settings.set('CoC7', 'pulpRuleOrganization', true) game.settings.set('CoC7', 'pulpRuleTalents', true) game.settings.set('CoC7', 'pulpRuleFasterRecovery', true) + game.settings.set('CoC7', 'pulpRuleIgnoreMajorWounds', true) } const settings = mergeObject(this.updatedModules || {}, this.currentModules) diff --git a/module/utilities.js b/module/utilities.js index 5527bedc..f972b696 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -480,7 +480,7 @@ export class CoC7Utilities { } } } - const isCriticalWounds = actor.hasCondition(COC7.status.criticalWounds) + const isCriticalWounds = (!game.settings.get('CoC7', 'pulpRuleIgnoreMajorWounds') && actor.hasCondition(COC7.status.criticalWounds)) const dailySanityLoss = actor.data.data.attribs.san.dailyLoss const hpValue = actor.data.data.attribs.hp.value const hpMax = actor.data.data.attribs.hp.max diff --git a/templates/system/rule-settings.html b/templates/system/rule-settings.html index a14439e8..cc76cb9d 100644 --- a/templates/system/rule-settings.html +++ b/templates/system/rule-settings.html @@ -76,6 +76,13 @@

    {{localize 'SETTINGS.PulpRules'}}

    {{localize 'CoC7.Settings.PulpRules.FasterRecovery.Hint'}}

    +
    + +
    + +
    +

    {{localize 'CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint'}}

    +

    {{localize 'CoC7.Settings.HouseRules.Title'}}

    From ca1e11966aa3f573891fddc60316031cb78875b1 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 22 Jan 2022 16:38:43 +0000 Subject: [PATCH 404/726] Updated translations list --- .github/TRANSLATIONS.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index d0ffaf83..da47e051 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,26 +2,26 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The **sv** translation is currently up to date +The following translations are currently up to date **fr**, **sv** The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | it | ja | ko | pl | pt-BR | zh-TW | -| :---------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **10** | **4** | **6** | **4** | **6** | **13** | **12** | **6** | **6** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| Key | de | es | it | ja | ko | pl | pt-BR | zh-TW | +| :---------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **10** | **4** | **4** | **6** | **13** | **12** | **6** | **6** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.Copied From d0b487d64d95f6f1b25a78ac2376b00ad7ff90ae Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 22 Jan 2022 16:45:05 +0000 Subject: [PATCH 405/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index a5ba8338..202acd15 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -7,6 +7,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV, and @s - Update to NPC sheet to use same icons for dead, indefInsane, prone, tempoInsane, and unconscious as PCs - New Italian localization, thanks to @Stefano1975t - New Korean localization, thanks to @Mero-Pe +- Update to French localization, thanks to @vonv - Update to German localization, thanks to @brockhaus - Update to Spanish localization, thanks to @lozalojo - Update to Swedish localization, thanks to @Rangertheman From c1c350a4213268add760ac79f08eb5d4038bdb78 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 22 Jan 2022 17:02:15 +0000 Subject: [PATCH 406/726] Fix system.json invalid JSON, update create entity dialog to create document dialog --- module/hooks/render-dialog.js | 2 +- system.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/hooks/render-dialog.js b/module/hooks/render-dialog.js index 35f6fda7..a7cbc25a 100644 --- a/module/hooks/render-dialog.js +++ b/module/hooks/render-dialog.js @@ -2,7 +2,7 @@ export function listen () { Hooks.on('renderDialog', (dialog, html) => { const form = html.find('form') - if (form.is('#entity-create') && form.find('select').length !== 0) { + if (form.is('#document-create') && form.find('select').length !== 0) { const entityCreateSelectTag = form.find("[name='type']") const entitySortedList = [] const showExperimental = !!game.settings.get( diff --git a/system.json b/system.json index 61d17f4c..fe032d0b 100644 --- a/system.json +++ b/system.json @@ -110,7 +110,7 @@ "lang": "ko", "name": "한국어", "path": "lang/ko.json" - } + }, { "lang": "it", "name": "Italiano", From f97bbd1529db3e42bef224f2c91b1e372a39800f Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 22 Jan 2022 17:08:34 +0000 Subject: [PATCH 407/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 202acd15..a91067a3 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -2,6 +2,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. +- Fix showing Actor / Item create dialog box dropdown translations - Replace effect and status with conditions. Allow activating conditions from FoundryVTT combat tracker and effects menu as well as the character sheets - Update rest function to prevent showing more than max hp or mp was added to the chat summary message - Update to NPC sheet to use same icons for dead, indefInsane, prone, tempoInsane, and unconscious as PCs From 508780164f9f1d37079826e8ed331e47ef9d6d4d Mon Sep 17 00:00:00 2001 From: Piotr Krygier Date: Thu, 3 Feb 2022 08:37:56 +0100 Subject: [PATCH 408/726] Update polish translation Add all missing polish translations and fix spelling errors. --- lang/pl.json | 120 ++++++++++++++++++++++++++++----------------------- 1 file changed, 66 insertions(+), 54 deletions(-) diff --git a/lang/pl.json b/lang/pl.json index 691636c1..2594bbd8 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -21,7 +21,7 @@ "CHARAC.STR": "S", "CHARAC.Strengh": "Siła", - "CHARAC.Strength": "Strength", + "CHARAC.Strength": "Siła", "CHARAC.CON": "KON", "CHARAC.Constitution": "Kondycja", "CHARAC.SIZ": "BC", @@ -127,6 +127,8 @@ "CoC7.MagicPointsCost": "Koszt Punktów Magii", "CoC7.OtherCosts": "Inne koszty", "CoC7.CastingSpell": "Rzucam {spell}.", + "CoC7.NotEnoughMagicPoints": "{spell} wymaga {originalMagicPoints} Punktów Magii, ale posiadasz jedynie {actorMagicPoints}. Czy chcesz poświęcić {convertedHitPoints} Punktów Wytrzymałości? Otrzymasz {convertedHitPoints} punktów obrażeń.", + "CoC7.CopyToClipboard": "Kopiuj do schowka", "CoC7.WhisperToSelection": "Szepnij do wybranych tokenów", @@ -146,9 +148,9 @@ "CoC7.DiceModifierPenalty": "rzut karny", "CoC7.BonusDice": "Bonusowa kość", "CoC7.Modifiers": "Modyfikatory", - "CoC7.UnitsDie": "1 units die", - "CoC7.TensDie": "tens die", - "CoC7.TensDice": "tens dice", + "CoC7.UnitsDie": "1 kość jedności", + "CoC7.TensDie": "kość dziesiątek", + "CoC7.TensDice": "kości dziesiątek", "CoC7.SuccessRequired": "Wymagany sukces: {successRequired}", "CoC7.Roll": "Rzut", "CoC7.Pushing": "Forsowanie", @@ -158,7 +160,7 @@ "CoC7.SpendLuck": "Wydaj {luckNeededValue} szczęścia do zaliczenia", "CoC7.LuckSpent": "Wydano {luckAmount} szczęścia", "CoC7.LuckSpentAlt": "Szczęście wydane", - "CoC7.LuckError": "{actorName} nie ma wystarczająco szczęcia aby zdać test", + "CoC7.LuckError": "{actorName} nie ma wystarczająco szczęścia aby zdać test", "CoC7.check.AutoSuccess": "Auto. sukces", "CoC7.check.AutoFailure": "Auto. niepowodzenie", "CoC7.RevealCheck": "Pokaż wynik", @@ -203,8 +205,8 @@ "CoC7.CombinedAllHint": "Wszystkie rzuty muszą się udać", "CoC7.CloseCard": "Zamknij kartę", - "CoC7.CheckResult": "Sprawdz {name}. ({value}%) - {difficulty}", - "CoC7.ItemCheckResult": "{item} - {skill} Sprawdz({value}%) - {difficulty} trudnosć", + "CoC7.CheckResult": "Sprawdź {name}. ({value}%) - {difficulty}", + "CoC7.ItemCheckResult": "{item} - {skill} Sprawdź ({value}%) - {difficulty} trudnosć", "CoC7.CheckRawValue": "({rawvalue}%) - {difficulty} trudnosć", "CoC7.ArmorAbsorbsDamage": "Pancerz pochłania wszystkie obrażenia", @@ -219,7 +221,7 @@ "CoC7.OutOfAmmo": "Brak amunicji", "CoC7.OutOfShots": "Brak strzałów", - "CoC7.BonusDamageRoll": "Rzut bonusowych obrażen", + "CoC7.BonusDamageRoll": "Rzut bonusowych obrażeń", "CoC7.Type": "Typ", "CoC7.FightBack": "Kontratak", "CoC7.Dodge": "Unikanie", @@ -230,8 +232,8 @@ "CoC7.combatCard.autoSuccess": "Auto. Sukces", "CoC7.Advantage": "Przewaga", "CoC7.Disadvantage": "Niekorzyść", - "CoC7.TitleAdvantage": "Dodaj 1 dodatkową kość (target is prone, restrained...)", - "CoC7.TitleDisadvantage": "Dodaj 1 karną kość (for being prone, restrained...)", + "CoC7.TitleAdvantage": "Dodaj 1 dodatkową kość (cel jest podatny na atak, unieruchomiony...)", + "CoC7.TitleDisadvantage": "Dodaj 1 karną kość (za bycie podatnym na atak, unieruchomionym...)", "CoC7.TitleOutNumbered": "Dodaj 1 dodatkową kość za cel z przewagą liczebną", "CoC7.TitleSurprised": "Dodaj 1 dodatkową kość za zaskoczony cel", "CoC7.TitleAutoSuccess": "Atak automatycznie trafia", @@ -316,7 +318,7 @@ "CoC7.WeaponDamage": "Obrażenia", "CoC7.Weapon.BlastRadius": "Promień wybuchu", "CoC7.WeaponMalfunction": "Awaria", - "CoC7.WeaponUsesPerRound": "Użycia na runde", + "CoC7.WeaponUsesPerRound": "Użycia na rundę", "CoC7.WeaponUsesPerRoundHint": "Ataki na rundę (1/3 : 1 atak na 3 rundy)", "CoC7.WeaponSheet.RoundsPerUse.Info": "Ile rund potrzeba, aby broń była gotowa do strzału", "CoC7.WeaponMax": "Maksymalna liczba użyć / runda", @@ -356,7 +358,7 @@ "CoC7.WeaponXplv": "Wybuchowy", "CoC7.WeaponBrst": "Seria", "CoC7.WeaponAuto": "Ogień Ciągły", - "CoC7.WeaponSpcl": "Specialny", + "CoC7.WeaponSpcl": "Specjalny", "CoC7.WeaponMont": "Zamontowany", "CoC7.WeaponDbrl": "Podwójna lufa", "CoC7.WeaponBlst": "Podmuch", @@ -367,7 +369,7 @@ "CoC7.Weapon.Property.Shotgun": "Strzelba", "CoC7.ErrorItem": "Nie udało się odnaleźć przedmiotu", - "CoC7.ErrorActor": "Couldn't locate actor", + "CoC7.ErrorActor": "Nie udało się znaleźć postaci", "CoC7.ErrorInvalidFormula": "{value} nie jest prawidłową formułą", "CoC7.ErrorInvalid": "Nieprawidłowy", "CoC7.Validate": "Prawidłowy", @@ -440,10 +442,10 @@ "CoC7.OccupationSkill": "Umiejętności Zawodowe", "CoC7.ArchetypeSkill": "Umiejętności Archetypowe", "CoC7.UseFormula": "Użyj rzutu kostką", - "CoC7.EnterFormula": "Wprowadz formułę", + "CoC7.EnterFormula": "Wprowadź formułę", "CoC7.SanRollHint": "Rzuć test poczytalności dla celów", "CoC7.SANCheckTitle": "Utrata PP : {name} ({sanMin}/{sanMax})", - "CoC7.NoSkill": "Brak umięjętności", + "CoC7.NoSkill": "Brak umiejętności", "CoC7.AddWeapontHint": "

    {actor} nie ma {weapon}.
    Chcesz ją stworzyć ?

    ", "CoC7.LinkCheck": " {name} test", @@ -492,8 +494,8 @@ "CoC7.MemoryRepressed": "Twój umysł stłumił wspomnienia i skrył je w podświadomości.", "CoC7.RememberEverything": "Pamiętasz WSZYSTKO.", "CoC7.BoutOfMadnesslasted": "Twój atak szaleństwa trwał", - "CoC7.EnteringBoutOfMadness": "Doświadczas ataku szaleństwa", - "CoC7.GrowingAccustomedToAwfulness": "Przywyczajasz się do potworności. (Twoja utrata poczytalności została ograniczona).", + "CoC7.EnteringBoutOfMadness": "Doświadczasz ataku szaleństwa", + "CoC7.GrowingAccustomedToAwfulness": "Przyzwyczajasz się do potworności. (Twoja utrata poczytalności została ograniczona).", "CoC7.ImmuneToAwfulness": "Twój umysł jest odporny na potworności. (Brak utraty poczytalności).", "CoC7.InvestigatorPhobiaGained": "Badacz zdobył nową fobię", "CoC7.PhobiaGained": "Zdobyłeś nową fobię", @@ -515,8 +517,8 @@ "CoC7.AlreadyLost": "Już stracono", "CoC7.CreatureMaxLoss": "Max utrata potwora", "CoC7.MaxLossToCreature": "Max utrata przez potwora", - "CoC7.ResetCreatureSan": "Wyresetuj historię potwora", - "CoC7.ResetSpecieSan": "Wyresetuj historię gatunku", + "CoC7.ResetCreatureSan": "Resetuj historię potwora", + "CoC7.ResetSpecieSan": "Resetuj historię gatunku", "CoC7.KeepData": "Zapisz dane potwora", "CoC7.BoutActive": "(Atak Sz.) Odporny na utratę PP", "CoC7.AlreadyInABout": "Już cierpisz na atak szaleństwa, dlatego jesteś odporny na kolejną utratę PP.", @@ -540,15 +542,15 @@ "CoC7.CombatSpell": "Walka", "CoC7.SpellType": "Typ zaklęcia", - "CoC7.BookHasNothingMoreToTeach": "{book} has nothing more to teach. Cthulhu Mythos skill of {actor} is greater than this Mythos Rating.", - "CoC7.BookType": "Typ Ksiązki", + "CoC7.BookHasNothingMoreToTeach": "{book} już niczego Cię nie nauczy. Poziom Mitów Cthulhu {actor} jest większy niż Wskaźnik Mitów księgi.", + "CoC7.BookType": "Typ Ksiąki", "CoC7.Content": "Zawartość", "CoC7.CthulhuMythosFinal": "Końcowe Mity Cthulhu", "CoC7.CthulhuMythosInitial": "Początkowe Mity Cthulhu", "CoC7.Development": "Rozwój", "CoC7.DifficultyLevel": "Poziom Trudności", "CoC7.DragSpell": "Przeciągnij tu zaklęcia, by wstawić je do książki", - "CoC7.FullStudies": "Pełne przestutiowanie", + "CoC7.FullStudies": "Pełne przestudiowanie", "CoC7.Gains": "Postęp", "CoC7.GainsForReading": "Postęp Umiejętności po przeczytaniu {book}.", "CoC7.InitialReading": "Czytanie wstępne", @@ -574,7 +576,7 @@ "CoC7.Origin": "Pochodzenie", "CoC7.ArmedVehicle": "Pojazd Opancerzony", - "CoC7.PulpTalents": "Pulpowe Umiejetności", + "CoC7.PulpTalents": "Pulpowe Umiejętności", "CoC7.TalentType": "Typ umiejętności", "CoC7.PhysicalTalent": "Fizyczny", "CoC7.MentalTalent": "Umysłowy", @@ -608,14 +610,14 @@ "CoC7.Choose": "Liczba możliwych do wyboru", "CoC7.Chosen": "Wybrany", "CoC7.EmptySkillList": "Dodaj umiejętność, upuszczając ją tutaj.", - "CoC7.EmptyItemList": "Dodaj przedmiot, upuszczająć go tutaj.", + "CoC7.EmptyItemList": "Dodaj przedmiot, upuszczając go tutaj.", "CoC7.EmptyCharacterSkillList": "Dodaj ustawienie, zawód lub umiejętność przeciągając je tutaj.", - "CoC7.PersonalSpeciality": "Number of personal or era specialty", + "CoC7.PersonalSpeciality": "Ilość specjalizacji osobistych lub z epoki", "CoC7.AdditionalSkills": "Dowolna Umiejętność", "CoC7.SkillSelectionWindow": "Wybierz opcjonalne umiejętności", - "CoC7.SelectPersonalSkills": "Wybierz {number} umiejętnośc(s) jako umiejętności związane z zainteresowaniami osobistymi", + "CoC7.SelectPersonalSkills": "Wybierz {number} umiejętność(i) jako umiejętności związane z zainteresowaniami osobistymi", "CoC7.ResetOccupation": "Resetuj Zawód", - "CoC7.ResetOccupationHint": "Postać {name} obencnie posaida zawód. Zresetować go?", + "CoC7.ResetOccupationHint": "Postać {name} obecnie posiada zawód. Zresetować go?", "CoC7.ResetArchetype": "Zresetuj Archetyp", "CoC7.ResetArchetypeHint": "Gracz {name} ma już archetyp. Czy chcesz go zresetować?", "CoC7.CreditOutOfRange": "Wartość Majętności musi być między {min} a {max}", @@ -661,6 +663,8 @@ "CoC7.WarnFastTargetWithWrongMOV": "Postać jest szybka, ale jej Ruch jest mniejszy niż 8. (MOV: {mov})", "CoC7.WarnTooManyTarget": "Zaznaczono za dużo celów. Zachowano zaznaczenie ostatniego celu", + "CoC7.allActors": "Wszystkie postacie", + "CoC7.restTargets": "Cele odpoczynku", "CoC7.startRest": "Rozpocznij odpoczynek", "CoC7.dreaming": "Badacze śpią...", "CoC7.healthRecovered": "Odzyskano 1 Punkt Wytrzymałości", @@ -679,22 +683,22 @@ "CoC7.InfoLessSkillThanOptions": "Jest tylko {skillCount} i {optionsCount} opcji, dodaję wszystkie", "CoC7.InfoAllSkillsAlreadySelected": "Wszystkie umiejętności już zaznaczone.", - "CoC7.MessageCheckRequestedWait": "Strażnik rząda testu {check}.
    Zaczekaj przed kliknięciem!
    ", - "CoC7.MessageTargetCheckRequested": "Strażnik rząda testu {check} od {name}.", + "CoC7.MessageCheckRequestedWait": "Strażnik żąda testu {check}.
    Zaczekaj przed kliknięciem!
    ", + "CoC7.MessageTargetCheckRequested": "Strażnik żąda testu {check} od {name}.", "CoC7.MessageTitleSelectSingleUserForTarget": "Która postać może zareagować na atak", "CoC7.MessageSelectSingleUserForTarget": "Ten token jest kontrolowany przez wielu Graczy. Wybierz Gracza, który zareaguje na ten atak.", "CoC7.MessageBoutOfMadnessTableNotFound": "Nie znaleziono wyniku z tablicy niepoczytalności. Upewnij się, że wszystkie tablice niepoczytalności zostały stworzone", "CoC7.MessageBoutOfMadnessItemNotFound": "Nie znaleziono wyniku z tablicy niepoczytalności. Upewnij się, że wszystkie statusy niepoczytalności zostały stworzone", "CoC7.DealDamage": "Zadać {damage} punktów obrażeń {target}?", - "CoC7.NoTargetSelected": "Nie zaznaczyłeś celu dla testsu {weapon}. Chcesz kontynuować?", + "CoC7.NoTargetSelected": "Nie zaznaczyłeś celu dla testu {weapon}. Chcesz kontynuować?", "CoC7.Import": "Import", "CoC7.Proceed": "Kontynuuj", "CoC7.Cancel": "Anuluj", "CoC7.ActorImporter": "Import postaci", - "CoC7.ActorImporterSummary": "Zaimportuj BN albo Potwora z opisu i statystyk. Po prostu wklej odpowiedni text", + "CoC7.ActorImporterSummary": "Zaimportuj BN albo Potwora z opisu i statystyk. Po prostu wklej odpowiedni tekst", "CoC7.PasteTheDataBelow": "Wklej tekst poniżej", "CoC7.TextFieldInvalidCharacters": "W tekście występują nieprawidłowe znaki. Napraw to, albo zostaną automatycznie usunięte", "CoC7.SelectActorType": "Wybierz typ postaci", @@ -712,7 +716,7 @@ "CoC7.TraditionalChinese": "Chiński Tradycyjny", "CoC7.SelectSourceLanguage": "Wybierz źródło języka tekstu", "CoC7.ImportedUnnamedCharacter": "Zaimportowano nienazwaną postać", - "CoC7.CreatedImportedCharactersFolder": "Stworzono 'Imported Characters' folder'", + "CoC7.CreatedImportedCharactersFolder": "Stworzono folder 'Imported Characters''", "CoC7.ImportedCharactersFolder": "Zaimportowano postacie", "CoC7.ImportSkillItemLocations": "Szukaj umiejętności/przedmiotów/broni w", "CoC7.ImportActorItemsNone": "Brak", @@ -725,17 +729,22 @@ "CoC7.HowToTranslateInstallBabele": "Zainstaluj/Zaktualizuj moduł Babele z menedżera modułów Foundry.", "CoC7.HowToTranslateInstallTranslation": "Zainstaluj/Zaktualizuj Tłumaczenie z menedżera modułów Foundry.", "CoC7.HowToTranslateEnableTranslation": "W Świecie Gry, pod zakładką Configuration/Manage Modules włącz Babele i tłumaczenia.", - "CoC7.HowToTranslateNoTranslation": "Inkstrukcje do tworzenia nowych tłumaczeń są dostępne w istniejących już modułach tłumaczeń.", + "CoC7.HowToTranslateNoTranslation": "Instrukcje do tworzenia nowych tłumaczeń są dostępne w istniejących już modułach tłumaczeń.", "CoC7.Migrate.Title": "Wymagana aktualizacja", "CoC7.Migrate.Message": "

    Twój świat wymaga aktualizacji do wersji {version}.

    Utwórz kopię zapasową przed aktualizacją.

    Jeśli nie dokonasz aktualizacji, system nie będzie działał prawidłowo.

    Świat może zostać zrestartowany po zakończeniu.

    ", - "CoC7.Migrate.WithModulesMessage": "

    Twój świat lub moduły mogą wymagać aktualizacji, aby używać wersji {version}.

    Utwórz kopię zapasową świata i folderów z modułami wylistowanymi poniżej przed rozpoczęciem aktualizacji.

    Jeśli nie zaktualizujesz świata, system nie będzie działał prawidłowo.

    Następujące moduły posiadają aktorów i przedmioty, więc również zostaną sprawdzone.

    {modules}

    Świat może zostać ponownie uruchomiony po aktualizacji.

    ", + "CoC7.Migrate.WithModulesMessage": "

    Twój świat lub moduły mogą wymagać aktualizacji, aby używać wersji {version}.

    Utwórz kopię zapasową świata i folderów z modułami wymienionymi poniżej przed rozpoczęciem aktualizacji.

    Jeśli nie zaktualizujesz świata, system nie będzie działał prawidłowo.

    Następujące moduły posiadają aktorów i przedmioty, więc również zostaną sprawdzone.

    {modules}

    Świat może zostać ponownie uruchomiony po aktualizacji.

    ", "CoC7.Migrate.GMRequired": "

    Twój świat wymaga aktualizacji do wersji {version}.

    Poczekaj aż Strażnik dokona aktualizacji, a następnie wciśnij (F5), by odświeżyć grę.

    ", "CoC7.Migrate.RestartRequired": "

    Twój świat zostanie teraz zrestartowany, by wdrożyć zmiany

    ", "CoC7.Migrate.ButtonUpdate": "Aktualizuj", "CoC7.Migrate.ButtonSkip": "Pomiń", "CoC7.Migrate.ButtonOkay": "Ok", + "CoC7.Migrate.TriggerButton": "Rozpocznij migrację danych", + "CoC7.Migrate.TriggerTitle": "Rozpocznij migrację danych", + "CoC7.Migrate.TriggerContents": "

    Włącz migrację danych i uruchom ponownie

    ", + "CoC7.Migrate.TriggerRestart": "Zapisz i uruchom ponownie", + "CoC7.Maximize": "Maksymalizuj", "CoC7.Summarize": "Podsumuj", @@ -749,7 +758,7 @@ "CoC7.ToolTipSkill": "
    1. Lewy PM test z opcjami
    2. Shift + Lewy PM Natychmiastowy test z normalną trudnością
    1. Prawy PM Test przeciwstawny z opcjami
    2. Shift + Prawy PM Natychmiastowy test przeciwstawny
    1. Alt/Option + Prawy PM Test łączony z opcjami
    ", "CoC7.ToolTipKeeperSkill": "
    1. CTRL + Lewy PM Stwórz odnośnik do testu
    2. {other}
    ", - "CoC7.ToolTipKeeperStandbySkill": "
  • Lewy PM Zarządaj testu od {name}
  • ", + "CoC7.ToolTipKeeperStandbySkill": "
  • Lewy PM Zażądaj testu od {name}
  • ", "CoC7.ToolTipDB": "
    1. Lewy PM Natychmiastowy test z normalną trudnością
    ", "CoC7.ToolTipKeeperSanity": "
  • CTRL + Alt/Option Stwórz odnośnik do testu poczytalności
  • ", "CoC7.ToolTipAutoToggle": "
    1. Lewy PM Przełącz automatyczne obliczenia / ręczne wpisy
    2. ", @@ -766,7 +775,7 @@ "SETTINGS.TitleGameArtwork": "Ustawienia Grafik Gry", "SETTINGS.TitleWeapon": "Ustawienia Broni", "SETTINGS.TitleDiceSoNice": "Ustawienia Dice So Nice", - "SETTINGS.TitleDeveloperDebug": "Ustawienia developera i Debuggowania", + "SETTINGS.TitleDeveloperDebug": "Ustawienia developera i Debugowania", "SETTINGS.TitleRollTable": "Ustawienia Tabel Rzutów", "SETTINGS.DebugMode": "System Debug Mode", "SETTINGS.DebugModeHint": "!!WYMAGANE PONOWNE URUCHOMIENIE!!", @@ -783,14 +792,14 @@ "SETTINGS.InitiativeRuleHint": "Możesz wybrać podstawową zasadę inicjatywy (używającej ZR) lub opcjonalnej zasady (rzut kością)", "SETTINGS.InitiativeRuleBasic": "Podstawowa", "SETTINGS.InitiativeRuleOptional": "Opcjonalna", - "SETTINGS.displayInitDices": "Pokaż kość inicjatywty", - "SETTINGS.displayInitDicesHint": "Pokaż kość inicjatywty przy rzucaniu na inicjatywę (Tylko Opcjonalne zasady)", + "SETTINGS.displayInitDices": "Pokaż kość inicjatywy", + "SETTINGS.displayInitDicesHint": "Pokaż kość inicjatywy przy rzucaniu na inicjatywę (Tylko Opcjonalne zasady)", "SETTINGS.displayInitAsText": "Pokaż tekst inicjatywy", "SETTINGS.displayInitAsTextHint": "Wyświetl wartość inicjatywy jako tekst zamiast liczby (Tylko Opcjonalne zasady)", "SETTINGS.PulpRules": "Zasady Pulpowe", - "SETTINGS.PulpRulesHint": "Pozwód na użycie zasad Pulpowych (Achetypy, Talenty, PW), !wczesna implementacja!", + "SETTINGS.PulpRulesHint": "Pozwól na użycie zasad Pulpowych (Archetypy, Talenty, PW), !wczesna implementacja!", "SETTINGS.developmentRollForLuck": "Odzyskiwanie punktów Szczęścia", - "SETTINGS.developmentRollForLuckHint": "Każdy gracz może rzucić na rozwój szczęścia podcza Fazy Rozwoju", + "SETTINGS.developmentRollForLuckHint": "Każdy gracz może rzucić na rozwój szczęścia podczas Fazy Rozwoju", "SETTINGS.displayPlayerNameOnSheet": "Pokaż imię Gracza na karcie postaci", "SETTINGS.DisregardAmmo": "Ignoruj amunicję.", "SETTINGS.DisregardAmmoHint": "Włączenie tej opcji spowoduje ignorowanie ilości amunicji w broni.", @@ -801,17 +810,17 @@ "SETTINGS.StatusPlayerEditable": "Gracze mogą modyfikować statusy", "SETTINGS.StatusPlayerEditableHint": "Pozwól graczom na modyfikację swoich statusów (powalony, nieprzytomny, umierający, martwy) i na reset ich dziennego spadku poczytalności", "SETTINGS.SyncDice3D": "[DsN] Synchronizacja kostek", - "SETTINGS.SyncDice3DHint": "Używająć modułu DsN, synchronizuj kości między klientami", + "SETTINGS.SyncDice3DHint": "Używając modułu DsN, synchronizuj kości między klientami", "SETTINGS.UnitDieColorset": "[DsN] Kolory kości jednostek", - "SETTINGS.UnitDieColorsetHint": "Używająć modułu DsN, kolory dla kości jednostek. (domyślnie używa ustawień gracza)", + "SETTINGS.UnitDieColorsetHint": "Używając modułu DsN, kolory dla kości jednostek. (domyślnie używa ustawień gracza)", "SETTINGS.TenDieNoMod": "[DsN] Kolory kości dziesiątek", - "SETTINGS.TenDieNoModHint": "Używająć modułu DsN, kolory dla kości dziesiątek. (domyślnie używa ustawień gracza)", - "SETTINGS.TenDieBonus": "[DsN] Kolroy kości premiowych", - "SETTINGS.TenDieBonusHint": "Używająć modułu DsN, kolory dla kości premiowych. (domyślnie używa ustawień gracza)", - "SETTINGS.TenDiePenalty": "[DsN] Kolroy kości karnych", - "SETTINGS.TenDiePenaltyHint": "Używająć modułu DsN, kolory dla kości karnych. (domyślnie używa ustawień gracza)", + "SETTINGS.TenDieNoModHint": "Używając modułu DsN, kolory dla kości dziesiątek. (domyślnie używa ustawień gracza)", + "SETTINGS.TenDieBonus": "[DsN] Kolory kości premiowych", + "SETTINGS.TenDieBonusHint": "Używając modułu DsN, kolory dla kości premiowych. (domyślnie używa ustawień gracza)", + "SETTINGS.TenDiePenalty": "[DsN] Kolory kości karnych", + "SETTINGS.TenDiePenaltyHint": "Używając modułu DsN, kolory dla kości karnych. (domyślnie używa ustawień gracza)", "SETTINGS.OverrideGameArtwork": "Nadpisz grafiki gry", - "SETTINGS.OverrideGameArtworkHint": "!!WYMAGANY RESTART!! daje dostęp do zaawansowanych ustawień gry, zostaw puste dla domyślnych ustwień", + "SETTINGS.OverrideGameArtworkHint": "!!WYMAGANY RESTART!! daje dostęp do zaawansowanych ustawień gry, zostaw puste dla domyślnych ustawień", "SETTINGS.ArtPauseImage": "Obrazek pauzy", "SETTINGS.ArtPauseImageHint": ". Wpisz 'null', żeby usunąć obrazek", "SETTINGS.ArtPauseText": "Tekst pauzy", @@ -821,7 +830,7 @@ "SETTINGS.ArtWorkSheetBackground": "Tło karty postaci", "SETTINGS.ArtWorkSheetBackgroundHint": "wpisz 'null' żeby usunąć tło", "SETTINGS.ArtWorkSheetBackgroundType": "Typ tła", - "SETTINGS.BackgroundSlice": "Obraze tła będzie przycięty (css:border-image)", + "SETTINGS.BackgroundSlice": "Obrazek tła będzie przycięty (css:border-image)", "SETTINGS.BackgroundAuto": "Skaluj obraz, zachowując proporcje (css:auto)", "SETTINGS.BackgroundContain": "Skaluj obraz bez przycinania/rozciągania (css:contain)", "SETTINGS.BackgroundCover": "Skaluj obraz z przycinaniem/rozciąganiem (css:cover)", @@ -840,7 +849,7 @@ "SETTINGS.ArtworkMainFont": "Główna czcionka", "SETTINGS.ArtworkMainFontBold": "Główna czcionka (bold)", "SETTINGS.ArtworkMainFontSize": "Domyślny rozmiar czcionki (px)", - "SETTINGS.BoutOfMadnessSummaryTable": "Tabela Ataków Szaleństwa (Podsumwoanie)", + "SETTINGS.BoutOfMadnessSummaryTable": "Tabela Ataków Szaleństwa (Podsumowanie)", "SETTINGS.BoutOfMadnessRealTimeTable": "Tabela Ataków Szaleństwa (W Czasie Rzeczywistym)", "SETTINGS.LetKeeperDecide": "Pozwól Strażnikowi Decydować", "SETTINGS.DisplayResultType": "Wyświetl typ wyniku rzutu kostką (tekst)", @@ -863,13 +872,16 @@ "SETTINGS.AdviseOwnersOnly": "Powiadom właściciela postaci", "SETTINGS.AdviseAllPlayer": "Powiadom wszystkich graczy", "SETTINGS.OneBlockBackStory": "Historia postaci w jednym bloku", - "SETTINGS.OneBlockBackStoryHint": "Zmienia obiekt historii postaci w jeden blok, ale możesz go formwatować i dodawać odnośniki.", + "SETTINGS.OneBlockBackStoryHint": "Zmienia obiekt historii postaci w jeden blok, ale możesz go formatować i dodawać odnośniki.", "SETTINGS.EnableStatusIcons": "Włącz ikony statusów", "SETTINGS.EnableStatusIconsHint": "Ustaw czy chcesz, żeby statusy walki i poczytalności były widoczne na tokenach.", - "SETTINGS.ShowExperimentalFeatures": "Pokaż Funckjonalności Eksperymentalne", + "SETTINGS.ShowExperimentalFeatures": "Pokaż Funkcjonalności Eksperymentalne", "SETTINGS.ShowExperimentalFeaturesHint": "Twój świat może przestać działać w kolejnej wersji systemu, jeśli będziesz używać tych funkcji. Tylko do testów, NIE UŻYWAJ tych funkcjonalności w normalnej rozgrywce", "CoC7.ExperimentalFeaturesWarning": "Ta funkcjonalność jest nadal w fazie rozwoju, nie jest zalecane używanie jej w normalnej rozgrywce.", "SETTINGS.CheckElevation": "Uwzględnij wysokość w obliczaniu odległości", - "SETTINGS.CheckElevationHint": "Uzwględnij wysokość w obliczaniu odległości w walce dystansowej", - "CoC7.toolTipDelay": "Opóźnienie w milisekundach między najechaniem myszką na umiejętność, a wyświetleniem okienka podpowiedzi. Ustaw '0' dla braku opóźnienia." + "SETTINGS.CheckElevationHint": "Uwzględnij wysokość w obliczaniu odległości w walce dystansowej", + "CoC7.toolTipDelay": "Opóźnienie w milisekundach między najechaniem myszką na umiejętność, a wyświetleniem okienka podpowiedzi. Ustaw '0' dla braku opóźnienia.", + + "CoC7.getTheExample": "Skopiuj przykład", + "CoC7.Copied": "Skopiowano przykładowy tekst do schowka" } From 461d36d687aba045a6a616def7aa2c3b0e6c8871 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 3 Feb 2022 17:30:17 +0000 Subject: [PATCH 409/726] Updated translations list --- .github/TRANSLATIONS.md | 129 ++++++++++++++++++++++++++++++++++------ 1 file changed, 111 insertions(+), 18 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index da47e051..092496f2 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,26 +2,43 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **fr**, **sv** - The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | it | ja | ko | pl | pt-BR | zh-TW | -| :---------------------------------------------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **10** | **4** | **4** | **6** | **13** | **12** | **6** | **6** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| Key | de | es | fr | it | ja | ko | pl | pt-BR | sv | zh-TW | +| :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **29** | **23** | **19** | **23** | **25** | **32** | **22** | **25** | **19** | **25** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | +| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | +| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | +| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.CoreRules.Title](#coc7settingscorerulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.HouseRules.Title](#coc7settingshouserulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Hint](#coc7settingspulprulesarchetypehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Name](#coc7settingspulprulesarchetypename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint](#coc7settingspulprulesdevelopmentrollluckhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Name](#coc7settingspulprulesdevelopmentrollluckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Hint](#coc7settingspulprulesdoublemaxhealthhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Name](#coc7settingspulprulesdoublemaxhealthname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Hint](#coc7settingspulprulesfasterrecoveryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Name](#coc7settingspulprulesfasterrecoveryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint](#coc7settingspulprulesignoremajorwoundshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Name](#coc7settingspulprulesignoremajorwoundsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Hint](#coc7settingspulprulesorganizationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Name](#coc7settingspulprulesorganizationname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Hint](#coc7settingspulprulestalentshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Name](#coc7settingspulprulestalentsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ##### CoC7.Copied @@ -59,6 +76,82 @@ The following translations have been abandoned **cn**, **cs**, [are you able to ` "CoC7.Polish": "Polish",` +##### CoC7.Settings.CoreRules.Title + +` "CoC7.Settings.CoreRules.Title": "Core Rule Book Optional Rules",` + +##### CoC7.Settings.HouseRules.Title + +` "CoC7.Settings.HouseRules.Title": "Common House Rules",` + +##### CoC7.Settings.PulpRules.Archetype.Hint + +` "CoC7.Settings.PulpRules.Archetype.Hint": "",` + +##### CoC7.Settings.PulpRules.Archetype.Name + +` "CoC7.Settings.PulpRules.Archetype.Name": "Pulp Archetypes",` + +##### CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint + +` "CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint": "Increase luck for failed and successful luck development roll",` + +##### CoC7.Settings.PulpRules.DevelopmentRollLuck.Name + +` "CoC7.Settings.PulpRules.DevelopmentRollLuck.Name": "Increase Development Rolls For Luck",` + +##### CoC7.Settings.PulpRules.DoubleMaxHealth.Hint + +` "CoC7.Settings.PulpRules.DoubleMaxHealth.Hint": "Maximum health is (CON + SIZ) / 5",` + +##### CoC7.Settings.PulpRules.DoubleMaxHealth.Name + +` "CoC7.Settings.PulpRules.DoubleMaxHealth.Name": "Double maximum health",` + +##### CoC7.Settings.PulpRules.FasterRecovery.Hint + +` "CoC7.Settings.PulpRules.FasterRecovery.Hint": "Natural healing is increased to two hit points per day",` + +##### CoC7.Settings.PulpRules.FasterRecovery.Name + +` "CoC7.Settings.PulpRules.FasterRecovery.Name": "Faster Recovery",` + +##### CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint + +` "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "",` + +##### CoC7.Settings.PulpRules.IgnoreMajorWounds.Name + +` "CoC7.Settings.PulpRules.IgnoreMajorWounds.Name": "Ignore Major Wounds",` + +##### CoC7.Settings.PulpRules.Organization.Hint + +` "CoC7.Settings.PulpRules.Organization.Hint": "",` + +##### CoC7.Settings.PulpRules.Organization.Name + +` "CoC7.Settings.PulpRules.Organization.Name": "Hero Organization",` + +##### CoC7.Settings.PulpRules.Talents.Hint + +` "CoC7.Settings.PulpRules.Talents.Hint": "",` + +##### CoC7.Settings.PulpRules.Talents.Name + +` "CoC7.Settings.PulpRules.Talents.Name": "Pulp Talents",` + +##### CoC7.Settings.Rules.Hint + +` "CoC7.Settings.Rules.Hint": "Configure variant/optional rules like Pulp Cthulhu.",` + +##### CoC7.Settings.Rules.Label + +` "CoC7.Settings.Rules.Label": "Configure Variant/Optional Rules",` + +##### CoC7.Settings.Rules.Name + +` "CoC7.Settings.Rules.Name": "Variant/Optional Rules",` + ##### CoC7.allActors ` "CoC7.allActors": "All Actors",` From 42b3523601f06aee9537cb3b18793425ce826b31 Mon Sep 17 00:00:00 2001 From: snap01 Date: Thu, 3 Feb 2022 17:30:17 +0000 Subject: [PATCH 410/726] [create-pull-request] automated change --- .github/ABANDONED.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index 8900c402..dafee4be 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -299,6 +299,25 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Migrate.TriggerTitle": "Trigger Data Migration", "CoC7.Migrate.TriggerContents": "

      Turn on data migration and restart

      ", "CoC7.Migrate.TriggerRestart": "Save and restart", +"CoC7.Settings.CoreRules.Title": "Core Rule Book Optional Rules", +"CoC7.Settings.Rules.Name": "Variant/Optional Rules", +"CoC7.Settings.Rules.Label": "Configure Variant/Optional Rules", +"CoC7.Settings.Rules.Hint": "Configure variant/optional rules like Pulp Cthulhu.", +"CoC7.Settings.HouseRules.Title": "Common House Rules", +"CoC7.Settings.PulpRules.DoubleMaxHealth.Name": "Double maximum health", +"CoC7.Settings.PulpRules.DoubleMaxHealth.Hint": "Maximum health is (CON + SIZ) / 5", +"CoC7.Settings.PulpRules.DevelopmentRollLuck.Name": "Increase Development Rolls For Luck", +"CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint": "Increase luck for failed and successful luck development roll", +"CoC7.Settings.PulpRules.Archetype.Name": "Pulp Archetypes", +"CoC7.Settings.PulpRules.Archetype.Hint": "", +"CoC7.Settings.PulpRules.Organization.Name": "Hero Organization", +"CoC7.Settings.PulpRules.Organization.Hint": "", +"CoC7.Settings.PulpRules.Talents.Name": "Pulp Talents", +"CoC7.Settings.PulpRules.Talents.Hint": "", +"CoC7.Settings.PulpRules.FasterRecovery.Name": "Faster Recovery", +"CoC7.Settings.PulpRules.FasterRecovery.Hint": "Natural healing is increased to two hit points per day", +"CoC7.Settings.PulpRules.IgnoreMajorWounds.Name": "Ignore Major Wounds", +"CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "", "CoC7.Maximize": "Maximize", "CoC7.Summarize": "Summarize", "CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you", @@ -518,6 +537,25 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Migrate.TriggerTitle": "Trigger Data Migration", "CoC7.Migrate.TriggerContents": "

      Turn on data migration and restart

      ", "CoC7.Migrate.TriggerRestart": "Save and restart", +"CoC7.Settings.CoreRules.Title": "Core Rule Book Optional Rules", +"CoC7.Settings.Rules.Name": "Variant/Optional Rules", +"CoC7.Settings.Rules.Label": "Configure Variant/Optional Rules", +"CoC7.Settings.Rules.Hint": "Configure variant/optional rules like Pulp Cthulhu.", +"CoC7.Settings.HouseRules.Title": "Common House Rules", +"CoC7.Settings.PulpRules.DoubleMaxHealth.Name": "Double maximum health", +"CoC7.Settings.PulpRules.DoubleMaxHealth.Hint": "Maximum health is (CON + SIZ) / 5", +"CoC7.Settings.PulpRules.DevelopmentRollLuck.Name": "Increase Development Rolls For Luck", +"CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint": "Increase luck for failed and successful luck development roll", +"CoC7.Settings.PulpRules.Archetype.Name": "Pulp Archetypes", +"CoC7.Settings.PulpRules.Archetype.Hint": "", +"CoC7.Settings.PulpRules.Organization.Name": "Hero Organization", +"CoC7.Settings.PulpRules.Organization.Hint": "", +"CoC7.Settings.PulpRules.Talents.Name": "Pulp Talents", +"CoC7.Settings.PulpRules.Talents.Hint": "", +"CoC7.Settings.PulpRules.FasterRecovery.Name": "Faster Recovery", +"CoC7.Settings.PulpRules.FasterRecovery.Hint": "Natural healing is increased to two hit points per day", +"CoC7.Settings.PulpRules.IgnoreMajorWounds.Name": "Ignore Major Wounds", +"CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "", "CoC7.Maximize": "Maximize", "CoC7.Summarize": "Summarize", "CoC7.UnableToInteractWithChatCard": "You are not able to interact with this message, if you need to make a change please ask your Keeper to select the options for you", From 90e771c5da3b263ecf590847340a3d40beab2127 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 3 Feb 2022 17:34:14 +0000 Subject: [PATCH 411/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index a91067a3..124edbf2 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -2,7 +2,9 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. +- Add ignore major wounds rule for Pulp rules - Fix showing Actor / Item create dialog box dropdown translations +- Split Pulp rules into individual options - Replace effect and status with conditions. Allow activating conditions from FoundryVTT combat tracker and effects menu as well as the character sheets - Update rest function to prevent showing more than max hp or mp was added to the chat summary message - Update to NPC sheet to use same icons for dead, indefInsane, prone, tempoInsane, and unconscious as PCs @@ -10,6 +12,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV, and @s - New Korean localization, thanks to @Mero-Pe - Update to French localization, thanks to @vonv - Update to German localization, thanks to @brockhaus +- Update to Polish localization, thanks to @everyonecancode - Update to Spanish localization, thanks to @lozalojo - Update to Swedish localization, thanks to @Rangertheman From d6a9e09ed2072fe9379f7d52beaf59db9f9ee601 Mon Sep 17 00:00:00 2001 From: Rangertheman <81484515+Rangertheman@users.noreply.github.com> Date: Thu, 3 Feb 2022 21:49:56 +0100 Subject: [PATCH 412/726] Update sv.json --- lang/sv.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lang/sv.json b/lang/sv.json index 18bebe74..c3045b88 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -754,6 +754,26 @@ "CoC7.Migrate.TriggerContents": "

      Slå igång datamigrering och starta om

      ", "CoC7.Migrate.TriggerRestart": "Spara och starta om", + "CoC7.Settings.CoreRules.Title": "Valfria regler från grundregelboken", + "CoC7.Settings.Rules.Name": "Alternativa/frivilliga regler", + "CoC7.Settings.Rules.Label": "Konfigurera Alternativa/frivilliga regler", + "CoC7.Settings.Rules.Hint": "Konfigurera Alternativa/frivilliga regler som för Pulp Cthulhu.", + "CoC7.Settings.HouseRules.Title": "Vanligt förekommande husregler", + "CoC7.Settings.PulpRules.DoubleMaxHealth.Name": "Dubblad Kroppspoäng", + "CoC7.Settings.PulpRules.DoubleMaxHealth.Hint": "Maximala Kroppspoängen är (FYS + STO) / 5", + "CoC7.Settings.PulpRules.DevelopmentRollLuck.Name": "Öka återhämtning av Tur-poäng", + "CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint": "Öka Tur-poäng för både lyckade- och misslyckade slag under utvecklingsfasen", + "CoC7.Settings.PulpRules.Archetype.Name": "Pulp-arketyper", + "CoC7.Settings.PulpRules.Archetype.Hint": "", + "CoC7.Settings.PulpRules.Organization.Name": "Hjälteorganisationer", + "CoC7.Settings.PulpRules.Organization.Hint": "", + "CoC7.Settings.PulpRules.Talents.Name": "Pulp-talanger", + "CoC7.Settings.PulpRules.Talents.Hint": "", + "CoC7.Settings.PulpRules.FasterRecovery.Name": "Snabbare återhämtning", + "CoC7.Settings.PulpRules.FasterRecovery.Hint": "Naturlig läkning ökar till två Kroppspoäng per dag", + "CoC7.Settings.PulpRules.IgnoreMajorWounds.Name": "Ignnorera allvarliga skador", + "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "", + "CoC7.Maximize": "Maximera", "CoC7.Summarize": "Begränsad vy", From 23a5c125f5c37f43e082e63e6b144cf4733808dc Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Fri, 4 Feb 2022 09:37:15 +0000 Subject: [PATCH 413/726] Updated translations list --- .github/TRANSLATIONS.md | 72 +++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 092496f2..8a171a62 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,43 +2,45 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! +The **sv** translation is currently up to date + The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | it | ja | ko | pl | pt-BR | sv | zh-TW | -| :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **29** | **23** | **19** | **23** | **25** | **32** | **22** | **25** | **19** | **25** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | -| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | -| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | -| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.CoreRules.Title](#coc7settingscorerulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.HouseRules.Title](#coc7settingshouserulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Archetype.Hint](#coc7settingspulprulesarchetypehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Archetype.Name](#coc7settingspulprulesarchetypename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint](#coc7settingspulprulesdevelopmentrollluckhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Name](#coc7settingspulprulesdevelopmentrollluckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DoubleMaxHealth.Hint](#coc7settingspulprulesdoublemaxhealthhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DoubleMaxHealth.Name](#coc7settingspulprulesdoublemaxhealthname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.FasterRecovery.Hint](#coc7settingspulprulesfasterrecoveryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.FasterRecovery.Name](#coc7settingspulprulesfasterrecoveryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint](#coc7settingspulprulesignoremajorwoundshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Name](#coc7settingspulprulesignoremajorwoundsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Organization.Hint](#coc7settingspulprulesorganizationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Organization.Name](#coc7settingspulprulesorganizationname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Talents.Hint](#coc7settingspulprulestalentshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Talents.Name](#coc7settingspulprulestalentsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| Key | de | es | fr | it | ja | ko | pl | pt-BR | zh-TW | +| :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **29** | **23** | **19** | **23** | **25** | **32** | **22** | **25** | **25** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.CoreRules.Title](#coc7settingscorerulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.HouseRules.Title](#coc7settingshouserulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Hint](#coc7settingspulprulesarchetypehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Name](#coc7settingspulprulesarchetypename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint](#coc7settingspulprulesdevelopmentrollluckhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Name](#coc7settingspulprulesdevelopmentrollluckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Hint](#coc7settingspulprulesdoublemaxhealthhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Name](#coc7settingspulprulesdoublemaxhealthname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Hint](#coc7settingspulprulesfasterrecoveryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Name](#coc7settingspulprulesfasterrecoveryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint](#coc7settingspulprulesignoremajorwoundshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Name](#coc7settingspulprulesignoremajorwoundsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Hint](#coc7settingspulprulesorganizationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Name](#coc7settingspulprulesorganizationname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Hint](#coc7settingspulprulestalentshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Name](#coc7settingspulprulestalentsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.Copied From 452fd3f4ae2d5aaf1b618564bee8a9ed2ee331d9 Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Sat, 5 Feb 2022 19:43:00 -0300 Subject: [PATCH 414/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 124edbf2..f1ed8e45 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -10,6 +10,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV, and @s - Update to NPC sheet to use same icons for dead, indefInsane, prone, tempoInsane, and unconscious as PCs - New Italian localization, thanks to @Stefano1975t - New Korean localization, thanks to @Mero-Pe +- Now it is possible to learn spell directly from books, thanks to @brockhaus - Update to French localization, thanks to @vonv - Update to German localization, thanks to @brockhaus - Update to Polish localization, thanks to @everyonecancode From f1c90dc32bfeb1e89da3d9d9a6378b1cc2927d6e Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 5 Feb 2022 23:58:15 +0000 Subject: [PATCH 415/726] Updated translations list --- .github/TRANSLATIONS.md | 82 ++++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 37 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 8a171a62..0a358bfc 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,45 +2,45 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The **sv** translation is currently up to date - The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | it | ja | ko | pl | pt-BR | zh-TW | -| :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **29** | **23** | **19** | **23** | **25** | **32** | **22** | **25** | **25** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.CoreRules.Title](#coc7settingscorerulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.HouseRules.Title](#coc7settingshouserulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Archetype.Hint](#coc7settingspulprulesarchetypehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Archetype.Name](#coc7settingspulprulesarchetypename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint](#coc7settingspulprulesdevelopmentrollluckhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Name](#coc7settingspulprulesdevelopmentrollluckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DoubleMaxHealth.Hint](#coc7settingspulprulesdoublemaxhealthhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DoubleMaxHealth.Name](#coc7settingspulprulesdoublemaxhealthname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.FasterRecovery.Hint](#coc7settingspulprulesfasterrecoveryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.FasterRecovery.Name](#coc7settingspulprulesfasterrecoveryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint](#coc7settingspulprulesignoremajorwoundshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Name](#coc7settingspulprulesignoremajorwoundsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Organization.Hint](#coc7settingspulprulesorganizationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Organization.Name](#coc7settingspulprulesorganizationname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Talents.Hint](#coc7settingspulprulestalentshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Talents.Name](#coc7settingspulprulestalentsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| Key | de | es | fr | it | ja | ko | pl | pt-BR | sv | zh-TW | +| :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **29** | **25** | **21** | **25** | **27** | **34** | **24** | **27** | **2** | **27** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | +| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | +| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | +| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.CoreRules.Title](#coc7settingscorerulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.HouseRules.Title](#coc7settingshouserulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Hint](#coc7settingspulprulesarchetypehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Name](#coc7settingspulprulesarchetypename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint](#coc7settingspulprulesdevelopmentrollluckhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Name](#coc7settingspulprulesdevelopmentrollluckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Hint](#coc7settingspulprulesdoublemaxhealthhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Name](#coc7settingspulprulesdoublemaxhealthname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Hint](#coc7settingspulprulesfasterrecoveryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Name](#coc7settingspulprulesfasterrecoveryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint](#coc7settingspulprulesignoremajorwoundshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Name](#coc7settingspulprulesignoremajorwoundsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Hint](#coc7settingspulprulesorganizationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Name](#coc7settingspulprulesorganizationname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Hint](#coc7settingspulprulestalentshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Name](#coc7settingspulprulestalentsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.SpellAlreadyLearned](#coc7spellalreadylearned) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpellSuccessfullyLearned](#coc7spellsuccessfullylearned) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ##### CoC7.Copied @@ -154,6 +154,14 @@ The following translations have been abandoned **cn**, **cs**, [are you able to ` "CoC7.Settings.Rules.Name": "Variant/Optional Rules",` +##### CoC7.SpellAlreadyLearned + +` "CoC7.SpellAlreadyLearned": "Spell named ('{spell}') was already learned.",` + +##### CoC7.SpellSuccessfullyLearned + +` "CoC7.SpellSuccessfullyLearned": "Spell '{spell}' was learned successfully!",` + ##### CoC7.allActors ` "CoC7.allActors": "All Actors",` From 765e848d0cd99421e7d21ec2b0ae45d4161b6a1a Mon Sep 17 00:00:00 2001 From: castanhocorreia Date: Sat, 5 Feb 2022 23:58:15 +0000 Subject: [PATCH 416/726] [create-pull-request] automated change --- .github/ABANDONED.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index dafee4be..84722aa5 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -196,6 +196,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.MythosGain": "Mythos gain", "CoC7.YouGainedCthulhuMythos": "Your mind quail before the unearthly manifestation (+{value}% Cthulhu Mythos)", "CoC7.CardResolved": "Card resolved", +"CoC7.SpellSuccessfullyLearned": "Spell '{spell}' was learned successfully!", +"CoC7.SpellAlreadyLearned": "Spell named ('{spell}') was already learned.", "CoC7.BookHasNothingMoreToTeach": "{book} has nothing more to teach. Cthulhu Mythos skill of {actor} is greater than this Mythos Rating.", "CoC7.Content": "Content", "CoC7.Development": "Development", @@ -472,6 +474,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.NewSpellName": "new spell", "CoC7.AddSpell": "Add spell", "CoC7.InventoryIsCurrentlyEmpty": "Inventory is currently empty.", +"CoC7.SpellSuccessfullyLearned": "Spell '{spell}' was learned successfully!", +"CoC7.SpellAlreadyLearned": "Spell named ('{spell}') was already learned.", "CoC7.BookHasNothingMoreToTeach": "{book} has nothing more to teach. Cthulhu Mythos skill of {actor} is greater than this Mythos Rating.", "CoC7.Content": "Content", "CoC7.Development": "Development", From c626b8117f93d018023d9dbd7e0a81c696308869 Mon Sep 17 00:00:00 2001 From: Rangertheman Date: Sun, 6 Feb 2022 16:58:30 +0100 Subject: [PATCH 417/726] Update sv.json --- lang/sv.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lang/sv.json b/lang/sv.json index 33b2e7cd..bebc5069 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -551,6 +551,9 @@ "CoC7.CombatSpell": "Strid", "CoC7.SpellType": "Besvärjelsetyp", + "CoC7.SpellSuccessfullyLearned": "Besvärjelsen '{spell}' har lärts in!", + "CoC7.SpellAlreadyLearned": "Besvärjelsen med namnet ('{spell}') hade redan lärts in.", + "CoC7.BookHasNothingMoreToTeach": "Det går inte att lära sig mer av {book}. {actor} har ett högre färdighetsvärde i Cthulhumyten än bokens mythosvärde.", "CoC7.BookType": "Boktyp", "CoC7.MythosBook": "Mythosbok", From 7972bdecc55d4396cb16cdfc8c32aed38c7971b8 Mon Sep 17 00:00:00 2001 From: Stefano1975t <97825580+Stefano1975t@users.noreply.github.com> Date: Mon, 7 Feb 2022 08:47:41 +0100 Subject: [PATCH 418/726] Update it.json Updated to the latest en.json version, with the two new lines related to spell learning. --- lang/it.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lang/it.json b/lang/it.json index 5ee6a041..96f20979 100644 --- a/lang/it.json +++ b/lang/it.json @@ -541,6 +541,8 @@ "CoC7.GateSpell": "Portale", "CoC7.CombatSpell": "Combattere", "CoC7.SpellType": "Tipo di Incantesimo", + "CoC7.SpellSuccessfullyLearned": "L'incantesimo '{spell}' è stato imparato con successo!", + "CoC7.SpellAlreadyLearned": "L'incantesimo chiamato ('{spell}') era già stato imparato.", "CoC7.BookHasNothingMoreToTeach": "{book} non ha più niente da insegnare. L'abilità Miti di Cthulhu di {actor} è maggiore del Valore di questo Mito.", "CoC7.BookType": "Tipo di libro", From 45689fb8a246e552d3c46c29a801474d9dfb8c2c Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 7 Feb 2022 11:26:19 +0000 Subject: [PATCH 419/726] Updated translations list --- .github/TRANSLATIONS.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 0a358bfc..c29acb89 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -6,7 +6,7 @@ The following translations have been abandoned **cn**, **cs**, [are you able to | Key | de | es | fr | it | ja | ko | pl | pt-BR | sv | zh-TW | | :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **29** | **25** | **21** | **25** | **27** | **34** | **24** | **27** | **2** | **27** | +| **Remaining**: | **29** | **25** | **21** | **23** | **27** | **34** | **24** | **27** | **2** | **27** | | [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | | [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | @@ -35,8 +35,8 @@ The following translations have been abandoned **cn**, **cs**, [are you able to | [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | | [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | | [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.SpellAlreadyLearned](#coc7spellalreadylearned) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SpellSuccessfullyLearned](#coc7spellsuccessfullylearned) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpellAlreadyLearned](#coc7spellalreadylearned) | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpellSuccessfullyLearned](#coc7spellsuccessfullylearned) | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | | [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | From f817a0ade11a8c79e700ef0e3d89279519e6d5d2 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 7 Feb 2022 11:28:35 +0000 Subject: [PATCH 420/726] Updated translations list --- .github/TRANSLATIONS.md | 76 +++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index c29acb89..de073e5d 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,45 +2,47 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! +The **sv** translation is currently up to date + The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | it | ja | ko | pl | pt-BR | sv | zh-TW | -| :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **29** | **25** | **21** | **23** | **27** | **34** | **24** | **27** | **2** | **27** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | -| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | -| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | -| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.CoreRules.Title](#coc7settingscorerulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.HouseRules.Title](#coc7settingshouserulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.Archetype.Hint](#coc7settingspulprulesarchetypehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.Archetype.Name](#coc7settingspulprulesarchetypename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint](#coc7settingspulprulesdevelopmentrollluckhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Name](#coc7settingspulprulesdevelopmentrollluckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.DoubleMaxHealth.Hint](#coc7settingspulprulesdoublemaxhealthhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.DoubleMaxHealth.Name](#coc7settingspulprulesdoublemaxhealthname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.FasterRecovery.Hint](#coc7settingspulprulesfasterrecoveryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.FasterRecovery.Name](#coc7settingspulprulesfasterrecoveryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint](#coc7settingspulprulesignoremajorwoundshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Name](#coc7settingspulprulesignoremajorwoundsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.Organization.Hint](#coc7settingspulprulesorganizationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.Organization.Name](#coc7settingspulprulesorganizationname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.Talents.Hint](#coc7settingspulprulestalentshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.PulpRules.Talents.Name](#coc7settingspulprulestalentsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | -| [CoC7.SpellAlreadyLearned](#coc7spellalreadylearned) | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SpellSuccessfullyLearned](#coc7spellsuccessfullylearned) | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| Key | de | es | fr | it | ja | ko | pl | pt-BR | zh-TW | +| :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **29** | **25** | **21** | **23** | **27** | **34** | **24** | **27** | **27** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.CoreRules.Title](#coc7settingscorerulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.HouseRules.Title](#coc7settingshouserulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Hint](#coc7settingspulprulesarchetypehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Name](#coc7settingspulprulesarchetypename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint](#coc7settingspulprulesdevelopmentrollluckhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Name](#coc7settingspulprulesdevelopmentrollluckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Hint](#coc7settingspulprulesdoublemaxhealthhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Name](#coc7settingspulprulesdoublemaxhealthname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Hint](#coc7settingspulprulesfasterrecoveryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Name](#coc7settingspulprulesfasterrecoveryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint](#coc7settingspulprulesignoremajorwoundshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Name](#coc7settingspulprulesignoremajorwoundsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Hint](#coc7settingspulprulesorganizationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Name](#coc7settingspulprulesorganizationname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Hint](#coc7settingspulprulestalentshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Name](#coc7settingspulprulestalentsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpellAlreadyLearned](#coc7spellalreadylearned) | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpellSuccessfullyLearned](#coc7spellsuccessfullylearned) | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.Copied From f01b3ce0eff71735f08a369faeec3df2dfccd884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trouver=20Objet=20Cach=C3=A9?= <44206935+vonv@users.noreply.github.com> Date: Tue, 8 Feb 2022 22:22:45 +0100 Subject: [PATCH 421/726] Update fr.json --- lang/fr.json | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/lang/fr.json b/lang/fr.json index ff66c3db..73fdc871 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -541,7 +541,9 @@ "CoC7.GateSpell": "Portail", "CoC7.CombatSpell": "Combat", "CoC7.SpellType": "Type de sort", - + "CoC7.SpellSuccessfullyLearned": "Sort '{spell}' appris !", + "CoC7.SpellAlreadyLearned": "Le sort ('{spell}') est déjà connu.", + "CoC7.BookHasNothingMoreToTeach": "{book} n'a plus rien à vous apprendre. La compétence en Mythe de Cthulhu de {actor} est supérieure au Mythe contenu dans celui-ci.", "CoC7.BookType": "Type d'ouvrage", "CoC7.Content": "Contenu", @@ -745,6 +747,26 @@ "CoC7.Migrate.TriggerContents": "

      Lance la migration de données puis redémarre

      ", "CoC7.Migrate.TriggerRestart": "Sauvegarde et redémarrage", + "CoC7.Settings.CoreRules.Title": "Règles Optionnelles du Livre de Base", + "CoC7.Settings.Rules.Name": "Variantes/Règles optionnelles", + "CoC7.Settings.Rules.Label": "Configurer les variantes/règles optionnelles", + "CoC7.Settings.Rules.Hint": "Configurer les variantes/règles optionnelles comme Cthulhu Pulp.", + "CoC7.Settings.HouseRules.Title": "Règles maison ordinaires", + "CoC7.Settings.PulpRules.DoubleMaxHealth.Name": "Doubler le maximum de PV", + "CoC7.Settings.PulpRules.DoubleMaxHealth.Hint": "Le maximum de PV est de (CON + SIZ) / 5", + "CoC7.Settings.PulpRules.DevelopmentRollLuck.Name": "Augmenter les jets de développement pour la Chance", + "CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint": "Augmenter la chance pour les jets de développement de Chance ratés ou réussis", + "CoC7.Settings.PulpRules.Archetype.Name": "Archétpes Pulp", + "CoC7.Settings.PulpRules.Archetype.Hint": "", + "CoC7.Settings.PulpRules.Organization.Name": "Organisation", + "CoC7.Settings.PulpRules.Organization.Hint": "", + "CoC7.Settings.PulpRules.Talents.Name": "Talents Pulp", + "CoC7.Settings.PulpRules.Talents.Hint": "", + "CoC7.Settings.PulpRules.FasterRecovery.Name": "Récupération accélérée", + "CoC7.Settings.PulpRules.FasterRecovery.Hint": "La récupération naturelle est augmentée de 2 PV par jour", + "CoC7.Settings.PulpRules.IgnoreMajorWounds.Name": "Ignorer les blessures graves", + "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "", + "CoC7.Maximize": "Développer", "CoC7.Summarize": "Compacter", From 4a350ab01a4a6d895c451ee6ed632556f73e357f Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 9 Feb 2022 00:30:48 +0000 Subject: [PATCH 422/726] Updated translations list --- .github/TRANSLATIONS.md | 76 ++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index de073e5d..2338bfbd 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,47 +2,47 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The **sv** translation is currently up to date +The following translations are currently up to date **fr**, **sv** The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | fr | it | ja | ko | pl | pt-BR | zh-TW | -| :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **29** | **25** | **21** | **23** | **27** | **34** | **24** | **27** | **27** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.CoreRules.Title](#coc7settingscorerulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.HouseRules.Title](#coc7settingshouserulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Archetype.Hint](#coc7settingspulprulesarchetypehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Archetype.Name](#coc7settingspulprulesarchetypename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint](#coc7settingspulprulesdevelopmentrollluckhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Name](#coc7settingspulprulesdevelopmentrollluckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DoubleMaxHealth.Hint](#coc7settingspulprulesdoublemaxhealthhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DoubleMaxHealth.Name](#coc7settingspulprulesdoublemaxhealthname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.FasterRecovery.Hint](#coc7settingspulprulesfasterrecoveryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.FasterRecovery.Name](#coc7settingspulprulesfasterrecoveryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint](#coc7settingspulprulesignoremajorwoundshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Name](#coc7settingspulprulesignoremajorwoundsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Organization.Hint](#coc7settingspulprulesorganizationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Organization.Name](#coc7settingspulprulesorganizationname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Talents.Hint](#coc7settingspulprulestalentshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Talents.Name](#coc7settingspulprulestalentsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SpellAlreadyLearned](#coc7spellalreadylearned) | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SpellSuccessfullyLearned](#coc7spellsuccessfullylearned) | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| Key | de | es | it | ja | ko | pl | pt-BR | zh-TW | +| :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **29** | **25** | **23** | **27** | **34** | **24** | **27** | **27** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.CoreRules.Title](#coc7settingscorerulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.HouseRules.Title](#coc7settingshouserulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Hint](#coc7settingspulprulesarchetypehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Name](#coc7settingspulprulesarchetypename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint](#coc7settingspulprulesdevelopmentrollluckhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Name](#coc7settingspulprulesdevelopmentrollluckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Hint](#coc7settingspulprulesdoublemaxhealthhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Name](#coc7settingspulprulesdoublemaxhealthname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Hint](#coc7settingspulprulesfasterrecoveryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Name](#coc7settingspulprulesfasterrecoveryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint](#coc7settingspulprulesignoremajorwoundshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Name](#coc7settingspulprulesignoremajorwoundsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Hint](#coc7settingspulprulesorganizationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Name](#coc7settingspulprulesorganizationname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Hint](#coc7settingspulprulestalentshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Name](#coc7settingspulprulestalentsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpellAlreadyLearned](#coc7spellalreadylearned) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpellSuccessfullyLearned](#coc7spellsuccessfullylearned) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.Copied From 8c7e45952326c5013911db581f231660f48fb825 Mon Sep 17 00:00:00 2001 From: Stefano1975t <97825580+Stefano1975t@users.noreply.github.com> Date: Thu, 10 Feb 2022 09:09:42 +0100 Subject: [PATCH 423/726] Update it.json Added Migration (lines 745-748) and Pulp (lines 750-768) translations. --- lang/it.json | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/lang/it.json b/lang/it.json index 96f20979..bccb8475 100644 --- a/lang/it.json +++ b/lang/it.json @@ -741,7 +741,32 @@ "CoC7.Migrate.ButtonUpdate": "Aggiorna", "CoC7.Migrate.ButtonSkip": "Ignora", "CoC7.Migrate.ButtonOkay": "Okay", - + + "CoC7.Migrate.TriggerButton": "Attivare lo spostamento dei dati", + "CoC7.Migrate.TriggerTitle": "Attivare lo spostamento dei dati", + "CoC7.Migrate.TriggerContents": "

      Attiva lo spostamento dei dati e riavvia

      ", + "CoC7.Migrate.TriggerRestart": "Salva e riavvia", + + "CoC7.Settings.CoreRules.Title": "Regole opzionali del regolamento base", + "CoC7.Settings.Rules.Name": "Regole opzionali/variazioni", + "CoC7.Settings.Rules.Label": "Configurazione delle regole opzionali/variazioni", + "CoC7.Settings.Rules.Hint": "Configura le regole opzionali/variazioni secondo Pulp Cthulhu.", + "CoC7.Settings.HouseRules.Title": "Regole della casa comuni", + "CoC7.Settings.PulpRules.DoubleMaxHealth.Name": "Doppia salute massima", + "CoC7.Settings.PulpRules.DoubleMaxHealth.Hint": "La salute massima è (COS + TAG) / 5", + "CoC7.Settings.PulpRules.DevelopmentRollLuck.Name": "Aumentare i Tiri di Sviluppo per la Fortuna", + "CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint": "Aumenta la fortuna per il successo o il fallimento dei tiri di sviluppo", + "CoC7.Settings.PulpRules.Archetype.Name": "Archetipi Pulp", + "CoC7.Settings.PulpRules.Archetype.Hint": "", + "CoC7.Settings.PulpRules.Organization.Name": "Organizzazione dell'Eroe", + "CoC7.Settings.PulpRules.Organization.Hint": "", + "CoC7.Settings.PulpRules.Talents.Name": "Talenti Pulp", + "CoC7.Settings.PulpRules.Talents.Hint": "", + "CoC7.Settings.PulpRules.FasterRecovery.Name": "Recupero Più Veloce", + "CoC7.Settings.PulpRules.FasterRecovery.Hint": "La guarigione naturale è aumentata di due punti ferita al giorno", + "CoC7.Settings.PulpRules.IgnoreMajorWounds.Name": "Ignorare Ferite Gravi", + "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "", + "CoC7.Maximize": "Massimizza", "CoC7.Summarize": "Riassumi", From 405f025fa2b805eb51d690d18c3b33a3fd934556 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Fri, 11 Feb 2022 02:40:20 +0000 Subject: [PATCH 424/726] Updated translations list --- .github/TRANSLATIONS.md | 76 ++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 2338bfbd..c8f92606 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,47 +2,47 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **fr**, **sv** +The following translations are currently up to date **fr**, **it**, **sv** The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | it | ja | ko | pl | pt-BR | zh-TW | -| :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **29** | **25** | **23** | **27** | **34** | **24** | **27** | **27** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.CoreRules.Title](#coc7settingscorerulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.HouseRules.Title](#coc7settingshouserulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Archetype.Hint](#coc7settingspulprulesarchetypehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Archetype.Name](#coc7settingspulprulesarchetypename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint](#coc7settingspulprulesdevelopmentrollluckhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Name](#coc7settingspulprulesdevelopmentrollluckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DoubleMaxHealth.Hint](#coc7settingspulprulesdoublemaxhealthhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DoubleMaxHealth.Name](#coc7settingspulprulesdoublemaxhealthname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.FasterRecovery.Hint](#coc7settingspulprulesfasterrecoveryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.FasterRecovery.Name](#coc7settingspulprulesfasterrecoveryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint](#coc7settingspulprulesignoremajorwoundshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Name](#coc7settingspulprulesignoremajorwoundsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Organization.Hint](#coc7settingspulprulesorganizationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Organization.Name](#coc7settingspulprulesorganizationname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Talents.Hint](#coc7settingspulprulestalentshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Talents.Name](#coc7settingspulprulestalentsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SpellAlreadyLearned](#coc7spellalreadylearned) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SpellSuccessfullyLearned](#coc7spellsuccessfullylearned) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| Key | de | es | ja | ko | pl | pt-BR | zh-TW | +| :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **29** | **25** | **27** | **34** | **24** | **27** | **27** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | +| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.CoreRules.Title](#coc7settingscorerulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.HouseRules.Title](#coc7settingshouserulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Hint](#coc7settingspulprulesarchetypehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Name](#coc7settingspulprulesarchetypename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint](#coc7settingspulprulesdevelopmentrollluckhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Name](#coc7settingspulprulesdevelopmentrollluckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Hint](#coc7settingspulprulesdoublemaxhealthhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Name](#coc7settingspulprulesdoublemaxhealthname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Hint](#coc7settingspulprulesfasterrecoveryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Name](#coc7settingspulprulesfasterrecoveryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint](#coc7settingspulprulesignoremajorwoundshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Name](#coc7settingspulprulesignoremajorwoundsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Hint](#coc7settingspulprulesorganizationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Name](#coc7settingspulprulesorganizationname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Hint](#coc7settingspulprulestalentshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Name](#coc7settingspulprulestalentsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpellAlreadyLearned](#coc7spellalreadylearned) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpellSuccessfullyLearned](#coc7spellsuccessfullylearned) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ##### CoC7.Copied From cd689ab85fd3bd6d7a2452af0a5fe1e664f88aa1 Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Fri, 18 Feb 2022 17:18:11 -0300 Subject: [PATCH 425/726] Insert new total downloads tag on README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c2f7eae8..4b9cd7f3 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ +

      Usage   |    From 1f04d2908ca19c64ce7a779f17f728e7976fc81c Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Fri, 18 Feb 2022 17:28:55 -0300 Subject: [PATCH 426/726] Update pt-BR.json --- lang/pt-BR.json | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/lang/pt-BR.json b/lang/pt-BR.json index e7b71e79..bd71a541 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -710,11 +710,14 @@ "CoC7.Convert": "Converter", "CoC7.NoConvert": "Não Converter", "CoC7.Guess": "Talvez", + "CoC7.English": "Inglês", "CoC7.Spanish": "Espanhol", "CoC7.French": "Francês", "CoC7.German": "Alemão", + "CoC7.Polish": "Polonês", "CoC7.TraditionalChinese": "Chinês Tradicional", + "CoC7.SelectSourceLanguage": "Selecione o idioma de fonte.", "CoC7.ImportedCharactersFolder": "Personagens importados", "CoC7.ImportSkillItemLocations": "Buscando por perícias/feitiços/armas em", @@ -731,6 +734,10 @@ "CoC7.Migrate.ButtonUpdate": "Atualizar", "CoC7.Migrate.ButtonSkip": "Mais Tarde", "CoC7.Migrate.ButtonOkay": "Proceder", + "CoC7.Migrate.TriggerButton": "Acionar Migração", + "CoC7.Migrate.TriggerContents": "

      Iniciar migração e reiniciar

      ", + "CoC7.Migrate.TriggerRestart": "Salvar e reiniciar", + "CoC7.Migrate.TriggerTitle": "Acionar Migração", "CoC7.Maximize": "Maximizar", "CoC7.Summarize": "Resumir", @@ -878,5 +885,27 @@ "SETTINGS.showIconsOnly": "Na versão resumida da ficha, mostra apenas os ícones das perícias.", "CoC7.toolTipDelay": "Atraso em milissegundos antes das dicas aparecerem, 0 para nunca.", "CoC7.Copied": "Texto de exemplo copiado para a área de transferência.", - "CoC7.getTheExample": "Copy Example" + "CoC7.getTheExample": "Copy Example", + "CoC7.EraAvailability": "Disponibilidade", + "CoC7.Settings.CoreRules.Title": "Regras Adicionais do Livro Básico", + "CoC7.Settings.HouseRules.Title": "Regras de Ouro Comuns", + "CoC7.Settings.PulpRules.Archetype.Hint": "", + "CoC7.Settings.PulpRules.Archetype.Name": "Arquétipos Pulp", + "CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint": "Aumenta Sorte para falhas e sucesso na rolagem de desenvolvimento de Sorte", + "CoC7.Settings.PulpRules.DevelopmentRollLuck.Name": "Maior Desenvolvimento de Sorte", + "CoC7.Settings.PulpRules.DoubleMaxHealth.Hint": "Vida máxima é (CON + TAM) / 5", + "CoC7.Settings.PulpRules.DoubleMaxHealth.Name": "Dobra vida máxima", + "CoC7.Settings.PulpRules.FasterRecovery.Hint": "Cura natural é aumentada para dois pontos por dia", + "CoC7.Settings.PulpRules.FasterRecovery.Name": "Recuperação Rápida", + "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "", + "CoC7.Settings.PulpRules.IgnoreMajorWounds.Name": "Ignora Feridas Graves", + "CoC7.Settings.PulpRules.Organization.Hint": "", + "CoC7.Settings.PulpRules.Organization.Name": "Organização", + "CoC7.Settings.PulpRules.Talents.Hint": "", + "CoC7.Settings.PulpRules.Talents.Name": "Talentos Pulp", + "CoC7.Settings.Rules.Hint": "Configurar regras variantes/opcionais, como Pulp", + "CoC7.Settings.Rules.Label": "Configurar Regras Variantes/Opcionais", + "CoC7.Settings.Rules.Name": "Regras Variantes/Opcionais", + "CoC7.SpellAlreadyLearned": "Feitiço ('{spell}') já foi aprendido.", + "CoC7.SpellSuccessfullyLearned": "Feitiço '{spell}' foi aprendido com sucesso!", } From e8af59f0c5a123a408d93cb8e059721a708266d6 Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Fri, 18 Feb 2022 17:32:38 -0300 Subject: [PATCH 427/726] Update pt-BR.json --- lang/pt-BR.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lang/pt-BR.json b/lang/pt-BR.json index bd71a541..b584f1e8 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -889,7 +889,7 @@ "CoC7.EraAvailability": "Disponibilidade", "CoC7.Settings.CoreRules.Title": "Regras Adicionais do Livro Básico", "CoC7.Settings.HouseRules.Title": "Regras de Ouro Comuns", - "CoC7.Settings.PulpRules.Archetype.Hint": "", + "CoC7.Settings.PulpRules.Archetype.Hint": "...", "CoC7.Settings.PulpRules.Archetype.Name": "Arquétipos Pulp", "CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint": "Aumenta Sorte para falhas e sucesso na rolagem de desenvolvimento de Sorte", "CoC7.Settings.PulpRules.DevelopmentRollLuck.Name": "Maior Desenvolvimento de Sorte", @@ -897,11 +897,11 @@ "CoC7.Settings.PulpRules.DoubleMaxHealth.Name": "Dobra vida máxima", "CoC7.Settings.PulpRules.FasterRecovery.Hint": "Cura natural é aumentada para dois pontos por dia", "CoC7.Settings.PulpRules.FasterRecovery.Name": "Recuperação Rápida", - "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "", + "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "...", "CoC7.Settings.PulpRules.IgnoreMajorWounds.Name": "Ignora Feridas Graves", - "CoC7.Settings.PulpRules.Organization.Hint": "", + "CoC7.Settings.PulpRules.Organization.Hint": "...", "CoC7.Settings.PulpRules.Organization.Name": "Organização", - "CoC7.Settings.PulpRules.Talents.Hint": "", + "CoC7.Settings.PulpRules.Talents.Hint": "...", "CoC7.Settings.PulpRules.Talents.Name": "Talentos Pulp", "CoC7.Settings.Rules.Hint": "Configurar regras variantes/opcionais, como Pulp", "CoC7.Settings.Rules.Label": "Configurar Regras Variantes/Opcionais", From e9f816b6849ff9401f4fa2599659f187e2919efa Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Fri, 18 Feb 2022 17:35:18 -0300 Subject: [PATCH 428/726] Remove additional comma --- lang/pt-BR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/pt-BR.json b/lang/pt-BR.json index b584f1e8..9a40c8d5 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -907,5 +907,5 @@ "CoC7.Settings.Rules.Label": "Configurar Regras Variantes/Opcionais", "CoC7.Settings.Rules.Name": "Regras Variantes/Opcionais", "CoC7.SpellAlreadyLearned": "Feitiço ('{spell}') já foi aprendido.", - "CoC7.SpellSuccessfullyLearned": "Feitiço '{spell}' foi aprendido com sucesso!", + "CoC7.SpellSuccessfullyLearned": "Feitiço '{spell}' foi aprendido com sucesso!" } From 4769eb448669e5d3108012afa3e6357b8ecb8d78 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Fri, 18 Feb 2022 20:36:29 +0000 Subject: [PATCH 429/726] Updated translations list --- .github/TRANSLATIONS.md | 76 ++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index c8f92606..2cc8f1f6 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,47 +2,47 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **fr**, **it**, **sv** +The following translations are currently up to date **fr**, **it**, **pt-BR**, **sv** The following translations have been abandoned **cn**, **cs**, [are you able to help?](./ABANDONED.md) -| Key | de | es | ja | ko | pl | pt-BR | zh-TW | -| :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **29** | **25** | **27** | **34** | **24** | **27** | **27** | -| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | -| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.CoreRules.Title](#coc7settingscorerulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.HouseRules.Title](#coc7settingshouserulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Archetype.Hint](#coc7settingspulprulesarchetypehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Archetype.Name](#coc7settingspulprulesarchetypename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint](#coc7settingspulprulesdevelopmentrollluckhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Name](#coc7settingspulprulesdevelopmentrollluckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DoubleMaxHealth.Hint](#coc7settingspulprulesdoublemaxhealthhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.DoubleMaxHealth.Name](#coc7settingspulprulesdoublemaxhealthname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.FasterRecovery.Hint](#coc7settingspulprulesfasterrecoveryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.FasterRecovery.Name](#coc7settingspulprulesfasterrecoveryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint](#coc7settingspulprulesignoremajorwoundshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Name](#coc7settingspulprulesignoremajorwoundsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Organization.Hint](#coc7settingspulprulesorganizationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Organization.Name](#coc7settingspulprulesorganizationname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Talents.Hint](#coc7settingspulprulestalentshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.PulpRules.Talents.Name](#coc7settingspulprulestalentsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SpellAlreadyLearned](#coc7spellalreadylearned) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SpellSuccessfullyLearned](#coc7spellsuccessfullylearned) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| Key | de | es | ja | ko | pl | zh-TW | +| :------------------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **29** | **25** | **27** | **34** | **24** | **27** | +| [CoC7.Copied](#coc7copied) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.EraAvailability](#coc7eraavailability) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | +| [CoC7.Migrate.TriggerButton](#coc7migratetriggerbutton) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Migrate.TriggerContents](#coc7migratetriggercontents) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Migrate.TriggerRestart](#coc7migratetriggerrestart) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.Migrate.TriggerTitle](#coc7migratetriggertitle) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| [CoC7.NotEnoughMagicPoints](#coc7notenoughmagicpoints) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.Polish](#coc7polish) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.CoreRules.Title](#coc7settingscorerulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.HouseRules.Title](#coc7settingshouserulestitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Hint](#coc7settingspulprulesarchetypehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Archetype.Name](#coc7settingspulprulesarchetypename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Hint](#coc7settingspulprulesdevelopmentrollluckhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DevelopmentRollLuck.Name](#coc7settingspulprulesdevelopmentrollluckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Hint](#coc7settingspulprulesdoublemaxhealthhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.DoubleMaxHealth.Name](#coc7settingspulprulesdoublemaxhealthname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Hint](#coc7settingspulprulesfasterrecoveryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.FasterRecovery.Name](#coc7settingspulprulesfasterrecoveryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint](#coc7settingspulprulesignoremajorwoundshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.IgnoreMajorWounds.Name](#coc7settingspulprulesignoremajorwoundsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Hint](#coc7settingspulprulesorganizationhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Organization.Name](#coc7settingspulprulesorganizationname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Hint](#coc7settingspulprulestalentshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.PulpRules.Talents.Name](#coc7settingspulprulestalentsname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Hint](#coc7settingsruleshint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Label](#coc7settingsruleslabel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.Rules.Name](#coc7settingsrulesname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpellAlreadyLearned](#coc7spellalreadylearned) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpellSuccessfullyLearned](#coc7spellsuccessfullylearned) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.allActors](#coc7allactors) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.getTheExample](#coc7gettheexample) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | +| [CoC7.restTargets](#coc7resttargets) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ##### CoC7.Copied From 9c88f50a9e6540321f8ddc0ca4456faf6b6f5de7 Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Fri, 18 Feb 2022 19:52:27 -0300 Subject: [PATCH 430/726] Prepare for 0.7.4 version --- .github/CHANGELOG.md | 3 ++- package.json | 2 +- system.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index f1ed8e45..40df02a4 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,4 +1,4 @@ -## Changes coming in a future release: +## Version 0.7.4: When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. @@ -14,6 +14,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV, and @s - Update to French localization, thanks to @vonv - Update to German localization, thanks to @brockhaus - Update to Polish localization, thanks to @everyonecancode +- Update to Portuguese localization - Update to Spanish localization, thanks to @lozalojo - Update to Swedish localization, thanks to @Rangertheman diff --git a/package.json b/package.json index 0f3ea405..73dcdf16 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fvtt-coc7", - "version": "0.7.3", + "version": "0.7.4", "description": "An unofficial implementation of Call of Cthulhu 7th Edition system for Foundry VTT.", "scripts": { "build": "webpack --mode production", diff --git a/system.json b/system.json index fe032d0b..2e8e2147 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "name": "CoC7", "title": "Call of Cthulhu 7th Edition (Unofficial)", "description": "An unofficial implementation of the Call of Cthulhu 7th Edition game system for Foundry Virtual Tabletop.", - "version": "0.7.3", + "version": "0.7.4", "author": "Miskatonic Investigative Society", "minimumCoreVersion": "9", "compatibleCoreVersion": "9", From ce170f30733292666eabad1fd31b686706c2f1cf Mon Sep 17 00:00:00 2001 From: James <43982555+snap01@users.noreply.github.com> Date: Sat, 19 Feb 2022 19:08:51 +0000 Subject: [PATCH 431/726] Allow disabling conditions when "Enable status icons" is unchecked --- module/actors/actor.js | 2 +- templates/actors/character-sheet-v2.html | 2 +- templates/actors/npc-sheet.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index d855dab7..a0b98812 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -3103,7 +3103,7 @@ export class CoCActor extends Actor { forceValue = true } } - if (forceValue) { + if (forceValue || !game.settings.get('CoC7', 'enableStatusIcons')) { switch (conditionName) { case COC7.status.tempoInsane: case COC7.status.indefInsane: diff --git a/templates/actors/character-sheet-v2.html b/templates/actors/character-sheet-v2.html index 97cce76b..189d6199 100644 --- a/templates/actors/character-sheet-v2.html +++ b/templates/actors/character-sheet-v2.html @@ -205,7 +205,7 @@
      {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}}
      - +
    {{/if}} diff --git a/templates/actors/npc-sheet.html b/templates/actors/npc-sheet.html index 6d28ef99..9d7d9877 100644 --- a/templates/actors/npc-sheet.html +++ b/templates/actors/npc-sheet.html @@ -369,7 +369,7 @@

    {{localize 'CoC7.GmNotes'}} {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} - + {{/if}} From 2053f9aa120992e064acf44d84245bbab5cf18f4 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 20 Feb 2022 13:07:41 +0000 Subject: [PATCH 432/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 40df02a4..aef28b5e 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,3 +1,9 @@ +## Changes coming in a future release: + +When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. + +- Fix unable to remove conditions (prone, unconscious, insanity, etc) when the setting "Scene Settings / Enable status icons" is disabled + ## Version 0.7.4: When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. From 67025ade4d9e6aba5ef7fdcc0be0569f92dbbafb Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Sun, 20 Feb 2022 17:26:34 -0300 Subject: [PATCH 433/726] Resolve #1014 and #1015 --- module/utilities.js | 2 +- templates/actors/character-sheet-v2.html | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/module/utilities.js b/module/utilities.js index f972b696..ca7c4b90 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -480,7 +480,7 @@ export class CoC7Utilities { } } } - const isCriticalWounds = (!game.settings.get('CoC7', 'pulpRuleIgnoreMajorWounds') && actor.hasCondition(COC7.status.criticalWounds)) + const isCriticalWounds = (!game.settings.get('CoC7', 'pulpRuleIgnoreMajorWounds') && actor.hasConditionStatus(COC7.status.criticalWounds)) const dailySanityLoss = actor.data.data.attribs.san.dailyLoss const hpValue = actor.data.data.attribs.hp.value const hpMax = actor.data.data.attribs.hp.max diff --git a/templates/actors/character-sheet-v2.html b/templates/actors/character-sheet-v2.html index 189d6199..e2c8e5ee 100644 --- a/templates/actors/character-sheet-v2.html +++ b/templates/actors/character-sheet-v2.html @@ -165,7 +165,6 @@
    - {{#if showDevPannel}} {{> "systems/CoC7/templates/actors/parts/development-controls.html"}} {{else}} From 5d0041c7bd3f9f85ee08631b2a7712cf2c2ba55c Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Sun, 20 Feb 2022 17:32:29 -0300 Subject: [PATCH 434/726] Prepare for v0.7.5 --- .github/CHANGELOG.md | 4 +++- package.json | 2 +- system.json | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index aef28b5e..a411efa4 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,8 +1,10 @@ -## Changes coming in a future release: +## Version 0.7.5: When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. - Fix unable to remove conditions (prone, unconscious, insanity, etc) when the setting "Scene Settings / Enable status icons" is disabled +- Now rest is available again +- Remove myterious button that produces mysterious messages ## Version 0.7.4: diff --git a/package.json b/package.json index 73dcdf16..7481af05 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fvtt-coc7", - "version": "0.7.4", + "version": "0.7.5", "description": "An unofficial implementation of Call of Cthulhu 7th Edition system for Foundry VTT.", "scripts": { "build": "webpack --mode production", diff --git a/system.json b/system.json index 2e8e2147..ab50a26c 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "name": "CoC7", "title": "Call of Cthulhu 7th Edition (Unofficial)", "description": "An unofficial implementation of the Call of Cthulhu 7th Edition game system for Foundry Virtual Tabletop.", - "version": "0.7.4", + "version": "0.7.5", "author": "Miskatonic Investigative Society", "minimumCoreVersion": "9", "compatibleCoreVersion": "9", From cb08caa7c14b0c6b9a88efba6629480ea88db221 Mon Sep 17 00:00:00 2001 From: Grischa Brockhaus Date: Sat, 26 Feb 2022 13:09:08 +0100 Subject: [PATCH 435/726] Fix for spell-learning from book changes Keeper was not able to edit or delete spells from books anymore. --- module/items/book/data.js | 3 ++- templates/items/book/main.html | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/module/items/book/data.js b/module/items/book/data.js index 8eade046..4b814b0d 100644 --- a/module/items/book/data.js +++ b/module/items/book/data.js @@ -45,10 +45,11 @@ export class CoC7Book extends CoC7Item { } async spellDetail (index) { + const isKeeper = game.user.isGM const data = this.data.data.spells[index] const parent = this.actor ? this.actor : null const spell = new CoC7Spell(data, { parent, bookId: this.id }) - if (spell.data.data.learned) { + if (isKeeper || spell.data.data.learned) { return await spell.sheet.render(true) } } diff --git a/templates/items/book/main.html b/templates/items/book/main.html index 6df934a5..4535d661 100644 --- a/templates/items/book/main.html +++ b/templates/items/book/main.html @@ -170,10 +170,10 @@
    - {{#if (or isKeeper spell.data.learned)}} + {{#if (or ../isKeeper spell.data.learned)}} {{/if}} - {{#if (isKeeper)}} + {{#if ../isKeeper}} {{/if}}
    From 2b96dec1557844d4c94ffca613e486d8790bc98f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trouver=20Objet=20Cach=C3=A9?= <44206935+vonv@users.noreply.github.com> Date: Thu, 3 Mar 2022 23:12:01 +0100 Subject: [PATCH 436/726] Update fr.json --- lang/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/fr.json b/lang/fr.json index 73fdc871..2c8917ab 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -808,7 +808,7 @@ "SETTINGS.showIconsOnly": "Sur la fiche compacte, n'afficher que les icônes dans la liste des compétences.", "SETTINGS.UseToken": "Utiliser le portrait des tokens", "SETTINGS.UseTokenHint": "Utiliser le portrait du token au lieu du portrait du personnage dans les cartes de dialogue", - "SETTINGS.DisplayActorOnCard": "Afficher le portrait sur les carte de dialogue", + "SETTINGS.DisplayActorOnCard": "Afficher le portrait sur les cartes de dialogue", "SETTINGS.DisplayActorOnCardHint": "Afficher le portrait sur les cartes de combat", "SETTINGS.InitiativeRule": "Règle d'initiative", "SETTINGS.InitiativeRuleHint": "Vous pouvez sélectionner la règle d'initiative [Basique] (en utilisant la valeur DEX) ou [Optionnelle] (en utilisant les degrés de réussite)", From 0e18e7c8f08ab03d4af1c59d05fc2607a62a6de7 Mon Sep 17 00:00:00 2001 From: Castanho Correia Date: Fri, 4 Mar 2022 04:21:26 -0300 Subject: [PATCH 437/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index a411efa4..140af31b 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,3 +1,10 @@ +## On Future Release: + +When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. + +- Fix possibility to edit or delete spells from books for keepers +- Update to French localization, thanks to @vonv + ## Version 0.7.5: When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. From fa29d6992fceff6a0c813a11fdb421704578b8a0 Mon Sep 17 00:00:00 2001 From: James <43982555+snap01@users.noreply.github.com> Date: Tue, 8 Mar 2022 21:35:08 +0000 Subject: [PATCH 438/726] Fix User player name lacks permission to update Token when more than two players adding active effects Fix Invalid BaseTexture in FireFox for active effects --- assets/icons/arm-sling.svg | 2 +- assets/icons/heart-beats.svg | 2 +- assets/icons/knocked-out-stars.svg | 2 +- assets/icons/tombstone.svg | 2 +- module/coc7.js | 2 ++ 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/assets/icons/arm-sling.svg b/assets/icons/arm-sling.svg index a8a9caf6..79fde95e 100644 --- a/assets/icons/arm-sling.svg +++ b/assets/icons/arm-sling.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/heart-beats.svg b/assets/icons/heart-beats.svg index 7d2d7713..daf7d609 100644 --- a/assets/icons/heart-beats.svg +++ b/assets/icons/heart-beats.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/knocked-out-stars.svg b/assets/icons/knocked-out-stars.svg index feb47e43..2fa8b64f 100644 --- a/assets/icons/knocked-out-stars.svg +++ b/assets/icons/knocked-out-stars.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/tombstone.svg b/assets/icons/tombstone.svg index c53064fc..ba952ebe 100644 --- a/assets/icons/tombstone.svg +++ b/assets/icons/tombstone.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/module/coc7.js b/module/coc7.js index 5e17c93c..3cf2b4c5 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -207,6 +207,7 @@ Hooks.once('setup', function () { Hooks.on('createActiveEffect', (data, options, userId) => { if ( + game.userId === userId && typeof data.data.flags.core !== 'undefined' && typeof data.data.flags.core.statusId !== 'undefined' ) { @@ -246,6 +247,7 @@ Hooks.on('createActiveEffect', (data, options, userId) => { Hooks.on('deleteActiveEffect', (data, options, userId) => { if ( + game.userId === userId && typeof data.data.flags.core !== 'undefined' && typeof data.data.flags.core.statusId !== 'undefined' ) { From 929925e3a4d779f86efd4c93fd8454f69547c767 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 8 Mar 2022 21:39:45 +0000 Subject: [PATCH 439/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 140af31b..af8253cb 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -2,6 +2,8 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. +- Fix Invalid BaseTexture in FireFox for active effects +- Fix player lacks permission to update Token when adding/removing active effects if there are more than two players - Fix possibility to edit or delete spells from books for keepers - Update to French localization, thanks to @vonv From a3ad1f5b0a24a6e14e59b3b5e003f93fc435f0ef Mon Sep 17 00:00:00 2001 From: James <43982555+snap01@users.noreply.github.com> Date: Tue, 8 Mar 2022 22:51:34 +0000 Subject: [PATCH 440/726] Fix major wounds round up/down issue Fix font size on NPC sheet for sanity loss If clicking sanity loss with no targets selected show warning message Fix weapon nav incorrect flex layout --- lang/en.json | 1 + module/actors/actor.js | 6 +++--- module/actors/sheets/base.js | 1 + module/chat/cards/san-check.js | 2 ++ templates/actors/character-sheet-v2.html | 6 +++++- templates/actors/npc-sheet.html | 14 ++++++++------ templates/items/weapon-sheet.html | 2 +- 7 files changed, 21 insertions(+), 11 deletions(-) diff --git a/lang/en.json b/lang/en.json index c6476630..f286fbeb 100644 --- a/lang/en.json +++ b/lang/en.json @@ -664,6 +664,7 @@ "CoC7.WarnNoControlledActor": "You don't have any controlled actor", "CoC7.WarnFastTargetWithWrongMOV": "Fast selected on a target with less than 8 MOV. (MOV: {mov})", "CoC7.WarnTooManyTarget": "Too many target selected. Keeping only last selected target", + "CoC7.WarnNoTargetsSanCheck": "You have no targets selected. Either select targets or create a link.", "CoC7.allActors": "All Actors", "CoC7.restTargets": "Rest Targets", diff --git a/module/actors/actor.js b/module/actors/actor.js index a0b98812..45fce958 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -3338,12 +3338,12 @@ export class CoCActor extends Actor { } else { if (game.settings.get('CoC7', 'pulpRuleIgnoreMajorWounds')) { if (this.hp === 0) { - if (netDamage >= Math.floor(this.hpMax / 2)) { + if (netDamage >= Math.ceil(this.hpMax / 2)) { this.setCondition(COC7.status.dying) } else { this.setCondition(COC7.status.unconscious) } - } else if (netDamage >= Math.floor(this.hpMax / 2)) { + } else if (netDamage >= Math.ceil(this.hpMax / 2)) { const conCheck = new CoC7ConCheck( this.isToken ? this.tokenKey : this.id ) @@ -3351,7 +3351,7 @@ export class CoCActor extends Actor { } } else { let hasMajorWound = false - if (netDamage >= Math.floor(this.hpMax / 2)) { + if (netDamage >= Math.ceil(this.hpMax / 2)) { await this.setCondition(COC7.status.criticalWounds) hasMajorWound = true } else { diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index cfa8e5c2..561947dd 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -647,6 +647,7 @@ export class CoC7ActorSheet extends ActorSheet { data.showInventoryStatuses = false data.showInventoryWeapons = false + data.hasConditions = this.actor.effects.size > 0 || (typeof this.actor.data.data.conditions !== 'undefined' && Object.keys(this.actor.data.data.conditions).filter(condition => this.actor.data.data.conditions[condition].value).length > 0) // const first = data.data.biography[0]; // first.isFirst = true; // data.data.biography[0] = first; diff --git a/module/chat/cards/san-check.js b/module/chat/cards/san-check.js index 899e4198..e07d0361 100644 --- a/module/chat/cards/san-check.js +++ b/module/chat/cards/san-check.js @@ -509,6 +509,8 @@ export class SanCheckCard extends ChatCardActor { ) } } + } else { + ui.notifications.warn(game.i18n.localize('CoC7.WarnNoTargetsSanCheck')) } } diff --git a/templates/actors/character-sheet-v2.html b/templates/actors/character-sheet-v2.html index e2c8e5ee..183227a8 100644 --- a/templates/actors/character-sheet-v2.html +++ b/templates/actors/character-sheet-v2.html @@ -204,7 +204,11 @@
    {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}}
    - +
    + {{#if hasConditions}} + Clear All Conditions + {{/if}} +
    {{/if}} diff --git a/templates/actors/npc-sheet.html b/templates/actors/npc-sheet.html index 9d7d9877..b81c1c19 100644 --- a/templates/actors/npc-sheet.html +++ b/templates/actors/npc-sheet.html @@ -237,21 +237,21 @@
    -
    +
    {{#if data.flags.locked}} - {{data.special.sanLoss.checkPassed}} + {{data.special.sanLoss.checkPassed}} / {{data.special.sanLoss.checkFailled}} {{else}} - + / {{/if}}
    -
    +
    {{#if allowFormula}} {{#if data.flags.locked}}
    @@ -369,8 +369,10 @@

    {{localize 'CoC7.GmNotes'}} {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} - -

    + {{#if hasConditions}} + + {{/if}} +
    {{/if}} diff --git a/templates/items/weapon-sheet.html b/templates/items/weapon-sheet.html index ea8e2903..aa47ccd3 100644 --- a/templates/items/weapon-sheet.html +++ b/templates/items/weapon-sheet.html @@ -84,7 +84,7 @@ {{!-- Sheet Tab Navigation --}} -

    {{else}} {{#unless hasTarget}}
    -
    @@ -64,16 +45,8 @@

    {{#unless (or rolled notResponding)}}
    - {{localize 'CoC7.Advantage'}} - {{localize 'CoC7.Disadvantage'}} + {{localize 'CoC7.Advantage'}} + {{localize 'CoC7.Disadvantage'}}
    {{/unless}} @@ -81,21 +54,15 @@

    {{#unless rolled}}
    - {{localize 'CoC7.Dodge'}} - {{localize 'CoC7.NoResponse'}} + {{localize 'CoC7.Dodge'}} + {{localize 'CoC7.NoResponse'}}
    {{localize 'CoC7.FightBack'}}
    @@ -103,9 +70,7 @@

    {{localize 'CoC7.Maneuver'}}

    @@ -114,26 +79,7 @@

    {{#if (and rolled notResponding)}} {{else if rolled}} -
    +
    {{else if actionSelected}}
    {{#if fightingBack}} - + {{else if notResponding}} - + {{else}} - + {{/if}}
    {{/if}} -
    +
    \ No newline at end of file diff --git a/templates/chat/combat/range-initiator.html b/templates/chat/combat/range-initiator.html index 6dd837fb..fb37a42b 100644 --- a/templates/chat/combat/range-initiator.html +++ b/templates/chat/combat/range-initiator.html @@ -22,7 +22,7 @@ data-roll-mode="{{rollMode}}" data-is-blind="false" data-volley-size="{{volleySize}}"> - +
    {{#if displayActorOnCard}} @@ -62,49 +62,49 @@

    {{#if item.singleShot}} {{localize 'CoC7.rangeCombatCard.SingleShot'}} {{/if}} {{#if item.multipleShots}} {{localize 'CoC7.rangeCombatCard.MultipleShots'}} {{/if}} {{#if item.data.data.properties.brst}} {{localize 'CoC7.rangeCombatCard.Burst'}} {{/if}} {{#if item.data.data.properties.auto}} {{localize 'CoC7.rangeCombatCard.FullAuto'}} {{/if}}
    {{localize 'CoC7.Advantage'}} {{localize 'CoC7.Disadvantage'}} {{localize 'CoC7.rangeCombatCard.aiming'}}
    {{/if}} @@ -123,7 +123,7 @@

    {{/each}} - + {{#each targets as |trgt key|}}
    {{#if ../rolled}} {{localize 'CoC7.rangeCombatCard.BaseRange'}} title="{{localize 'CoC7.rangeCombatCard.OutOfRange'}}" >{{localize 'CoC7.rangeCombatCard.OutOfRange'}} {{localize 'CoC7.rangeCombatCard.Cover'}} title="{{localize 'CoC7.rangeCombatCard.PointBlankRangeTitle'}}" >{{localize 'CoC7.rangeCombatCard.PointBlankRange'}} {{localize 'CoC7.rangeCombatCard.BigTarget'}} {{else}}
    {{localize 'CoC7.rangeCombatCard.BaseRange'}}
    {{localize 'CoC7.rangeCombatCard.Cover'}} {{#if trgt.big}}switched-on{{/if}} {{#if trgt.small}}switched-on{{/if}} gm-select-only" - title="{{trgt.sizeText}}" - style="text-align:center" + title="{{trgt.sizeText}}" + style="text-align:center" data-flag="size"> {{trgt.sizeLabel}} @@ -250,7 +250,7 @@

    {{localize 'CoC7.rangeCombatCard.BaseRange'}} title="{{localize 'CoC7.rangeCombatCard.OutOfRange'}}" >{{localize 'CoC7.rangeCombatCard.OutOfRange'}} {{localize 'CoC7.rangeCombatCard.Cover'}} {{localize 'CoC7.combatCard.surprised'}} {{localize 'CoC7.rangeCombatCard.PointBlankRange'}} {{localize 'CoC7.rangeCombatCard.BigTarget'}} {{localize 'CoC7.combatCard.SmallTarget'}} {{localize 'CoC7.rangeCombatCard.InMelee'}} data-ref-message-id="{{roll.referenceMessageId}}" data-success-level="{{roll.successLevel}}" data-difficulty="{{roll.difficulty}}" - data-actor-id="{{roll.actor.id}}" - data-skill-id="{{roll.skill.data._id}}" - data-item-id="{{roll.item.data._id}}" + data-actor-id="{{roll.actor.id}}" + data-skill-id="{{roll.skill.data._id}}" + data-item-id="{{roll.item.data._id}}" data-dice-mod="{{roll.diceModifier}}" data-dice-modifier="{{roll.diceModifier}}" data-flat-modifier="{{roll.flatDiceModifier}}" data-ten-only-one-die="{{roll.tenOnlyOneDie}}" - data-value="{{roll.value}}" + data-value="{{roll.value}}" data-result="{{roll.dice.total}}" data-is-success="{{roll.isSuccess}}" data-is-fumble="{{roll.isFumble}}" @@ -421,7 +421,7 @@

    class="dice-result" data-total="{{roll.dices.total}}" data-ten-result="{{roll.dices.tenResult}}"> -
    {{#if roll.luckSpent}} @@ -466,12 +466,12 @@

    - +

    {{roll.resultType}}, {{roll.successRequired}}

    {{#if roll.details}}

    {{roll.details}}

    {{/if}} - + {{#unless ../damageRolled}}
    {{#unless roll.isSuccess}} @@ -486,7 +486,7 @@

    {{roll.details}}

    {{/unless}} {{/if}} {{/unless}} - + {{#unless roll.pushing}} {{#if roll.canIncreaseSuccess}}
    @@ -514,7 +514,7 @@

    {{roll.details}}

    {{#if didAnyShotHit}} {{#unless damageRolled}}
    - +
    {{/unless}} {{/if}} @@ -558,7 +558,7 @@

    {{roll.details}}

    - +

    {{localize 'CoC7.Target'}}: {{d.targetName}}

    @@ -568,10 +568,10 @@

    {{localize 'CoC7.Target'}}: {{d.targetName}}

    {{#unless damageDealt}} {{#if didAnyShotHit}}
    - +
    {{/if}} {{/unless}} {{/if}}
    -

    \ No newline at end of file +
    \ No newline at end of file diff --git a/templates/chat/roll-result.html b/templates/chat/roll-result.html index 87bf2552..dcd18d3d 100644 --- a/templates/chat/roll-result.html +++ b/templates/chat/roll-result.html @@ -80,22 +80,22 @@ {{#if isUnknown}}
    {{localize 'CoC7.RollDifficultyRegular'}} {{regularThreshold}}% {{localize 'CoC7.RollDifficultyHard'}} {{hardThreshold}}% {{localize 'CoC7.RollDifficultyExtreme'}} {{extremeThreshold}}% {{localize 'CoC7.RollDifficultyCritical'}} diff --git a/templates/chat/rolls/in-card-roll.html b/templates/chat/rolls/in-card-roll.html index 007a2c68..449ec9c8 100644 --- a/templates/chat/rolls/in-card-roll.html +++ b/templates/chat/rolls/in-card-roll.html @@ -2,22 +2,22 @@ {{#if isUnknown}}
    {{localize 'CoC7.RollDifficultyRegular'}} {{regularThreshold}}% {{localize 'CoC7.RollDifficultyHard'}} {{hardThreshold}}% {{localize 'CoC7.RollDifficultyExtreme'}} {{extremeThreshold}}% {{localize 'CoC7.RollDifficultyCritical'}} diff --git a/templates/items/archetype.html b/templates/items/archetype.html index 2c6439ed..0ef26d7f 100644 --- a/templates/items/archetype.html +++ b/templates/items/archetype.html @@ -133,7 +133,7 @@

    {{skill.name}} ({{skill.data.base}}%)

    {{#unless ../isOwned}} - + {{/unless}}
    diff --git a/templates/items/chase.html b/templates/items/chase.html index ff3f8056..14328dd6 100644 --- a/templates/items/chase.html +++ b/templates/items/chase.html @@ -2,196 +2,202 @@
    {{#unless started}} -
    - - -
    +
    + + +
    {{/unless}} -
    - {{#unless activeLocation.init}} -
    - {{/unless}} -
    - {{#if activeLocation}} - - {{#each item.allSkillsAndCharacteristics as |o|}} - - {{/each}} - - - {{#each item.activeActorSkillsAndCharacteristics as |o|}} - - {{/each}} - -
    - - - {{#if activeLocation.hasParticipant}} - - {{else}} - {{#if activeLocation.init}} - - {{else}} - - {{/if}} - {{/if}} - - - - -
    -
    -
    - {{#unless activeLocation.first}} -
    -
    barrier
    -
    hazard
    -
    - {{#if activeLocation.obstacle}} -
    - -
    -
    - - {{#if started}} - - - + {{#if activeLocation.uuid}} +
    + {{#unless activeLocation.init}} +
    + {{/unless}} +
    + {{#if activeLocation}} + + {{#each item.allSkillsAndCharacteristics as |o|}} + + {{/each}} + + + {{#each item.activeActorSkillsAndCharacteristics as |o|}} + + {{/each}} + +
    + + + {{#if activeLocation.hasParticipant}} + + {{else}} + {{#if activeLocation.init}} + + {{else}} + + {{/if}} + {{/if}} + + + + +
    +
    +
    + {{#unless activeLocation.first}} +
    +
    barrier
    +
    hazard
    +
    + {{#if activeLocation.obstacle}} +
    + +
    +
    + + {{#if started}} + + + + {{/if}} +
    +
    +
    + + + + {{#if activeLocation.obstacleDetails.hasDamage}} + + {{/if}} +
    + {{#if activeLocation.obstacleDetails.barrier}} +
    + + + + {{#if activeLocation.obstacleDetails.hasHitPoints}} + + {{/if}} +
    + {{else}} +
    + + + + {{#if activeLocation.obstacleDetails.hasActionCost}} + + {{/if}} +
    + {{/if}} +
    {{/if}} -
    -
    -
    - - - - {{#if activeLocation.obstacleDetails.hasDamage}} - - {{/if}} + {{/unless}} +
    +
    + {{#unless activeLocation.last}} +
    +
    barrier
    +
    hazard
    - {{#if activeLocation.obstacleDetails.barrier}} -
    - - - - {{#if activeLocation.obstacleDetails.hasHitPoints}} - + {{#if nextLocation.obstacle}} +
    + +
    +
    + + {{#if started}} + + + {{/if}}
    - {{else}} -
    - - - - {{#if activeLocation.obstacleDetails.hasActionCost}} - +
    +
    + + + + {{#if nextLocation.obstacleDetails.hasDamage}} + + {{/if}} +
    + {{#if nextLocation.obstacleDetails.barrier}} +
    + + + + {{#if nextLocation.obstacleDetails.hasHitPoints}} + + {{/if}} +
    + {{else}} +
    + + + + {{#if nextLocation.obstacleDetails.hasActionCost}} + + {{/if}} +
    {{/if}}
    {{/if}} -
    - {{/if}} - {{/unless}} -
    -
    - {{#unless activeLocation.last}} -
    -
    barrier
    -
    hazard
    + {{/unless}}
    - {{#if nextLocation.obstacle}} -
    - -
    + +
    + {{/if}} + {{/unless}} +
    --> +
    + {{/if}}
    - {{/if}} + {{#unless nextLocation.init}} +
    + {{/unless}}
    - {{#unless nextLocation.init}} -
    - {{/unless}} -
    + {{/if}}
    - +
    {{/each}} diff --git a/templates/items/setup.html b/templates/items/setup.html index 427e9423..1275b581 100644 --- a/templates/items/setup.html +++ b/templates/items/setup.html @@ -98,7 +98,7 @@

    {{item.name}} ({{item.type}})

    - + {{!-- --}}
    @@ -123,7 +123,7 @@

    {{skill.name}} ({{skill.data.base}}%)

    - + {{!-- --}}
    diff --git a/templates/items/weapon-sheet.html b/templates/items/weapon-sheet.html index aa47ccd3..b03aa8e1 100644 --- a/templates/items/weapon-sheet.html +++ b/templates/items/weapon-sheet.html @@ -39,9 +39,9 @@ {{/if}} {{else}} - + {{#if usesAlternateSkill}} - + {{/if}} {{/if}}
    From 9031a705bb3961c4bee087b470172abc318ef896 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 30 Jul 2022 14:43:31 +0100 Subject: [PATCH 659/726] Whitespace changes --- module/items/chase/sheet.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/module/items/chase/sheet.js b/module/items/chase/sheet.js index 81923ba2..c722477c 100644 --- a/module/items/chase/sheet.js +++ b/module/items/chase/sheet.js @@ -71,26 +71,26 @@ export class CoC7ChaseSheet extends ItemSheet { data.preysMinMov = data.preys.length ? data.preys.reduce((prev, current) => - prev.adjustedMov < current.adjustedMov ? prev : current - ).adjustedMov + prev.adjustedMov < current.adjustedMov ? prev : current + ).adjustedMov : -1 data.preysMaxMov = data.preys.length ? data.preys.reduce((prev, current) => - prev.adjustedMov > current.adjustedMov ? prev : current - ).adjustedMov + prev.adjustedMov > current.adjustedMov ? prev : current + ).adjustedMov : -1 data.chasersMinMov = data.chasers.length ? data.chasers.reduce((prev, current) => - prev.adjustedMov < current.adjustedMov ? prev : current - ).adjustedMov + prev.adjustedMov < current.adjustedMov ? prev : current + ).adjustedMov : -1 data.chasersMaxMov = data.chasers.length ? data.chasers.reduce((prev, current) => - prev.adjustedMov > current.adjustedMov ? prev : current - ).adjustedMov + prev.adjustedMov > current.adjustedMov ? prev : current + ).adjustedMov : -1 data.chasers.forEach(p => { @@ -113,9 +113,9 @@ export class CoC7ChaseSheet extends ItemSheet { if (data.activeLocation) { data.activeLocation.title = data.activeLocation.coordinates ? game.i18n.format('CoC7.LocationCoordinate', { - x: data.activeLocation.coordinates.x, - y: data.activeLocation.coordinates.y - }) + x: data.activeLocation.coordinates.x, + y: data.activeLocation.coordinates.y + }) : game.i18n.localize('CoC7.DragOnCanvas') } data.previousLocation = this.item.previousLocation From aa5ee5ada0b76614588bb3c79126ecb45a629db7 Mon Sep 17 00:00:00 2001 From: HavlockV Date: Sat, 30 Jul 2022 18:07:46 +0300 Subject: [PATCH 660/726] Add dev menu --- module/coc7.js | 11 ++++- module/dice.js | 117 +++++++++++++++++++++++++++++++++++++++++++++---- module/menu.js | 36 +++++++++++++++ 3 files changed, 155 insertions(+), 9 deletions(-) diff --git a/module/coc7.js b/module/coc7.js index 18bab7bb..bddadbf0 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -121,7 +121,10 @@ Hooks.on('renderSettingsConfig', (app, html, options) => { }) Hooks.once('init', async function () { - if (typeof CONST.COMPATIBILITY_MODES !== 'undefined' && !isNewerVersion(game.version, '10.300')) { + if ( + typeof CONST.COMPATIBILITY_MODES !== 'undefined' && + !isNewerVersion(game.version, '10.300') + ) { // hide compatibility warnings while we still support v9 and v10 with the same version CONFIG.compatibility.mode = CONST.COMPATIBILITY_MODES.SILENT } @@ -134,6 +137,12 @@ Hooks.once('init', async function () { }, cards: { DamageCard: DamageCard + }, + dev: { + dice: { + alwaysCrit: false, + alwaysFumble: false + } } } Combat.prototype.rollInitiative = rollInitiative diff --git a/module/dice.js b/module/dice.js index 1ff9d2ff..0a7916f3 100644 --- a/module/dice.js +++ b/module/dice.js @@ -10,14 +10,23 @@ export class CoC7Dice { alternativeDice = game.settings.get('CoC7', 'tenDieBonus') } } - const roll = await new Roll( - '1dt' + - (alternativeDice !== '' - ? '+1do[' + alternativeDice + ']' - : '+1dt' - ).repeat(Math.abs(modif)) + - '+1d10' - ).roll({ async: true }) + let roll + if (game.CoC7.dev.dice.alwaysCrit && game.settings.get('CoC7', 'debugmode')) { + roll = Roll.fromData(CoC7Dice.crit01) + } else if (game.CoC7.dev.dice.alwaysFumble && game.settings.get('CoC7', 'debugmode')) { + roll = Roll.fromData(CoC7Dice.fumble99) + } + else{ + roll = await new Roll( + '1dt' + + (alternativeDice !== '' + ? '+1do[' + alternativeDice + ']' + : '+1dt' + ).repeat(Math.abs(modif)) + + '+1d10' + ).roll({ async: true }) + } + const result = { unit: { total: 0, @@ -30,6 +39,7 @@ export class CoC7Dice { total: 0, roll: roll } + if (rollMode) result.rollMode = rollMode if (hideDice) result.hideDice = hideDice for (const d of roll.dice) { @@ -173,4 +183,95 @@ export class CoC7Dice { } return output } + + // Predetermined value of dice, used only for DEV and test purposes + static fumble99 = { + class: 'Roll', + options: {}, + dice: [], + formula: '1dt + 1d10', + terms: [ + { + class: 'CoC7DecaderDie', + options: {}, + evaluated: true, + number: 1, + faces: 10, + modifiers: [], + results: [ + { + result: 9, + active: true + } + ] + }, + { + class: 'OperatorTerm', + options: {}, + evaluated: true, + operator: '+' + }, + { + class: 'Die', + options: {}, + evaluated: true, + number: 1, + faces: 10, + modifiers: [], + results: [ + { + result: 9, + active: true + } + ] + } + ], + total: 99, + evaluated: true + } + + static crit01 = { + class: 'Roll', + options: {}, + dice: [], + formula: '1dt + 1d10', + terms: [ + { + class: 'CoC7DecaderDie', + options: {}, + evaluated: true, + number: 1, + faces: 10, + modifiers: [], + results: [ + { + result: 10, + active: true + } + ] + }, + { + class: 'OperatorTerm', + options: {}, + evaluated: true, + operator: '+' + }, + { + class: 'Die', + options: {}, + evaluated: true, + number: 1, + faces: 10, + modifiers: [], + results: [ + { + result: 1, + active: true + } + ] + } + ], + total: 1, + evaluated: true + } } diff --git a/module/menu.js b/module/menu.js index 0298cc51..d19002cd 100644 --- a/module/menu.js +++ b/module/menu.js @@ -30,6 +30,7 @@ export class CoC7Menu { static getButtons (controls) { canvas.coc7gmtools = new CoC7MenuLayer() const isGM = game.user.isGM + const isDev = game.settings.get('CoC7', 'debugmode') controls.push({ name: 'coc7menu', title: 'CoC7.GmTools', @@ -86,6 +87,41 @@ export class CoC7Menu { } ] }) + if (isDev) { + canvas.coc7DevTools = new CoC7MenuLayer() + controls.push({ + name: 'coc7DevMenu', + title: + "Dev tools. If you don't know what it is, you don't need it and you shouldn't use it !!", + layer: 'coc7DevTools', + icon: 'game-icon game-icon-police-badge', + visible: isGM, + tools: [ + { + toggle: true, + icon: 'game-icon game-icon-dice-fire', + name: 'alwaysCrit', + active: game.CoC7.dev.dice.alwaysCrit, + title: 'All rolls will crit', + onClick: toggle => { + game.CoC7.dev.dice.alwaysFumble = false + game.CoC7.dev.dice.alwaysCrit = toggle + } + }, + { + toggle: true, + icon: 'game-icon game-icon-fire-extinguisher', + name: 'alwaysFumble', + active: game.CoC7.dev.dice.alwaysFumble, + title: 'All rolls will fumble', + onClick: toggle => { + game.CoC7.dev.dice.alwaysFumble = toggle + game.CoC7.dev.dice.alwaysCrit = false + } + } + ] + }) + } } static renderControls (app, html, data) { From 435c7682d06f12b9b3bd633e55333b9d8596ae80 Mon Sep 17 00:00:00 2001 From: HavlockV Date: Sat, 30 Jul 2022 18:13:03 +0300 Subject: [PATCH 661/726] Fix impale not showing properly --- module/chat/cards/damage.js | 2 +- styles/chat/damage.less | 2 +- styles/system/main.less | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/module/chat/cards/damage.js b/module/chat/cards/damage.js index 2cc28434..4efe448d 100644 --- a/module/chat/cards/damage.js +++ b/module/chat/cards/damage.js @@ -44,7 +44,7 @@ export class DamageCard extends InteractiveChatCard { } get impale () { - if (this._impale === 'undefined') return this.weapon.impale + if (typeof this._impale === 'undefined') return this.weapon.impale return this._impale } diff --git a/styles/chat/damage.less b/styles/chat/damage.less index cb80f736..0654e3f1 100644 --- a/styles/chat/damage.less +++ b/styles/chat/damage.less @@ -5,7 +5,7 @@ } .options { display: flex; - flex-direction: column; + flex-direction: row; flex-wrap: nowrap; align-items: center; } diff --git a/styles/system/main.less b/styles/system/main.less index 4c46d9da..21dc1328 100644 --- a/styles/system/main.less +++ b/styles/system/main.less @@ -97,6 +97,7 @@ } .tag { display: inline-block; + white-space: nowrap; margin: 0 2px 0 0; padding: 0 3px; font-size: 9px; From c8fa7074e390ef41985dc6a1416b377c18ef4d69 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Sat, 30 Jul 2022 23:32:32 +0200 Subject: [PATCH 662/726] Fix double addMovementActions in chases --- module/items/chase/participant.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/module/items/chase/participant.js b/module/items/chase/participant.js index e0a26338..d14880dd 100644 --- a/module/items/chase/participant.js +++ b/module/items/chase/participant.js @@ -382,10 +382,6 @@ export class _participant { } } - addMovementActions (x = 1) { - this.currentMovementActions -= x - } - alterMovementActions (x) { this.currentMovementActions += x if (this.currentMovementActions > this.movementAction) { From 4a9b9d70e971c45f261d5b8c6f2597bd7e50a2d8 Mon Sep 17 00:00:00 2001 From: Stefano1975t <97825580+Stefano1975t@users.noreply.github.com> Date: Sun, 31 Jul 2022 10:50:22 +0200 Subject: [PATCH 663/726] Update it.json --- lang/it.json | 178 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 175 insertions(+), 3 deletions(-) diff --git a/lang/it.json b/lang/it.json index d8eece66..4efd35af 100644 --- a/lang/it.json +++ b/lang/it.json @@ -6,6 +6,10 @@ "CoC7.Entities.Creature": "Creatura", "CoC7.Entities.Npc": "PNG", "CoC7.Entities.Vehicle": "Veicolo", + "CoC7.ActorIsTokenHint": "Il Personaggio è una pedina", + "CoC7.ActorDataLinked": "I dati del Personaggio sono associati", + "CoC7.ActorDataNotLinked": "I dati del Personaggio NON sono associati", + "CoC7.ActorIsSyntheticActor": "Il Personaggio è un personaggio artificiale (esempio di un personaggio)", "CoC7.Entities.Archetype": "Archetipo", "CoC7.Entities.Book": "Libro", @@ -56,6 +60,8 @@ "CoC7.DailyLoss": "Al giorno", "CoC7.Luck": "Fortuna", "CoC7.Movement": "Movimento", + "CoC7.MovementAction": "Azione di Movimento", + "CoC7.AdjustedMovement": "Movimento modificato", "CoC7.Mov": "Mov", "CoC7.BonusDamage": "Bonus al Danno", "CoC7.DB": "BD", @@ -77,6 +83,8 @@ "CoC7.UnderlyingInsanity": "Follia latente", "CoC7.TemporaryInsanity": "Follia temporanea", "CoC7.IndefiniteInsanity": "Follia permanente", + "CoC7.DefinitelyInsane": "Pronto per il manicomio", + "CoC7.FINISH": "--F-I-N-I-T-O--", "CoC7.NotInsane": "Nulla", "CoC7.UnlockActor": "Sblocca Personaggio", "CoC7.LockActor": "Blocca Personaggio", @@ -121,6 +129,9 @@ "CoC7.Check": "Tiro", "CoC7.ItemWeapon": "Oggetto (Arma)", "CoC7.AttacksPerRound": "Attachi per turno", + "CoC7.Restart": "Ricomincia", + "CoC7.Reset": "Resetta", + "CoC7.Initiative": "Iniziativa", "CoC7.Cast": "Lanciare", "CoC7.SanityCost": "Costo in Sanità", @@ -149,6 +160,7 @@ "CoC7.DiceModifierPenalty": "penalità", "CoC7.Modifiers": "Modificatori", "CoC7.BonusDice": "Dadi Bonus", + "CoC7.PenaltyDice": "Dadi Penalità", "CoC7.UnitsDie": "1 unità di dado", "CoC7.TensDie": "dado da 10", "CoC7.TensDice": "dadi da 10", @@ -162,6 +174,8 @@ "CoC7.LuckSpent": "{luckAmount} Fortuna spesa per passare", "CoC7.LuckSpentAlt": "Fortuna spesa", "CoC7.LuckError": "{actorName} non ha abbastanza Fortuna per passare il tiro", + "CoC7.LuckNotEnough": "{name} non ha avuto abbstanza fortuna per passare il tiro", + "CoC7.UpgradeSuccessWithLuck": "Aggiorna a successo {{difficultyName}} per {{luckToSpend}} fortuna.", "CoC7.check.AutoSuccess": "Successo automatico", "CoC7.check.AutoFailure": "Fallimento automatico", "CoC7.RevealCheck": "Rivela Tiro", @@ -175,6 +189,8 @@ "CoC7.KeeperSentDecoy": "Tiro diversivo inviato ai giocatori", "CoC7.FakeRoll": "Invia un tiro diversivo ai giocatori", "CoC7.ErrorMissingKeeperUser": "Il Custode deve essere connesso per poter eseguire questa azione", + "CoC7.BonusDieAssailantReason": "Aggiungi 1 dado bonus (l'aggressore è a terra, trattenuto...)", + "CoC7.PenaltyDieSelfReason": "Aggiungi 1 dado penalità (perché si è a terra, trattenuti...)", "CoC7.ConstitutionCheck": "Tiro Costituzione", @@ -193,9 +209,13 @@ "CoC7.FlatModifier": "Modificatore fisso", "CoC7.RollDifficultyUnknown": "Al buio", "CoC7.RollDifficultyRegular": "Normale", + "CoC7.RollDifficultyRegularTitle": "Difficoltà normale", "CoC7.RollDifficultyHard": "Arduo", + "CoC7.RollDifficultyHardTitle": "Difficoltà ardua", "CoC7.RollDifficultyExtreme": "Estremo", + "CoC7.RollDifficultyExtremeTitle": "Difficoltà estrema", "CoC7.RollDifficultyCritical": "Critico", + "CoC7.RollDifficultyCriticalTitle": "Difficoltà critica", "CoC7.RollResult.LuckSpendText": "{luckAmount} Fortuna spesa, {successLevel} successo", "CoC7.RollDice": "Tira !", "CoC7.CreateLink": "Crea collegamento", @@ -216,6 +236,7 @@ "CoC7.CheckRawValue": "({rawvalue}%) - {difficulty} difficoltà", "CoC7.ArmorAbsorbsDamage": "L'Armatura assorbe tutti i danni", + "CoC7.ArmorIgnored": "Armatura ignorata", "CoC7.Critical": "Critico", "CoC7.Impale": "Trafiggere", "CoC7.CriticalTitle": "Il colpo è critico", @@ -236,6 +257,7 @@ "CoC7.OutNumbered": "Inferiorità numerica", "CoC7.combatCard.surprised": "Sorpresa", "CoC7.combatCard.autoSuccess": "Successo automatico", + "CoC7.combatCard.automaticSuccess": "Successo automatico", "CoC7.Advantage": "Vantaggio", "CoC7.Disadvantage": "Svantaggio", "CoC7.TitleAdvantage": "Aggiungi 1 dado bonus (il bersaglio è a terra, legato...)", @@ -254,7 +276,11 @@ "CoC7.AdvantageDefender": "Vantaggio: Difensore", "CoC7.Tie": "Pareggio", "CoC7.DamageInflicted": "Danno inflitto", + "CoC7.Damage": "Danno", "CoC7.TotalDamage": "Danno totale", + "CoC7.CheckFailed": "Tiro fallito", + "CoC7.CheckPassed": "Tiro di successo", + "CoC7.CheckMemoryRepressed": "Ricordo rimosso", "CoC7.combatCard.dive4cover": "Si butta in copertura", @@ -291,6 +317,7 @@ "CoC7.rangeCombatCard.NormalTargetTitle": "Il bersaglio è di taglia media, nessun bonus/penalità", "CoC7.rangeCombatCard.InMeleeTitle": "1 dado penalità. Il bersaglio è impegnato nel combattimento corpo a corpo", "CoC7.rangeCombatCard.FastMovingTargetTitle": "1 dado penalità. Il bersaglio è veloce (MOV 8+) e si sta muovendo alla velocità massima", + "CoC7.rangeCombatCard.SurprisedTargetTitle": "1 dado bonus per bersaglio preso di sorpresa", "CoC7.meleeCombatDamageTakes": "subisce", "CoC7.meleeCombatDamageFrom": "da", @@ -347,6 +374,7 @@ "CoC7.SkillNoAdjustments": "Nessuna correzione", "CoC7.SkillNoXpGain": "Nessuna Esperienza", + "CoC7.SkillXpGainDisabled": "Guadagno di PE disabilitato.", "CoC7.SkillSpecial": "Specializzazione", "CoC7.SkillRarity": "Non comune", "CoC7.SkillPush": "Forzato", @@ -391,15 +419,18 @@ "CoC7.CreditRatingSkillName": "Valore di Credito", "CoC7.DriveAutoSkillName": "Guidare Auto", "CoC7.FightingSpecializationName": "Combattere", + "CoC7.UnarmedWeaponName": "A mani nude", "CoC7.FirearmSpecializationName": "Armi da Fuoco", "CoC7.DriveSpecializationName": "Guidare", "CoC7.PilotSpecializationName": "Pilotare", "CoC7.AnySpecName": "Generico", "CoC7.BoutOfMadnessName": "Attacco di follia", "CoC7.InsanityName": "Follia", - + "CoC7.NewSkillName": "nuova abilità", "CoC7.AddSkill": "Aggiungi abilità", + "CoC7.CleanSkillList": "Svuota la lista delle abilità", + "CoC7.CleanSkillListHint": "

    Questo svuoterà la tua lista delle abilità eliminando la specializzazione dal nome dell'abilità.

    Questo farà sì che l'abilità non appaia come: 'specializzazione(specializzazione(abilità))'

    ", "CoC7.DevelopemmentPhase": "Fase di sviluppo", "CoC7.RecoverLuckPoints": "Recupero dei Punti Fortuna", "CoC7.SkillCantGainXp": "L'abilità non può guadagnare Esperienza automaticamente", @@ -445,6 +476,7 @@ "CoC7.RangeWeapons": "Armi a distanza", "CoC7.WeaponName": "Nome", "CoC7.WeaponSkill": "Abilità", + "CoC7.WeaponSkillMain": "Abilità principale", "CoC7.WeaponSkillAlt": "Abilità alternativa", "CoC7.Inventory": "Inventario", "CoC7.InventoryIsCurrentlyEmpty": "L'inventario è attualmente vuoto.", @@ -544,7 +576,8 @@ "CoC7.MinSanloss": "Perdita Min", "CoC7.AlreadyLost": "Già perso", "CoC7.AlreadyEncountered": "Già incontrata", - "CoC7.CreatureMaxLoss": "Perdità Max della creatura", + "CoC7.AlreadyEncounteredInformation": "Già incontrata: {reason} perdita {lost}/{max}", + "CoC7.CreatureMaxLoss": "Perdita Max della creatura", "CoC7.MaxLossToCreature": "Perdita Max per questa creatura", "CoC7.MaxPossibleSanLoss": "Perdita Max possibile", "CoC7.ResetCreatureSan": "Ripristina la cronologia della creatura", @@ -559,7 +592,122 @@ "CoC7.MythosGain": "Guadagno per i Miti", "CoC7.YouGainedCthulhuMythos": "La tua mente trema davanti alla manifestazione ultraterrena (+{value}% Miti di Cthulhu)", "CoC7.CardResolved": "Scheda risolta", - + + "CoC7.InsertLocation": "Inserisci luogo", + "CoC7.RemoveLocation": "Rimuovi luogo", + "CoC7.LocationNotEmpty": "Non puoi rimuovere un luogo con un personaggio", + "CoC7.LocationInit": "Non puoi rimuovere il luogo di partenza", + "CoC7.SomethingInTheWay": "C'è qualcosa che ti intralcia", + "CoC7.FacingObstacle": "Davanti a te hai {type}.", + "CoC7.ABarrier": "uno sbarramento", + "CoC7.Barrier": "Sbarramento", + "CoC7.AHazard": "un ostacolo", + "CoC7.Hazard": "Ostacolo", + "CoC7.Obstacle": "Qualcosa d'intralcio", + "CoC7.ConsumeBonusDice": "Utilizza i Dadi Bonus", + "CoC7.Breakable": "Frangibile", + "CoC7.NoValidCheck": "Nessun tiro valido", + "CoC7.NoValidSkill": "Abilità fasulla", + "CoC7.AskIntentions": "Quali sono le tue intenzioni?", + "CoC7.WaitForPlayerInput": "In attesa dell'immissione del giocatore", + "CoC7.AskRoll": "Tiro {name} ({value}%)", + "CoC7.ActionCost": "Costo dell'Azione", + "CoC7.Negotiate": "Affrontare", + "CoC7.BreakDown": "Distruggere", + "CoC7.BeingCautious": "Hai scelto di tenere un approccio prudente.", + "CoC7.BeingVeryCautious": "Ti stai comportando in modo estremamente prudente.", + "CoC7.ReflectObstacleChanges": "Tieni conto delle modifiche all'ostacolo", + "CoC7.PlayerMovesToLocation": "Il giocatore si sta spostando verso il prossimo luogo", + "CoC7.ObstaclePassed": "Hai trovato una via con successo.", + "CoC7.GotLucky": "Questa volta sei stato fortunato!", + "CoC7.ObstacleFail": "Hai fallito.", + "CoC7.ObstacleFumble": "Hai fallito clamorosamente!", + "CoC7.YouLostTime": "Hai perso del tempo a causa del tuo tentativo.", + "CoC7.MoveToLocation": "Ti stai spostando verso il prossimo luogo.", + "CoC7.DontMoveToLocation": "Rimani fermo dove sei.", + "CoC7.ObstacleDamage": "Danno all'ostacolo", + "CoC7.RemoveObstacle": "Distruggi l'ostacolo", + "CoC7.YouTakeNoDamage": "Non hai subito alcun danno.", + "CoC7.YouTakeSomeDamage": "Hai subito {amount} punti di danno.", + "CoC7.TryToNegotiateHazard": "Cerchi di superare quell'Ostacolo.", + "CoC7.TryToGetPastBarriers": "Cerchi di oltrepassare quello Sbarramento.", + "CoC7.TryToBreak": "Cerchi di distruggere quello Sbarramento.", + "CoC7.DragOnCanvas": "Trascina questo sulla mappa per stabilire la posizione di questo luogo.", + "CoC7.LocationCoordinate": "Luogo impostato a: {x}, {y}.\nCliccare col tasto destro per cacellare.\nTrascina questo sulla mappa per modificare la posizione.", + "CoC7.ConfirmRestartChase": "Vuoi far cominciare da capo l'inseguimento?", + "CoC7.ConfirmRestartChaseHint": "Questo farà cominciare da capo il tuo inseguimento.\nTutte le posizioni verranno resettate.\nI Personaggi che non hanno effettuato un Tiro Velocità dovranno tirare.", + "CoC7.ConfirmResetChase": "Vuoi resettare l'inseguimento?", + "CoC7.ConfirmResetChaseHint": "Questo resetterà l'inseguimento.\bTutte le posizioni e gli ostacoli verranno rimossi.", + "CoC7.IncludeEscapees": "Permetti ai Personaggi in fuga più veloci di partecipare.", + "CoC7.TooSlow": "Troppo lento", + "CoC7.TooFast": "Troppo veloce", + "CoC7.DoesNotMeetMinimumReqToBeAdded": "Non puoi aggiungere un partecipante, è richiesta almeno un'azione valida di movimento", + "CoC7.IncludeLatecomers": "Permetti agli inseguitori lenti di partecipare.", + "CoC7.VehicleChase": "L'inseguimento può includere i veicoli (NON IMPLEMENTATO)", + "CoC7.StartingRange": "Avanzamento dai luoghi di partenza", + "CoC7.StartingIndex": "Elenco iniziale dei Personaggi in fuga", + "CoC7.CutToTheChase": "Parti con l'inseguimento", + "CoC7.ChaseSetup": "Impostazione dell'inseguimento", + "CoC7.ParticipantsList": "Lista dei partecipanti", + "CoC7.NotAllHaveSpeedRoll": "Acuni partecipanti non hanno effettuato il Tiro Velocità!", + "CoC7.NeedMin2Participants": "Devono esserci un inseguitore e una preda affinché possa partire un'inseguimento!", + "CoC7.ConfirmCut2Chase": "Sei pronto a partire con l'inseguimento?", + "CoC7.ConfirmCut2ChaseHint": "Questo farà iniziare l'inseguimento e il primo turno dell'inseguimento.", + "CoC7.NextRound": "Prossimo turno", + "CoC7.ConfirmNextChaseRound": "Vuoi procedere al prossimo turno?", + "CoC7.ConfirmNextChaseRoundHint": "Ci sono ancora alcune azioni possibili per alcuni Personaggi. Sei sicuro di voler proseguire?", + "CoC7.CheckName": "Tira", + "CoC7.ObstacleHasHitPoint": "Attiva/disattiva i Punti Ferita del luogo.", + "CoC7.ActionCostOnFail": "Attiva/disattiva la penalità per l'azione in caso di fallimento.", + "CoC7.DamageOnFail": "Attiva/disattiva il danno in caso di fallimento.", + "CoC7.OpenObstacleResolutionCard": "Inizia la scheda di scorrimento per la soluzione dell'ostacolo.", + "CoC7.AddBonusDie": "Aggiungi dado bonus", + "CoC7.RemoveBonusDie": "Togli dado bonus", + "CoC7.DecreaseMovementAction": "Riduci l'azione di movimento", + "CoC7.IncreaseMovementAction": "Aumental'azione di movimento", + "CoC7.CautiousApproach": "Assumi un approccio prudente", + "CoC7.Cautious": "Prudente", + "CoC7.Assist": "Aiuta un alleato", + "CoC7.MoveForward": "Muoviti in avanti", + "CoC7.MoveBackward": "Torna indietro", + "CoC7.AddActorToChase": "Aggiungi un Personaggio all'inseguimento", + "CoC7.ParticipantDropHint": "Puoi rilasciare un Personaggio in questa finestra o direttamente su un luogo dell'inseguimento.", + "CoC7.OverrideCalc": "Ignora il conteggio", + "CoC7.NeedRecalculate": "E' necessario un ricalcolo", + "CoC7.NeedToRecalculate": "Verrà ricalcolata l'azione di movimento di tutti i partecipanti", + "CoC7.SpeedCheck": "Tiro Velocità", + "CoC7.Initialize": "Avvia", + "CoC7.Locations": "Luoghi dell'inseguimento", + "CoC7.NoDamageDealt": "Non è stato inflitto alcun danno", + "CoC7.DamageDealt": "Hai inflitto {value} danno/i.", + "CoC7.NothingToRoll": "Non c'è nulla da tirare!", + "CoC7.ParticipantDataMissing": "Mancano le informazioni del partecipante", + "CoC7.ParticipantNotFound": "Impossibile trovare il partecipante", + "CoC7.ParticipantUuidNotFound": "Impossibile trovare il partecipante {participantUuid}", + "CoC7.ParticipantNotEnoughMovement": "Il partecipante {assistantUuid} ha solo {actions} azione/i di movimento", + "CoC7.ParticipantAlreadyProcessed": "Il partecipante è già stato elaborato.", + "CoC7.ErrorEmptyLocationsList": "Lista dei luoghi vuoti", + "CoC7.ErrorBeneficiaryAtMaxBonus": "Il destinatario {name} ha già il massimo dei dadi bonus", + "CoC7.ErrorParticipantAtMaxBonus": "{participantUuid} ha già il massimo dei dadi bonus", + "CoC7.ErrorTokenNotOnScene": "La Pedina non appartiene alla scena di questo luogo", + "CoC7.AddParticipant": "Aggiungi Partecipante", + "CoC7.Remove": "Rimuovi", + "CoC7.Edit": "Modifica", + "CoC7.MakeActive": "Rendi Attivo", + "CoC7.SelectNewSkill": "Seleziona l'abilità", + "CoC7.AskDamageRoll": "Chiedi il tiro per il danno", + "CoC7.AttemptNegotiateObstacle": "Tenta di affrontare quell'ostacolo", + "CoC7.AttemptBreakDown": "Tenta di distruggere!!", + "CoC7.ObstacleName": "Nome dell'ostacolo:", + "CoC7.Actions": "azioni:", + "CoC7.Chase.InitiativeShort": "INI: {value}", + "CoC7.Chase.AdjustedMovementShort": "MOD. MOV: {value}", + "CoC7.Chase.CheckName": "Nome del tiro", + "CoC7.Chase.PreysMin": "Prede Min: {value}", + "CoC7.Chase.PreysMax": "Prede Max: {value}", + "CoC7.Chase.ChasersMin": "Inseguitori Min: {value}", + "CoC7.Chase.ChasersMax": "Inseguitori Max: {value}", + "CoC7.SpellCastingTime": "Tempo di lancio", "CoC7.SpellCastingCost": "Costo di lancio", "CoC7.CallSpell": "Richiamare", @@ -616,6 +764,7 @@ "CoC7.MiscellaneousTalent": "Vari", "CoC7.BasicTalent": "Base", "CoC7.InsaneTalent": "Folli", + "CoC7.Sane": "Sano", "CoC7.OtherTalent": "Altri", "CoC7.Items": "Oggetti", @@ -712,6 +861,15 @@ "CoC7.ErrorManeuverNotPossible": "Il tuo avversario è troppo forte per te per poter eseguire una manovra", "CoC7.ErrorNotFound": "{missing} non trovato!", "CoC7.ErrorNotFoundForActor": "{missing} non trovato per il personaggio {actor}!", + "CoC7.ErrorUnableToParseFormula": "{value} non è una formula valida", + "CoC7.ErrorUnableToParseArmorFormula": "Impossibile elaborare il valore dell'armatura: {value}. Armatura ignorata.", + "CoC7.ErrorUnableToParseSkillFormula": "Impossibile interpretare la formula: {value} per l'abilità {name}", + "CoC7.ErrorActorHasNoWeaponNamed": "Il Personaggio {actorName} non ha un'arma chiamata {weaponName}", + "CoC7.ErrorActorHasTooManyWeaponsNamed": "`Il Personaggio {actorName} ha più di un'arma chiamata {weaponName}. Verrà utilizzata la prima trovata`", + "CoC7.ErrorUnexpectedWeaponText": "Testo delle armi anomalo, si prega di please creare un bug report con il testo che si sta tentando di importare", + "CoC7.ErrorUnexpectedSkillsText": "Testo delle abilità anomalo, si prega di please creare un bug report con il testo che si sta tentando di importare", + "CoC7.ErrorNoTokensSelected": "Nessuna Pedina selezionata", + "CoC7.ErrorEvaluatingDamage": "Errore nel valutare il danno", "CoC7.InfoLessSkillThanOptions": "Ci sono solo {skillCount} e {optionsCount} opzioni, le aggiungo tutte quante", "CoC7.InfoAllSkillsAlreadySelected": "Tutte le abilità sono già selezionate.", @@ -722,13 +880,17 @@ "CoC7.MessageSelectSingleUserForTarget": "Questa pedina è controllata da più utenti, seleziona quale utente può rispondere a questo attacco.", "CoC7.MessageBoutOfMadnessTableNotFound": "Non è stato trovato il risultato dalla Tabella della Follia, controlla che tutte le tue tabelle dei tiri siano state create", "CoC7.MessageBoutOfMadnessItemNotFound": "Il risultato dalla Tabella della Follia non è stato trovato, controlla che tutte le tue condizioni siano state create", + "CoC7.MessageRollingCharacteristic": "Tiro caratteristica {label}: {formula}", "CoC7.DealDamage": "Infliggi {damage} punti di danno a {target}?", + "CoC7.DamageDealTo": "Danno {name} {damage}PF", "CoC7.NoTargetSelected": "Non hai selezionato un bersaglio per il tuo tiro {weapon}. Vuoi procedere comunque?", "CoC7.Import": "Importa", "CoC7.Proceed": "Procedi", "CoC7.Cancel": "Cancella", + "CoC7.Add": "Aggiungi", + "CoC7.Update": "Aggiorna", "CoC7.ActorImporter": "Importa Personaggio", "CoC7.ActorImporterSummary": "Importa un PNG o una Creatura dalla descrizione e dalle statistiche. Basta incollare il testo corrispondente", @@ -792,6 +954,12 @@ "CoC7.Migrate.UpdateCurrentScene": "Migrazione della tua scena attuale", "CoC7.Migrate.Complete": "Terminata la migrazione dei tuoi dati", + "CoC7.Migrate.ErrorDocumentPack": "E' fallita la migrazione del sistema CoC7 per il documento {name} nel pacchetto {collection}: {message}", + "CoC7.Migrate.ErrorScene": "E' fallita la migrazione del sistema CoC7 per la Scena {name}: {message}", + "CoC7.Migrate.ErrorMacro": "E' fallita la migrazione del sistema CoC7 per la Macro {name}: {message}", + "CoC7.Migrate.ErrorTable": "E' fallita la migrazione del sistema CoC7 per la Tabella {name}: {message}", + "CoC7.Migrate.ErrorItem": "E' fallita la migrazione del sistema CoC7 per l'Oggetto {name}: {message}", + "CoC7.Migrate.ErrorActor": "E' fallita la migrazione del sistema CoC7 per il Personaggio {name}: {message}", "CoC7.Settings.CoreRules.Title": "Regole opzionali del regolamento base", "CoC7.Settings.Rules.Name": "Regole opzionali/variazioni", @@ -817,6 +985,7 @@ "CoC7.Maximize": "Massimizza", "CoC7.Summarize": "Riassumi", + "CoC7.ClearAllConditions": "Elimina tutti i disturbi", "CoC7.UnableToInteractWithChatCard": "Non sei in grado di interagire con questo messaggio, se devi apportare una modifica chiedi al tuo Custode di selezionare le opzioni per te", "CoC7.UnableToCopyToClipboard": "Impossibile copiare negli appunti, ciò è probabilmente dovuto alle impostazioni di sicurezza del tuo browser.", @@ -849,6 +1018,7 @@ "SETTINGS.TitleDiceSoNice": "Impostazioni per Dice So Nice", "SETTINGS.TitleDeveloperDebug": "Impostazioni per sviluppatori e debug", "SETTINGS.TitleRollTable": "Impostazioni per Tabella Tiri", + "SETTINGS.TitleChaseSettings": "Impostazioni dell'inseguimento", "SETTINGS.DebugMode": "Modalità di debug del sistema", "SETTINGS.DebugModeHint": "!!NECESSARIO RIAVVIO!!", "SETTINGS.DefaultDifficulty": "Difficoltà di tiro predefinita", @@ -953,6 +1123,8 @@ "SETTINGS.CheckElevation": "Includi l'elevazione in distanza", "SETTINGS.CheckElevationHint": "Usa l'elevazione nei calcoli della distanza dei combattimento a distanza", "CoC7.toolTipDelay": "Ritardo in millisecondi prima che la descrizione del comando venga visualizzata, 0 per mai", + "SETTINGS.ChaseShowTokenMovement": "Mostra movimento della pedina.", + "SETTINGS.ChaseShowTokenMovementHint": "Mostra movimento sulla griglia quando una pedina viene mossa nel luogo successivo.", "CoC7.getTheExample": "Copia Esempio", "CoC7.Copied": "Copiato il testo di esempio negli Appunti" From 19541cbd9a18274593ed0af36820b75ee684bb3b Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 31 Jul 2022 11:50:41 +0000 Subject: [PATCH 664/726] Updated translations list --- .github/TRANSLATIONS.md | 1220 ++++++++++++++++++++++++++------------- 1 file changed, 813 insertions(+), 407 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index f5d4c78d..c19aa069 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,614 +2,1020 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! +The **it** translation is currently up to date + The following translations have been abandoned **cn**, **cs**, **de**, [are you able to help?](./ABANDONED.md) -|Key|es|fr|it|ja|ko|pl|pt-BR|sv|zh-TW| -|:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -|**Remaining**:|**199**|**185**|**171**|**187**|**186**|**187**|**185**|**185**|**185**| -|[CoC7.ABarrier](#coc7abarrier)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AHazard](#coc7ahazard)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActionCost](#coc7actioncost)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActionCostOnFail](#coc7actioncostonfail)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Actions](#coc7actions)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActorDataLinked](#coc7actordatalinked)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActorDataNotLinked](#coc7actordatanotlinked)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActorImported](#coc7actorimported)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActorIsTokenHint](#coc7actoristokenhint)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Add](#coc7add)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AddActorToChase](#coc7addactortochase)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AddBonusDie](#coc7addbonusdie)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AddParticipant](#coc7addparticipant)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AdjustedMovement](#coc7adjustedmovement)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AlreadyEncountered](#coc7alreadyencountered)|❌|✅|✅|❌|✅|✅|✅|✅|✅| -|[CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ArmorIgnored](#coc7armorignored)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AskDamageRoll](#coc7askdamageroll)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AskIntentions](#coc7askintentions)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AskRoll](#coc7askroll)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Assist](#coc7assist)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AttackManeuver](#coc7attackmaneuver)|❌|✅|✅|✅|✅|✅|✅|✅|✅| -|[CoC7.AttemptBreakDown](#coc7attemptbreakdown)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AttemptNegotiateObstacle](#coc7attemptnegotiateobstacle)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Barrier](#coc7barrier)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.BeingCautious](#coc7beingcautious)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.BeingVeryCautious](#coc7beingverycautious)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.BreakDown](#coc7breakdown)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Breakable](#coc7breakable)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CardType](#coc7cardtype)|❌|✅|✅|✅|✅|✅|✅|✅|✅| -|[CoC7.Cautious](#coc7cautious)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CautiousApproach](#coc7cautiousapproach)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.AdjustedMovementShort](#coc7chaseadjustedmovementshort)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.ChasersMax](#coc7chasechasersmax)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.ChasersMin](#coc7chasechasersmin)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.CheckName](#coc7chasecheckname)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.InitiativeShort](#coc7chaseinitiativeshort)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.PreysMax](#coc7chasepreysmax)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.PreysMin](#coc7chasepreysmin)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ChaseSetup](#coc7chasesetup)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CheckFailed](#coc7checkfailed)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CheckName](#coc7checkname)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CheckPassed](#coc7checkpassed)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CleanSkillList](#coc7cleanskilllist)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CleanSkillListHint](#coc7cleanskilllisthint)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ClearAllConditions](#coc7clearallconditions)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmCut2Chase](#coc7confirmcut2chase)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmCut2ChaseHint](#coc7confirmcut2chasehint)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmNextChaseRound](#coc7confirmnextchaseround)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmNextChaseRoundHint](#coc7confirmnextchaseroundhint)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmResetChase](#coc7confirmresetchase)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmResetChaseHint](#coc7confirmresetchasehint)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmRestartChase](#coc7confirmrestartchase)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmRestartChaseHint](#coc7confirmrestartchasehint)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConsumeBonusDice](#coc7consumebonusdice)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CutToTheChase](#coc7cuttothechase)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Damage](#coc7damage)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DamageDealTo](#coc7damagedealto)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DamageDealt](#coc7damagedealt)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DamageOnFail](#coc7damageonfail)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DecreaseMovementAction](#coc7decreasemovementaction)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DefinitelyInsane](#coc7definitelyinsane)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.DholeHouseImportingName](#coc7dholehouseimportingname)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.DoesNotMeetMinimumReqToBeAdded](#coc7doesnotmeetminimumreqtobeadded)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DontMoveToLocation](#coc7dontmovetolocation)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DragOnCanvas](#coc7dragoncanvas)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Edit](#coc7edit)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorBeneficiaryAtMaxBonus](#coc7errorbeneficiaryatmaxbonus)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorEmptyLocationsList](#coc7erroremptylocationslist)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorInvalidCardType](#coc7errorinvalidcardtype)|❌|✅|✅|✅|✅|✅|✅|✅|✅| -|[CoC7.ErrorInvalidRollType](#coc7errorinvalidrolltype)|❌|✅|✅|✅|✅|✅|✅|✅|✅| -|[CoC7.ErrorMissingKeeperUser](#coc7errormissingkeeperuser)|❌|✅|✅|✅|✅|✅|✅|✅|✅| -|[CoC7.ErrorNoTokensSelected](#coc7errornotokensselected)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorParticipantAtMaxBonus](#coc7errorparticipantatmaxbonus)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorTokenNotOnScene](#coc7errortokennotonscene)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.FINISH](#coc7finish)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.FacingObstacle](#coc7facingobstacle)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.FileUploadError](#coc7fileuploaderror)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.German](#coc7german)|✅|✅|✅|✅|✅|❌|✅|✅|✅| -|[CoC7.GotLucky](#coc7gotlucky)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.GroupRollCard](#coc7grouprollcard)|❌|✅|✅|✅|✅|✅|✅|✅|✅| -|[CoC7.Hazard](#coc7hazard)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.IncludeEscapees](#coc7includeescapees)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.IncludeLatecomers](#coc7includelatecomers)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.IncreaseMovementAction](#coc7increasemovementaction)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Initialize](#coc7initialize)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Initiative](#coc7initiative)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.InsertLocation](#coc7insertlocation)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.LocationCoordinate](#coc7locationcoordinate)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.LocationInit](#coc7locationinit)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.LocationNotEmpty](#coc7locationnotempty)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Locations](#coc7locations)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.LuckNotEnough](#coc7lucknotenough)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.MakeActive](#coc7makeactive)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.MaxPossibleSanLoss](#coc7maxpossiblesanloss)|❌|✅|✅|❌|✅|✅|✅|✅|✅| -|[CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Migrate.ErrorActor](#coc7migrateerroractor)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Migrate.ErrorItem](#coc7migrateerroritem)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Migrate.ErrorScene](#coc7migrateerrorscene)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Migrate.ErrorTable](#coc7migrateerrortable)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Migrate.UpdateCurrentScene](#coc7migrateupdatecurrentscene)|❌|✅|✅|✅|✅|✅|✅|✅|✅| -|[CoC7.MoveBackward](#coc7movebackward)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.MoveForward](#coc7moveforward)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.MoveToLocation](#coc7movetolocation)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.MovementAction](#coc7movementaction)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NeedMin2Participants](#coc7needmin2participants)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NeedRecalculate](#coc7needrecalculate)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NeedToRecalculate](#coc7needtorecalculate)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Negotiate](#coc7negotiate)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NextRound](#coc7nextround)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NoDamageDealt](#coc7nodamagedealt)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NoValidCheck](#coc7novalidcheck)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NoValidSkill](#coc7novalidskill)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NotAllHaveSpeedRoll](#coc7notallhavespeedroll)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NothingToRoll](#coc7nothingtoroll)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Obstacle](#coc7obstacle)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ObstacleDamage](#coc7obstacledamage)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ObstacleFail](#coc7obstaclefail)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ObstacleFumble](#coc7obstaclefumble)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ObstacleHasHitPoint](#coc7obstaclehashitpoint)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ObstacleName](#coc7obstaclename)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ObstaclePassed](#coc7obstaclepassed)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.OpenObstacleResolutionCard](#coc7openobstacleresolutioncard)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.OverrideCalc](#coc7overridecalc)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantAlreadyProcessed](#coc7participantalreadyprocessed)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantDataMissing](#coc7participantdatamissing)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantDropHint](#coc7participantdrophint)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantNotEnoughMovement](#coc7participantnotenoughmovement)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantNotFound](#coc7participantnotfound)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantUuidNotFound](#coc7participantuuidnotfound)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantsList](#coc7participantslist)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.PenaltyDice](#coc7penaltydice)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.PickDirectory](#coc7pickdirectory)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.PlayerMovesToLocation](#coc7playermovestolocation)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Polish](#coc7polish)|✅|✅|✅|✅|✅|❌|✅|✅|✅| -|[CoC7.ReflectObstacleChanges](#coc7reflectobstaclechanges)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RegularRollCard](#coc7regularrollcard)|❌|✅|✅|✅|✅|✅|✅|✅|✅| -|[CoC7.Remove](#coc7remove)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RemoveBonusDie](#coc7removebonusdie)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RemoveLocation](#coc7removelocation)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RemoveObstacle](#coc7removeobstacle)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Reset](#coc7reset)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Restart](#coc7restart)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Sane](#coc7sane)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.SelectNewSkill](#coc7selectnewskill)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.SomethingInTheWay](#coc7somethingintheway)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.SpeedCheck](#coc7speedcheck)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.StartingIndex](#coc7startingindex)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.StartingRange](#coc7startingrange)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.TooFast](#coc7toofast)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.TooSlow](#coc7tooslow)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ToolTipCombat](#coc7tooltipcombat)|❌|✅|✅|✅|✅|✅|✅|✅|✅| -|[CoC7.ToolTipSanity](#coc7tooltipsanity)|❌|✅|✅|✅|✅|✅|✅|✅|✅| -|[CoC7.TryToBreak](#coc7trytobreak)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.TryToGetPastBarriers](#coc7trytogetpastbarriers)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.TryToNegotiateHazard](#coc7trytonegotiatehazard)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage)|❌|❌|✅|❌|❌|❌|❌|❌|❌| -|[CoC7.UnarmedWeaponName](#coc7unarmedweaponname)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Update](#coc7update)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.VehicleChase](#coc7vehiclechase)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.WaitForPlayerInput](#coc7waitforplayerinput)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.WeaponSkillMain](#coc7weaponskillmain)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.YouLostTime](#coc7youlosttime)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.YouTakeNoDamage](#coc7youtakenodamage)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.YouTakeSomeDamage](#coc7youtakesomedamage)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.days](#coc7days)|❌|✅|✅|✅|✅|✅|✅|✅|✅| -|[CoC7.months](#coc7months)|❌|✅|✅|✅|✅|✅|✅|✅|✅| -|[CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint)|❌|❌|❌|❌|❌|❌|❌|❌|❌| -|[SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty)|✅|✅|✅|✅|❌|✅|✅|✅|✅| -|[SETTINGS.TitleChaseSettings](#settingstitlechasesettings)|❌|❌|❌|❌|❌|❌|❌|❌|❌| +| Key | es | fr | ja | ko | pl | pt-BR | sv | zh-TW | +| :------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **199** | **185** | **187** | **186** | **187** | **185** | **185** | **185** | +| [CoC7.ABarrier](#coc7abarrier) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AHazard](#coc7ahazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActionCost](#coc7actioncost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActionCostOnFail](#coc7actioncostonfail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Actions](#coc7actions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorDataLinked](#coc7actordatalinked) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorDataNotLinked](#coc7actordatanotlinked) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorImported](#coc7actorimported) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorIsTokenHint](#coc7actoristokenhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Add](#coc7add) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddActorToChase](#coc7addactortochase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddBonusDie](#coc7addbonusdie) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddParticipant](#coc7addparticipant) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AdjustedMovement](#coc7adjustedmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AlreadyEncountered](#coc7alreadyencountered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ArmorIgnored](#coc7armorignored) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AskDamageRoll](#coc7askdamageroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AskIntentions](#coc7askintentions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AskRoll](#coc7askroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Assist](#coc7assist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AttackManeuver](#coc7attackmaneuver) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AttemptBreakDown](#coc7attemptbreakdown) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AttemptNegotiateObstacle](#coc7attemptnegotiateobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Barrier](#coc7barrier) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BeingCautious](#coc7beingcautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BeingVeryCautious](#coc7beingverycautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BreakDown](#coc7breakdown) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Breakable](#coc7breakable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CardType](#coc7cardtype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Cautious](#coc7cautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CautiousApproach](#coc7cautiousapproach) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.AdjustedMovementShort](#coc7chaseadjustedmovementshort) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.ChasersMax](#coc7chasechasersmax) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.ChasersMin](#coc7chasechasersmin) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.CheckName](#coc7chasecheckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.InitiativeShort](#coc7chaseinitiativeshort) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.PreysMax](#coc7chasepreysmax) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.PreysMin](#coc7chasepreysmin) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ChaseSetup](#coc7chasesetup) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckFailed](#coc7checkfailed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckName](#coc7checkname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckPassed](#coc7checkpassed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CleanSkillList](#coc7cleanskilllist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CleanSkillListHint](#coc7cleanskilllisthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ClearAllConditions](#coc7clearallconditions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmCut2Chase](#coc7confirmcut2chase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmCut2ChaseHint](#coc7confirmcut2chasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmNextChaseRound](#coc7confirmnextchaseround) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmNextChaseRoundHint](#coc7confirmnextchaseroundhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmResetChase](#coc7confirmresetchase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmResetChaseHint](#coc7confirmresetchasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmRestartChase](#coc7confirmrestartchase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmRestartChaseHint](#coc7confirmrestartchasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConsumeBonusDice](#coc7consumebonusdice) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CutToTheChase](#coc7cuttothechase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Damage](#coc7damage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DamageDealTo](#coc7damagedealto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DamageDealt](#coc7damagedealt) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DamageOnFail](#coc7damageonfail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DecreaseMovementAction](#coc7decreasemovementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DefinitelyInsane](#coc7definitelyinsane) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseImportingName](#coc7dholehouseimportingname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DoesNotMeetMinimumReqToBeAdded](#coc7doesnotmeetminimumreqtobeadded) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DontMoveToLocation](#coc7dontmovetolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DragOnCanvas](#coc7dragoncanvas) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Edit](#coc7edit) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorBeneficiaryAtMaxBonus](#coc7errorbeneficiaryatmaxbonus) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorEmptyLocationsList](#coc7erroremptylocationslist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorInvalidCardType](#coc7errorinvalidcardtype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ErrorInvalidRollType](#coc7errorinvalidrolltype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ErrorMissingKeeperUser](#coc7errormissingkeeperuser) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ErrorNoTokensSelected](#coc7errornotokensselected) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorParticipantAtMaxBonus](#coc7errorparticipantatmaxbonus) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorTokenNotOnScene](#coc7errortokennotonscene) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.FINISH](#coc7finish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.FacingObstacle](#coc7facingobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.FileUploadError](#coc7fileuploaderror) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.GotLucky](#coc7gotlucky) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.GroupRollCard](#coc7grouprollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Hazard](#coc7hazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.IncludeEscapees](#coc7includeescapees) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.IncludeLatecomers](#coc7includelatecomers) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.IncreaseMovementAction](#coc7increasemovementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Initialize](#coc7initialize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Initiative](#coc7initiative) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.InsertLocation](#coc7insertlocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LocationCoordinate](#coc7locationcoordinate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LocationInit](#coc7locationinit) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LocationNotEmpty](#coc7locationnotempty) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Locations](#coc7locations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LuckNotEnough](#coc7lucknotenough) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MakeActive](#coc7makeactive) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MaxPossibleSanLoss](#coc7maxpossiblesanloss) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorActor](#coc7migrateerroractor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorItem](#coc7migrateerroritem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorScene](#coc7migrateerrorscene) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorTable](#coc7migrateerrortable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.UpdateCurrentScene](#coc7migrateupdatecurrentscene) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MoveBackward](#coc7movebackward) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MoveForward](#coc7moveforward) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MoveToLocation](#coc7movetolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MovementAction](#coc7movementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NeedMin2Participants](#coc7needmin2participants) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NeedRecalculate](#coc7needrecalculate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NeedToRecalculate](#coc7needtorecalculate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Negotiate](#coc7negotiate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NextRound](#coc7nextround) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoDamageDealt](#coc7nodamagedealt) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoValidCheck](#coc7novalidcheck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoValidSkill](#coc7novalidskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NotAllHaveSpeedRoll](#coc7notallhavespeedroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NothingToRoll](#coc7nothingtoroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Obstacle](#coc7obstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleDamage](#coc7obstacledamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleFail](#coc7obstaclefail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleFumble](#coc7obstaclefumble) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleHasHitPoint](#coc7obstaclehashitpoint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleName](#coc7obstaclename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstaclePassed](#coc7obstaclepassed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.OpenObstacleResolutionCard](#coc7openobstacleresolutioncard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.OverrideCalc](#coc7overridecalc) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantAlreadyProcessed](#coc7participantalreadyprocessed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantDataMissing](#coc7participantdatamissing) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantDropHint](#coc7participantdrophint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantNotEnoughMovement](#coc7participantnotenoughmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantNotFound](#coc7participantnotfound) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantUuidNotFound](#coc7participantuuidnotfound) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantsList](#coc7participantslist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PenaltyDice](#coc7penaltydice) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PickDirectory](#coc7pickdirectory) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PlayerMovesToLocation](#coc7playermovestolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Polish](#coc7polish) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ReflectObstacleChanges](#coc7reflectobstaclechanges) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RegularRollCard](#coc7regularrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.Remove](#coc7remove) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RemoveBonusDie](#coc7removebonusdie) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RemoveLocation](#coc7removelocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RemoveObstacle](#coc7removeobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Reset](#coc7reset) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Restart](#coc7restart) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Sane](#coc7sane) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SelectNewSkill](#coc7selectnewskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SomethingInTheWay](#coc7somethingintheway) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpeedCheck](#coc7speedcheck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.StartingIndex](#coc7startingindex) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.StartingRange](#coc7startingrange) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TooFast](#coc7toofast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TooSlow](#coc7tooslow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ToolTipCombat](#coc7tooltipcombat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.ToolTipSanity](#coc7tooltipsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.TryToBreak](#coc7trytobreak) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TryToGetPastBarriers](#coc7trytogetpastbarriers) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TryToNegotiateHazard](#coc7trytonegotiatehazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UnarmedWeaponName](#coc7unarmedweaponname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Update](#coc7update) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.VehicleChase](#coc7vehiclechase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.WaitForPlayerInput](#coc7waitforplayerinput) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.WeaponSkillMain](#coc7weaponskillmain) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.YouLostTime](#coc7youlosttime) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.YouTakeNoDamage](#coc7youtakenodamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.YouTakeSomeDamage](#coc7youtakesomedamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.days](#coc7days) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.months](#coc7months) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleChaseSettings](#settingstitlechasesettings) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | + ##### CoC7.ABarrier -``` "CoC7.ABarrier": "a barrier",``` + +` "CoC7.ABarrier": "a barrier",` + ##### CoC7.AHazard -``` "CoC7.AHazard": "a hazard",``` + +` "CoC7.AHazard": "a hazard",` + ##### CoC7.ActionCost -``` "CoC7.ActionCost": "Action cost",``` + +` "CoC7.ActionCost": "Action cost",` + ##### CoC7.ActionCostOnFail -``` "CoC7.ActionCostOnFail": "Toggle action penalty on fail.",``` + +` "CoC7.ActionCostOnFail": "Toggle action penalty on fail.",` + ##### CoC7.Actions -``` "CoC7.Actions": "actions:",``` + +` "CoC7.Actions": "actions:",` + ##### CoC7.ActorDataLinked -``` "CoC7.ActorDataLinked": "Actor data are linked",``` + +` "CoC7.ActorDataLinked": "Actor data are linked",` + ##### CoC7.ActorDataNotLinked -``` "CoC7.ActorDataNotLinked": "Actor data are NOT linked",``` + +` "CoC7.ActorDataNotLinked": "Actor data are NOT linked",` + ##### CoC7.ActorImported -``` "CoC7.ActorImported": "New {actorType} imported: {actorName}",``` + +` "CoC7.ActorImported": "New {actorType} imported: {actorName}",` + ##### CoC7.ActorImporterUploadError -``` "CoC7.ActorImporterUploadError": "Import stopped, unable to write image",``` + +` "CoC7.ActorImporterUploadError": "Import stopped, unable to write image",` + ##### CoC7.ActorIsSyntheticActor -``` "CoC7.ActorIsSyntheticActor": "Actor is a synthetic actor (instance of an actor)",``` + +` "CoC7.ActorIsSyntheticActor": "Actor is a synthetic actor (instance of an actor)",` + ##### CoC7.ActorIsTokenHint -``` "CoC7.ActorIsTokenHint": "Actor is a token",``` + +` "CoC7.ActorIsTokenHint": "Actor is a token",` + ##### CoC7.Add -``` "CoC7.Add": "Add",``` + +` "CoC7.Add": "Add",` + ##### CoC7.AddActorToChase -``` "CoC7.AddActorToChase": "Add an actor to the chase",``` + +` "CoC7.AddActorToChase": "Add an actor to the chase",` + ##### CoC7.AddBonusDie -``` "CoC7.AddBonusDie": "Add bonus die",``` + +` "CoC7.AddBonusDie": "Add bonus die",` + ##### CoC7.AddParticipant -``` "CoC7.AddParticipant": "Add Participant",``` + +` "CoC7.AddParticipant": "Add Participant",` + ##### CoC7.AdjustedMovement -``` "CoC7.AdjustedMovement": "Adjusted movement",``` + +` "CoC7.AdjustedMovement": "Adjusted movement",` + ##### CoC7.AlreadyEncountered -``` "CoC7.AlreadyEncountered": "Already encountered",``` + +` "CoC7.AlreadyEncountered": "Already encountered",` + ##### CoC7.AlreadyEncounteredInformation -``` "CoC7.AlreadyEncounteredInformation": "Already encountered: {reason} lost {lost}/{max}",``` + +` "CoC7.AlreadyEncounteredInformation": "Already encountered: {reason} lost {lost}/{max}",` + ##### CoC7.ArmorIgnored -``` "CoC7.ArmorIgnored": "Armor Ignored",``` + +` "CoC7.ArmorIgnored": "Armor Ignored",` + ##### CoC7.AskDamageRoll -``` "CoC7.AskDamageRoll": "Ask damage roll",``` + +` "CoC7.AskDamageRoll": "Ask damage roll",` + ##### CoC7.AskIntentions -``` "CoC7.AskIntentions": "What are your intentions ?",``` + +` "CoC7.AskIntentions": "What are your intentions ?",` + ##### CoC7.AskRoll -``` "CoC7.AskRoll": "Roll {name} ({value}%)",``` + +` "CoC7.AskRoll": "Roll {name} ({value}%)",` + ##### CoC7.Assist -``` "CoC7.Assist": "Assist ally",``` + +` "CoC7.Assist": "Assist ally",` + ##### CoC7.AttackManeuver -``` "CoC7.AttackManeuver": "Attack Maneuver",``` + +` "CoC7.AttackManeuver": "Attack Maneuver",` + ##### CoC7.AttemptBreakDown -``` "CoC7.AttemptBreakDown": "Attempt to break down !!",``` + +` "CoC7.AttemptBreakDown": "Attempt to break down !!",` + ##### CoC7.AttemptNegotiateObstacle -``` "CoC7.AttemptNegotiateObstacle": "Attempt to negotiate that obstacle",``` + +` "CoC7.AttemptNegotiateObstacle": "Attempt to negotiate that obstacle",` + ##### CoC7.Barrier -``` "CoC7.Barrier": "Barrier",``` + +` "CoC7.Barrier": "Barrier",` + ##### CoC7.BeingCautious -``` "CoC7.BeingCautious": "You elect to take a cautious approach.",``` + +` "CoC7.BeingCautious": "You elect to take a cautious approach.",` + ##### CoC7.BeingVeryCautious -``` "CoC7.BeingVeryCautious": "You are being very cautious.",``` + +` "CoC7.BeingVeryCautious": "You are being very cautious.",` + ##### CoC7.BonusDieAssailantReason -``` "CoC7.BonusDieAssailantReason": "Add 1 bonus die (assailant is prone, restrained...)",``` + +` "CoC7.BonusDieAssailantReason": "Add 1 bonus die (assailant is prone, restrained...)",` + ##### CoC7.BreakDown -``` "CoC7.BreakDown": "Break Down",``` + +` "CoC7.BreakDown": "Break Down",` + ##### CoC7.Breakable -``` "CoC7.Breakable": "Breakable",``` + +` "CoC7.Breakable": "Breakable",` + ##### CoC7.CardType -``` "CoC7.CardType": "Roll type",``` + +` "CoC7.CardType": "Roll type",` + ##### CoC7.Cautious -``` "CoC7.Cautious": "Cautious",``` + +` "CoC7.Cautious": "Cautious",` + ##### CoC7.CautiousApproach -``` "CoC7.CautiousApproach": "Take cautious approach",``` + +` "CoC7.CautiousApproach": "Take cautious approach",` + ##### CoC7.Chase.AdjustedMovementShort -``` "CoC7.Chase.AdjustedMovementShort": "ADJ. MOV: {value}",``` + +` "CoC7.Chase.AdjustedMovementShort": "ADJ. MOV: {value}",` + ##### CoC7.Chase.ChasersMax -``` "CoC7.Chase.ChasersMax": "Chasers Max: {value}",``` + +` "CoC7.Chase.ChasersMax": "Chasers Max: {value}",` + ##### CoC7.Chase.ChasersMin -``` "CoC7.Chase.ChasersMin": "Chasers Min: {value}",``` + +` "CoC7.Chase.ChasersMin": "Chasers Min: {value}",` + ##### CoC7.Chase.CheckName -``` "CoC7.Chase.CheckName": "check name",``` + +` "CoC7.Chase.CheckName": "check name",` + ##### CoC7.Chase.InitiativeShort -``` "CoC7.Chase.InitiativeShort": "INIT: {value}",``` + +` "CoC7.Chase.InitiativeShort": "INIT: {value}",` + ##### CoC7.Chase.PreysMax -``` "CoC7.Chase.PreysMax": "Preys Max: {value}",``` + +` "CoC7.Chase.PreysMax": "Preys Max: {value}",` + ##### CoC7.Chase.PreysMin -``` "CoC7.Chase.PreysMin": "Preys Min: {value}",``` + +` "CoC7.Chase.PreysMin": "Preys Min: {value}",` + ##### CoC7.ChaseSetup -``` "CoC7.ChaseSetup": "Chase setup",``` + +` "CoC7.ChaseSetup": "Chase setup",` + ##### CoC7.CheckFailed -``` "CoC7.CheckFailed": "Check failed",``` + +` "CoC7.CheckFailed": "Check failed",` + ##### CoC7.CheckMemoryRepressed -``` "CoC7.CheckMemoryRepressed": "Memory repressed",``` + +` "CoC7.CheckMemoryRepressed": "Memory repressed",` + ##### CoC7.CheckName -``` "CoC7.CheckName": "Check",``` + +` "CoC7.CheckName": "Check",` + ##### CoC7.CheckPassed -``` "CoC7.CheckPassed": "Check passed",``` + +` "CoC7.CheckPassed": "Check passed",` + ##### CoC7.CleanSkillList -``` "CoC7.CleanSkillList": "Clean skill list",``` + +` "CoC7.CleanSkillList": "Clean skill list",` + ##### CoC7.CleanSkillListHint -``` "CoC7.CleanSkillListHint": "

    This will Clean your skill list by removing specialization from skill name.

    This will avoid to display skill as : 'specialization(specialization(skill))'

    ",``` + +` "CoC7.CleanSkillListHint": "

    This will Clean your skill list by removing specialization from skill name.

    This will avoid to display skill as : 'specialization(specialization(skill))'

    ",` + ##### CoC7.ClearAllConditions -``` "CoC7.ClearAllConditions": "Clear All Conditions",``` + +` "CoC7.ClearAllConditions": "Clear All Conditions",` + ##### CoC7.ConfirmCut2Chase -``` "CoC7.ConfirmCut2Chase": "Are you ready to cut to the chase ?",``` + +` "CoC7.ConfirmCut2Chase": "Are you ready to cut to the chase ?",` + ##### CoC7.ConfirmCut2ChaseHint -``` "CoC7.ConfirmCut2ChaseHint": "This will start the chase and the first chase round.",``` + +` "CoC7.ConfirmCut2ChaseHint": "This will start the chase and the first chase round.",` + ##### CoC7.ConfirmNextChaseRound -``` "CoC7.ConfirmNextChaseRound": "Proceed to next round ?",``` + +` "CoC7.ConfirmNextChaseRound": "Proceed to next round ?",` + ##### CoC7.ConfirmNextChaseRoundHint -``` "CoC7.ConfirmNextChaseRoundHint": "You still have action available on some actors. Are you sure you want to proceed ?",``` + +` "CoC7.ConfirmNextChaseRoundHint": "You still have action available on some actors. Are you sure you want to proceed ?",` + ##### CoC7.ConfirmResetChase -``` "CoC7.ConfirmResetChase": "Do you want to restet the chase ?",``` + +` "CoC7.ConfirmResetChase": "Do you want to restet the chase ?",` + ##### CoC7.ConfirmResetChaseHint -``` "CoC7.ConfirmResetChaseHint": "This will reset your chase.All positions and obstacles will be removed.",``` + +` "CoC7.ConfirmResetChaseHint": "This will reset your chase.All positions and obstacles will be removed.",` + ##### CoC7.ConfirmRestartChase -``` "CoC7.ConfirmRestartChase": "Do you want to restart the chase ?",``` + +` "CoC7.ConfirmRestartChase": "Do you want to restart the chase ?",` + ##### CoC7.ConfirmRestartChaseHint -``` "CoC7.ConfirmRestartChaseHint": "This will restart your chase.\nAll position will be reseted.\nActors that did not rool a speedcheck will have to roll.",``` + +` "CoC7.ConfirmRestartChaseHint": "This will restart your chase.\nAll position will be reseted.\nActors that did not rool a speedcheck will have to roll.",` + ##### CoC7.ConsumeBonusDice -``` "CoC7.ConsumeBonusDice": "Consume Bonus Dice",``` + +` "CoC7.ConsumeBonusDice": "Consume Bonus Dice",` + ##### CoC7.CutToTheChase -``` "CoC7.CutToTheChase": "Cut to the chase",``` + +` "CoC7.CutToTheChase": "Cut to the chase",` + ##### CoC7.Damage -``` "CoC7.Damage": "Damage",``` + +` "CoC7.Damage": "Damage",` + ##### CoC7.DamageDealTo -``` "CoC7.DamageDealTo": "Damage {name} {damage}HP",``` + +` "CoC7.DamageDealTo": "Damage {name} {damage}HP",` + ##### CoC7.DamageDealt -``` "CoC7.DamageDealt": "You deal {value} damage.",``` + +` "CoC7.DamageDealt": "You deal {value} damage.",` + ##### CoC7.DamageOnFail -``` "CoC7.DamageOnFail": "Toggle damage on fail.",``` + +` "CoC7.DamageOnFail": "Toggle damage on fail.",` + ##### CoC7.DecreaseMovementAction -``` "CoC7.DecreaseMovementAction": "Decrease movement action",``` + +` "CoC7.DecreaseMovementAction": "Decrease movement action",` + ##### CoC7.DefinitelyInsane -``` "CoC7.DefinitelyInsane": "Good for the asylum",``` + +` "CoC7.DefinitelyInsane": "Good for the asylum",` + ##### CoC7.DholeHouseActorImporter -``` "CoC7.DholeHouseActorImporter": "The Dhole's House Actor Importer JSON",``` + +` "CoC7.DholeHouseActorImporter": "The Dhole's House Actor Importer JSON",` + ##### CoC7.DholeHouseActorImporterSource -``` "CoC7.DholeHouseActorImporterSource": "Imported from The Dhole's House Actor",``` + +` "CoC7.DholeHouseActorImporterSource": "Imported from The Dhole's House Actor",` + ##### CoC7.DholeHouseActorImporterSummary -``` "CoC7.DholeHouseActorImporterSummary": "Export your DholeHouse's character as JSON and upload it here.",``` + +` "CoC7.DholeHouseActorImporterSummary": "Export your DholeHouse's character as JSON and upload it here.",` + ##### CoC7.DholeHouseImportingName -``` "CoC7.DholeHouseImportingName": "About to import: ",``` + +` "CoC7.DholeHouseImportingName": "About to import: ",` + ##### CoC7.DholeHouseInvalidActor -``` "CoC7.DholeHouseInvalidActor": "The selected JSON doesn't seem to be a valid Dhole's House exported character",``` + +` "CoC7.DholeHouseInvalidActor": "The selected JSON doesn't seem to be a valid Dhole's House exported character",` + ##### CoC7.DholeHousePickYourJSONFile -``` "CoC7.DholeHousePickYourJSONFile": "Pick the JSON file exported from The Dhole's House",``` + +` "CoC7.DholeHousePickYourJSONFile": "Pick the JSON file exported from The Dhole's House",` + ##### CoC7.DoesNotMeetMinimumReqToBeAdded -``` "CoC7.DoesNotMeetMinimumReqToBeAdded": "Can not add participant, need at least valid movement action",``` + +` "CoC7.DoesNotMeetMinimumReqToBeAdded": "Can not add participant, need at least valid movement action",` + ##### CoC7.DontMoveToLocation -``` "CoC7.DontMoveToLocation": "You're staying there !",``` + +` "CoC7.DontMoveToLocation": "You're staying there !",` + ##### CoC7.DragOnCanvas -``` "CoC7.DragOnCanvas": "Drag this on canvas to set the position of this location.",``` + +` "CoC7.DragOnCanvas": "Drag this on canvas to set the position of this location.",` + ##### CoC7.Edit -``` "CoC7.Edit": "Edit",``` + +` "CoC7.Edit": "Edit",` + ##### CoC7.ErrorActorHasNoWeaponNamed -``` "CoC7.ErrorActorHasNoWeaponNamed": "Actor {actorName} has no weapon named {weaponName}",``` + +` "CoC7.ErrorActorHasNoWeaponNamed": "Actor {actorName} has no weapon named {weaponName}",` + ##### CoC7.ErrorActorHasTooManyWeaponsNamed -``` "CoC7.ErrorActorHasTooManyWeaponsNamed": "`Actor {actorName} has more than one weapon named {weaponName}. The first found will be used`",``` + +`` "CoC7.ErrorActorHasTooManyWeaponsNamed": "`Actor {actorName} has more than one weapon named {weaponName}. The first found will be used`",`` + ##### CoC7.ErrorBeneficiaryAtMaxBonus -``` "CoC7.ErrorBeneficiaryAtMaxBonus": "Beneficiary {name} already has max bonus dice",``` + +` "CoC7.ErrorBeneficiaryAtMaxBonus": "Beneficiary {name} already has max bonus dice",` + ##### CoC7.ErrorEmptyLocationsList -``` "CoC7.ErrorEmptyLocationsList": "Empty locations list",``` + +` "CoC7.ErrorEmptyLocationsList": "Empty locations list",` + ##### CoC7.ErrorEvaluatingDamage -``` "CoC7.ErrorEvaluatingDamage": "Error evaluating damage",``` + +` "CoC7.ErrorEvaluatingDamage": "Error evaluating damage",` + ##### CoC7.ErrorInvalidCardType -``` "CoC7.ErrorInvalidCardType": "Card Type",``` + +` "CoC7.ErrorInvalidCardType": "Card Type",` + ##### CoC7.ErrorInvalidRollType -``` "CoC7.ErrorInvalidRollType": "Roll Type",``` + +` "CoC7.ErrorInvalidRollType": "Roll Type",` + ##### CoC7.ErrorMissingKeeperUser -``` "CoC7.ErrorMissingKeeperUser": "Your keeper needs to be connected to perform this action",``` + +` "CoC7.ErrorMissingKeeperUser": "Your keeper needs to be connected to perform this action",` + ##### CoC7.ErrorNoTokensSelected -``` "CoC7.ErrorNoTokensSelected": "No tokens selected",``` + +` "CoC7.ErrorNoTokensSelected": "No tokens selected",` + ##### CoC7.ErrorParticipantAtMaxBonus -``` "CoC7.ErrorParticipantAtMaxBonus": "{participantUuid} already has max bonus dice",``` + +` "CoC7.ErrorParticipantAtMaxBonus": "{participantUuid} already has max bonus dice",` + ##### CoC7.ErrorTokenNotOnScene -``` "CoC7.ErrorTokenNotOnScene": "Token does not belongs to this location's scene",``` + +` "CoC7.ErrorTokenNotOnScene": "Token does not belongs to this location's scene",` + ##### CoC7.ErrorUnableToParseArmorFormula -``` "CoC7.ErrorUnableToParseArmorFormula": "Unable to process armor value: {value}. Ignoring armor.",``` + +` "CoC7.ErrorUnableToParseArmorFormula": "Unable to process armor value: {value}. Ignoring armor.",` + ##### CoC7.ErrorUnableToParseFormula -``` "CoC7.ErrorUnableToParseFormula": "{value} is not a valid formula",``` + +` "CoC7.ErrorUnableToParseFormula": "{value} is not a valid formula",` + ##### CoC7.ErrorUnableToParseSkillFormula -``` "CoC7.ErrorUnableToParseSkillFormula": "Unable to parse formula: {value} for skill {name}",``` + +` "CoC7.ErrorUnableToParseSkillFormula": "Unable to parse formula: {value} for skill {name}",` + ##### CoC7.ErrorUnexpectedSkillsText -``` "CoC7.ErrorUnexpectedSkillsText": "Unexpected skills text, please raise a bug report with the text you are attempting to import",``` + +` "CoC7.ErrorUnexpectedSkillsText": "Unexpected skills text, please raise a bug report with the text you are attempting to import",` + ##### CoC7.ErrorUnexpectedWeaponText -``` "CoC7.ErrorUnexpectedWeaponText": "Unexpected weapons text, please raise a bug report with the text you are attempting to import",``` + +` "CoC7.ErrorUnexpectedWeaponText": "Unexpected weapons text, please raise a bug report with the text you are attempting to import",` + ##### CoC7.FINISH -``` "CoC7.FINISH": "--F-I-N-I-S-H--",``` + +` "CoC7.FINISH": "--F-I-N-I-S-H--",` + ##### CoC7.FacingObstacle -``` "CoC7.FacingObstacle": "You are facing {type}.",``` + +` "CoC7.FacingObstacle": "You are facing {type}.",` + ##### CoC7.FileUploadError -``` "CoC7.FileUploadError": "Unable to write image, file upload error",``` + +` "CoC7.FileUploadError": "Unable to write image, file upload error",` + ##### CoC7.German -``` "CoC7.German": "German",``` + +` "CoC7.German": "German",` + ##### CoC7.GotLucky -``` "CoC7.GotLucky": "You got lucky, this time...",``` + +` "CoC7.GotLucky": "You got lucky, this time...",` + ##### CoC7.GroupRollCard -``` "CoC7.GroupRollCard": "Group roll card",``` + +` "CoC7.GroupRollCard": "Group roll card",` + ##### CoC7.Hazard -``` "CoC7.Hazard": "Hazard",``` + +` "CoC7.Hazard": "Hazard",` + ##### CoC7.IncludeEscapees -``` "CoC7.IncludeEscapees": "Let fastest fleeing actors participate.",``` + +` "CoC7.IncludeEscapees": "Let fastest fleeing actors participate.",` + ##### CoC7.IncludeLatecomers -``` "CoC7.IncludeLatecomers": "Let slow pursuer participate.",``` + +` "CoC7.IncludeLatecomers": "Let slow pursuer participate.",` + ##### CoC7.IncreaseMovementAction -``` "CoC7.IncreaseMovementAction": "Increase movement action",``` + +` "CoC7.IncreaseMovementAction": "Increase movement action",` + ##### CoC7.Initialize -``` "CoC7.Initialize": "Initialize",``` + +` "CoC7.Initialize": "Initialize",` + ##### CoC7.Initiative -``` "CoC7.Initiative": "Initiative",``` + +` "CoC7.Initiative": "Initiative",` + ##### CoC7.InsertLocation -``` "CoC7.InsertLocation": "Insert location",``` + +` "CoC7.InsertLocation": "Insert location",` + ##### CoC7.LocationCoordinate -``` "CoC7.LocationCoordinate": "Location set to : {x}, {y}.\nRight click to clear.\nDrag this on canvas to change the position.",``` + +` "CoC7.LocationCoordinate": "Location set to : {x}, {y}.\nRight click to clear.\nDrag this on canvas to change the position.",` + ##### CoC7.LocationInit -``` "CoC7.LocationInit": "You can't remove a starting location",``` + +` "CoC7.LocationInit": "You can't remove a starting location",` + ##### CoC7.LocationNotEmpty -``` "CoC7.LocationNotEmpty": "You can't remove a location with an actor",``` + +` "CoC7.LocationNotEmpty": "You can't remove a location with an actor",` + ##### CoC7.Locations -``` "CoC7.Locations": "Chase locations",``` + +` "CoC7.Locations": "Chase locations",` + ##### CoC7.LuckNotEnough -``` "CoC7.LuckNotEnough": "{name} didn't have enough luck to pass the check",``` + +` "CoC7.LuckNotEnough": "{name} didn't have enough luck to pass the check",` + ##### CoC7.MakeActive -``` "CoC7.MakeActive": "Make Active",``` + +` "CoC7.MakeActive": "Make Active",` + ##### CoC7.MaxPossibleSanLoss -``` "CoC7.MaxPossibleSanLoss": "Max Possible loss",``` + +` "CoC7.MaxPossibleSanLoss": "Max Possible loss",` + ##### CoC7.MessageRollingCharacteristic -``` "CoC7.MessageRollingCharacteristic": "Rolling characteristic {label}: {formula}",``` + +` "CoC7.MessageRollingCharacteristic": "Rolling characteristic {label}: {formula}",` + ##### CoC7.Migrate.ErrorActor -``` "CoC7.Migrate.ErrorActor": "Failed CoC7 system migration for Actor {name}: {message}",``` + +` "CoC7.Migrate.ErrorActor": "Failed CoC7 system migration for Actor {name}: {message}",` + ##### CoC7.Migrate.ErrorDocumentPack -``` "CoC7.Migrate.ErrorDocumentPack": "Failed CoC7 system migration for document {name} in pack {collection}: {message}",``` + +` "CoC7.Migrate.ErrorDocumentPack": "Failed CoC7 system migration for document {name} in pack {collection}: {message}",` + ##### CoC7.Migrate.ErrorItem -``` "CoC7.Migrate.ErrorItem": "Failed CoC7 system migration for Item {name}: {message}",``` + +` "CoC7.Migrate.ErrorItem": "Failed CoC7 system migration for Item {name}: {message}",` + ##### CoC7.Migrate.ErrorMacro -``` "CoC7.Migrate.ErrorMacro": "Failed CoC7 system migration for Macro {name}: {message}",``` + +` "CoC7.Migrate.ErrorMacro": "Failed CoC7 system migration for Macro {name}: {message}",` + ##### CoC7.Migrate.ErrorScene -``` "CoC7.Migrate.ErrorScene": "Failed CoC7 system migration for Scene {name}: {message}",``` + +` "CoC7.Migrate.ErrorScene": "Failed CoC7 system migration for Scene {name}: {message}",` + ##### CoC7.Migrate.ErrorTable -``` "CoC7.Migrate.ErrorTable": "Failed CoC7 system migration for Table {name}: {message}",``` + +` "CoC7.Migrate.ErrorTable": "Failed CoC7 system migration for Table {name}: {message}",` + ##### CoC7.Migrate.UpdateCurrentScene -``` "CoC7.Migrate.UpdateCurrentScene": "Migrating your current scene",``` + +` "CoC7.Migrate.UpdateCurrentScene": "Migrating your current scene",` + ##### CoC7.MoveBackward -``` "CoC7.MoveBackward": "Go back",``` + +` "CoC7.MoveBackward": "Go back",` + ##### CoC7.MoveForward -``` "CoC7.MoveForward": "Move forward",``` + +` "CoC7.MoveForward": "Move forward",` + ##### CoC7.MoveToLocation -``` "CoC7.MoveToLocation": "You're moving to the next location.",``` + +` "CoC7.MoveToLocation": "You're moving to the next location.",` + ##### CoC7.MovementAction -``` "CoC7.MovementAction": "Movement action",``` + +` "CoC7.MovementAction": "Movement action",` + ##### CoC7.NeedMin2Participants -``` "CoC7.NeedMin2Participants": "You need to have a chaser and a prey to start a chase!",``` + +` "CoC7.NeedMin2Participants": "You need to have a chaser and a prey to start a chase!",` + ##### CoC7.NeedRecalculate -``` "CoC7.NeedRecalculate": "Recalculation needed",``` + +` "CoC7.NeedRecalculate": "Recalculation needed",` + ##### CoC7.NeedToRecalculate -``` "CoC7.NeedToRecalculate": "All participant will have their movement action recalculated",``` + +` "CoC7.NeedToRecalculate": "All participant will have their movement action recalculated",` + ##### CoC7.Negotiate -``` "CoC7.Negotiate": "Negotiate",``` + +` "CoC7.Negotiate": "Negotiate",` + ##### CoC7.NextRound -``` "CoC7.NextRound": "Next round",``` + +` "CoC7.NextRound": "Next round",` + ##### CoC7.NoDamageDealt -``` "CoC7.NoDamageDealt": "No damage dealt",``` + +` "CoC7.NoDamageDealt": "No damage dealt",` + ##### CoC7.NoValidCheck -``` "CoC7.NoValidCheck": "No valid check",``` + +` "CoC7.NoValidCheck": "No valid check",` + ##### CoC7.NoValidSkill -``` "CoC7.NoValidSkill": "Fake skill",``` + +` "CoC7.NoValidSkill": "Fake skill",` + ##### CoC7.NotAllHaveSpeedRoll -``` "CoC7.NotAllHaveSpeedRoll": "Some participants don't have a speed roll!",``` + +` "CoC7.NotAllHaveSpeedRoll": "Some participants don't have a speed roll!",` + ##### CoC7.NothingToRoll -``` "CoC7.NothingToRoll": "Nothing to roll!",``` + +` "CoC7.NothingToRoll": "Nothing to roll!",` + ##### CoC7.Obstacle -``` "CoC7.Obstacle": "Something in the way",``` + +` "CoC7.Obstacle": "Something in the way",` + ##### CoC7.ObstacleDamage -``` "CoC7.ObstacleDamage": "Obstacle damage",``` + +` "CoC7.ObstacleDamage": "Obstacle damage",` + ##### CoC7.ObstacleFail -``` "CoC7.ObstacleFail": "You fail.",``` + +` "CoC7.ObstacleFail": "You fail.",` + ##### CoC7.ObstacleFumble -``` "CoC7.ObstacleFumble": "You fail misarably !",``` + +` "CoC7.ObstacleFumble": "You fail misarably !",` + ##### CoC7.ObstacleHasHitPoint -``` "CoC7.ObstacleHasHitPoint": "Toggle location's hit points.",``` + +` "CoC7.ObstacleHasHitPoint": "Toggle location's hit points.",` + ##### CoC7.ObstacleName -``` "CoC7.ObstacleName": "Obstacle name:",``` + +` "CoC7.ObstacleName": "Obstacle name:",` + ##### CoC7.ObstaclePassed -``` "CoC7.ObstaclePassed": "You succeesfully found a way.",``` + +` "CoC7.ObstaclePassed": "You succeesfully found a way.",` + ##### CoC7.OpenObstacleResolutionCard -``` "CoC7.OpenObstacleResolutionCard": "Start obstacle resolution flow card.",``` + +` "CoC7.OpenObstacleResolutionCard": "Start obstacle resolution flow card.",` + ##### CoC7.OverrideCalc -``` "CoC7.OverrideCalc": "Override calculation",``` + +` "CoC7.OverrideCalc": "Override calculation",` + ##### CoC7.ParticipantAlreadyProcessed -``` "CoC7.ParticipantAlreadyProcessed": "Participant was already processed.",``` + +` "CoC7.ParticipantAlreadyProcessed": "Participant was already processed.",` + ##### CoC7.ParticipantDataMissing -``` "CoC7.ParticipantDataMissing": "Participant data missing",``` + +` "CoC7.ParticipantDataMissing": "Participant data missing",` + ##### CoC7.ParticipantDropHint -``` "CoC7.ParticipantDropHint": "You can drop and actor on this window or directly on a chase location.",``` + +` "CoC7.ParticipantDropHint": "You can drop and actor on this window or directly on a chase location.",` + ##### CoC7.ParticipantNotEnoughMovement -``` "CoC7.ParticipantNotEnoughMovement": "Particpant {assistantUuid} only has {actions} movement actions",``` + +` "CoC7.ParticipantNotEnoughMovement": "Particpant {assistantUuid} only has {actions} movement actions",` + ##### CoC7.ParticipantNotFound -``` "CoC7.ParticipantNotFound": "Cannot find participant",``` + +` "CoC7.ParticipantNotFound": "Cannot find participant",` + ##### CoC7.ParticipantUuidNotFound -``` "CoC7.ParticipantUuidNotFound": "Cannot find participant {participantUuid}",``` + +` "CoC7.ParticipantUuidNotFound": "Cannot find participant {participantUuid}",` + ##### CoC7.ParticipantsList -``` "CoC7.ParticipantsList": "Participants list",``` + +` "CoC7.ParticipantsList": "Participants list",` + ##### CoC7.PenaltyDice -``` "CoC7.PenaltyDice": "Penalty Dice",``` + +` "CoC7.PenaltyDice": "Penalty Dice",` + ##### CoC7.PenaltyDieSelfReason -``` "CoC7.PenaltyDieSelfReason": "Add 1 penalty die (for being prone, restrained...)",``` + +` "CoC7.PenaltyDieSelfReason": "Add 1 penalty die (for being prone, restrained...)",` + ##### CoC7.PickDirectory -``` "CoC7.PickDirectory": "Pick Directory",``` + +` "CoC7.PickDirectory": "Pick Directory",` + ##### CoC7.PlayerMovesToLocation -``` "CoC7.PlayerMovesToLocation": "PLayer is moving to the next location",``` + +` "CoC7.PlayerMovesToLocation": "PLayer is moving to the next location",` + ##### CoC7.Polish -``` "CoC7.Polish": "Polish",``` + +` "CoC7.Polish": "Polish",` + ##### CoC7.ReflectObstacleChanges -``` "CoC7.ReflectObstacleChanges": "Reflect changes to obstacle",``` + +` "CoC7.ReflectObstacleChanges": "Reflect changes to obstacle",` + ##### CoC7.RegularRollCard -``` "CoC7.RegularRollCard": "Regular roll card",``` + +` "CoC7.RegularRollCard": "Regular roll card",` + ##### CoC7.Remove -``` "CoC7.Remove": "Remove",``` + +` "CoC7.Remove": "Remove",` + ##### CoC7.RemoveBonusDie -``` "CoC7.RemoveBonusDie": "Remove bonus die",``` + +` "CoC7.RemoveBonusDie": "Remove bonus die",` + ##### CoC7.RemoveLocation -``` "CoC7.RemoveLocation": "Remove location",``` + +` "CoC7.RemoveLocation": "Remove location",` + ##### CoC7.RemoveObstacle -``` "CoC7.RemoveObstacle": "Destroy Obstacle",``` + +` "CoC7.RemoveObstacle": "Destroy Obstacle",` + ##### CoC7.Reset -``` "CoC7.Reset": "Reset",``` + +` "CoC7.Reset": "Reset",` + ##### CoC7.Restart -``` "CoC7.Restart": "Restart",``` + +` "CoC7.Restart": "Restart",` + ##### CoC7.RollDifficultyCriticalTitle -``` "CoC7.RollDifficultyCriticalTitle": "Critical difficulty",``` + +` "CoC7.RollDifficultyCriticalTitle": "Critical difficulty",` + ##### CoC7.RollDifficultyExtremeTitle -``` "CoC7.RollDifficultyExtremeTitle": "Extreme difficulty",``` + +` "CoC7.RollDifficultyExtremeTitle": "Extreme difficulty",` + ##### CoC7.RollDifficultyHardTitle -``` "CoC7.RollDifficultyHardTitle": "Hard difficulty",``` + +` "CoC7.RollDifficultyHardTitle": "Hard difficulty",` + ##### CoC7.RollDifficultyRegularTitle -``` "CoC7.RollDifficultyRegularTitle": "Regular difficulty",``` + +` "CoC7.RollDifficultyRegularTitle": "Regular difficulty",` + ##### CoC7.Sane -``` "CoC7.Sane": "Sane",``` + +` "CoC7.Sane": "Sane",` + ##### CoC7.SelectNewSkill -``` "CoC7.SelectNewSkill": "Select skill",``` + +` "CoC7.SelectNewSkill": "Select skill",` + ##### CoC7.Settings.DholeUpload.Directory.Hint -``` "CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.",``` + +` "CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.",` + ##### CoC7.Settings.DholeUpload.Directory.Name -``` "CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory",``` + +` "CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory",` + ##### CoC7.SkillXpGainDisabled -``` "CoC7.SkillXpGainDisabled": "XP Gain disabled.",``` + +` "CoC7.SkillXpGainDisabled": "XP Gain disabled.",` + ##### CoC7.SomethingInTheWay -``` "CoC7.SomethingInTheWay": "There is something in the way",``` + +` "CoC7.SomethingInTheWay": "There is something in the way",` + ##### CoC7.SpeedCheck -``` "CoC7.SpeedCheck": "Speed check",``` + +` "CoC7.SpeedCheck": "Speed check",` + ##### CoC7.StartingIndex -``` "CoC7.StartingIndex": "Starting index of fleeing actors",``` + +` "CoC7.StartingIndex": "Starting index of fleeing actors",` + ##### CoC7.StartingRange -``` "CoC7.StartingRange": "Starting locations advance",``` + +` "CoC7.StartingRange": "Starting locations advance",` + ##### CoC7.TextFieldInvalidJSON -``` "CoC7.TextFieldInvalidJSON": "Unable to parse the JSON, please try again",``` + +` "CoC7.TextFieldInvalidJSON": "Unable to parse the JSON, please try again",` + ##### CoC7.TooFast -``` "CoC7.TooFast": "Too fast",``` + +` "CoC7.TooFast": "Too fast",` + ##### CoC7.TooSlow -``` "CoC7.TooSlow": "Too slow",``` + +` "CoC7.TooSlow": "Too slow",` + ##### CoC7.ToolTipCombat -``` "CoC7.ToolTipCombat": "
    1. Left click roll check with options
    2. Shift + Left click Immediate regular difficulty roll
    1. Right click Combat opposed maneuver with options
    2. Shift + Right click Immediate combat opposed maneuver
    ",``` + +` "CoC7.ToolTipCombat": "
    1. Left click roll check with options
    2. Shift + Left click Immediate regular difficulty roll
    1. Right click Combat opposed maneuver with options
    2. Shift + Right click Immediate combat opposed maneuver
    ",` + ##### CoC7.ToolTipSanity -``` "CoC7.ToolTipSanity": "
    1. Left click roll check with options
    2. Alt/Option + Left click roll sanity loss with options
    3. Shift + Left click Immediate regular difficulty roll
    4. Shift + Alt/Option + Left click roll sanity loss without dice pool options
    1. Right click Opposed check with options
    2. Shift + Right click Immediate opposed check
    1. Alt/Option + Right click Combined check with options
    2. Shift + Alt/Option + Right click Immediate combined check
    ",``` + +` "CoC7.ToolTipSanity": "
    1. Left click roll check with options
    2. Alt/Option + Left click roll sanity loss with options
    3. Shift + Left click Immediate regular difficulty roll
    4. Shift + Alt/Option + Left click roll sanity loss without dice pool options
    1. Right click Opposed check with options
    2. Shift + Right click Immediate opposed check
    1. Alt/Option + Right click Combined check with options
    2. Shift + Alt/Option + Right click Immediate combined check
    ",` + ##### CoC7.TryToBreak -``` "CoC7.TryToBreak": "You try to break down that barrier.",``` + +` "CoC7.TryToBreak": "You try to break down that barrier.",` + ##### CoC7.TryToGetPastBarriers -``` "CoC7.TryToGetPastBarriers": "You try to get past that barrier.",``` + +` "CoC7.TryToGetPastBarriers": "You try to get past that barrier.",` + ##### CoC7.TryToNegotiateHazard -``` "CoC7.TryToNegotiateHazard": "You try to negotiate that hazard.",``` + +` "CoC7.TryToNegotiateHazard": "You try to negotiate that hazard.",` + ##### CoC7.UnableToUploadDholeImage -``` "CoC7.UnableToUploadDholeImage": "You do not have permission to upload images, if you import the default avatar will be used.",``` + +` "CoC7.UnableToUploadDholeImage": "You do not have permission to upload images, if you import the default avatar will be used.",` + ##### CoC7.UnarmedWeaponName -``` "CoC7.UnarmedWeaponName": "Unarmed",``` + +` "CoC7.UnarmedWeaponName": "Unarmed",` + ##### CoC7.Update -``` "CoC7.Update": "Update",``` + +` "CoC7.Update": "Update",` + ##### CoC7.UpgradeSuccessWithLuck -``` "CoC7.UpgradeSuccessWithLuck": "Upgrade to {{difficultyName}} success for {{luckToSpend}} luck.",``` + +` "CoC7.UpgradeSuccessWithLuck": "Upgrade to {{difficultyName}} success for {{luckToSpend}} luck.",` + ##### CoC7.VehicleChase -``` "CoC7.VehicleChase": "Chase can include vehicle (NOT IMPLEMENTED)",``` + +` "CoC7.VehicleChase": "Chase can include vehicle (NOT IMPLEMENTED)",` + ##### CoC7.WaitForPlayerInput -``` "CoC7.WaitForPlayerInput": "Wait for player's input",``` + +` "CoC7.WaitForPlayerInput": "Wait for player's input",` + ##### CoC7.WeaponSkillMain -``` "CoC7.WeaponSkillMain": "Main skill",``` + +` "CoC7.WeaponSkillMain": "Main skill",` + ##### CoC7.YouLostTime -``` "CoC7.YouLostTime": "You lost time in your attempt.",``` + +` "CoC7.YouLostTime": "You lost time in your attempt.",` + ##### CoC7.YouTakeNoDamage -``` "CoC7.YouTakeNoDamage": "You did not suffer any injury.",``` + +` "CoC7.YouTakeNoDamage": "You did not suffer any injury.",` + ##### CoC7.YouTakeSomeDamage -``` "CoC7.YouTakeSomeDamage": "You take {amount} points of damage.",``` + +` "CoC7.YouTakeSomeDamage": "You take {amount} points of damage.",` + ##### CoC7.combatCard.automaticSuccess -``` "CoC7.combatCard.automaticSuccess": "Automatic Success",``` + +` "CoC7.combatCard.automaticSuccess": "Automatic Success",` + ##### CoC7.days -``` "CoC7.days": "days(s)",``` + +` "CoC7.days": "days(s)",` + ##### CoC7.months -``` "CoC7.months": "months(s)",``` + +` "CoC7.months": "months(s)",` + ##### CoC7.rangeCombatCard.SurprisedTargetTitle -``` "CoC7.rangeCombatCard.SurprisedTargetTitle": "1 bonus die for surprised target",``` + +` "CoC7.rangeCombatCard.SurprisedTargetTitle": "1 bonus die for surprised target",` + ##### SETTINGS.ChaseShowTokenMovement -``` "SETTINGS.ChaseShowTokenMovement": "Show token movement.",``` + +` "SETTINGS.ChaseShowTokenMovement": "Show token movement.",` + ##### SETTINGS.ChaseShowTokenMovementHint -``` "SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.",``` + +` "SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.",` + ##### SETTINGS.DefaultDifficulty -``` "SETTINGS.DefaultDifficulty": "Default check difficulty",``` + +` "SETTINGS.DefaultDifficulty": "Default check difficulty",` + ##### SETTINGS.TitleChaseSettings -``` "SETTINGS.TitleChaseSettings": "Chase Settings",``` + +` "SETTINGS.TitleChaseSettings": "Chase Settings",` From bb6cb162e7c0cd7b1cca09e4249ec641ee4646cc Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 31 Jul 2022 23:40:03 +0100 Subject: [PATCH 665/726] Update importer to use "Look for skills/spells/weapons in:" dropdown for skills, items, and weapons --- module/apps/actor-importer-dialog.js | 11 +- module/apps/actor-importer.js | 4 +- module/apps/dholehouse_importer.js | 490 ++++++++++++++------------- templates/apps/actor-importer.html | 24 +- 4 files changed, 280 insertions(+), 249 deletions(-) diff --git a/module/apps/actor-importer-dialog.js b/module/apps/actor-importer-dialog.js index 75d4d21d..4f3577cd 100644 --- a/module/apps/actor-importer-dialog.js +++ b/module/apps/actor-importer-dialog.js @@ -133,7 +133,7 @@ export class CoC7ActorImporterDialog extends FormApplication { characterName.textContent = personalDetails.Name portraitImage.src = 'data:image/png;base64,' + personalDetails.Portrait preview.style.display = 'block' - $('.dialog.actor-importer').height('500px') + $('.dialog.actor-importer').height('auto') } fileReader.readAsText(file) } @@ -154,12 +154,15 @@ export class CoC7ActorImporterDialog extends FormApplication { return ui.notifications.info(game.i18n.localize('CoC7.Copied')) }) } else if (id === 'import') { + const app = $(event.currentTarget).closest('div.dialog.actor-importer') + app.hide() const form = $(event.currentTarget).closest('form') const inputs = CoC7ActorImporterDialog.getInputs(form) if (inputs.entity === 'dholehouse' && this.characterJSON) { const character = await CoC7DholeHouseActorImporter.createNPCFromDholeHouse( - this.characterJSON + this.characterJSON, + { source: inputs.source } ) if (character !== false) { if (CONFIG.debug.CoC7Importer) { @@ -173,10 +176,14 @@ export class CoC7ActorImporterDialog extends FormApplication { ) await character.sheet.render(true) this.close() + } else { + app.show() } } else if (inputs.text && inputs.text !== '') { CoC7ActorImporterDialog.importActor(inputs) this.close() + } else { + app.show() } } } diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index f18c6827..ac2fea8b 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -810,7 +810,7 @@ export class CoC7ActorImporter { name = name.toLowerCase() let existing = null for (let o = 0, oM = this.itemLocations.length; o < oM; o++) { - switch (this.itemLocations.substring(o, 1)) { + switch (this.itemLocations.substring(o, o + 1)) { case 'i': existing = game.items.find( item => @@ -827,7 +827,7 @@ export class CoC7ActorImporter { case 's': for (const pack of game.packs) { if ( - pack.metadata.entity === 'Item' && + pack.metadata.type === 'Item' && ((this.itemLocations[o] === 'w' && pack.metadata.package === 'world') || (this.itemLocations[o] === 'S' && diff --git a/module/apps/dholehouse_importer.js b/module/apps/dholehouse_importer.js index 295f5333..c78e7cf2 100644 --- a/module/apps/dholehouse_importer.js +++ b/module/apps/dholehouse_importer.js @@ -1,6 +1,6 @@ -/* global Actor, game, ui, fetch */ +/* global Actor, CONFIG, duplicate, game, ui, fetch */ +import { CoCActor } from '../actors/actor.js' import { CoC7DirectoryPicker } from '../scripts/coc7-directory-picker.js' -import { CoC7Item } from '../items/item.js' import { CoC7Utilities } from '../utilities.js' /** @@ -13,112 +13,38 @@ export class CoC7DholeHouseActorImporter { * @returns HTML with the formatted backstory */ static getBackstory (backstoryJSON) { - let backstory = '

    Backstory

    \n' - const biography = [] - if (backstoryJSON.description !== null) { - backstory += `

    Description

    -
    - ${backstoryJSON.description} -
    \n` - biography.push({ - title: 'Description', - value: backstoryJSON.description - }) + const sections = [ + ['description', 'Description'], + ['traits', 'Traits'], + ['ideology', 'Ideology'], + ['injurues', 'Injuries'], + ['people', 'People'], + ['phobias', 'Phobias'], + ['locations', 'Locations'], + ['tomes', 'Tomes'], + ['possessions', 'Possessions'], + ['encounters', 'Encounters'] + ] + const backstory = { + block: [], + sections: [] } - if (backstoryJSON.traits !== null) { - backstory += `

    Traits

    -
    - ${backstoryJSON.traits} -
    \n` - biography.push({ - title: 'Traits', - value: backstoryJSON.traits - }) - } - if (backstoryJSON.ideology !== null) { - backstory += `

    Ideology

    -
    - ${backstoryJSON.ideology} -
    \n` - biography.push({ - title: 'Ideology', - value: backstoryJSON.ideology - }) - } - if (backstoryJSON.injurues !== null) { - backstory += `

    Injuries

    -
    - ${backstoryJSON.injurues} -
    \n` - biography.push({ - title: 'Injuries', - value: backstoryJSON.injurues - }) - } - if (backstoryJSON.people !== null) { - backstory += `

    People

    -
    - ${backstoryJSON.people} -
    \n` - biography.push({ - title: 'People', - value: backstoryJSON.people - }) - } - if (backstoryJSON.phobias !== null) { - backstory += `

    Phobias

    -
    - ${backstoryJSON.phobias} -
    \n` - biography.push({ - title: 'Phobias', - value: backstoryJSON.phobias - }) - } - if (backstoryJSON.locations !== null) { - backstory += `

    Locations

    -
    - ${backstoryJSON.locations} -
    \n` - biography.push({ - title: 'Locations', - value: backstoryJSON.locations - }) - } - if (backstoryJSON.tomes !== null) { - backstory += `

    Tomes

    -
    - ${backstoryJSON.tomes} -
    \n` - biography.push({ - title: 'Tomes', - value: backstoryJSON.tomes - }) - } - if (backstoryJSON.possessions !== null) { - backstory += `

    Possessions

    -
    - ${backstoryJSON.possessions} -
    \n` - biography.push({ - title: 'Possessions', - value: backstoryJSON.possessions - }) - } - if (backstoryJSON.encounters !== null) { - backstory += `

    Encounters

    -
    - ${backstoryJSON.encounters} -
    \n` - biography.push({ - title: 'Encounters', - value: backstoryJSON.encounters - }) - } - return { - backstory: backstory, - biography: biography + for (const section of sections) { + if (backstoryJSON[section[0]] !== null) { + backstory.block.push( + `

    ${section[1]}

    \n
    \n${ + backstoryJSON[section[0]] + }\n
    ` + ) + backstory.sections.push({ + title: section[1], + value: backstoryJSON[section[0]] + }) + } } + backstory.block = + '

    Backstory

    \n' + backstory.block.join('\n', backstory.block) + return backstory } /** @@ -126,8 +52,10 @@ export class CoC7DholeHouseActorImporter { * @param {JSON} dholeHouseData DholeHouseJSON * @returns */ - static convertDholeHouseCharacterData (dholeHouseData) { - console.log(dholeHouseData) + static async convertDholeHouseCharacterData (dholeHouseData, options) { + if (CONFIG.debug.CoC7Importer) { + console.log('Source:', dholeHouseData) + } dholeHouseData = dholeHouseData.Investigator const backstories = CoC7DholeHouseActorImporter.getBackstory( dholeHouseData.Backstory @@ -162,11 +90,11 @@ export class CoC7DholeHouseActorImporter { value: parseInt(dholeHouseData.Characteristics.Luck, 10) }, mov: { - value: dholeHouseData.Characteristics.Move, - max: dholeHouseData.Characteristics.Move + value: parseInt(dholeHouseData.Characteristics.Move, 10), + max: parseInt(dholeHouseData.Characteristics.Move, 10) }, db: { value: dholeHouseData.Characteristics.DamageBonus }, - build: { value: dholeHouseData.Characteristics.Build } + build: { value: parseInt(dholeHouseData.Characteristics.Build, 10) } }, infos: { occupation: dholeHouseData.PersonalDetails.Occupation, @@ -175,8 +103,8 @@ export class CoC7DholeHouseActorImporter { residence: dholeHouseData.PersonalDetails.Residence, birthplace: dholeHouseData.PersonalDetails.Birthplace }, - backstory: backstories.backstory, - biography: backstories.biography, + backstory: backstories.block, + biography: backstories.sections, description: { keeper: game.i18n.localize('CoC7.DholeHouseActorImporterSource') }, @@ -184,24 +112,102 @@ export class CoC7DholeHouseActorImporter { max: Math.floor(dholeHouseData.Characteristics.Sanity / 5) } }, - skills: CoC7DholeHouseActorImporter.extractSkills( - dholeHouseData.Skills.Skill ?? [] + skills: await CoC7DholeHouseActorImporter.extractSkills( + dholeHouseData.Skills.Skill ?? [], + options ), - possesions: CoC7DholeHouseActorImporter.extractPossessions( - dholeHouseData.Possessions?.item ?? [] + possesions: await CoC7DholeHouseActorImporter.extractPossessions( + dholeHouseData.Possessions?.item ?? [], + options ) } return cData } - static extractSkills (dholeHousekills) { + static makeSkillName (name, specialization) { + if (specialization === 'None') { + specialization = 'Any' + } + if (name === 'Language (Other)' || name === 'Language (Own)') { + name = 'Language' + } else if (name === 'Operate Heavy Machine') { + name = 'Operate Heavy Machinery' + } else if (name === 'Throw' && specialization === '') { + name = 'Fighting' + specialization = 'Throw' + } + return { + skillName: specialization === '' ? name : specialization, + specialization: specialization === '' ? '' : name, + name: name + (specialization === '' ? '' : ' (' + specialization + ')') + } + } + + /** + * guessItem, try and find the item in the locations defined in source i = Item Directory, w = World Compendiums, m = Module Compendiums, s = System Compendiums + * @param {String} type Item type to find + * @param {String} name Name of item to find + * @param {Object} combat null (default). If boolean combat property of skill must match + * @param {Object} source '' (default). Check order + * @returns {Object} formatted Actor data Item or null + */ + static async guessItem (type, name, { combat = null, source = '' } = {}) { + let existing = null + name = name.toLowerCase() + for (let o = 0, oM = source.length; o < oM; o++) { + switch (source.substring(o, o + 1)) { + case 'i': + existing = game.items.find( + item => + item.data.type === type && + item.data.name.toLowerCase() === name && + (combat === null || item.data.properties.combat === combat) + ) + if (existing) { + return existing + } + break + case 'w': + case 'm': + case 's': + for (const pack of game.packs) { + if ( + pack.metadata.type === 'Item' && + ((source[o] === 'w' && pack.metadata.package === 'world') || + (source[o] === 'S' && pack.metadata.package === 'CoC7') || + (source[o] === 's' && + !['world', 'CoC7'].includes(pack.metadata.package))) + ) { + const documents = await pack.getDocuments() + existing = documents.find( + item => + item.data.type === type && + item.data.name.toLowerCase() === name && + (combat === null || item.data.properties.combat === combat) + ) + if (existing) { + return existing + } + } + } + break + } + } + if (type === 'skill') { + const match = name.match(/^(.+ \()(?!any).+(\))$/) + if (match) { + return await CoC7DholeHouseActorImporter.guessItem( + type, + match[1] + 'any' + match[2], + { combat: combat, source: source } + ) + } + } + } + + static async extractSkills (dholeHouseskills, options) { const skills = [] - for (const skill of dholeHousekills) { - let name = skill.name - let specialization = '' - let isSpecial = false - let isOccupational = false - const value = skill.value + for (const skill of dholeHouseskills) { if ( skill.subskill === 'None' && skill.value === '1' && @@ -210,48 +216,55 @@ export class CoC7DholeHouseActorImporter { ) { continue } - if (skill.subskill && skill.subskill !== 'None') { - name = skill.subskill - specialization = skill.name - isSpecial = true - } - if (skill.occupation) { - isOccupational = true - } - console.log( - 'skill name: ', - name, - ' skill value: ', - value, - ' specialization: ', - specialization + const parts = CoC7DholeHouseActorImporter.makeSkillName( + skill.name, + skill.subskill ?? '' + ) + const existing = await CoC7DholeHouseActorImporter.guessItem( + 'skill', + parts.name, + { + source: options.source + } ) - const skillName = name - if (['Language (Other)', 'Language (Own)'].includes(specialization)) { - specialization = 'Language' + let cloned = null + if (typeof existing !== 'undefined') { + cloned = duplicate(existing.toObject()) + cloned.name = parts.name + cloned.data.skillName = parts.skillName + cloned.data.specialization = parts.specialization + } else { + cloned = CoCActor.emptySkill( + parts.skillName, + parseInt(skill.value ?? 0, 10), + { + specialization: + parts.specialization === '' ? false : parts.specialization + } + ) + cloned.data.properties = cloned.data.properties ?? {} + if (parts.specialization === 'Fighting') { + cloned.data.properties.fighting = true + cloned.data.properties.combat = true + cloned.data.properties.push = false + } else if (parts.specialization === 'Firearms') { + cloned.data.properties.firearm = true + cloned.data.properties.combat = true + cloned.data.properties.push = false + } else if (parts.skillName === 'Dodge') { + cloned.data.properties.push = false + } } - if (isSpecial) { - const parts = CoC7Item.getNamePartsSpec(skillName, specialization) - name = parts.name + if (cloned.data.skillName === 'Any') { + cloned.name = cloned.name.replace(' (Any)', ' (None)') + cloned.data.skillName = 'None' } - skills.push({ - type: 'skill', - name: name, - data: { - skillName: skillName, - specialization: specialization, - properties: { - special: isSpecial, - fighting: specialization === 'Fighting', - firearm: specialization === 'Firearms', - combat: - specialization === 'Fighting' || specialization === 'Firearms' - }, - flags: { occupation: isOccupational }, - base: Number(value), - value: Number(value) - } - }) + cloned.data.base = parseInt(skill.value ?? 0, 10) + cloned.data.value = parseInt(skill.value ?? 0, 10) + cloned.data.flags = cloned.data.flags ?? {} + cloned.data.flags.occupation = + skill.occupation === true || skill.occupation === 'true' + skills.push(cloned) } return skills } @@ -268,24 +281,31 @@ export class CoC7DholeHouseActorImporter { return characterSkill } - static extractPossessions (dholehousePossessions) { + static async extractPossessions (dholehousePossessions, options) { const items = [] for (const item of dholehousePossessions) { - items.push({ - name: item.description, - type: 'item', - description: { - value: item.description - }, - quantity: 1, - weight: 0, - attributes: {} - }) + const existing = await CoC7DholeHouseActorImporter.guessItem( + 'item', + item.description, + { + source: options.source + } + ) + let cloned = null + if (typeof existing !== 'undefined') { + cloned = duplicate(existing.toObject()) + } else { + cloned = { + name: item.description, + type: 'item' + } + } + items.push(cloned) } return items } - static extractWeapons (dholehouseWeapons, character) { + static async extractWeapons (dholehouseWeapons, character, options) { const weapons = [] if (!Array.isArray(dholehouseWeapons)) { dholehouseWeapons = [dholehouseWeapons] @@ -297,59 +317,56 @@ export class CoC7DholeHouseActorImporter { ) const damage = weapon.damage.replace(/\+DB/i, '') const addb = damage !== weapon.damage - weapons.push({ - name: weapon.name, - type: 'weapon', - data: { - description: { - value: weapon.Name - }, - wpnType: '', - skill: { - main: { - name: skill?.name ?? '', - id: skill?.id ?? '' - }, - alternativ: { - name: '', - id: '' - } - }, - range: { - normal: { - value: 0, - units: '', - damage: damage + const existing = await CoC7DholeHouseActorImporter.guessItem( + 'weapon', + weapon.name, + { + source: options.source + } + ) + let cloned = null + if (typeof existing !== 'undefined') { + cloned = duplicate(existing.toObject()) + cloned.data.skill.main.name = skill?.name ?? '' + cloned.data.skill.main.id = skill?.id ?? '' + cloned.data.range = cloned.data.range ?? {} + cloned.data.range.normal = cloned.data.range.normal ?? {} + cloned.data.range.normal.damage = damage + cloned.data.ammo = weapon.ammo + cloned.data.malfunction = weapon.malf + cloned.data.properties = cloned.data.properties ?? {} + cloned.data.properties.melee = + skill?.data.data.properties?.fighting ?? false + cloned.data.properties.rngd = + skill?.data.data.properties?.firearm ?? false + cloned.data.properties.addb = addb + } else { + cloned = { + name: weapon.name, + type: 'weapon', + data: { + skill: { + main: { + name: skill?.name ?? '', + id: skill?.id ?? '' + } }, - long: { - value: 0, - units: '', - damage: '' + range: { + normal: { + damage: damage + } }, - extreme: { - value: 0, - units: '', - damage: '' + ammo: weapon.ammo, + malfunction: weapon.malf, + properties: { + melee: skill?.data.data.properties?.fighting ?? false, + rngd: skill?.data.data.properties?.firearm ?? false, + addb: addb } - }, - usesPerRound: { - normal: 1, - max: null, - burst: null - }, - bullets: null, - ammo: weapon.ammo, - malfunction: weapon.malf, - blastRadius: null, - properties: { - melee: skill?.data.data.properties?.fighting ?? false, - rngd: skill?.data.data.properties?.firearm ?? false, - addb: addb - }, - eras: {}, - price: {} + } } - }) + } + weapons.push(cloned) } return weapons } @@ -366,7 +383,7 @@ export class CoC7DholeHouseActorImporter { return filePath } - static async createNPCFromDholeHouse (dholeHouseCharacterData) { + static async createNPCFromDholeHouse (dholeHouseCharacterData, options) { if (!game.user?.can('FILES_UPLOAD')) { ui.notifications.error( game.i18n.localize('CoC7.ActorImporterUploadError') @@ -374,10 +391,13 @@ export class CoC7DholeHouseActorImporter { return false } const characterData = - CoC7DholeHouseActorImporter.convertDholeHouseCharacterData( - dholeHouseCharacterData + await CoC7DholeHouseActorImporter.convertDholeHouseCharacterData( + dholeHouseCharacterData, + options ) - console.log(characterData) + if (CONFIG.debug.CoC7Importer) { + console.log('Character Data:', characterData) + } const importedCharactersFolder = await CoC7Utilities.createImportCharactersFolderIfNotExists() if (!CoC7DirectoryPicker.createDefaultDirectory()) { @@ -405,19 +425,23 @@ export class CoC7DholeHouseActorImporter { }) } } - - console.log(characterData.items) + if (CONFIG.debug.CoC7Importer) { + console.log('Items: ', characterData.items) + } await npc.createEmbeddedDocuments('Item', characterData.skills, { renderSheet: false }) await npc.createEmbeddedDocuments('Item', characterData.possesions, { renderSheet: false }) - const weapons = CoC7DholeHouseActorImporter.extractWeapons( + const weapons = await CoC7DholeHouseActorImporter.extractWeapons( dholeHouseCharacterData.Investigator.Weapons?.weapon ?? [], - npc + npc, + options ) - console.log('weapons', weapons) + if (CONFIG.debug.CoC7Importer) { + console.log('Weapons: ', weapons) + } await npc.createEmbeddedDocuments('Item', weapons, { renderSheet: false }) diff --git a/templates/apps/actor-importer.html b/templates/apps/actor-importer.html index 26c0c5ea..b0cfc9a9 100644 --- a/templates/apps/actor-importer.html +++ b/templates/apps/actor-importer.html @@ -38,20 +38,20 @@

    {{localize 'CoC7.ActorImporter'}}

    {{/each}}
    -
    - - -
    {{/if}} +
    + + +
    {{#if (eq importType "dholehouse")}} -
    +
    From c41e775fb6b90a3c00666f1f3935e9cb3322d006 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 1 Aug 2022 09:21:49 +0100 Subject: [PATCH 666/726] Move guess item for actor import into CoC7Utilities --- module/apps/actor-importer.js | 100 +++++++++++------------------ module/apps/dholehouse_importer.js | 100 +++++------------------------ module/utilities.js | 67 +++++++++++++++++++ 3 files changed, 119 insertions(+), 148 deletions(-) diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index ac2fea8b..4136b354 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -799,59 +799,6 @@ export class CoC7ActorImporter { return data } - /** - * guessItem, try and find the item in the locations defined in this.itemLocations i = Item Directory, w = World Compendiums, m = Module Compendiums, s = System Compendiums - * @param {String} type Item type to find - * @param {String} name Name of item to find - * @param {Object} combat null (default). If boolean combat property of skill must match - * @returns {Object} formatted Actor data Item or null - */ - async guessItem (type, name, { combat = null } = {}) { - name = name.toLowerCase() - let existing = null - for (let o = 0, oM = this.itemLocations.length; o < oM; o++) { - switch (this.itemLocations.substring(o, o + 1)) { - case 'i': - existing = game.items.find( - item => - item.data.type === type && - item.data.name.toLowerCase() === name && - (combat === null || item.data.properties.combat === combat) - ) - if (existing) { - return existing - } - break - case 'w': - case 'm': - case 's': - for (const pack of game.packs) { - if ( - pack.metadata.type === 'Item' && - ((this.itemLocations[o] === 'w' && - pack.metadata.package === 'world') || - (this.itemLocations[o] === 'S' && - pack.metadata.package === 'CoC7') || - (this.itemLocations[o] === 's' && - !['world', 'CoC7'].includes(pack.metadata.package))) - ) { - const documents = await pack.getDocuments() - existing = documents.find( - item => - item.data.type === type && - item.data.name.toLowerCase() === name && - (combat === null || item.data.properties.combat === combat) - ) - if (existing) { - return existing - } - } - } - break - } - } - } - /** * itemsData, convert parseCharacter data into Actor item data * @param {Object} pc object with the data extracted from the character as returned from `parseCharacter` @@ -876,7 +823,9 @@ export class CoC7ActorImporter { // Skills if (typeof pc.skills !== 'undefined') { for (const skill of pc.skills) { - const existing = await this.guessItem('skill', skill.name) + const existing = await CoC7Utilities.guessItem('skill', skill.name, { + source: this.itemLocations + }) if (typeof existing !== 'undefined') { const cloned = existing.toObject() cloned.data.base = skill.value @@ -896,7 +845,9 @@ export class CoC7ActorImporter { // Languages if (typeof pc.languages !== 'undefined') { for (const skill of pc.languages) { - const existing = await this.guessItem('skill', skill.name) + const existing = await CoC7Utilities.guessItem('skill', skill.name, { + source: this.itemLocations + }) if (typeof existing !== 'undefined') { const cloned = existing.toObject() cloned.data.base = skill.value @@ -914,7 +865,9 @@ export class CoC7ActorImporter { // Spells if (typeof pc.spells !== 'undefined') { for (const name of pc.spells) { - const existing = await this.guessItem('spell', name) + const existing = await CoC7Utilities.guessItem('spell', name, { + source: this.itemLocations + }) if (typeof existing !== 'undefined') { const cloned = existing.toObject() items.push(duplicate(cloned)) @@ -932,33 +885,54 @@ export class CoC7ActorImporter { async weaponSkill (weapon) { let skill = null if (this.getRegEx('handgun').exec(weapon.name)) { - skill = await this.guessItem('skill', 'Handgun', { combat: true }) + skill = await CoC7Utilities.guessItem('skill', 'Handgun', { + combat: true, + source: this.itemLocations + }) if (CONFIG.debug.CoC7Importer) { console.debug(`${weapon.name} uses Handgun skill: ${skill}`) } } else if (this.getRegEx('rifle').exec(weapon.name)) { - skill = await this.guessItem('skill', 'Rifle/Shotgun', { combat: true }) + skill = await CoC7Utilities.guessItem('skill', 'Rifle/Shotgun', { + combat: true, + source: this.itemLocations + }) if (!skill) { - skill = await this.guessItem('skill', 'Rifle', { combat: true }) + skill = await CoC7Utilities.guessItem('skill', 'Rifle', { + combat: true, + source: this.itemLocations + }) if (!skill) { - skill = await this.guessItem('skill', 'Shotgun', { combat: true }) + skill = await CoC7Utilities.guessItem('skill', 'Shotgun', { + combat: true, + source: this.itemLocations + }) } } if (CONFIG.debug.CoC7Importer) { console.debug(`${weapon.name} uses Rifle skill: ${skill}`) } } else if (this.getRegEx('smb').exec(weapon.name)) { - skill = await this.guessItem('skill', 'Submachine Gun', { combat: true }) + skill = await CoC7Utilities.guessItem('skill', 'Submachine Gun', { + combat: true, + source: this.itemLocations + }) if (CONFIG.debug.CoC7Importer) { console.debug(`${weapon.name} uses Submachine Gun skill: ${skill}`) } } else if (this.getRegEx('machineGun').exec(weapon.name)) { - skill = await this.guessItem('skill', 'Machine Gun', { combat: true }) + skill = await CoC7Utilities.guessItem('skill', 'Machine Gun', { + combat: true, + source: this.itemLocations + }) if (CONFIG.debug.CoC7Importer) { console.debug(`${weapon.name} uses Machine Gun skill: ${skill}`) } } else if (this.getRegEx('launched').exec(weapon.name)) { - skill = await this.guessItem('skill', 'Launch', { combat: true }) + skill = await CoC7Utilities.guessItem('skill', 'Launch', { + combat: true, + source: this.itemLocations + }) if (CONFIG.debug.CoC7Importer) { console.debug(`${weapon.name} uses Launch skill: ${skill}`) } diff --git a/module/apps/dholehouse_importer.js b/module/apps/dholehouse_importer.js index c78e7cf2..f533c590 100644 --- a/module/apps/dholehouse_importer.js +++ b/module/apps/dholehouse_importer.js @@ -17,7 +17,7 @@ export class CoC7DholeHouseActorImporter { ['description', 'Description'], ['traits', 'Traits'], ['ideology', 'Ideology'], - ['injurues', 'Injuries'], + ['injurues', 'Injuries', 'injuries'], ['people', 'People'], ['phobias', 'Phobias'], ['locations', 'Locations'], @@ -31,8 +31,11 @@ export class CoC7DholeHouseActorImporter { } for (const section of sections) { if (backstoryJSON[section[0]] !== null) { + if (typeof section[2] === 'undefined' || section[2] === '') { + section[2] = section[0] + } backstory.block.push( - `

    ${section[1]}

    \n
    \n${ + `

    ${section[1]}

    \n
    \n${ backstoryJSON[section[0]] }\n
    ` ) @@ -143,68 +146,6 @@ export class CoC7DholeHouseActorImporter { } } - /** - * guessItem, try and find the item in the locations defined in source i = Item Directory, w = World Compendiums, m = Module Compendiums, s = System Compendiums - * @param {String} type Item type to find - * @param {String} name Name of item to find - * @param {Object} combat null (default). If boolean combat property of skill must match - * @param {Object} source '' (default). Check order - * @returns {Object} formatted Actor data Item or null - */ - static async guessItem (type, name, { combat = null, source = '' } = {}) { - let existing = null - name = name.toLowerCase() - for (let o = 0, oM = source.length; o < oM; o++) { - switch (source.substring(o, o + 1)) { - case 'i': - existing = game.items.find( - item => - item.data.type === type && - item.data.name.toLowerCase() === name && - (combat === null || item.data.properties.combat === combat) - ) - if (existing) { - return existing - } - break - case 'w': - case 'm': - case 's': - for (const pack of game.packs) { - if ( - pack.metadata.type === 'Item' && - ((source[o] === 'w' && pack.metadata.package === 'world') || - (source[o] === 'S' && pack.metadata.package === 'CoC7') || - (source[o] === 's' && - !['world', 'CoC7'].includes(pack.metadata.package))) - ) { - const documents = await pack.getDocuments() - existing = documents.find( - item => - item.data.type === type && - item.data.name.toLowerCase() === name && - (combat === null || item.data.properties.combat === combat) - ) - if (existing) { - return existing - } - } - } - break - } - } - if (type === 'skill') { - const match = name.match(/^(.+ \()(?!any).+(\))$/) - if (match) { - return await CoC7DholeHouseActorImporter.guessItem( - type, - match[1] + 'any' + match[2], - { combat: combat, source: source } - ) - } - } - } - static async extractSkills (dholeHouseskills, options) { const skills = [] for (const skill of dholeHouseskills) { @@ -220,13 +161,10 @@ export class CoC7DholeHouseActorImporter { skill.name, skill.subskill ?? '' ) - const existing = await CoC7DholeHouseActorImporter.guessItem( - 'skill', - parts.name, - { - source: options.source - } - ) + const existing = await CoC7Utilities.guessItem('skill', parts.name, { + source: options.source, + fallbackAny: true + }) let cloned = null if (typeof existing !== 'undefined') { cloned = duplicate(existing.toObject()) @@ -284,13 +222,9 @@ export class CoC7DholeHouseActorImporter { static async extractPossessions (dholehousePossessions, options) { const items = [] for (const item of dholehousePossessions) { - const existing = await CoC7DholeHouseActorImporter.guessItem( - 'item', - item.description, - { - source: options.source - } - ) + const existing = await CoC7Utilities.guessItem('item', item.description, { + source: options.source + }) let cloned = null if (typeof existing !== 'undefined') { cloned = duplicate(existing.toObject()) @@ -317,13 +251,9 @@ export class CoC7DholeHouseActorImporter { ) const damage = weapon.damage.replace(/\+DB/i, '') const addb = damage !== weapon.damage - const existing = await CoC7DholeHouseActorImporter.guessItem( - 'weapon', - weapon.name, - { - source: options.source - } - ) + const existing = await CoC7Utilities.guessItem('weapon', weapon.name, { + source: options.source + }) let cloned = null if (typeof existing !== 'undefined') { cloned = duplicate(existing.toObject()) diff --git a/module/utilities.js b/module/utilities.js index c9d05866..e41247dd 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -868,4 +868,71 @@ export class CoC7Utilities { } return importedCharactersFolder } + + /** + * guessItem, try and find the item in the locations defined in ${source} i = Item Directory, w = World Compendiums, m = Module Compendiums, s = System Compendiums + * @param {String} type Item type to find + * @param {String} name Name of item to find + * @param {Object} combat null (default). If boolean combat property of skill must match + * @param {Object} source '' (default). Check order + * @param {Object} fallbackAny false (default). Should any specialization that isn't found try using (Any) items + * @returns {Object} formatted Actor data Item or null + */ + static async guessItem ( + type, + name, + { combat = null, source = '', fallbackAny = false } = {} + ) { + let existing = null + name = name.toLowerCase() + for (let o = 0, oM = source.length; o < oM; o++) { + switch (source.substring(o, o + 1)) { + case 'i': + existing = game.items.find( + item => + item.data.type === type && + item.data.name.toLowerCase() === name && + (combat === null || item.data.properties.combat === combat) + ) + if (existing) { + return existing + } + break + case 'w': + case 'm': + case 's': + for (const pack of game.packs) { + if ( + pack.metadata.type === 'Item' && + ((source[o] === 'w' && pack.metadata.package === 'world') || + (source[o] === 'S' && pack.metadata.package === 'CoC7') || + (source[o] === 's' && + !['world', 'CoC7'].includes(pack.metadata.package))) + ) { + const documents = await pack.getDocuments() + existing = documents.find( + item => + item.data.type === type && + item.data.name.toLowerCase() === name && + (combat === null || item.data.properties.combat === combat) + ) + if (existing) { + return existing + } + } + } + break + } + } + if (fallbackAny && type === 'skill') { + const match = name.match(/^(.+ \()(?!any).+(\))$/) + if (match) { + return await CoC7Utilities.guessItem( + type, + match[1] + 'any' + match[2], + { combat: combat, source: source } + ) + } + } + } } From 918936406c89c71e3c1a14b98eac0c7c7cd70fe5 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:26:17 +0200 Subject: [PATCH 667/726] Switch settings from settings menu --- module/dice.js | 4 ++-- module/menu.js | 4 ++-- module/scripts/register-settings.js | 10 +++++++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/module/dice.js b/module/dice.js index 0a7916f3..0a5cad53 100644 --- a/module/dice.js +++ b/module/dice.js @@ -11,9 +11,9 @@ export class CoC7Dice { } } let roll - if (game.CoC7.dev.dice.alwaysCrit && game.settings.get('CoC7', 'debugmode')) { + if (game.CoC7.dev.dice.alwaysCrit && game.settings.get('CoC7', 'hiddendebugmenu')) { roll = Roll.fromData(CoC7Dice.crit01) - } else if (game.CoC7.dev.dice.alwaysFumble && game.settings.get('CoC7', 'debugmode')) { + } else if (game.CoC7.dev.dice.alwaysFumble && game.settings.get('CoC7', 'hiddendebugmenu')) { roll = Roll.fromData(CoC7Dice.fumble99) } else{ diff --git a/module/menu.js b/module/menu.js index d19002cd..abea01ca 100644 --- a/module/menu.js +++ b/module/menu.js @@ -30,7 +30,7 @@ export class CoC7Menu { static getButtons (controls) { canvas.coc7gmtools = new CoC7MenuLayer() const isGM = game.user.isGM - const isDev = game.settings.get('CoC7', 'debugmode') + const showHiddenDevMenu = game.settings.get('CoC7', 'hiddendebugmenu') controls.push({ name: 'coc7menu', title: 'CoC7.GmTools', @@ -87,7 +87,7 @@ export class CoC7Menu { } ] }) - if (isDev) { + if (showHiddenDevMenu) { canvas.coc7DevTools = new CoC7MenuLayer() controls.push({ name: 'coc7DevMenu', diff --git a/module/scripts/register-settings.js b/module/scripts/register-settings.js index 6d7e97c1..3afcd247 100644 --- a/module/scripts/register-settings.js +++ b/module/scripts/register-settings.js @@ -435,7 +435,7 @@ export function registerSettings () { game.settings.register('CoC7', 'debugmode', { name: 'SETTINGS.DebugMode', hint: 'SETTINGS.DebugModeHint', - scope: 'world', + scope: 'client', config: true, type: Boolean, default: false @@ -451,6 +451,14 @@ export function registerSettings () { /** * Other settings */ + game.settings.register('CoC7', 'hiddendebugmenu', { + name: 'Hidden dev menu', + hint: 'Use at your own risk', + scope: 'world', + config: false, + type: Boolean, + default: false + }) game.settings.register('CoC7', 'developmentEnabled', { name: 'Dev phased allowed', scope: 'world', From af8b84082dcdc33fc1ee4023db609be6745c71ef Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:32:04 +0200 Subject: [PATCH 668/726] Add tubes on sheet for test triggering --- module/actors/sheets/base.js | 42 ++++-------------------- templates/actors/character-sheet-v2.html | 6 ++++ 2 files changed, 13 insertions(+), 35 deletions(-) diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 24d2c179..83d762df 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -27,6 +27,8 @@ export class CoC7ActorSheet extends ActorSheet { data.editable = this.isEditable // MODIF 0.8.x : editable removed /******************/ + data.showHiddenDevMenu = game.settings.get('CoC7', 'hiddendebugmenu') + data.hasToken = !!this.token data.canDragToken = data.hasToken && game.user.isGM data.linkedActor = this.actor.data?.token?.actorLink @@ -848,43 +850,13 @@ export class CoC7ActorSheet extends ActorSheet { .find('a.coc7-link') .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) + /** + * This is used for dev purposes only ! + */ html.find('.test-trigger').click(async event => { - // await OpposedCheckCard.dispatch({ - // type: OpposedCheckCard.defaultConfig.type, - // combat: false, - // action: 'new', - // roll: { - // characteristic: 'str', - // actor: this.actor.actorKey - // } - // }) - // await OpposedCheckCard.dispatch({ - // type: OpposedCheckCard.defaultConfig.type, - // combat: false, - // action: 'new', - // roll: { - // characteristic: 'con' - // actor: this.actor.actorKey - // } - // }) - // const val = getProperty( this.actor, 'data.data.attribs.san.value'); - // this.actor.enterBoutOfMadness( true, 10); - // const roll = new CoC7Check(); - // roll.actor = this.actorKey; - // roll.attribute = 'san'; - // roll.difficulty = this.options.sanDifficulty || CoC7Check.difficultyLevel.regular; - // roll.diceModifier = this.options.sanModifier || 0; - // await roll._perform(); - // for (const effect of this.actor.effects) { - // await effect.sheet.render(true); - // // effect.delete(); - // } - // for (const e of this.actor.effects) { e.delete() } - // await setProperty( this.actor, 'data.data.encounteredCreatures', []); - // await this.actor.update( {['data.encounteredCreatures'] : []}); - // if (event.shiftKey) ui.notifications.info('Shift cliecked') - // SanCheckCard.create( this.actor.actorKey, {min:'1D10',max:'1D12'}, {fastForward:event.shiftKey}); + if(!game.settings.get('CoC7', 'hiddendevmenu')) return }) + html .find('.skill-name.rollable') .mouseenter(this.toolTipSkillEnter.bind(this)) diff --git a/templates/actors/character-sheet-v2.html b/templates/actors/character-sheet-v2.html index b53cbeba..1efe0a06 100644 --- a/templates/actors/character-sheet-v2.html +++ b/templates/actors/character-sheet-v2.html @@ -1,4 +1,10 @@
    + {{#if showHiddenDevMenu}} +
    + + +
    + {{/if}} {{#unless permissionLimited}}
    {{#if canDragToken}} From 86b570fe0e62adb92195e53686f09bb3dcedc4bd Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:40:19 +0200 Subject: [PATCH 669/726] Adding test tubes on sheet --- module/actors/sheets/base.js | 2 +- module/dice.js | 4 ++-- module/menu.js | 2 +- module/scripts/register-settings.js | 2 +- styles/dev.less | 6 ++++++ styles/system/index.less | 1 + 6 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 styles/dev.less diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 83d762df..7925c2d3 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -27,7 +27,7 @@ export class CoC7ActorSheet extends ActorSheet { data.editable = this.isEditable // MODIF 0.8.x : editable removed /******************/ - data.showHiddenDevMenu = game.settings.get('CoC7', 'hiddendebugmenu') + data.showHiddenDevMenu = game.settings.get('CoC7', 'hiddendevmenu') data.hasToken = !!this.token data.canDragToken = data.hasToken && game.user.isGM diff --git a/module/dice.js b/module/dice.js index 0a5cad53..8df87000 100644 --- a/module/dice.js +++ b/module/dice.js @@ -11,9 +11,9 @@ export class CoC7Dice { } } let roll - if (game.CoC7.dev.dice.alwaysCrit && game.settings.get('CoC7', 'hiddendebugmenu')) { + if (game.CoC7.dev.dice.alwaysCrit && game.settings.get('CoC7', 'hiddendevmenu')) { roll = Roll.fromData(CoC7Dice.crit01) - } else if (game.CoC7.dev.dice.alwaysFumble && game.settings.get('CoC7', 'hiddendebugmenu')) { + } else if (game.CoC7.dev.dice.alwaysFumble && game.settings.get('CoC7', 'hiddendevmenu')) { roll = Roll.fromData(CoC7Dice.fumble99) } else{ diff --git a/module/menu.js b/module/menu.js index abea01ca..88210692 100644 --- a/module/menu.js +++ b/module/menu.js @@ -30,7 +30,7 @@ export class CoC7Menu { static getButtons (controls) { canvas.coc7gmtools = new CoC7MenuLayer() const isGM = game.user.isGM - const showHiddenDevMenu = game.settings.get('CoC7', 'hiddendebugmenu') + const showHiddenDevMenu = game.settings.get('CoC7', 'hiddendevmenu') controls.push({ name: 'coc7menu', title: 'CoC7.GmTools', diff --git a/module/scripts/register-settings.js b/module/scripts/register-settings.js index 3afcd247..e61bde25 100644 --- a/module/scripts/register-settings.js +++ b/module/scripts/register-settings.js @@ -451,7 +451,7 @@ export function registerSettings () { /** * Other settings */ - game.settings.register('CoC7', 'hiddendebugmenu', { + game.settings.register('CoC7', 'hiddendevmenu', { name: 'Hidden dev menu', hint: 'Use at your own risk', scope: 'world', diff --git a/styles/dev.less b/styles/dev.less new file mode 100644 index 00000000..1a12d782 --- /dev/null +++ b/styles/dev.less @@ -0,0 +1,6 @@ +.floating-debug { + position: absolute; + left: -40px; + color: darkred; + font-size: 2rem; +} \ No newline at end of file diff --git a/styles/system/index.less b/styles/system/index.less index ee37d6df..45cb2456 100644 --- a/styles/system/index.less +++ b/styles/system/index.less @@ -32,3 +32,4 @@ @import '../sheets/summary.less'; @import 'tooltips.less'; @import 'compendiums.less'; +@import '../dev.less'; From cbc523755113502d2f0e41fae832dc0b3efda140 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Mon, 1 Aug 2022 19:31:51 +0200 Subject: [PATCH 670/726] Nav menus --- module/scripts/load-templates.js | 1 + templates/actors/character-sheet-v2.html | 7 +++++++ templates/common/effects.hbs | 0 3 files changed, 8 insertions(+) create mode 100644 templates/common/effects.hbs diff --git a/module/scripts/load-templates.js b/module/scripts/load-templates.js index 0044187c..b4e87e86 100644 --- a/module/scripts/load-templates.js +++ b/module/scripts/load-templates.js @@ -14,6 +14,7 @@ export const preloadHandlebarsTemplates = async function () { 'systems/CoC7/templates/actors/parts/actor-inventory.html', 'systems/CoC7/templates/actors/parts/actor-inventory-items.html', 'systems/CoC7/templates/actors/parts/actor-background.html', + 'systems/CoC7/templates/common/effects.hbs', 'systems/CoC7/templates/actors/parts/actor-mythos-enounters.hbs', 'systems/CoC7/templates/actors/parts/actor-keeper-mythos-enounters.hbs', 'systems/CoC7/templates/actors/parts/actor-skills-v2.html', diff --git a/templates/actors/character-sheet-v2.html b/templates/actors/character-sheet-v2.html index bed84216..692a278b 100644 --- a/templates/actors/character-sheet-v2.html +++ b/templates/actors/character-sheet-v2.html @@ -190,6 +190,9 @@

    {{localize 'CoC7.Armor'}}:

    {{localize 'CoC7.Background'}}
    + +
    +
    {{#if isGM}}
    @@ -248,6 +251,10 @@

    {{localize 'CoC7.Armor'}}:

    {{/if}}
    +
    + {{> "systems/CoC7/templates/common/effects.hbs"}} +
    + {{#if isGM}}
    {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} diff --git a/templates/common/effects.hbs b/templates/common/effects.hbs new file mode 100644 index 00000000..e69de29b From 2b46907358fe5cf7e94d1bf10f56d3fbf8d6aac2 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Mon, 1 Aug 2022 19:34:43 +0200 Subject: [PATCH 671/726] Effects handling --- module/active-effect.js | 6 ++++++ module/scripts/configure-documents.js | 2 ++ 2 files changed, 8 insertions(+) create mode 100644 module/active-effect.js diff --git a/module/active-effect.js b/module/active-effect.js new file mode 100644 index 00000000..abbe9672 --- /dev/null +++ b/module/active-effect.js @@ -0,0 +1,6 @@ +export default class CoC7ActiveEffect extends ActiveEffect { + /** @inheritdoc */ + apply(actor, change) { + return super.apply(actor, change); + } +} \ No newline at end of file diff --git a/module/scripts/configure-documents.js b/module/scripts/configure-documents.js index e217b74e..e361a262 100644 --- a/module/scripts/configure-documents.js +++ b/module/scripts/configure-documents.js @@ -5,8 +5,10 @@ import { CoC7Book } from '../items/book/data.js' import { CoC7Item } from '../items/item.js' import { CoC7Spell } from '../items/spell/data.js' import { CoC7Chase } from '../items/chase/data.js' +import CoC7ActiveEffect from '../active-effect.js' export function configureDocuments () { + CONFIG.ActiveEffect.documentClass = CoC7ActiveEffect CONFIG.Actor.documentClass = CoCActor CONFIG.Actor.documentClasses = {} CONFIG.Item.documentClass = CoC7Item From 19fdd2b3bca29710af2b633048a1abc3ed5374f9 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Mon, 1 Aug 2022 20:34:03 +0200 Subject: [PATCH 672/726] Fix bug with empty shots and extreme difficulty --- module/chat/rangecombat.js | 154 +++++++++++++++++++------------------ module/check.js | 17 ++-- 2 files changed, 87 insertions(+), 84 deletions(-) diff --git a/module/chat/rangecombat.js b/module/chat/rangecombat.js index c14beea2..129a6788 100644 --- a/module/chat/rangecombat.js +++ b/module/chat/rangecombat.js @@ -714,86 +714,88 @@ export class CoC7RangeInitiator { const volleySize = parseInt(h.shot.bulletsShot) const damageRolls = [] - let damageFormula = String(h.shot.damage) - if (!damageFormula || damageFormula === '') damageFormula = '0' - const damageDie = CoC7Damage.getMainDie(damageFormula) - const maxDamage = new Roll(damageFormula).evaluate({ - maximize: true - }).total - const criticalDamageFormula = this.weapon.impale - ? `${damageFormula} + ${maxDamage}` - : `${maxDamage}` - const criticalDamageDie = CoC7Damage.getMainDie(criticalDamageFormula) - - let impalingShots = 0 - let successfulShots = 0 - let critical = false - if (this.fullAuto || this.burst) { - successfulShots = Math.floor(volleySize / 2) - } - if (successfulShots === 0) successfulShots = 1 - if (h.roll.successLevel >= CoC7Check.difficultyLevel.extreme) { - impalingShots = successfulShots - successfulShots = volleySize - impalingShots - critical = true - if ( - CoC7Check.difficultyLevel.critical !== h.roll.successLevel && - (CoC7Check.difficultyLevel.extreme <= h.roll.difficulty || - h.shot.extremeRange) - ) { - successfulShots = volleySize - impalingShots = 0 - critical = false + if (volleySize > 0) { + let damageFormula = String(h.shot.damage) + if (!damageFormula || damageFormula === '') damageFormula = '0' + const damageDie = CoC7Damage.getMainDie(damageFormula) + const maxDamage = new Roll(damageFormula).evaluate({ + maximize: true + }).total + const criticalDamageFormula = this.weapon.impale + ? `${damageFormula} + ${maxDamage}` + : `${maxDamage}` + const criticalDamageDie = CoC7Damage.getMainDie(criticalDamageFormula) + + let impalingShots = 0 + let successfulShots = 0 + let critical = false + if (this.fullAuto || this.burst) { + successfulShots = Math.floor(volleySize / 2) + } + if (successfulShots === 0) successfulShots = 1 + if (h.roll.successLevel >= CoC7Check.difficultyLevel.extreme) { + impalingShots = successfulShots + successfulShots = volleySize - impalingShots + critical = true + if ( + CoC7Check.difficultyLevel.critical !== h.roll.successLevel && + (CoC7Check.difficultyLevel.extreme <= h.roll.difficulty || + h.shot.extremeRange) + ) { + successfulShots = volleySize + impalingShots = 0 + critical = false + } } - } - let total = 0 - for (let index = 0; index < successfulShots; index++) { - const roll = new Roll(damageFormula) - /** MODIF 0.8.x **/ - await roll.evaluate({ async: true }) - await CoC7Dice.showRollDice3d(roll) - /*****************/ - damageRolls.push({ - formula: damageFormula, - total: roll.total, - die: damageDie, - critical: false - }) - total += roll.total - } - for (let index = 0; index < impalingShots; index++) { - const roll = new Roll(criticalDamageFormula) - /** MODIF 0.8.x **/ - await roll.evaluate({ async: true }) - await CoC7Dice.showRollDice3d(roll) - /*****************/ - damageRolls.push({ - formula: criticalDamageFormula, - total: roll.total, - die: criticalDamageDie, - critical: true - }) - total += roll.total - } + let total = 0 + for (let index = 0; index < successfulShots; index++) { + const roll = new Roll(damageFormula) + /** MODIF 0.8.x **/ + await roll.evaluate({ async: true }) + await CoC7Dice.showRollDice3d(roll) + /*****************/ + damageRolls.push({ + formula: damageFormula, + total: roll.total, + die: damageDie, + critical: false + }) + total += roll.total + } + for (let index = 0; index < impalingShots; index++) { + const roll = new Roll(criticalDamageFormula) + /** MODIF 0.8.x **/ + await roll.evaluate({ async: true }) + await CoC7Dice.showRollDice3d(roll) + /*****************/ + damageRolls.push({ + formula: criticalDamageFormula, + total: roll.total, + die: criticalDamageDie, + critical: true + }) + total += roll.total + } - let targetName = 'dummy' - let target = chatHelper.getTokenFromKey(h.roll.targetKey) - if (!target) target = chatHelper.getActorFromKey(h.roll.targetKey) // REFACTORING (2) - if (target) targetName = target.name - - this.damage.push({ - targetKey: h.roll.targetKey, - targetName: targetName, - rolls: damageRolls, - total: total, - critical: critical, - dealt: false, - resultString: game.i18n.format('CoC7.rangeCombatDamage', { - name: targetName, - total: total + let targetName = 'dummy' + let target = chatHelper.getTokenFromKey(h.roll.targetKey) + if (!target) target = chatHelper.getActorFromKey(h.roll.targetKey) // REFACTORING (2) + if (target) targetName = target.name + + this.damage.push({ + targetKey: h.roll.targetKey, + targetName: targetName, + rolls: damageRolls, + total: total, + critical: critical, + dealt: false, + resultString: game.i18n.format('CoC7.rangeCombatDamage', { + name: targetName, + total: total + }) }) - }) + } } this.damageRolled = this.damage.length !== 0 diff --git a/module/check.js b/module/check.js index 1cbb9694..3969c943 100644 --- a/module/check.js +++ b/module/check.js @@ -108,8 +108,9 @@ export class CoC7Check { // if (!this.actor || !this.actor.id) return undefined if (!this._rawValue) { if (this.characteristic) { - this.rawValue = - this.actor.data.data.characteristics[this.characteristic].value + this.rawValue = this.actor.data.data.characteristics[ + this.characteristic + ].value } if (this.skill) this.rawValue = this.skill.value if (this.attribute) { @@ -228,7 +229,7 @@ export class CoC7Check { if (typeof this.difficulty !== 'undefined') { switch (this.difficulty) { case CoC7Check.difficultyLevel.extreme: - return game.mat('CoC7.ExtremeDifficulty') + return game.i18n.format('CoC7.ExtremeDifficulty') case CoC7Check.difficultyLevel.hard: return game.i18n.format('CoC7.HardDifficulty') case CoC7Check.difficultyLevel.regular: @@ -872,8 +873,9 @@ export class CoC7Check { } else { if (this.characteristic) { this.isCharactiristic = true - this.rawValue = - this.actor.data.data.characteristics[this.characteristic].value + this.rawValue = this.actor.data.data.characteristics[ + this.characteristic + ].value } if (this.skill) { @@ -1761,9 +1763,8 @@ export class CoC7Check { a.classList.add(...this.cssClassList) a.title = this.tooltipHeader a.dataset.roll = escape(this.JSONRollString) // TODO!IMPORTANT!!! - a.innerHTML = ` ${ - this.modifiedResult || '??' - }` + a.innerHTML = ` ${this + .modifiedResult || '??'}` return a } From 6a1ab1c563e94c78b7d41da2d4a69c14eef2cd4b Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 3 Aug 2022 04:34:58 +0200 Subject: [PATCH 673/726] Player effects --- lang/en.json | 9 +- module/active-effect.js | 122 ++++++++++++++++++++++- module/actors/sheets/base.js | 55 +++++++--- module/items/sheets/skill.js | 9 +- module/items/skill/data.js | 86 ++++++++++++++++ module/scripts/configure-documents.js | 4 +- module/scripts/load-templates.js | 2 +- styles/sheets/sheet.less | 11 +- templates/actors/character-sheet-v2.html | 4 +- templates/actors/npc-sheet.html | 10 ++ templates/common/active-effects.hbs | 54 ++++++++++ templates/common/effects.hbs | 0 templates/items/skill-sheet.html | 6 ++ 13 files changed, 342 insertions(+), 30 deletions(-) create mode 100644 module/items/skill/data.js create mode 100644 templates/common/active-effects.hbs delete mode 100644 templates/common/effects.hbs diff --git a/lang/en.json b/lang/en.json index 23da2fe8..d9b89f76 100644 --- a/lang/en.json +++ b/lang/en.json @@ -692,7 +692,9 @@ "CoC7.ErrorTokenNotOnScene": "Token does not belongs to this location's scene", "CoC7.AddParticipant": "Add Participant", "CoC7.Remove": "Remove", + "CoC7.Delete": "Delete", "CoC7.Edit": "Edit", + "CoC7.Create": "Create", "CoC7.MakeActive": "Make Active", "CoC7.SelectNewSkill": "Select skill", "CoC7.AskDamageRoll": "Ask damage roll", @@ -891,6 +893,9 @@ "CoC7.Cancel": "Cancel", "CoC7.Add": "Add", "CoC7.Update": "Update", + "CoC7.Enable": "Enable", + "CoC7.Disable": "Disable", + "CoC7.Duration": "Duration", "CoC7.ActorImporter": "Actor Importer", "CoC7.ActorImporterSummary": "Import an NPC or Creature from description and stats. Just paste the corresponding plain text", @@ -1127,5 +1132,7 @@ "SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.", "CoC7.getTheExample": "Copy Example", - "CoC7.Copied": "Copied the Example Text to Clipboard" + "CoC7.Copied": "Copied the Example Text to Clipboard", + + "CoC7.EffectNew": "New effect" } diff --git a/module/active-effect.js b/module/active-effect.js index abbe9672..96198d96 100644 --- a/module/active-effect.js +++ b/module/active-effect.js @@ -1,6 +1,120 @@ +/* global ActiveEffect, game */ + export default class CoC7ActiveEffect extends ActiveEffect { - /** @inheritdoc */ - apply(actor, change) { - return super.apply(actor, change); + /** @inheritdoc */ + apply (actor, change) { + // this access skills only localy : items._source.0.data.adjustments.experience + // if (change.key?.startsWith('skill')) { + // this.applyToSkill(actor, change) + // return null + // } + return super.apply(actor, change) + } + + // async applyToSkill (actor, change) { + // const [, skillName, key] = change.key.split('.') + // const skill = actor.getSkillsByName(skillName) + // if (skill) { + // await skill[0].applyModifier(change) + // } + // } + + /** + * Manage Active Effect instances through the Actor Sheet via effect control buttons. + * @param {MouseEvent} event The left-click event on the effect control + * @param {Actor|Item} owner The owning document which manages this effect + * @returns {Promise|null} Promise that resolves when the changes are complete. + */ + static onManageActiveEffect (event, owner) { + event.preventDefault() + const a = event.currentTarget + const li = a.closest('li') + const effect = li.dataset.effectId + ? owner.effects.get(li.dataset.effectId) + : null + switch (a.dataset.action) { + case 'create': + return owner.createEmbeddedDocuments('ActiveEffect', [ + { + label: game.i18n.localize('CoC7.EffectNew'), + icon: 'icons/svg/aura.svg', + origin: owner.uuid, + 'duration.rounds': + li.dataset.effectType === 'temporary' ? 1 : undefined, + disabled: li.dataset.effectType === 'inactive' + } + ]) + case 'edit': + return effect.sheet.render(true) + case 'delete': + return effect.delete() + case 'toggle': + return effect.update({ disabled: !effect.data.disabled }) } -} \ No newline at end of file + } + + /** + * @override + */ + // get isTemporary(){ + // const duration = this.data.duration.seconds ?? (this.data.duration.rounds || this.data.duration.turns) ?? 0; + // return (duration > 0) + // } + + get isStatus () { + const statusId = this.getFlag('core', 'statusId') + return [ + 'tempoInsane', + 'indefInsane', + 'criticalWounds', + 'dying', + 'dead', + 'unconscious', + 'prone' + ].includes(statusId) + } + + static prepareActiveEffectCategories (effects) { + // Define effect header categories + const categories = { + status: { + type: 'status', + label: game.i18n.localize('Status'), + effects: [] + }, + temporary: { + type: 'temporary', + label: game.i18n.localize('Temporary'), + effects: [] + }, + passive: { + type: 'passive', + label: game.i18n.localize('Passive'), + effects: [] + }, + inactive: { + type: 'inactive', + label: game.i18n.localize('Innactive'), + effects: [] + }, + suppressed: { + type: 'suppressed', + label: game.i18n.localize('Suppressed'), + effects: [], + info: [game.i18n.localize('Unavailable')] + } + } + // Iterate over active effects, classifying them into categories + for (const e of effects) { + e._getSourceName() // Trigger a lookup for the source name + if (e.isSuppressed) categories.suppressed.effects.push(e) + else if (e.isStatus) categories.status.effects.push(e) + else if (e.data.disabled) categories.inactive.effects.push(e) + else if (e.isTemporary) categories.temporary.effects.push(e) + else categories.passive.effects.push(e) + } + + categories.suppressed.hidden = !categories.suppressed.effects.length + return categories + } +} diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 88802f18..4d344d5e 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -13,6 +13,7 @@ import { isCtrlKey } from '../../chat/helper.js' import { CoC7Parser } from '../../apps/parser.js' import { DamageCard } from '../../chat/cards/damage.js' import { CoC7LinkCreationDialog } from '../../apps/link-creation-dialog.js' +import CoC7ActiveEffect from '../../active-effect.js' /** * Extend the basic ActorSheet with some very simple modifications @@ -41,6 +42,10 @@ export class CoC7ActorSheet extends ActorSheet { data.meleeWpn = [] data.actorFlags = {} + data.effects = CoC7ActiveEffect.prepareActiveEffectCategories( + this.actor.effects + ) + data.permissionLimited = !game.user.isGM && (this.actor.data.permission[game.user.id] ?? @@ -706,6 +711,7 @@ export class CoC7ActorSheet extends ActorSheet { html.on('click', '.weapon-damage', this._onWeaponDamage.bind(this)) html.find('.inventory-header').click(this._onInventoryHeader.bind(this)) + html.find('.items-header').click(this._onItemHeader.bind(this)) html.find('.section-header').click(this._onSectionHeader.bind(this)) const wheelInputs = html.find('.attribute-value') @@ -857,7 +863,7 @@ export class CoC7ActorSheet extends ActorSheet { * This is used for dev purposes only ! */ html.find('.test-trigger').click(async event => { - if(!game.settings.get('CoC7', 'hiddendevmenu')) return + if (!game.settings.get('CoC7', 'hiddendevmenu')) return null }) html @@ -880,6 +886,11 @@ export class CoC7ActorSheet extends ActorSheet { .find('.item-control.development-flag') .mouseenter(this.toolTipFlagForDevelopment.bind(this)) .mouseleave(game.CoC7Tooltips.toolTipLeave.bind(this)) + + // Active Effects + html + .find('.effect-control') + .click(ev => CoC7ActiveEffect.onManageActiveEffect(ev, this.actor)) } toolTipSkillEnter (event) { @@ -892,8 +903,9 @@ export class CoC7ActorSheet extends ActorSheet { typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && game.CoC7Tooltips.ToolTipHover !== null ) { - const isCombat = - game.CoC7Tooltips.ToolTipHover.classList?.contains('combat') + const isCombat = game.CoC7Tooltips.ToolTipHover.classList?.contains( + 'combat' + ) const item = game.CoC7Tooltips.ToolTipHover.closest('.item') if (typeof item !== 'undefined') { const skillId = item.dataset.skillId @@ -915,8 +927,8 @@ export class CoC7ActorSheet extends ActorSheet { game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '' }) } @@ -955,8 +967,8 @@ export class CoC7ActorSheet extends ActorSheet { game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '' }) } @@ -998,8 +1010,8 @@ export class CoC7ActorSheet extends ActorSheet { game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '' }) } @@ -1025,8 +1037,8 @@ export class CoC7ActorSheet extends ActorSheet { (game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '') }) } @@ -1421,7 +1433,16 @@ export class CoC7ActorSheet extends ActorSheet { _onInventoryHeader (event) { event.preventDefault() - $(event.currentTarget).siblings('li').toggle() + $(event.currentTarget) + .siblings('li') + .toggle() + } + + _onItemHeader (event) { + event.preventDefault() + $(event.currentTarget) + .next('ol') + .toggle() } async _onItemPopup (event) { @@ -1859,8 +1880,9 @@ export class CoC7ActorSheet extends ActorSheet { value: event.currentTarget.value }) ) - formData[event.currentTarget.name] = - game.i18n.format('CoC7.ErrorInvalid') + formData[event.currentTarget.name] = game.i18n.format( + 'CoC7.ErrorInvalid' + ) } } } @@ -1880,8 +1902,9 @@ export class CoC7ActorSheet extends ActorSheet { value: event.currentTarget.value }) ) - formData[event.currentTarget.name] = - game.i18n.format('CoC7.ErrorInvalid') + formData[event.currentTarget.name] = game.i18n.format( + 'CoC7.ErrorInvalid' + ) } } } diff --git a/module/items/sheets/skill.js b/module/items/sheets/skill.js index 50034462..9023b577 100644 --- a/module/items/sheets/skill.js +++ b/module/items/sheets/skill.js @@ -1,5 +1,6 @@ /* global game, ItemSheet, mergeObject */ +import CoC7ActiveEffect from '../../active-effect.js' import { COC7 } from '../../config.js' /** @@ -57,6 +58,10 @@ export class CoC7SkillSheet extends ItemSheet { data.hasOwner = this.item.actor !== null + data.effects = CoC7ActiveEffect.prepareActiveEffectCategories( + this.item.effects + ) + if (this.item.data.type === 'skill') { data._properties = [] for (const [key, value] of Object.entries(COC7.skillProperties)) { @@ -104,8 +109,8 @@ export class CoC7SkillSheet extends ItemSheet { async _onClickToggle (event) { event.preventDefault() - const propertyId = - event.currentTarget.closest('.toggle-switch').dataset.property + const propertyId = event.currentTarget.closest('.toggle-switch').dataset + .property await this.item.toggleProperty( propertyId, event.metaKey || diff --git a/module/items/skill/data.js b/module/items/skill/data.js new file mode 100644 index 00000000..39b87a07 --- /dev/null +++ b/module/items/skill/data.js @@ -0,0 +1,86 @@ +import { CoC7Item } from '../item.js' + +export class CoC7Skill extends CoC7Item { + async applyModifier (change) { + return + + const changes = this.data.data.changes + ? foundry.utils.duplicate(this.data.data.changes) + : [] + + const index = changes.findIndex(c => c.effect._id == change.effect.id) + + if (-1 === index) { + changes.push(change) + await this.update({ 'data.changes': changes }) + } else { + //Compare if there's a change in the efect data + if (!JSON.stringify(change) === JSON.stringify(changes[index])) { + changes[index] = change + await this.update({ 'data.changes': changes }) + } + } + } + + get hasActiveEffects () { + return this.activeEffects.length > 0 + } + + get activeEffects () { + if (this.parent && this.parent.effects) { + const effectKeyFull = `skill.${this.name}`.toLowerCase() + const effectKeyShort = `skill.${this.data.data.skillName}`.toLowerCase() + let changes = this.parent.effects.reduce((changes, e) => { + if (e.data.disabled || e.isSuppressed) return changes + return changes.concat( + e.data.changes.map(c => { + c = foundry.utils.duplicate(c) + c.effect = e + c.priority = c.priority ?? c.mode * 10 + return c + }) + ) + }, []) + changes.sort((a, b) => a.priority - b.priority) + changes = changes.filter( + e => + e.key.toLowerCase() == effectKeyShort || + e.key.toLowerCase() == effectKeyFull + ) + return changes + } + return [] + } + + get value () { + const value = super.value + let updated = value + for (const change of this.activeEffects) { + const modifier = Number.fromString(change.value) + if (!isNaN(modifier)) { + const modes = CONST.ACTIVE_EFFECT_MODES + switch (change.mode) { + case modes.ADD: + updated += modifier + break + case modes.MULTIPLY: + updated = Math.round(updated * modifier) + break + case modes.OVERRIDE: + updated = modifier + break + case modes.UPGRADE: + if (modifer > updated) updated = modifier + break + case modes.DOWNGRADE: + if (modifer < updated) updated = modifier + break + } + } + } + if (!isNaN(updated) && updated != value) { + if (updated < 0) updated = 0 + return updated + } return value + } +} diff --git a/module/scripts/configure-documents.js b/module/scripts/configure-documents.js index e361a262..1b9b30a4 100644 --- a/module/scripts/configure-documents.js +++ b/module/scripts/configure-documents.js @@ -6,6 +6,7 @@ import { CoC7Item } from '../items/item.js' import { CoC7Spell } from '../items/spell/data.js' import { CoC7Chase } from '../items/chase/data.js' import CoC7ActiveEffect from '../active-effect.js' +import { CoC7Skill } from '../items/skill/data.js' export function configureDocuments () { CONFIG.ActiveEffect.documentClass = CoC7ActiveEffect @@ -15,6 +16,7 @@ export function configureDocuments () { CONFIG.Item.documentClasses = { book: CoC7Book, spell: CoC7Spell, - chase: CoC7Chase + chase: CoC7Chase, + skill: CoC7Skill } } diff --git a/module/scripts/load-templates.js b/module/scripts/load-templates.js index b4e87e86..38c58251 100644 --- a/module/scripts/load-templates.js +++ b/module/scripts/load-templates.js @@ -14,7 +14,7 @@ export const preloadHandlebarsTemplates = async function () { 'systems/CoC7/templates/actors/parts/actor-inventory.html', 'systems/CoC7/templates/actors/parts/actor-inventory-items.html', 'systems/CoC7/templates/actors/parts/actor-background.html', - 'systems/CoC7/templates/common/effects.hbs', + 'systems/CoC7/templates/common/active-effects.hbs', 'systems/CoC7/templates/actors/parts/actor-mythos-enounters.hbs', 'systems/CoC7/templates/actors/parts/actor-keeper-mythos-enounters.hbs', 'systems/CoC7/templates/actors/parts/actor-skills-v2.html', diff --git a/styles/sheets/sheet.less b/styles/sheets/sheet.less index f8a0b1b8..c2afb11d 100644 --- a/styles/sheets/sheet.less +++ b/styles/sheets/sheet.less @@ -19,7 +19,8 @@ .inventory { height: 100%; } - .inventory-list { + .inventory-list, + .effects-list { list-style: none; margin: 0; padding: 0 5px; @@ -47,7 +48,7 @@ h4 { margin: 0; white-space: nowrap; - overflow-x: hidden; + overflow: hidden; } &.rollable:hover .item-image { background-image: url('/icons/svg/d20-grey.svg') !important; @@ -73,7 +74,8 @@ white-space: nowrap; } } - .inventory-header { + .inventory-header, + .items-header { margin: 2px 0; padding: 0; background: rgba(0, 0, 0, 0.05); @@ -125,6 +127,9 @@ font-size: 10px; text-align: center; color: @colorTan; + &.effect-control { + flex: 1; + } } } .item-summary { diff --git a/templates/actors/character-sheet-v2.html b/templates/actors/character-sheet-v2.html index 692a278b..20331cd2 100644 --- a/templates/actors/character-sheet-v2.html +++ b/templates/actors/character-sheet-v2.html @@ -251,8 +251,8 @@

    {{localize 'CoC7.Armor'}}:

    {{/if}}
    -
    - {{> "systems/CoC7/templates/common/effects.hbs"}} +
    + {{> "systems/CoC7/templates/common/active-effects.hbs"}}
    {{#if isGM}} diff --git a/templates/actors/npc-sheet.html b/templates/actors/npc-sheet.html index fd30b3c5..46518578 100644 --- a/templates/actors/npc-sheet.html +++ b/templates/actors/npc-sheet.html @@ -375,6 +375,16 @@

    {{localize 'CoC7.Notes'}}

    +
    +
    +

    {{localize 'CoC7.Effects'}}

    +
    +
    +
    +
    + + + {{#if isGM}}
    diff --git a/templates/common/active-effects.hbs b/templates/common/active-effects.hbs new file mode 100644 index 00000000..54058fca --- /dev/null +++ b/templates/common/active-effects.hbs @@ -0,0 +1,54 @@ +
      + {{#each effects as |section sid|}} + {{#unless section.hidden}} +
    1. +

      {{localize section.label}}

      +
      {{localize "CoC7.Source"}}
      +
      {{localize "CoC7.Duration"}}
      +
      +
    2. + + {{#if section.info}} +
        + {{#each section.info}} +
      1. {{this}}
      2. + {{/each}} +
      + {{/if}} + +
        + {{#each section.effects as |effect|}} +
      1. +
        + +

        {{effect.data.label}}

        +
        +
        {{effect.sourceName}}
        +
        {{effect.duration.label}}
        +
        + {{#if @root.editable}} + + + + + + + + + + {{/if}} +
        +
      2. + {{/each}} +
      + {{/unless}} + {{/each}} +
    + \ No newline at end of file diff --git a/templates/common/effects.hbs b/templates/common/effects.hbs deleted file mode 100644 index e69de29b..00000000 diff --git a/templates/items/skill-sheet.html b/templates/items/skill-sheet.html index 25c134c4..a4bfd360 100644 --- a/templates/items/skill-sheet.html +++ b/templates/items/skill-sheet.html @@ -45,6 +45,9 @@

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}},"_id":"POxSHclKlwaHTQqU"} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

     

    \n

     

    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

     

    \n

     

    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

     

    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

     

    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

     

    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"$$deleted":true,"_id":"POxSHclKlwaHTQqU"} +{"name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}},"_id":"B0v6VqSQc52PsRPm"} +{"_id":"B0v6VqSQc52PsRPm","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} diff --git a/system.json b/system.json index ea8d1bf8..140654b1 100644 --- a/system.json +++ b/system.json @@ -52,6 +52,13 @@ "name": "sanity-tables-examples", "path": "./packs/sanity-tables-examples.db", "system": "CoC7" + }, + { + "label": "System manual", + "type": "JournalEntry", + "name": "system-doc", + "path": "./packs/system-doc.db", + "system": "CoC7" } ], "languages": [ From 072e9cb9c7bf99d2195a87a18465cb11fadd9011 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Thu, 4 Aug 2022 01:15:21 +0200 Subject: [PATCH 677/726] Active effect on NPC and sheet correction --- module/active-effect.js | 45 +++++++++++++++++++++++--- module/actors/sheets/base.js | 28 ++++++++-------- module/actors/sheets/npc-sheet.js | 18 ++++++----- styles/sheets/actor.less | 3 ++ styles/sheets/sheet.less | 2 +- templates/actors/npc-sheet.html | 9 +++--- templates/actors/parts/npc-skills.html | 6 ++-- 7 files changed, 78 insertions(+), 33 deletions(-) diff --git a/module/active-effect.js b/module/active-effect.js index 96198d96..552d1364 100644 --- a/module/active-effect.js +++ b/module/active-effect.js @@ -56,10 +56,20 @@ export default class CoC7ActiveEffect extends ActiveEffect { /** * @override */ - // get isTemporary(){ - // const duration = this.data.duration.seconds ?? (this.data.duration.rounds || this.data.duration.turns) ?? 0; - // return (duration > 0) - // } + get duration () { + const d = this.data.duration + const duration = super.duration + if (Number.isNumeric(d.seconds)) { + let label = duration.label + if (d.seconds > 3600) { + label = new Date(d.seconds * 1000).toISOString().slice(11, 19) + } else if (d.seconds > 100) { + label = new Date(d.seconds * 1000).toISOString().slice(14, 19) + } + duration.label = label + } + return duration + } get isStatus () { const statusId = this.getFlag('core', 'statusId') @@ -117,4 +127,31 @@ export default class CoC7ActiveEffect extends ActiveEffect { categories.suppressed.hidden = !categories.suppressed.effects.length return categories } + + static prepareNPCActiveEffectCategories (effects) { + let count = 0 + // Define effect header categories + const categories = { + active: { + type: 'active', + label: game.i18n.localize('Active'), + effects: [] + }, + inactive: { + type: 'inactive', + label: game.i18n.localize('Innactive'), + effects: [] + } + } + // Iterate over active effects, classifying them into categories + for (const e of effects) { + count += 1 + e._getSourceName() // Trigger a lookup for the source name + if (e.isSuppressed || e.data.disabled) categories.inactive.effects.push(e) + else categories.active.effects.push(e) + } + + if (count > 0) categories.expended = true + return categories + } } diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 4d344d5e..198811c9 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -42,9 +42,10 @@ export class CoC7ActorSheet extends ActorSheet { data.meleeWpn = [] data.actorFlags = {} - data.effects = CoC7ActiveEffect.prepareActiveEffectCategories( - this.actor.effects - ) + data.effects = + this.actor.type === 'character' + ? CoC7ActiveEffect.prepareActiveEffectCategories(this.actor.effects) + : CoC7ActiveEffect.prepareNPCActiveEffectCategories(this.actor.effects) data.permissionLimited = !game.user.isGM && @@ -1407,9 +1408,8 @@ export class CoC7ActorSheet extends ActorSheet { li.append(div.hide()) CoC7Parser.bindEventsHandler(div) - div.slideDown(200) + div.slideDown(200, () => li.toggleClass('expanded')) } - li.toggleClass('expanded') // $(event.currentTarget).toggleClass('expanded'); } @@ -1424,25 +1424,25 @@ export class CoC7ActorSheet extends ActorSheet { const pannel = $(section).find(`.pannel.${pannelClass}`) // pannel.toggle(); if (pannel.hasClass('expanded')) { - pannel.slideUp(200) + // Could remove expanded class and use (pannel.is(':visible')) + pannel.slideUp(200, () => pannel.toggleClass('expanded')) } else { - pannel.slideDown(200) + pannel.slideDown(200, () => pannel.toggleClass('expanded')) } - pannel.toggleClass('expanded') } _onInventoryHeader (event) { event.preventDefault() - $(event.currentTarget) - .siblings('li') - .toggle() + const li = $(event.currentTarget).siblings('li') + if (li.is(':visible')) li.slideUp(200) + else li.slideDown(200) } _onItemHeader (event) { event.preventDefault() - $(event.currentTarget) - .next('ol') - .toggle() + const ol = $(event.currentTarget).next('ol') + if (ol.is(':visible')) ol.slideUp(200) + else ol.slideDown(200) } async _onItemPopup (event) { diff --git a/module/actors/sheets/npc-sheet.js b/module/actors/sheets/npc-sheet.js index a51f4a08..7918c227 100644 --- a/module/actors/sheets/npc-sheet.js +++ b/module/actors/sheets/npc-sheet.js @@ -145,7 +145,8 @@ export class CoC7NPCSheet extends CoC7ActorSheet { dragDrop: [{ dragSelector: '.item', dropSelector: null }], template: 'systems/CoC7/templates/actors/npc-sheet.html', width: 580, - resizable: true + resizable: false, + minimizable: true }) } @@ -171,13 +172,14 @@ export class CoC7NPCSheet extends CoC7ActorSheet { } static forceAuto (app, html) { - const cell = html.find('.pannel.expanded.resizededitor') - if (cell.length) { - cell.height( - Math.max(200, (html.height() - cell.position().top - 8) / cell.length) + - 'px' - ) - } + html.height('auto') + // const cell = html.find('.pannel.expanded.resizededitor') + // if (cell.length) { + // cell.height( + // Math.max(200, (html.height() - cell.position().top - 8) / cell.length) + + // 'px' + // ) + // } } setPosition (a) { diff --git a/styles/sheets/actor.less b/styles/sheets/actor.less index a4940a97..37ba9e10 100644 --- a/styles/sheets/actor.less +++ b/styles/sheets/actor.less @@ -111,6 +111,9 @@ line-height: 0.9375rem; height: 100%; } + .pannel:not(.expanded) { + display: none; + } .npc-specialization { color: #a42; font-size: 70%; diff --git a/styles/sheets/sheet.less b/styles/sheets/sheet.less index 2bd790bb..16d7012b 100644 --- a/styles/sheets/sheet.less +++ b/styles/sheets/sheet.less @@ -42,7 +42,7 @@ .item-image { flex: 0 0 16px; background-size: 16px; - margin-right: 5px; + margin: 0 5px 0 0; height: 16px; border: none; &:hover { diff --git a/templates/actors/npc-sheet.html b/templates/actors/npc-sheet.html index 46518578..c0cef77c 100644 --- a/templates/actors/npc-sheet.html +++ b/templates/actors/npc-sheet.html @@ -325,7 +325,7 @@

    {{localize 'CoC7.Skills'}}

    {{/unless}} -
    +
    {{> "systems/CoC7/templates/actors/parts/npc-skills.html"}}
    @@ -339,7 +339,7 @@

    {{localize 'CoC7.Combat'}}

    {{/unless}} -
    +
     
    @@ -379,7 +379,8 @@

    {{localize 'CoC7.Notes'}}

    {{localize 'CoC7.Effects'}}

    -
    +
    + {{> "systems/CoC7/templates/common/active-effects.hbs"}}
    @@ -390,7 +391,7 @@

    {{localize 'CoC7.Effects'}}

    {{localize 'CoC7.GmNotes'}}

    -
    +
    {{editor content=data.description.keeper target="data.description.keeper" button=true owner=owner editable=editable}} {{#if hasConditions}} diff --git a/templates/actors/parts/npc-skills.html b/templates/actors/parts/npc-skills.html index a4de2893..f9e5c5f5 100644 --- a/templates/actors/parts/npc-skills.html +++ b/templates/actors/parts/npc-skills.html @@ -1,4 +1,5 @@ -{{#each skills as |skill id|}} +
    + {{#each skills as |skill id|}}
    {{#if skill.data.properties.special}}
    {{skill.data.specialization}}
    @@ -16,4 +17,5 @@

    ${this.link.link}

    ` + } else { + message = game.i18n.format('CoC7.MessageCheckRequestedWait', { check: this.link.link - }), - option - ) + }) + } + chatHelper.createMessage(null, message, option) } break diff --git a/module/apps/link.js b/module/apps/link.js index 1d66c270..f3e0e7bf 100644 --- a/module/apps/link.js +++ b/module/apps/link.js @@ -8,7 +8,12 @@ export class CoC7Link { constructor () { this._linkData = { type: CoC7Link.LINK_TYPE.CHECK, - check: CoC7Link.CHECK_TYPE.SKILL + check: CoC7Link.CHECK_TYPE.SKILL, + effect: { + label: game.i18n.localize('CoC7.EffectNew'), + icon: 'icons/svg/aura.svg', + changes: [] + } } } @@ -45,7 +50,8 @@ export class CoC7Link { return { CHECK: 1, SANLOSS: 2, - ITEM: 3 + ITEM: 3, + EFFECT: 4 } } @@ -69,6 +75,7 @@ export class CoC7Link { data.isCheck = this.is.check data.isSanloss = this.is.sanloss data.isItem = this.is.item + data.isEffect = this.is.effect return data } @@ -206,6 +213,12 @@ export class CoC7Link { // San Data this._linkData.sanMin = x.sanMin this._linkData.sanMax = x.sanMax + + // Effect + if (this.is.effect || x.object) { + this._linkData.effect = foundry.utils.deepClone(x.object) + if (!this._linkData.effect.changes) this._linkData.effect.changes = [] + } } get type () { @@ -220,6 +233,8 @@ export class CoC7Link { return 'attribute' case CoC7Link.CHECK_TYPE.SKILL: return 'skill' + case CoC7Link.CHECK_TYPE.EFFECT: + return 'effect' default: return undefined } @@ -238,6 +253,9 @@ export class CoC7Link { case 'item': this._linkData.type = CoC7Link.LINK_TYPE.ITEM break + case 'effect': + this._linkData.type = CoC7Link.LINK_TYPE.EFFECT + break default: this._linkData.type = undefined break @@ -326,6 +344,12 @@ export class CoC7Link { }, set item (x) { if (x === true) link.type = CoC7Link.LINK_TYPE.ITEM + }, + get effect () { + return link.type === CoC7Link.LINK_TYPE.EFFECT + }, + set effect (x) { + if (x === true) link.type = CoC7Link.LINK_TYPE.EFFECT } } } @@ -421,8 +445,33 @@ export class CoC7Link { return link } + case CoC7Link.LINK_TYPE.EFFECT: { + let effectData = foundry.utils.deepClone(this._linkData.effect) + if (!this.effectIsTemp) delete effectData.duration + if (effectData.changes.length === 0) delete effectData.changes + if (!effectData.disabled) delete effectData.disabled + if (!effectData.tint) delete effectData.tint + let link = `@coc7.effect[${JSON.stringify(effectData)}]` + if ( + this._linkData.hasLabel && + typeof this._linkData.label != 'undefined' + ) + link += `{${this._linkData.label}}` + return link + } + default: return null } } + + get effectIsTemp () { + if (!this._linkData.effect.duration) return false + const duration = + this._linkData.effect.duration.seconds ?? + (this._linkData.effect.duration.rounds || + this._linkData.effect.duration.turns) ?? + 0 + return duration > 0 + } } diff --git a/module/apps/parser.js b/module/apps/parser.js index 0c835944..a7866ba4 100644 --- a/module/apps/parser.js +++ b/module/apps/parser.js @@ -242,10 +242,7 @@ export class CoC7Parser { text = TextEditor._getTextNodes(html) // Alternative regex : '@(coc7).([^\[]+)\[([^\]]+)\](?:{([^}]+)})?' - const rgx = new RegExp( - '@(coc7).(.*?)\\[([^\\]]+)\\]' + '(?:{([^}]+)})?', - 'gi' - ) + const rgx = new RegExp('@(coc7).(.*?)\\[(.*)\\]' + '(?:{([^}]+)})?', 'gi') TextEditor._replaceTextContent(text, rgx, CoC7Parser._createLink) return html.innerHTML } @@ -261,12 +258,20 @@ export class CoC7Parser { static _onDragCoC7Link (event) { const a = event.currentTarget - const i = a.querySelector('i.link-icon') + const i = a.querySelector('[data-link-icon]') const data = duplicate(a.dataset) data.linkType = 'coc7-link' data.CoC7Type = 'link' data.icon = null + if ( + data.object && + (typeof data.object === 'string' || data.object instanceof String) + ) { + data.object = JSON.parse(data.object) + data.type = 'effect' + } + if ( i.dataset && i.dataset.linkIcon && @@ -276,6 +281,10 @@ export class CoC7Parser { } data.displayName = a.dataset.displayName ? a.innerText : null event.originalEvent.dataTransfer.setData('text/plain', JSON.stringify(data)) + const pouet = JSON.parse( + event.originalEvent.dataTransfer.getData('text/plain') + ) + const prout = 45 } static _createLink (match, tag, type, options, name) { @@ -291,20 +300,25 @@ export class CoC7Parser { const data = { cls: ['coc7-link'], dataset: { check: type }, - icon: 'fas fa-dice', + icon: null, blind: false, name: name } const matches = options.matchAll(/[^,]+/gi) - for (const match of Array.from(matches)) { - let [key, value] = match[0].split(':') - if (key === 'icon') data.icon = value - if (key === 'blind' && typeof value === 'undefined') { - value = true - data.blind = true && ['check'].includes(type.toLowerCase()) + if ('effect' == type) { + data.effect = JSON.parse(options) + data.dataset.object = options + } else { + for (const match of Array.from(matches)) { + let [key, value] = match[0].split(':') + if (key === 'icon') data.icon = value + if (key === 'blind' && typeof value === 'undefined') { + value = true + data.blind = true && ['check'].includes(type.toLowerCase()) + } + data.dataset[key] = value } - data.dataset[key] = value } let title @@ -330,9 +344,8 @@ export class CoC7Parser { data.dataset.type?.toLowerCase() ) ) { - humanName = CoC7Utilities.getCharacteristicNames( - data.dataset.name - )?.label + humanName = CoC7Utilities.getCharacteristicNames(data.dataset.name) + ?.label } title = game.i18n.format( `CoC7.LinkCheck${!data.dataset.difficulty ? '' : 'Diff'}${ @@ -371,6 +384,8 @@ export class CoC7Parser { } ) break + case 'effect': + title = data.effect.label default: break } @@ -386,11 +401,16 @@ export class CoC7Parser { a.dataset[k] = v } a.draggable = true - a.innerHTML = `${ - data.blind ? '' : '' - }${ - data.name - }` + data.icon = data.icon ?? data.effect?.icon ?? 'fas fa-dice' + // check if it's an image or an icon + if (data.icon.includes('\\') || data.icon.includes('.')) + data.img = data.icon + if (data.blind) a.innerHTML += '' + if (data.img) + a.innerHTML += `` + else + a.innerHTML += `` + a.innerHTML += `${data.name}` return a } diff --git a/module/coc7.js b/module/coc7.js index 28ea939b..cf9558ab 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -278,6 +278,19 @@ Hooks.on('deleteActiveEffect', (data, options, userId) => { } }) +// This will hide the item called '__CoC7InternalItem__' +// This item is used for internal purposes and should not be seen by anyone +Hooks.on('changeSidebarTab', directory => { + if (directory instanceof ItemDirectory) { + const item = game.items.find(i => i.name === '__CoC7InternalItem__') + if (item) { + const html = directory._element + const itemElement = html.find(`[data-document-id='${item.id}']`) + if (itemElement) itemElement[0].style.display = 'none' + } + } +}) + Hooks.on('hotbarDrop', async (bar, data, slot) => CoC7Utilities.createMacro(bar, data, slot) ) @@ -395,14 +408,14 @@ Hooks.on('ready', async () => { game.settings.get('CoC7', 'boutOfMadnessSummaryTable') === 'none' ? null : game.tables.get( - game.settings.get('CoC7', 'boutOfMadnessSummaryTable') - ), + game.settings.get('CoC7', 'boutOfMadnessSummaryTable') + ), boutOfMadness_RealTime: game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') === 'none' ? null : game.tables.get( - game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') - ) + game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') + ) // maniasIndex: ge.settings.get('CoC7', 'boutOfMadnessPhobiasIndex'), // phobiasIndex: game.settings.get('CoC7', 'boutOfMadnessManiasIndex'), // phobias: ('none' == game.settings.get('CoC7', 'samplePhobiasTable'))?null:game.tables.get(game.settings.get('CoC7', 'samplePhobiasTable')), diff --git a/styles/sheets/form-applications.less b/styles/sheets/form-applications.less new file mode 100644 index 00000000..199de823 --- /dev/null +++ b/styles/sheets/form-applications.less @@ -0,0 +1,7 @@ +#link-creation{ + .effect-options{ + .tab[data-tab]{ + min-height: 10.5rem; + } + } +} \ No newline at end of file diff --git a/styles/system/index.less b/styles/system/index.less index 45cb2456..dfa912d4 100644 --- a/styles/system/index.less +++ b/styles/system/index.less @@ -24,6 +24,7 @@ @import '../sheets/development.less'; @import '../sheets/items.less'; @import '../sheets/occupation.less'; +@import '../sheets/form-applications.less'; @import '../sheets/sheet.less'; @import '../sheets/sheets.less'; @import '../sheets/vehicle.less'; diff --git a/styles/system/inline.less b/styles/system/inline.less index 696de9d4..378ea3e5 100644 --- a/styles/system/inline.less +++ b/styles/system/inline.less @@ -15,3 +15,18 @@ font-size: 0.75rem; text-align: left; } + +a.coc7-link { + display: inline-flex; + align-items: center; + img { + border: none; + width: 1rem; + margin-right: 0.2rem; + } +} + +.chat-message .message-content .effect-message { + border: 0.2rem groove; + padding: 0.5rem; +} diff --git a/templates/apps/link-creation.html b/templates/apps/link-creation.html index e346892b..4ccd288e 100644 --- a/templates/apps/link-creation.html +++ b/templates/apps/link-creation.html @@ -72,6 +72,162 @@
    {{/if}} + {{#if link.is.effect}} +
    + + + + + + + +
    + +
    + +
    + +
    +
    + +
    + +
    + {{filePicker target="effect.icon" type="image"}} + +
    +
    + +
    + +
    + + +
    +
    + +
    + + +
    + + {{#if isActorEffect}} +
    + +
    + +
    +
    + {{/if}} + + {{#if isItemEffect}} +
    + +
    + +
    +
    + {{/if}} + +
    + + {{#if data.hasLabel}} +
    + +
    + {{/if}} +
    +
    + + +
    +
    + +
    + +
    +
    + +
    +
    + +
    + + + + +
    +
    + + + +
    + + +
    +
    +
    {{ localize "EFFECT.ChangeKey" }}
    +
    {{ localize "EFFECT.ChangeMode" }}
    +
    {{ localize "EFFECT.ChangeValue" }}
    +
    + +
    +
    +
      + {{#each data.effect.changes as |change i|}} +
    1. +
      + +
      +
      + +
      +
      + +
      +
      + +
      +
    2. + {{/each}} +
    +
    + + +
    + {{/if}} + {{#if fromGame}}
    {{/if}} + {{#unless link.is.effect}}
    {{#unless link.is.item}}
    - - {{#if data.forceModifiers}}
    @@ -163,6 +318,7 @@
    {{/if}} + {{/unless}}
    {{#if link.link}} From a57101d02fd407228b8b04c9f0e54115ee118975 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Fri, 5 Aug 2022 00:11:52 +0200 Subject: [PATCH 679/726] Parser journal --- module/actors/sheets/base.js | 11 +++++++++ module/apps/canvas.js | 2 +- module/apps/link.js | 4 +++- module/apps/parser.js | 45 ++++++++++++++++++++++-------------- 4 files changed, 43 insertions(+), 19 deletions(-) diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 6550313d..672f895c 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -14,6 +14,7 @@ import { CoC7Parser } from '../../apps/parser.js' import { DamageCard } from '../../chat/cards/damage.js' import { CoC7LinkCreationDialog } from '../../apps/link-creation-dialog.js' import CoC7ActiveEffect from '../../active-effect.js' +import { CoC7Link } from '../../apps/link.js' /** * Extend the basic ActorSheet with some very simple modifications @@ -1257,6 +1258,16 @@ export class CoC7ActorSheet extends ActorSheet { } async _onDrop (event) { + const dataString = event.dataTransfer.getData('text/plain') + const data = JSON.parse(dataString) + if (data.linkType === 'coc7-link') { + if (data.type === 'effect') { + const link = await CoC7Link.fromData(data) + if( link.data.effect){ + this.actor.createEmbeddedDocuments( 'ActiveEffect', [link.data.effect]) + } + } + } await super._onDrop(event) } diff --git a/module/apps/canvas.js b/module/apps/canvas.js index db824f01..5e387133 100644 --- a/module/apps/canvas.js +++ b/module/apps/canvas.js @@ -44,7 +44,7 @@ export class CoC7Canvas { // Apply to everyone ? or only players ? or nobody } else { for( const t of dropTargetTokens){ - await t.actor.createEmbeddedDocuments( 'ActiveEffect', [link._linkData.effect]) + await t.actor.createEmbeddedDocuments( 'ActiveEffect', [link.data.effect]) } } } else { diff --git a/module/apps/link.js b/module/apps/link.js index f3e0e7bf..579719b8 100644 --- a/module/apps/link.js +++ b/module/apps/link.js @@ -216,7 +216,9 @@ export class CoC7Link { // Effect if (this.is.effect || x.object) { - this._linkData.effect = foundry.utils.deepClone(x.object) + if( x.object && (typeof x.object === 'string' || x.object instanceof String)){ + this._linkData.effect = JSON.parse(x.object) + } else this._linkData.effect = foundry.utils.deepClone(x.object) if (!this._linkData.effect.changes) this._linkData.effect.changes = [] } } diff --git a/module/apps/parser.js b/module/apps/parser.js index a7866ba4..049dcbc5 100644 --- a/module/apps/parser.js +++ b/module/apps/parser.js @@ -47,28 +47,33 @@ export class CoC7Parser { const data = JSON.parse(dataString) if (data.linkType === 'coc7-link') { event.stopPropagation() - if ( - !event.shiftKey && - (typeof data.difficulty === 'undefined' || - typeof data.modifier === 'undefined') - ) { - const usage = await RollDialog.create({ - disableFlatDiceModifier: true - }) - if (usage) { - data.modifier = usage.get('bonusDice') - data.difficulty = usage.get('difficulty') + if (data.type !== 'effect') { + if ( + !event.shiftKey && + (typeof data.difficulty === 'undefined' || + typeof data.modifier === 'undefined') + ) { + const usage = await RollDialog.create({ + disableFlatDiceModifier: true + }) + if (usage) { + data.modifier = usage.get('bonusDice') + data.difficulty = usage.get('difficulty') + } + } + if (game.settings.get('core', 'rollMode') === 'blindroll') { + data.blind = true } - } - if (game.settings.get('core', 'rollMode') === 'blindroll') { - data.blind = true - } - const link = CoC7Parser.createCoC7Link(data) - if (link) { editor.insertContent(link) } + } else { + const link = await CoC7Link.fromData(data) + editor.insertContent(link.link) + } + + } else if (isCtrlKey(event)) { event.stopPropagation() @@ -440,6 +445,8 @@ export class CoC7Parser { return } if (canvas.tokens.controlled.length) { + const link = await CoC7Link.fromData(options) + for (const token of canvas.tokens.controlled) { switch (options.check) { case 'check': @@ -484,6 +491,10 @@ export class CoC7Parser { return token.actor.weaponCheck(options, event.shiftKey) } + case 'effect': { + await token.actor.createEmbeddedDocuments( 'ActiveEffect', [link.data.effect]) + } + default: } } From 5be3e6a1ebadcd7f75e797991195a782d155fc99 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Fri, 5 Aug 2022 00:13:14 +0200 Subject: [PATCH 680/726] Regex modif --- module/apps/parser.js | 1 + 1 file changed, 1 insertion(+) diff --git a/module/apps/parser.js b/module/apps/parser.js index 049dcbc5..8535f2bd 100644 --- a/module/apps/parser.js +++ b/module/apps/parser.js @@ -247,6 +247,7 @@ export class CoC7Parser { text = TextEditor._getTextNodes(html) // Alternative regex : '@(coc7).([^\[]+)\[([^\]]+)\](?:{([^}]+)})?' + // Before active effect : '@(coc7).(.*?)\\[([^\\]]+)\\]' + '(?:{([^}]+)})?', const rgx = new RegExp('@(coc7).(.*?)\\[(.*)\\]' + '(?:{([^}]+)})?', 'gi') TextEditor._replaceTextContent(text, rgx, CoC7Parser._createLink) return html.innerHTML From 7e4e371c5c1cba0da37305f0a5f392f2b16610d8 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Thu, 4 Aug 2022 22:47:26 +0000 Subject: [PATCH 681/726] Updated translations list --- .github/TRANSLATIONS.md | 472 +++++++++++++++++++--------------------- 1 file changed, 220 insertions(+), 252 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index c19aa069..b5f34991 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,215 +2,207 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The **it** translation is currently up to date +The following translations have been abandoned **cn**, **cs**, **de**, **es**, [are you able to help?](./ABANDONED.md) -The following translations have been abandoned **cn**, **cs**, **de**, [are you able to help?](./ABANDONED.md) - -| Key | es | fr | ja | ko | pl | pt-BR | sv | zh-TW | +| Key | fr | it | ja | ko | pl | pt-BR | sv | zh-TW | | :------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **199** | **185** | **187** | **186** | **187** | **185** | **185** | **185** | -| [CoC7.ABarrier](#coc7abarrier) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AHazard](#coc7ahazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActionCost](#coc7actioncost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActionCostOnFail](#coc7actioncostonfail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Actions](#coc7actions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorDataLinked](#coc7actordatalinked) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorDataNotLinked](#coc7actordatanotlinked) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorImported](#coc7actorimported) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorIsTokenHint](#coc7actoristokenhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Add](#coc7add) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddActorToChase](#coc7addactortochase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddBonusDie](#coc7addbonusdie) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddParticipant](#coc7addparticipant) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AdjustedMovement](#coc7adjustedmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AlreadyEncountered](#coc7alreadyencountered) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ArmorIgnored](#coc7armorignored) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AskDamageRoll](#coc7askdamageroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AskIntentions](#coc7askintentions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AskRoll](#coc7askroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Assist](#coc7assist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AttackManeuver](#coc7attackmaneuver) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AttemptBreakDown](#coc7attemptbreakdown) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AttemptNegotiateObstacle](#coc7attemptnegotiateobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Barrier](#coc7barrier) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BeingCautious](#coc7beingcautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BeingVeryCautious](#coc7beingverycautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BreakDown](#coc7breakdown) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Breakable](#coc7breakable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CardType](#coc7cardtype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Cautious](#coc7cautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CautiousApproach](#coc7cautiousapproach) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.AdjustedMovementShort](#coc7chaseadjustedmovementshort) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.ChasersMax](#coc7chasechasersmax) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.ChasersMin](#coc7chasechasersmin) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.CheckName](#coc7chasecheckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.InitiativeShort](#coc7chaseinitiativeshort) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.PreysMax](#coc7chasepreysmax) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.PreysMin](#coc7chasepreysmin) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ChaseSetup](#coc7chasesetup) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckFailed](#coc7checkfailed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckName](#coc7checkname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckPassed](#coc7checkpassed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CleanSkillList](#coc7cleanskilllist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CleanSkillListHint](#coc7cleanskilllisthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ClearAllConditions](#coc7clearallconditions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmCut2Chase](#coc7confirmcut2chase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmCut2ChaseHint](#coc7confirmcut2chasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmNextChaseRound](#coc7confirmnextchaseround) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmNextChaseRoundHint](#coc7confirmnextchaseroundhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmResetChase](#coc7confirmresetchase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmResetChaseHint](#coc7confirmresetchasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmRestartChase](#coc7confirmrestartchase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmRestartChaseHint](#coc7confirmrestartchasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConsumeBonusDice](#coc7consumebonusdice) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CutToTheChase](#coc7cuttothechase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Damage](#coc7damage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DamageDealTo](#coc7damagedealto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DamageDealt](#coc7damagedealt) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DamageOnFail](#coc7damageonfail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DecreaseMovementAction](#coc7decreasemovementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DefinitelyInsane](#coc7definitelyinsane) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseImportingName](#coc7dholehouseimportingname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DoesNotMeetMinimumReqToBeAdded](#coc7doesnotmeetminimumreqtobeadded) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DontMoveToLocation](#coc7dontmovetolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DragOnCanvas](#coc7dragoncanvas) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Edit](#coc7edit) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorBeneficiaryAtMaxBonus](#coc7errorbeneficiaryatmaxbonus) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorEmptyLocationsList](#coc7erroremptylocationslist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorInvalidCardType](#coc7errorinvalidcardtype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ErrorInvalidRollType](#coc7errorinvalidrolltype) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ErrorMissingKeeperUser](#coc7errormissingkeeperuser) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ErrorNoTokensSelected](#coc7errornotokensselected) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorParticipantAtMaxBonus](#coc7errorparticipantatmaxbonus) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorTokenNotOnScene](#coc7errortokennotonscene) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FINISH](#coc7finish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FacingObstacle](#coc7facingobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FileUploadError](#coc7fileuploaderror) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| **Remaining**: | **191** | **6** | **193** | **192** | **193** | **191** | **191** | **191** | +| [CoC7.ABarrier](#coc7abarrier) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AHazard](#coc7ahazard) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActionCost](#coc7actioncost) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActionCostOnFail](#coc7actioncostonfail) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Actions](#coc7actions) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorDataLinked](#coc7actordatalinked) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorDataNotLinked](#coc7actordatanotlinked) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorImported](#coc7actorimported) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorIsTokenHint](#coc7actoristokenhint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Add](#coc7add) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddActorToChase](#coc7addactortochase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddBonusDie](#coc7addbonusdie) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddParticipant](#coc7addparticipant) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AdjustedMovement](#coc7adjustedmovement) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AlreadyEncountered](#coc7alreadyencountered) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ArmorIgnored](#coc7armorignored) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AskDamageRoll](#coc7askdamageroll) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AskIntentions](#coc7askintentions) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AskRoll](#coc7askroll) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Assist](#coc7assist) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AttemptBreakDown](#coc7attemptbreakdown) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AttemptNegotiateObstacle](#coc7attemptnegotiateobstacle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Barrier](#coc7barrier) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BeingCautious](#coc7beingcautious) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BeingVeryCautious](#coc7beingverycautious) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BreakDown](#coc7breakdown) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Breakable](#coc7breakable) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Cautious](#coc7cautious) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CautiousApproach](#coc7cautiousapproach) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.AdjustedMovementShort](#coc7chaseadjustedmovementshort) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.ChasersMax](#coc7chasechasersmax) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.ChasersMin](#coc7chasechasersmin) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.CheckName](#coc7chasecheckname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.InitiativeShort](#coc7chaseinitiativeshort) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.PreysMax](#coc7chasepreysmax) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.PreysMin](#coc7chasepreysmin) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ChaseSetup](#coc7chasesetup) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckFailed](#coc7checkfailed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckName](#coc7checkname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckPassed](#coc7checkpassed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CleanSkillList](#coc7cleanskilllist) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CleanSkillListHint](#coc7cleanskilllisthint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ClearAllConditions](#coc7clearallconditions) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmCut2Chase](#coc7confirmcut2chase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmCut2ChaseHint](#coc7confirmcut2chasehint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmNextChaseRound](#coc7confirmnextchaseround) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmNextChaseRoundHint](#coc7confirmnextchaseroundhint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmResetChase](#coc7confirmresetchase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmResetChaseHint](#coc7confirmresetchasehint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmRestartChase](#coc7confirmrestartchase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmRestartChaseHint](#coc7confirmrestartchasehint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConsumeBonusDice](#coc7consumebonusdice) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Create](#coc7create) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CutToTheChase](#coc7cuttothechase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Damage](#coc7damage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DamageDealTo](#coc7damagedealto) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DamageDealt](#coc7damagedealt) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DamageOnFail](#coc7damageonfail) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DecreaseMovementAction](#coc7decreasemovementaction) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DefinitelyInsane](#coc7definitelyinsane) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Delete](#coc7delete) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseImportingName](#coc7dholehouseimportingname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Disable](#coc7disable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DoesNotMeetMinimumReqToBeAdded](#coc7doesnotmeetminimumreqtobeadded) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DontMoveToLocation](#coc7dontmovetolocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DragOnCanvas](#coc7dragoncanvas) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Duration](#coc7duration) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Edit](#coc7edit) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.EffectNew](#coc7effectnew) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Enable](#coc7enable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorBeneficiaryAtMaxBonus](#coc7errorbeneficiaryatmaxbonus) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorEmptyLocationsList](#coc7erroremptylocationslist) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorNoTokensSelected](#coc7errornotokensselected) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorParticipantAtMaxBonus](#coc7errorparticipantatmaxbonus) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorTokenNotOnScene](#coc7errortokennotonscene) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.FINISH](#coc7finish) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.FacingObstacle](#coc7facingobstacle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.FileUploadError](#coc7fileuploaderror) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.GotLucky](#coc7gotlucky) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.GroupRollCard](#coc7grouprollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Hazard](#coc7hazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.IncludeEscapees](#coc7includeescapees) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.IncludeLatecomers](#coc7includelatecomers) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.IncreaseMovementAction](#coc7increasemovementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Initialize](#coc7initialize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Initiative](#coc7initiative) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.InsertLocation](#coc7insertlocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LocationCoordinate](#coc7locationcoordinate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LocationInit](#coc7locationinit) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LocationNotEmpty](#coc7locationnotempty) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Locations](#coc7locations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LuckNotEnough](#coc7lucknotenough) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MakeActive](#coc7makeactive) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MaxPossibleSanLoss](#coc7maxpossiblesanloss) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorActor](#coc7migrateerroractor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorItem](#coc7migrateerroritem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorScene](#coc7migrateerrorscene) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorTable](#coc7migrateerrortable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.UpdateCurrentScene](#coc7migrateupdatecurrentscene) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MoveBackward](#coc7movebackward) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MoveForward](#coc7moveforward) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MoveToLocation](#coc7movetolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MovementAction](#coc7movementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NeedMin2Participants](#coc7needmin2participants) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NeedRecalculate](#coc7needrecalculate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NeedToRecalculate](#coc7needtorecalculate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Negotiate](#coc7negotiate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NextRound](#coc7nextround) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoDamageDealt](#coc7nodamagedealt) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoValidCheck](#coc7novalidcheck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoValidSkill](#coc7novalidskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NotAllHaveSpeedRoll](#coc7notallhavespeedroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NothingToRoll](#coc7nothingtoroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Obstacle](#coc7obstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleDamage](#coc7obstacledamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleFail](#coc7obstaclefail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleFumble](#coc7obstaclefumble) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleHasHitPoint](#coc7obstaclehashitpoint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleName](#coc7obstaclename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstaclePassed](#coc7obstaclepassed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.OpenObstacleResolutionCard](#coc7openobstacleresolutioncard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.OverrideCalc](#coc7overridecalc) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantAlreadyProcessed](#coc7participantalreadyprocessed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantDataMissing](#coc7participantdatamissing) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantDropHint](#coc7participantdrophint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantNotEnoughMovement](#coc7participantnotenoughmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantNotFound](#coc7participantnotfound) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantUuidNotFound](#coc7participantuuidnotfound) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantsList](#coc7participantslist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PenaltyDice](#coc7penaltydice) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PickDirectory](#coc7pickdirectory) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PlayerMovesToLocation](#coc7playermovestolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.GotLucky](#coc7gotlucky) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Hazard](#coc7hazard) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.IncludeEscapees](#coc7includeescapees) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.IncludeLatecomers](#coc7includelatecomers) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.IncreaseMovementAction](#coc7increasemovementaction) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Initialize](#coc7initialize) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Initiative](#coc7initiative) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.InsertLocation](#coc7insertlocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LocationCoordinate](#coc7locationcoordinate) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LocationInit](#coc7locationinit) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LocationNotEmpty](#coc7locationnotempty) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Locations](#coc7locations) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LuckNotEnough](#coc7lucknotenough) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MakeActive](#coc7makeactive) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MaxPossibleSanLoss](#coc7maxpossiblesanloss) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorActor](#coc7migrateerroractor) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorItem](#coc7migrateerroritem) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorScene](#coc7migrateerrorscene) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorTable](#coc7migrateerrortable) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MoveBackward](#coc7movebackward) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MoveForward](#coc7moveforward) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MoveToLocation](#coc7movetolocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MovementAction](#coc7movementaction) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NeedMin2Participants](#coc7needmin2participants) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NeedRecalculate](#coc7needrecalculate) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NeedToRecalculate](#coc7needtorecalculate) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Negotiate](#coc7negotiate) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NextRound](#coc7nextround) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoDamageDealt](#coc7nodamagedealt) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoValidCheck](#coc7novalidcheck) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoValidSkill](#coc7novalidskill) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NotAllHaveSpeedRoll](#coc7notallhavespeedroll) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NothingToRoll](#coc7nothingtoroll) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Obstacle](#coc7obstacle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleDamage](#coc7obstacledamage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleFail](#coc7obstaclefail) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleFumble](#coc7obstaclefumble) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleHasHitPoint](#coc7obstaclehashitpoint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleName](#coc7obstaclename) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstaclePassed](#coc7obstaclepassed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.OpenObstacleResolutionCard](#coc7openobstacleresolutioncard) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.OverrideCalc](#coc7overridecalc) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantAlreadyProcessed](#coc7participantalreadyprocessed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantDataMissing](#coc7participantdatamissing) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantDropHint](#coc7participantdrophint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantNotEnoughMovement](#coc7participantnotenoughmovement) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantNotFound](#coc7participantnotfound) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantUuidNotFound](#coc7participantuuidnotfound) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantsList](#coc7participantslist) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PenaltyDice](#coc7penaltydice) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PickDirectory](#coc7pickdirectory) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PlayerMovesToLocation](#coc7playermovestolocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [CoC7.Polish](#coc7polish) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ReflectObstacleChanges](#coc7reflectobstaclechanges) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RegularRollCard](#coc7regularrollcard) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.Remove](#coc7remove) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RemoveBonusDie](#coc7removebonusdie) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RemoveLocation](#coc7removelocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RemoveObstacle](#coc7removeobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Reset](#coc7reset) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Restart](#coc7restart) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Sane](#coc7sane) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SelectNewSkill](#coc7selectnewskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SomethingInTheWay](#coc7somethingintheway) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SpeedCheck](#coc7speedcheck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.StartingIndex](#coc7startingindex) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.StartingRange](#coc7startingrange) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TooFast](#coc7toofast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TooSlow](#coc7tooslow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ToolTipCombat](#coc7tooltipcombat) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.ToolTipSanity](#coc7tooltipsanity) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.TryToBreak](#coc7trytobreak) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TryToGetPastBarriers](#coc7trytogetpastbarriers) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TryToNegotiateHazard](#coc7trytonegotiatehazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnarmedWeaponName](#coc7unarmedweaponname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Update](#coc7update) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.VehicleChase](#coc7vehiclechase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.WaitForPlayerInput](#coc7waitforplayerinput) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.WeaponSkillMain](#coc7weaponskillmain) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.YouLostTime](#coc7youlosttime) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.YouTakeNoDamage](#coc7youtakenodamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.YouTakeSomeDamage](#coc7youtakesomedamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.days](#coc7days) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.months](#coc7months) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ReflectObstacleChanges](#coc7reflectobstaclechanges) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Remove](#coc7remove) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RemoveBonusDie](#coc7removebonusdie) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RemoveLocation](#coc7removelocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RemoveObstacle](#coc7removeobstacle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Reset](#coc7reset) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Restart](#coc7restart) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Sane](#coc7sane) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SelectNewSkill](#coc7selectnewskill) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SomethingInTheWay](#coc7somethingintheway) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpeedCheck](#coc7speedcheck) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.StartingIndex](#coc7startingindex) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.StartingRange](#coc7startingrange) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TooFast](#coc7toofast) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TooSlow](#coc7tooslow) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TryToBreak](#coc7trytobreak) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TryToGetPastBarriers](#coc7trytogetpastbarriers) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TryToNegotiateHazard](#coc7trytonegotiatehazard) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UnarmedWeaponName](#coc7unarmedweaponname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Update](#coc7update) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.VehicleChase](#coc7vehiclechase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.WaitForPlayerInput](#coc7waitforplayerinput) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.WeaponSkillMain](#coc7weaponskillmain) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.YouLostTime](#coc7youlosttime) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.YouTakeNoDamage](#coc7youtakenodamage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.YouTakeSomeDamage](#coc7youtakesomedamage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleChaseSettings](#settingstitlechasesettings) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.TitleChaseSettings](#settingstitlechasesettings) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ##### CoC7.ABarrier @@ -304,10 +296,6 @@ The following translations have been abandoned **cn**, **cs**, **de**, [are you ` "CoC7.Assist": "Assist ally",` -##### CoC7.AttackManeuver - -` "CoC7.AttackManeuver": "Attack Maneuver",` - ##### CoC7.AttemptBreakDown ` "CoC7.AttemptBreakDown": "Attempt to break down !!",` @@ -340,10 +328,6 @@ The following translations have been abandoned **cn**, **cs**, **de**, [are you ` "CoC7.Breakable": "Breakable",` -##### CoC7.CardType - -` "CoC7.CardType": "Roll type",` - ##### CoC7.Cautious ` "CoC7.Cautious": "Cautious",` @@ -448,6 +432,10 @@ The following translations have been abandoned **cn**, **cs**, **de**, [are you ` "CoC7.ConsumeBonusDice": "Consume Bonus Dice",` +##### CoC7.Create + +` "CoC7.Create": "Create",` + ##### CoC7.CutToTheChase ` "CoC7.CutToTheChase": "Cut to the chase",` @@ -476,6 +464,10 @@ The following translations have been abandoned **cn**, **cs**, **de**, [are you ` "CoC7.DefinitelyInsane": "Good for the asylum",` +##### CoC7.Delete + +` "CoC7.Delete": "Delete",` + ##### CoC7.DholeHouseActorImporter ` "CoC7.DholeHouseActorImporter": "The Dhole's House Actor Importer JSON",` @@ -500,6 +492,10 @@ The following translations have been abandoned **cn**, **cs**, **de**, [are you ` "CoC7.DholeHousePickYourJSONFile": "Pick the JSON file exported from The Dhole's House",` +##### CoC7.Disable + +` "CoC7.Disable": "Disable",` + ##### CoC7.DoesNotMeetMinimumReqToBeAdded ` "CoC7.DoesNotMeetMinimumReqToBeAdded": "Can not add participant, need at least valid movement action",` @@ -512,10 +508,22 @@ The following translations have been abandoned **cn**, **cs**, **de**, [are you ` "CoC7.DragOnCanvas": "Drag this on canvas to set the position of this location.",` +##### CoC7.Duration + +` "CoC7.Duration": "Duration",` + ##### CoC7.Edit ` "CoC7.Edit": "Edit",` +##### CoC7.EffectNew + +` "CoC7.EffectNew": "New effect",` + +##### CoC7.Enable + +` "CoC7.Enable": "Enable",` + ##### CoC7.ErrorActorHasNoWeaponNamed ` "CoC7.ErrorActorHasNoWeaponNamed": "Actor {actorName} has no weapon named {weaponName}",` @@ -536,18 +544,6 @@ The following translations have been abandoned **cn**, **cs**, **de**, [are you ` "CoC7.ErrorEvaluatingDamage": "Error evaluating damage",` -##### CoC7.ErrorInvalidCardType - -` "CoC7.ErrorInvalidCardType": "Card Type",` - -##### CoC7.ErrorInvalidRollType - -` "CoC7.ErrorInvalidRollType": "Roll Type",` - -##### CoC7.ErrorMissingKeeperUser - -` "CoC7.ErrorMissingKeeperUser": "Your keeper needs to be connected to perform this action",` - ##### CoC7.ErrorNoTokensSelected ` "CoC7.ErrorNoTokensSelected": "No tokens selected",` @@ -600,10 +596,6 @@ The following translations have been abandoned **cn**, **cs**, **de**, [are you ` "CoC7.GotLucky": "You got lucky, this time...",` -##### CoC7.GroupRollCard - -` "CoC7.GroupRollCard": "Group roll card",` - ##### CoC7.Hazard ` "CoC7.Hazard": "Hazard",` @@ -688,10 +680,6 @@ The following translations have been abandoned **cn**, **cs**, **de**, [are you ` "CoC7.Migrate.ErrorTable": "Failed CoC7 system migration for Table {name}: {message}",` -##### CoC7.Migrate.UpdateCurrentScene - -` "CoC7.Migrate.UpdateCurrentScene": "Migrating your current scene",` - ##### CoC7.MoveBackward ` "CoC7.MoveBackward": "Go back",` @@ -836,10 +824,6 @@ The following translations have been abandoned **cn**, **cs**, **de**, [are you ` "CoC7.ReflectObstacleChanges": "Reflect changes to obstacle",` -##### CoC7.RegularRollCard - -` "CoC7.RegularRollCard": "Regular roll card",` - ##### CoC7.Remove ` "CoC7.Remove": "Remove",` @@ -928,14 +912,6 @@ The following translations have been abandoned **cn**, **cs**, **de**, [are you ` "CoC7.TooSlow": "Too slow",` -##### CoC7.ToolTipCombat - -` "CoC7.ToolTipCombat": "
    1. Left click roll check with options
    2. Shift + Left click Immediate regular difficulty roll
    1. Right click Combat opposed maneuver with options
    2. Shift + Right click Immediate combat opposed maneuver
    ",` - -##### CoC7.ToolTipSanity - -` "CoC7.ToolTipSanity": "
    1. Left click roll check with options
    2. Alt/Option + Left click roll sanity loss with options
    3. Shift + Left click Immediate regular difficulty roll
    4. Shift + Alt/Option + Left click roll sanity loss without dice pool options
    1. Right click Opposed check with options
    2. Shift + Right click Immediate opposed check
    1. Alt/Option + Right click Combined check with options
    2. Shift + Alt/Option + Right click Immediate combined check
    ",` - ##### CoC7.TryToBreak ` "CoC7.TryToBreak": "You try to break down that barrier.",` @@ -992,14 +968,6 @@ The following translations have been abandoned **cn**, **cs**, **de**, [are you ` "CoC7.combatCard.automaticSuccess": "Automatic Success",` -##### CoC7.days - -` "CoC7.days": "days(s)",` - -##### CoC7.months - -` "CoC7.months": "months(s)",` - ##### CoC7.rangeCombatCard.SurprisedTargetTitle ` "CoC7.rangeCombatCard.SurprisedTargetTitle": "1 bonus die for surprised target",` From 8233e4a345f849f41e11285411fc77d81b3f2924 Mon Sep 17 00:00:00 2001 From: HavlockV Date: Thu, 4 Aug 2022 22:47:27 +0000 Subject: [PATCH 682/726] [create-pull-request] automated change --- .github/ABANDONED.md | 240 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 237 insertions(+), 3 deletions(-) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index cc9b1cda..60f363db 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -8,8 +8,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry [de.json](#dejson) +[es.json](#esjson) ## cn.json + ``` "CoC7.ActorIsTokenHint": "Actor is a token", "CoC7.ActorDataLinked": "Actor data are linked", @@ -171,7 +173,9 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.ErrorTokenNotOnScene": "Token does not belongs to this location's scene", "CoC7.AddParticipant": "Add Participant", "CoC7.Remove": "Remove", +"CoC7.Delete": "Delete", "CoC7.Edit": "Edit", +"CoC7.Create": "Create", "CoC7.MakeActive": "Make Active", "CoC7.SelectNewSkill": "Select skill", "CoC7.AskDamageRoll": "Ask damage roll", @@ -200,6 +204,9 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.DamageDealTo": "Damage {name} {damage}HP", "CoC7.Add": "Add", "CoC7.Update": "Update", +"CoC7.Enable": "Enable", +"CoC7.Disable": "Disable", +"CoC7.Duration": "Duration", "CoC7.TextFieldInvalidJSON": "Unable to parse the JSON, please try again", "CoC7.ActorImporterUploadError": "Import stopped, unable to write image", "CoC7.FileUploadError": "Unable to write image, file upload error", @@ -227,9 +234,12 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.ToolTipCombat": "
    1. Left click roll check with options
    2. Shift + Left click Immediate regular difficulty roll
    1. Right click Combat opposed maneuver with options
    2. Shift + Right click Immediate combat opposed maneuver
    ", "SETTINGS.TitleChaseSettings": "Chase Settings", "SETTINGS.ChaseShowTokenMovement": "Show token movement.", -"SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location." +"SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.", +"CoC7.EffectNew": "New effect" ``` + ## cs.json + ``` "CoC7.Entities.Character": "Character", "CoC7.Entities.Container": "Container", @@ -442,7 +452,9 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.ErrorTokenNotOnScene": "Token does not belongs to this location's scene", "CoC7.AddParticipant": "Add Participant", "CoC7.Remove": "Remove", +"CoC7.Delete": "Delete", "CoC7.Edit": "Edit", +"CoC7.Create": "Create", "CoC7.MakeActive": "Make Active", "CoC7.SelectNewSkill": "Select skill", "CoC7.AskDamageRoll": "Ask damage roll", @@ -509,6 +521,9 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Cancel": "Cancel", "CoC7.Add": "Add", "CoC7.Update": "Update", +"CoC7.Enable": "Enable", +"CoC7.Disable": "Disable", +"CoC7.Duration": "Duration", "CoC7.TextFieldInvalidCharacters": "There are invalid characters in the text, please fix them or they will be removed", "CoC7.TextFieldInvalidJSON": "Unable to parse the JSON, please try again", "CoC7.ActorImporterUploadError": "Import stopped, unable to write image", @@ -632,9 +647,12 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "SETTINGS.ChaseShowTokenMovement": "Show token movement.", "SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.", "CoC7.getTheExample": "Copy Example", -"CoC7.Copied": "Copied the Example Text to Clipboard" +"CoC7.Copied": "Copied the Example Text to Clipboard", +"CoC7.EffectNew": "New effect" ``` + ## de.json + ``` "CoC7.ActorIsTokenHint": "Actor is a token", "CoC7.ActorDataLinked": "Actor data are linked", @@ -797,7 +815,9 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.ErrorTokenNotOnScene": "Token does not belongs to this location's scene", "CoC7.AddParticipant": "Add Participant", "CoC7.Remove": "Remove", +"CoC7.Delete": "Delete", "CoC7.Edit": "Edit", +"CoC7.Create": "Create", "CoC7.MakeActive": "Make Active", "CoC7.SelectNewSkill": "Select skill", "CoC7.AskDamageRoll": "Ask damage roll", @@ -829,6 +849,9 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.DamageDealTo": "Damage {name} {damage}HP", "CoC7.Add": "Add", "CoC7.Update": "Update", +"CoC7.Enable": "Enable", +"CoC7.Disable": "Disable", +"CoC7.Duration": "Duration", "CoC7.TextFieldInvalidJSON": "Unable to parse the JSON, please try again", "CoC7.ActorImporterUploadError": "Import stopped, unable to write image", "CoC7.FileUploadError": "Unable to write image, file upload error", @@ -882,5 +905,216 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "SETTINGS.ChaseShowTokenMovement": "Show token movement.", "SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.", "CoC7.getTheExample": "Copy Example", -"CoC7.Copied": "Copied the Example Text to Clipboard" +"CoC7.Copied": "Copied the Example Text to Clipboard", +"CoC7.EffectNew": "New effect" +``` + +## es.json + +``` +"CoC7.ActorIsTokenHint": "Actor is a token", +"CoC7.ActorDataLinked": "Actor data are linked", +"CoC7.ActorDataNotLinked": "Actor data are NOT linked", +"CoC7.ActorIsSyntheticActor": "Actor is a synthetic actor (instance of an actor)", +"CoC7.MovementAction": "Movement action", +"CoC7.AdjustedMovement": "Adjusted movement", +"CoC7.DefinitelyInsane": "Good for the asylum", +"CoC7.FINISH": "--F-I-N-I-S-H--", +"CoC7.days": "days(s)", +"CoC7.months": "months(s)", +"CoC7.Restart": "Restart", +"CoC7.Reset": "Reset", +"CoC7.Initiative": "Initiative", +"CoC7.PenaltyDice": "Penalty Dice", +"CoC7.LuckNotEnough": "{name} didn't have enough luck to pass the check", +"CoC7.UpgradeSuccessWithLuck": "Upgrade to {{difficultyName}} success for {{luckToSpend}} luck.", +"CoC7.ErrorMissingKeeperUser": "Your keeper needs to be connected to perform this action", +"CoC7.BonusDieAssailantReason": "Add 1 bonus die (assailant is prone, restrained...)", +"CoC7.PenaltyDieSelfReason": "Add 1 penalty die (for being prone, restrained...)", +"CoC7.RollDifficultyRegularTitle": "Regular difficulty", +"CoC7.RollDifficultyHardTitle": "Hard difficulty", +"CoC7.RollDifficultyExtremeTitle": "Extreme difficulty", +"CoC7.RollDifficultyCriticalTitle": "Critical difficulty", +"CoC7.CardType": "Roll type", +"CoC7.GroupRollCard": "Group roll card", +"CoC7.RegularRollCard": "Regular roll card", +"CoC7.AttackManeuver": "Attack Maneuver", +"CoC7.ArmorIgnored": "Armor Ignored", +"CoC7.combatCard.automaticSuccess": "Automatic Success", +"CoC7.Damage": "Damage", +"CoC7.CheckFailed": "Check failed", +"CoC7.CheckPassed": "Check passed", +"CoC7.CheckMemoryRepressed": "Memory repressed", +"CoC7.rangeCombatCard.SurprisedTargetTitle": "1 bonus die for surprised target", +"CoC7.SkillXpGainDisabled": "XP Gain disabled.", +"CoC7.ErrorInvalidCardType": "Card Type", +"CoC7.ErrorInvalidRollType": "Roll Type", +"CoC7.UnarmedWeaponName": "Unarmed", +"CoC7.CleanSkillList": "Clean skill list", +"CoC7.CleanSkillListHint": "

    This will Clean your skill list by removing specialization from skill name.

    This will avoid to display skill as : 'specialization(specialization(skill))'

    ", +"CoC7.WeaponSkillMain": "Main skill", +"CoC7.AlreadyEncountered": "Already encountered", +"CoC7.AlreadyEncounteredInformation": "Already encountered: {reason} lost {lost}/{max}", +"CoC7.MaxPossibleSanLoss": "Max Possible loss", +"CoC7.InsertLocation": "Insert location", +"CoC7.RemoveLocation": "Remove location", +"CoC7.LocationNotEmpty": "You can't remove a location with an actor", +"CoC7.LocationInit": "You can't remove a starting location", +"CoC7.SomethingInTheWay": "There is something in the way", +"CoC7.FacingObstacle": "You are facing {type}.", +"CoC7.ABarrier": "a barrier", +"CoC7.Barrier": "Barrier", +"CoC7.AHazard": "a hazard", +"CoC7.Hazard": "Hazard", +"CoC7.Obstacle": "Something in the way", +"CoC7.ConsumeBonusDice": "Consume Bonus Dice", +"CoC7.Breakable": "Breakable", +"CoC7.NoValidCheck": "No valid check", +"CoC7.NoValidSkill": "Fake skill", +"CoC7.AskIntentions": "What are your intentions ?", +"CoC7.WaitForPlayerInput": "Wait for player's input", +"CoC7.AskRoll": "Roll {name} ({value}%)", +"CoC7.ActionCost": "Action cost", +"CoC7.Negotiate": "Negotiate", +"CoC7.BreakDown": "Break Down", +"CoC7.BeingCautious": "You elect to take a cautious approach.", +"CoC7.BeingVeryCautious": "You are being very cautious.", +"CoC7.ReflectObstacleChanges": "Reflect changes to obstacle", +"CoC7.PlayerMovesToLocation": "PLayer is moving to the next location", +"CoC7.ObstaclePassed": "You succeesfully found a way.", +"CoC7.GotLucky": "You got lucky, this time...", +"CoC7.ObstacleFail": "You fail.", +"CoC7.ObstacleFumble": "You fail misarably !", +"CoC7.YouLostTime": "You lost time in your attempt.", +"CoC7.MoveToLocation": "You're moving to the next location.", +"CoC7.DontMoveToLocation": "You're staying there !", +"CoC7.ObstacleDamage": "Obstacle damage", +"CoC7.RemoveObstacle": "Destroy Obstacle", +"CoC7.YouTakeNoDamage": "You did not suffer any injury.", +"CoC7.YouTakeSomeDamage": "You take {amount} points of damage.", +"CoC7.TryToNegotiateHazard": "You try to negotiate that hazard.", +"CoC7.TryToGetPastBarriers": "You try to get past that barrier.", +"CoC7.TryToBreak": "You try to break down that barrier.", +"CoC7.DragOnCanvas": "Drag this on canvas to set the position of this location.", +"CoC7.LocationCoordinate": "Location set to : {x}, {y}.\nRight click to clear.\nDrag this on canvas to change the position.", +"CoC7.ConfirmRestartChase": "Do you want to restart the chase ?", +"CoC7.ConfirmRestartChaseHint": "This will restart your chase.\nAll position will be reseted.\nActors that did not rool a speedcheck will have to roll.", +"CoC7.ConfirmResetChase": "Do you want to restet the chase ?", +"CoC7.ConfirmResetChaseHint": "This will reset your chase.All positions and obstacles will be removed.", +"CoC7.IncludeEscapees": "Let fastest fleeing actors participate.", +"CoC7.TooSlow": "Too slow", +"CoC7.TooFast": "Too fast", +"CoC7.DoesNotMeetMinimumReqToBeAdded": "Can not add participant, need at least valid movement action", +"CoC7.IncludeLatecomers": "Let slow pursuer participate.", +"CoC7.VehicleChase": "Chase can include vehicle (NOT IMPLEMENTED)", +"CoC7.StartingRange": "Starting locations advance", +"CoC7.StartingIndex": "Starting index of fleeing actors", +"CoC7.CutToTheChase": "Cut to the chase", +"CoC7.ChaseSetup": "Chase setup", +"CoC7.ParticipantsList": "Participants list", +"CoC7.NotAllHaveSpeedRoll": "Some participants don't have a speed roll!", +"CoC7.NeedMin2Participants": "You need to have a chaser and a prey to start a chase!", +"CoC7.ConfirmCut2Chase": "Are you ready to cut to the chase ?", +"CoC7.ConfirmCut2ChaseHint": "This will start the chase and the first chase round.", +"CoC7.NextRound": "Next round", +"CoC7.ConfirmNextChaseRound": "Proceed to next round ?", +"CoC7.ConfirmNextChaseRoundHint": "You still have action available on some actors. Are you sure you want to proceed ?", +"CoC7.CheckName": "Check", +"CoC7.ObstacleHasHitPoint": "Toggle location's hit points.", +"CoC7.ActionCostOnFail": "Toggle action penalty on fail.", +"CoC7.DamageOnFail": "Toggle damage on fail.", +"CoC7.OpenObstacleResolutionCard": "Start obstacle resolution flow card.", +"CoC7.AddBonusDie": "Add bonus die", +"CoC7.RemoveBonusDie": "Remove bonus die", +"CoC7.DecreaseMovementAction": "Decrease movement action", +"CoC7.IncreaseMovementAction": "Increase movement action", +"CoC7.CautiousApproach": "Take cautious approach", +"CoC7.Cautious": "Cautious", +"CoC7.Assist": "Assist ally", +"CoC7.MoveForward": "Move forward", +"CoC7.MoveBackward": "Go back", +"CoC7.AddActorToChase": "Add an actor to the chase", +"CoC7.ParticipantDropHint": "You can drop and actor on this window or directly on a chase location.", +"CoC7.OverrideCalc": "Override calculation", +"CoC7.NeedRecalculate": "Recalculation needed", +"CoC7.NeedToRecalculate": "All participant will have their movement action recalculated", +"CoC7.SpeedCheck": "Speed check", +"CoC7.Initialize": "Initialize", +"CoC7.Locations": "Chase locations", +"CoC7.NoDamageDealt": "No damage dealt", +"CoC7.DamageDealt": "You deal {value} damage.", +"CoC7.NothingToRoll": "Nothing to roll!", +"CoC7.ParticipantDataMissing": "Participant data missing", +"CoC7.ParticipantNotFound": "Cannot find participant", +"CoC7.ParticipantUuidNotFound": "Cannot find participant {participantUuid}", +"CoC7.ParticipantNotEnoughMovement": "Particpant {assistantUuid} only has {actions} movement actions", +"CoC7.ParticipantAlreadyProcessed": "Participant was already processed.", +"CoC7.ErrorEmptyLocationsList": "Empty locations list", +"CoC7.ErrorBeneficiaryAtMaxBonus": "Beneficiary {name} already has max bonus dice", +"CoC7.ErrorParticipantAtMaxBonus": "{participantUuid} already has max bonus dice", +"CoC7.ErrorTokenNotOnScene": "Token does not belongs to this location's scene", +"CoC7.AddParticipant": "Add Participant", +"CoC7.Remove": "Remove", +"CoC7.Delete": "Delete", +"CoC7.Edit": "Edit", +"CoC7.Create": "Create", +"CoC7.MakeActive": "Make Active", +"CoC7.SelectNewSkill": "Select skill", +"CoC7.AskDamageRoll": "Ask damage roll", +"CoC7.AttemptNegotiateObstacle": "Attempt to negotiate that obstacle", +"CoC7.AttemptBreakDown": "Attempt to break down !!", +"CoC7.ObstacleName": "Obstacle name:", +"CoC7.Actions": "actions:", +"CoC7.Chase.InitiativeShort": "INIT: {value}", +"CoC7.Chase.AdjustedMovementShort": "ADJ. MOV: {value}", +"CoC7.Chase.CheckName": "check name", +"CoC7.Chase.PreysMin": "Preys Min: {value}", +"CoC7.Chase.PreysMax": "Preys Max: {value}", +"CoC7.Chase.ChasersMin": "Chasers Min: {value}", +"CoC7.Chase.ChasersMax": "Chasers Max: {value}", +"CoC7.Sane": "Sane", +"CoC7.ErrorUnableToParseFormula": "{value} is not a valid formula", +"CoC7.ErrorUnableToParseArmorFormula": "Unable to process armor value: {value}. Ignoring armor.", +"CoC7.ErrorUnableToParseSkillFormula": "Unable to parse formula: {value} for skill {name}", +"CoC7.ErrorActorHasNoWeaponNamed": "Actor {actorName} has no weapon named {weaponName}", +"CoC7.ErrorActorHasTooManyWeaponsNamed": "`Actor {actorName} has more than one weapon named {weaponName}. The first found will be used`", +"CoC7.ErrorUnexpectedWeaponText": "Unexpected weapons text, please raise a bug report with the text you are attempting to import", +"CoC7.ErrorUnexpectedSkillsText": "Unexpected skills text, please raise a bug report with the text you are attempting to import", +"CoC7.ErrorNoTokensSelected": "No tokens selected", +"CoC7.ErrorEvaluatingDamage": "Error evaluating damage", +"CoC7.MessageRollingCharacteristic": "Rolling characteristic {label}: {formula}", +"CoC7.DamageDealTo": "Damage {name} {damage}HP", +"CoC7.Add": "Add", +"CoC7.Update": "Update", +"CoC7.Enable": "Enable", +"CoC7.Disable": "Disable", +"CoC7.Duration": "Duration", +"CoC7.TextFieldInvalidJSON": "Unable to parse the JSON, please try again", +"CoC7.ActorImporterUploadError": "Import stopped, unable to write image", +"CoC7.FileUploadError": "Unable to write image, file upload error", +"CoC7.PickDirectory": "Pick Directory", +"CoC7.ActorImported": "New {actorType} imported: {actorName}", +"CoC7.DholeHouseActorImporter": "The Dhole's House Actor Importer JSON", +"CoC7.DholeHouseActorImporterSummary": "Export your DholeHouse's character as JSON and upload it here.", +"CoC7.DholeHouseImportingName": "About to import: ", +"CoC7.DholeHousePickYourJSONFile": "Pick the JSON file exported from The Dhole's House", +"CoC7.DholeHouseActorImporterSource": "Imported from The Dhole's House Actor", +"CoC7.DholeHouseInvalidActor": "The selected JSON doesn't seem to be a valid Dhole's House exported character", +"CoC7.Migrate.UpdateCurrentScene": "Migrating your current scene", +"CoC7.Migrate.ErrorDocumentPack": "Failed CoC7 system migration for document {name} in pack {collection}: {message}", +"CoC7.Migrate.ErrorScene": "Failed CoC7 system migration for Scene {name}: {message}", +"CoC7.Migrate.ErrorMacro": "Failed CoC7 system migration for Macro {name}: {message}", +"CoC7.Migrate.ErrorTable": "Failed CoC7 system migration for Table {name}: {message}", +"CoC7.Migrate.ErrorItem": "Failed CoC7 system migration for Item {name}: {message}", +"CoC7.Migrate.ErrorActor": "Failed CoC7 system migration for Actor {name}: {message}", +"CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory", +"CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.", +"CoC7.ClearAllConditions": "Clear All Conditions", +"CoC7.UnableToUploadDholeImage": "You do not have permission to upload images, if you import the default avatar will be used.", +"CoC7.ToolTipSanity": "
    1. Left click roll check with options
    2. Alt/Option + Left click roll sanity loss with options
    3. Shift + Left click Immediate regular difficulty roll
    4. Shift + Alt/Option + Left click roll sanity loss without dice pool options
    1. Right click Opposed check with options
    2. Shift + Right click Immediate opposed check
    1. Alt/Option + Right click Combined check with options
    2. Shift + Alt/Option + Right click Immediate combined check
    ", +"CoC7.ToolTipCombat": "
    1. Left click roll check with options
    2. Shift + Left click Immediate regular difficulty roll
    1. Right click Combat opposed maneuver with options
    2. Shift + Right click Immediate combat opposed maneuver
    ", +"SETTINGS.TitleChaseSettings": "Chase Settings", +"SETTINGS.ChaseShowTokenMovement": "Show token movement.", +"SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.", +"CoC7.EffectNew": "New effect" ``` From c14bb7b32367748bc627f5f249bef7d8d9e85814 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Fri, 5 Aug 2022 10:30:18 +0100 Subject: [PATCH 683/726] Updates to manual, automatically show each patch --- assets/manual/chases/chase_init.jpg | Bin 24920 -> 0 bytes assets/manual/chases/chase_init.webp | Bin 0 -> 13434 bytes assets/manual/chases/chase_initialized.jpg | Bin 32024 -> 0 bytes assets/manual/chases/chase_initialized.png | Bin 142599 -> 0 bytes assets/manual/chases/chase_initialized.webp | Bin 0 -> 17026 bytes assets/manual/chases/cut_to_the_chase_1.jpg | Bin 88471 -> 0 bytes assets/manual/chases/cut_to_the_chase_1.webp | Bin 0 -> 46080 bytes assets/manual/chases/cut_to_the_chase_2.jpg | Bin 91631 -> 0 bytes assets/manual/chases/cut_to_the_chase_2.webp | Bin 0 -> 47152 bytes assets/manual/chases/cut_to_the_chase_3.jpg | Bin 81027 -> 0 bytes assets/manual/chases/cut_to_the_chase_3.webp | Bin 0 -> 40826 bytes assets/manual/chases/new_chase.jpg | Bin 39617 -> 0 bytes assets/manual/chases/new_chase.webp | Bin 0 -> 15492 bytes assets/manual/chases/new_controls.jpg | Bin 7398 -> 0 bytes assets/manual/chases/new_controls.webp | Bin 0 -> 4544 bytes assets/manual/chases/new_participant.jpg | Bin 18250 -> 0 bytes assets/manual/chases/new_participant.webp | Bin 0 -> 11052 bytes assets/manual/chases/obstalce_flow_1.jpg | Bin 14160 -> 0 bytes assets/manual/chases/obstalce_flow_1.webp | Bin 0 -> 6678 bytes assets/manual/chases/obstalce_flow_2.jpg | Bin 17409 -> 0 bytes assets/manual/chases/obstalce_flow_2.webp | Bin 0 -> 10280 bytes assets/manual/chases/obstalce_flow_3.jpg | Bin 20654 -> 0 bytes assets/manual/chases/obstalce_flow_3.webp | Bin 0 -> 12454 bytes assets/manual/chases/obstalce_flow_4.jpg | Bin 14874 -> 0 bytes assets/manual/chases/obstalce_flow_4.webp | Bin 0 -> 9432 bytes assets/manual/chases/participant_controls.jpg | Bin 10999 -> 0 bytes .../manual/chases/participant_controls.webp | Bin 0 -> 6976 bytes assets/manual/chases/participant_list.jpg | Bin 31405 -> 0 bytes assets/manual/chases/participant_list.webp | Bin 0 -> 16600 bytes assets/manual/chases/participant_list_2.jpg | Bin 29646 -> 0 bytes assets/manual/chases/participant_list_2.webp | Bin 0 -> 15436 bytes assets/manual/chases/roll_card.jpg | Bin 8444 -> 0 bytes assets/manual/chases/roll_card.webp | Bin 0 -> 4180 bytes assets/manual/chases/setting_locations_1.jpg | Bin 78512 -> 0 bytes assets/manual/chases/setting_locations_1.webp | Bin 0 -> 37980 bytes assets/manual/chases/setting_locations_2.jpg | Bin 83218 -> 0 bytes assets/manual/chases/setting_locations_2.webp | Bin 0 -> 41848 bytes module/hooks/ready.js | 10 +++++++- module/scripts/register-settings.js | 9 ++++++- packs/system-doc.db | 22 +++--------------- styles/interface/compendium.less | 3 +++ 41 files changed, 23 insertions(+), 21 deletions(-) delete mode 100644 assets/manual/chases/chase_init.jpg create mode 100644 assets/manual/chases/chase_init.webp delete mode 100644 assets/manual/chases/chase_initialized.jpg delete mode 100644 assets/manual/chases/chase_initialized.png create mode 100644 assets/manual/chases/chase_initialized.webp delete mode 100644 assets/manual/chases/cut_to_the_chase_1.jpg create mode 100644 assets/manual/chases/cut_to_the_chase_1.webp delete mode 100644 assets/manual/chases/cut_to_the_chase_2.jpg create mode 100644 assets/manual/chases/cut_to_the_chase_2.webp delete mode 100644 assets/manual/chases/cut_to_the_chase_3.jpg create mode 100644 assets/manual/chases/cut_to_the_chase_3.webp delete mode 100644 assets/manual/chases/new_chase.jpg create mode 100644 assets/manual/chases/new_chase.webp delete mode 100644 assets/manual/chases/new_controls.jpg create mode 100644 assets/manual/chases/new_controls.webp delete mode 100644 assets/manual/chases/new_participant.jpg create mode 100644 assets/manual/chases/new_participant.webp delete mode 100644 assets/manual/chases/obstalce_flow_1.jpg create mode 100644 assets/manual/chases/obstalce_flow_1.webp delete mode 100644 assets/manual/chases/obstalce_flow_2.jpg create mode 100644 assets/manual/chases/obstalce_flow_2.webp delete mode 100644 assets/manual/chases/obstalce_flow_3.jpg create mode 100644 assets/manual/chases/obstalce_flow_3.webp delete mode 100644 assets/manual/chases/obstalce_flow_4.jpg create mode 100644 assets/manual/chases/obstalce_flow_4.webp delete mode 100644 assets/manual/chases/participant_controls.jpg create mode 100644 assets/manual/chases/participant_controls.webp delete mode 100644 assets/manual/chases/participant_list.jpg create mode 100644 assets/manual/chases/participant_list.webp delete mode 100644 assets/manual/chases/participant_list_2.jpg create mode 100644 assets/manual/chases/participant_list_2.webp delete mode 100644 assets/manual/chases/roll_card.jpg create mode 100644 assets/manual/chases/roll_card.webp delete mode 100644 assets/manual/chases/setting_locations_1.jpg create mode 100644 assets/manual/chases/setting_locations_1.webp delete mode 100644 assets/manual/chases/setting_locations_2.jpg create mode 100644 assets/manual/chases/setting_locations_2.webp diff --git a/assets/manual/chases/chase_init.jpg b/assets/manual/chases/chase_init.jpg deleted file mode 100644 index 463fdceff385b19b4526ec8a1e621da144e3d02d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24920 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 ej+W_DV ziDzaP(r4kiO*+V#zhLL@|I>dP{y@JT{zv`m`)BSq_+OvC(s>iuZ~0!JUcvnj{@?g-${&$m zrvDr1ztvCjA9Md;AICqN|EvDj?Z1XM+<(`7Gkt*nF#fmyJNwW2Z`^N@@Av=Cf35w) z_c8Q`{r~bm0bkC)uK&{i3;9L!sqH8CU)qoN9GM_y5^^4<MuApXoz&xZc! z#nG`!H3tIpkai8#qI(fg%HywWO*iZcv7ePf8%xZkp1`;1E%md*M;VYyxd{1XSz6;2 zz1q|sL!p%Q3;D%7L@rI5fFgXexWC?>Rhut?eN@QqLhvw97;2?TL?()>IbEKalLR7J z_DDTDPwpshuYHb1B&eZVkttaj02!e&h6%jEn-3Mz< zLX_eICb7EKvZYr}#&XZz;p2$`LYAxDuP|eU8MIpa=)HUvL}YgHSxm3gL!pGg;eQ6P zE*wX;{Y~nmkvl(0l#VV<42W)!=y{F8A?ON|c1gzVP64<|4BmWcG@%AFR1Zd2tBe)R&8yWPG(O1`Mf;(uBBzP$H5|WvgaqlYl(ZuRj6Xi{U?-; zN$6Fqauv&K>^ONp-0I~X$&`Bgsb!2;~R_xcppzYMfxu}iwWG_6f~L^d0-$QI4>aw^&VxlQBE}tkLrU& z*lqKR#|tumcJWzRUPZ_?a4TJ zK*iRiAf(+xHz7Z--xVOnVNts>l4HD}{d#Y8GF2*dhvg z>WZT|qv!^~}YOrBD%YcRaOf@NgDOE%t}Pp`Z0z4h_tm?)yu6=g!lnPt)2m{L1)kcVJuV(vt{ zGf%(&d-W)n01JK_pb;k7Y7Kj{b;og_a5#i5d_Nu=_11@Sm@3yWMpl)&svOO>W#*8a zP+kZ|{ypxOUTU>(?9BhP%q-s{F`WC|GkqshxxOvmc2}BB0VX&J$|J_{94ppwdh|z( z+}@?SC*l`jj>z0f2qYwqh=7^;>zD}Mi4IZ#{XSTdp(ww#mvZ{5)owBxL&j+la5JK|M!$sWP`(Qb zf)I#bG_1U~#mhzF<$MwGYzXVlEp6bi8pLIof5?QnSUXL99ypPAePal)O6*y^^!PHxO91!bdrJLuopu+|Y>(oHu z20qpQ7kE~o$3^J~MIm*O>6fmDe_)WIdaUNc3aF*s5Q5)t?LJJCs5&rdhw=LK;<|1P z1zQ6J#EIUB<107;hipZ*Sl=& zxpf=lc!PIK<`bvNFipPWmr8umJ!uH%$2os8;4aox_5&xkay=6_aJt61-bFf`cM=LQ zP}Twzvf?8}7qFw$E9m6b2P;(r)8Q3CE<(Dd(cPOowli|e?uhcfSN&-z!!49bE9P<4 ztQ97fq8+axrxSj=B6$Rm2AIV~S26n^&PL49E~j%A*IX66J zU`7yW-D%rdsvoYntVEFKm7!{ju~S0X{NuqIk3GT^hyS=9t-&aNFF(9dpGtO$3vHKG zT6Hfwsk-+jR1X$@;Ec341n5iey#>eT)X26yf8dr%d0FZzv42t1-qi6b>PdR>j`cg< z+Km>~w9JsF+(GK;lnTksLfiY1Is|N1bDVjwaM0J!8Uu81>1?Nu-deJQ8qvLXnG5Th zY}bE-?Xj@lt~N4Uz&!J!`Rig1QS-q{8ow4%O*3eiI7bbRydMa4x?EQ1(Z7Q&AgyV>K#b!0(PkEN$y zu||ffq$M1gr2fv3@e0k|S_j7Dc$qz@7cG~Cb|FAZTkdK%LMS*Q+!>XbOLH6sp7~-TAN^R zN#L<~H`8*MXiVgU@Xi9bPdQ^e}1P0Vde|^}=joCj+ zuU(lMT{}a0N$0kSG$mImhM-B1`9Pi3Go|~5b6T2;B*+dL*QaQ=RCStSB<#5eoF*Vp z70Shk{%;yFMDQ+yX1sVIc;fmryUA56wv2_)Dx76riz6?HQI-6H;5|zA{b%cqBe;Xe zns6(K;WO=4;C0`#d84A_YcjVFTTex;*f|u&sy;=e4tGLPVlIo84E045)#3lXA_`u}(lftxf+ zaa0l!DvP^t%4N?T4jMcJ)mf;5>S&Ld&_t~Yy3Lvhw{d^L9%ez{w6>V0xVqMw0&i;0 zn|Xinx^pOXpcD`pqOB=79m_%1iI}#_Y$*As5Nxyx#Vu!WFWYSImcfF&V_IPH8|xe8 zj?T=ipZ9@!&KLr2H!3Tk<4qX&3Ii~h%&L)>8X}0Z^y_H72B@;`y?jCO2u0GaMZylB zFBO<-q&i`sqpDi5R=*xm9p1jy#A8XeDl=KzP)yCl6!Ss6U{?F5&b$?(CoAk{VW6a< zxzUXiNN9RGxfB4ZspD!)13CKrUAN6}A%vgy_|31wAb7WCHNX1hgz5VO#346+LiVw;zl45?RdFLI5SyK-wkGR; z-~j?zIU(|qG;zC{_NkQg1gl47l;&c9mQu#qdYx5Sr01DvTIuiKIDycdPV<#M-Ep!0 z_q!L@8#UX3J3Dg0x`$cC*xoV9>Qz@6T(<$ju(Us0R>S)W9=}nWqyN107~;Q)NYNEp zSNVYQ!N>iGgrtOWiAaht`rq0XpP)$xpuk&AVR~${PHZm9XWU8V1khSE%1doK|g6QHmn`z1(_Dt=J0%&XWK8j(ebdAulesNL5GWgs-3UDZ~+ zh0|`vR4+3_-g(6D-7()Y3On zSB5a|B+KKuQ5}85b?9Gx73h^0V`pE%5l%m|ROU)-;sKJ!Qn-{ui2Jouh7EzjMT~v_ z5DvhSw+ztK+Uix;%wtL-iL3<>AG!7>>7JVzq>v7bE;bi|YIN-XC=4MU9tw{hgTV1nA+ zHwff6Zu239LF0ibl5zg*ZOv~X9^MkGHpZ`r}_#mt>6yQAw z#y|>5eYR!U7HGXX`vR6B6YuANood{VwR9fthr7W8(6a6B8QqfmqVhxeXL83lAkU9v zVb?!QJUN$dR?%3#| z6S3jcMDpE)8fhgi(2ZTL_|ZbHf%5?Yf!J!Nc=2&JntgfJ7@L$C}zy9o-7Hn6kY%0o0t=rfnpsa3zZ;Q?d@rm*uFO-?M~WvMTN8DV-gw z9?BxO8e2yfAq(o!ZtT`3>tQ3*ink;)9O_qLaQjU8i0tWjVQe=`i?(GE^>J4N#FKo} ziXblovEbUy@zvH=&P{WNj}rztl~Z#aq}R`n;O(wIwA|H5?3afNH6vn&i5Ia^9SY<> zp$Ic_f4oFZum8^$3_+PVj3?-A$hdiOL=0&Z#1<&UC^_u>eFWQuf6XcDcIBjFkR0{s z0lTV?UY}zxGiUl7b@@-icz~05{&*d+&TtJksSMfbGr7MaQ62pzi5b*dXg>SJk$DLK~B^jby6V z16Gh49s6_QR`Q}YoC)F6wbI!f&lcv3A909v7(T=C5C|NaT`$1jgv*e(+Ob&oPSo@+ z*Y#J7_HgG|X$ng79b2)b&OG}vm9FQTA@PoJUzCeea_0AXF5b%*mlgLuoZC?rt9hNIGsXgi44O9`-9kjURE*A<3 z2}3@5Ao{2fq{~llICR^IayCGiC@2bvDn20{9LT`Nti8`q#OK z^F1cfFV0um(!O7c70>pBlUi<$OiqV^qi5Yp2CR4W_)zo+!Whm>4#BhqD_6NPJ6`7< zY(aNxlu%L|t+moM%Sh43N+c*vl;c*g1`>!Wsv;)7`A}9&=@ySQla46!L<7d={3%om04VoRA+5tW=>3+ly}%6)>_!L6wG-{8Mv>%!!o< zGb7FV(%)v%(>$D3ep{MrF|kp-@T?emR2JyYv}jwHu%ircrD1~5u&t(~e46vs z9#q!kYEdV3-7=Tlw*eac3?;uqireT+gbbgIFyp6ySf8B`brWgj<^Fa`+bdUG3`4tW z9iC7~uCvVQ~nwm*=m+sE|>UR8pn50*nT2RipnYg}3@Byt)hmDZDc zfj2JsS+8{Pxw_B%x*YPjr)<>hPAInE2hujuP#aBYbNsNnG|-B z8NRLL=Ie_Xfez&sOpA%>=-N%$fqc?CptmnTGi$KW`%OE98y7s{CfEG)c|l@G#62Sk zHK@hnm36a?tuDs+GL&p{GZ4SiY=T^E>0FfMsXRJHP%TVJjhb6QBm~a8Z{Bt@LRFRr zO*3KzwF^?wq#{KI=Nu6VwPuCSk*uU7w zF5m|qa{7q#i2&kpE1opdYJ=!J^jeT7i6+Rd^tKqaaniaPYUPiermFU_4RNJN1jB5- zBeu&)d_4{1f<)+Bqipd%YB0I5FL}~tt@p@2g4f>mxPr3ES74W7&Vq*f#d)MZ8Fa2& zHS@z*-w%xn$`=Uy2zZ?KM%Ty>HYZ9Vso)j&vw}iEOt)ez@xJurn{TD6`M3|ClC1SB zS7OFElZ}kfa(g`|e>>P&Hhr2<=*nVjB7xktvLL`7SGG95!T8sWn(s`B2;}#RdZIk{ zC17%mj}OmGr*ZBrdl^E)uD>b9)7kf0>o(@=p7#2~ZdM$VYdYdO6w+ep3We>JZJ$Xnd1`${qX;^&b|;A@u+%6x{I zQ|gibMDgEWsk6N+sSHpV*zaEBqzcJlHmMcHRoxEPPD-Vt35!t*| zgjrODho%~I%h#PkE?+x>y{MsU_#s|YCQoBMftEtWZ*6CJh&1Fj?%c+~IXQNtWqHfD zaLTl($|4R=n*rw!g%M&?anI|{mB?d64&pg661i7VK9P#@U#8l>GuCXE*i}H~ncW0o zyYrD7i9Iv##WQxV9cE0)4K!sUVY?tw3|{uFdF+8g2zjTHgHNFM14nrAl(<-fI>tN6 z7x4vYBYSIk%ZMvc(D?V<;rr`VlGttGu2bKH5~yH;D;o9)-Si+QAByGZ>3cIU-*kHB z;Yhd5zhb*=U!V(aNvBBmp^+k-b4IM4Id{dj!KhnaMeuD55%x_hmcI-ZYY!-D7Pn*e z_{ke$LH|v8tWIwoQH8>U?Yk?Fmt4H2MBxoAti`w}}+!&2Mv_hxvbb`HxnhJxof0kPvNVDVbYi%cNe` zwTXlqc7%Z^5YJCka{GL>u2Ki?>aYpPNT7Wzjf2xv$aGmI67ms+I>+h{^|zYNZPpH39w`glLAE`VQr zBndTn0o{84KyxkInr^DJDA(H$auYw2}2X48o?Qk;ppI?E!G z9!ZBLrrgORSEsY{W|U8;^9+7`r*_S32j?i}3Y(RSNF3L#!r^4eA1J8(Zx+UtQqX;^ z@@g`w{n6k-Zd5ZPh}Mo=%9!U`)~0kx%q%ie7>Xg2Y;gp`P@!R~HYWqnie`zYf{^z0 z^ru`~7frfv{cD6`2;8X)yITq2{#P=Y&`_ONSC)4(tIh8h?(@RSq{)Q*--~r1rWFar zpk^F(_Erdt-#)JL)m$<#OhG$DTjSUpk#?XW?Z*h#pV$ukGq}ErxjB!TIWI+Uon2*0vI`S9N4qfMnqIvU0H0%f2eop;?H3W4F zkz!8kfO$iF#H*#>bj$1gfa@oZ!Z4%8`S#I?9_*dCkXJ+E*N@CF#=z17D?tq3uWG#ns7;yOoH+yn zN=RpdPsG%P!FZ??rKvAY8Ps65x6@Y&?{IqxK0L1!z>A7fU_)t1HmATWb_GDY`zZn@ z5BKdG|4U4xkyd_pWZIyuSkLhP4rM`Bu?r}wSo+~i5hS>~K|5!~VuR!!v4G|VCm@mpTHC6F zKPW*CN5KowvdRYEL!NNZWy1Y1P8r(c76;o|s{*6p&#;e7G(n=EWokq+2I$J|){@sx zoS3QKoi^xPr;>uDRg%^x_~}};rPKvij7keN6UBP}$GfTNT4PZ3#{#7@bX##Cw6yc~ z*&In)D@Lgtr`LL(XRF!M==SkqBiS6cP4YCn$eH)j)|&i19Wz5ODc~1IwtfK;!afm z$Z@;*CFwIW;Bwp!zTojewS1#dMsY(^{ zx;oyGrW$|Ty1*O=DBACJfN!){iGgB@7B+~Lp+d#7T~`;s!UsN4%3W;uN~IBet^zTp z_FJ=xxBG*)i+!Zmdl39&N!tsex`cv+ViM?86QxuKJbh#mgLQppZO~I$Of{zRw7HJa zoo;>>8u2*P$>VF^R)%;>w+rN&`xb`!tV``xZIIt?&z>>Zf~ZFS3pH_lBI!t$J7oDr zW}Re_O_4b#g+d=Uiob^d3~!=e2I_Cg7j|ZD+9=w(l^_QPuv$>sp5yPvF@;)y6cs&j zuGL0I>M=X(F+PdVo=|ZQJ7Onf*rwi$>o*IY1t0!KBz)x`8%M)u_R7jxx=0;3+X65z zy$ayz%EmuypY$;V$>5WlNRCBplmM+Dc2GQQut(ViVG-^EVV$A?HGeGB%iWkz={$iB3BHjPkzRSncK^<;Ma;v z#=?SZg6Y5f|1<;o>_+PZ_C+pq>e#z{d{oZ1bSW6qz zwW&AIXUwq}E-;aTlsuug1;9n4ap~vq* zIpDr6C|Iytm1)1yoe1jpt%`SuuhY{-MXQ=kG@@+kLT*uC%fCgi{1TjRJ{D5WvQ4kn z5w&-pYGJFZUiA+rJV`D@$a_HyxkjJL_-Fe9RLzZoLV#P1%DC7ciJ=7V!mHxvQ8Cch zhKvmSk@^hT*xU1r2z>dlGZ2tKxC>v6V|j=wNFk-^7A1V~zqAt%@>5XT7@6YQiM6V2 zNdv|*@F7UKQ(gTD!oe}j0A+jQ10ZWvlgbNpBWqlL&e@Ut@-aOc+}u+y+#~M%Y<{Cf z%Q1wLERa^|#*%O>&*BT9AE~)-vQca{fb1hxW|?2U3KPd}J)M*M*=$$-ELVkS8aGN= zN7*ZNZwx7I9vlt*&I|TVh)93h8W3zznx=M4TWPWBza5_P}e@3qqFB8^h0RG{^ka!6oIsQkb&cfF@CdsrGD`{D~QmlFE4Rsp=K8d#1V-V zRgL3xJuU83FhyA6ycg*Q^9%|SRh%EkO?Re=s#E0Yuf*zWV<0IrQ5JBRI(T@-k?VB* zFAxY2-B148k;NbaME+K=-RveC;sJT|-lnNRFt8xj*4?_|%5u#hvbX;wq+Ki^`r)T0 zw0-1FlHSuv%}H<1I-rl#1-&1M&QOcqlffNabW$9V-+fak4e7ygDwi0WRGW^|52td? z8fSGzmIGQQz|8rS_qwoFzKajcB~Ed1{S*>-Sy=9TmAHv+9-B9h!6VX;%2<0v;D~_^U{^<`Y(SuQiz@3Zw$0cdC3W)qJf(qkC-b?K6!tJ993yd|_6t zq3Is12E&GPDptbnIF9)R_B@Std8JoOuCln9+LOBX1MS@A*FgKb^!qo+=M8c1yKww` zgVq40*#A{3%*qUvYtvn8tj9Mdb|r=HeWhc^c#7piSUJ73Aj7cAjp$Q{L~(oy@{qnj zmoLkKj`lON8s8Vx~d*>~IPuhT)4 z)uZ{a<9>0~Z%rXz7v*%rZnQ0wbOI?rNZ{nnWiddh(;FU*FsJDpq=KjnQ)a_iZ|ITq zK5LA1nAEJJQr^}Oz(wK!DD}?)za~H^^g=F!defisoO+M**@1d@k4(NuqUaFfbchYT zdFyC~ntr09a=6Ab2QwFS7xV${a!S8=W~ivSXH;K`S6qi)1i@*CvYZTm<&R9Kj9`m* zj3uey?#Q{6-C`HLDisqs|FTtz*i%_}_Fncv251jq@iM>;;KsZg)B z%zZr7^@NRyoUE&viFHN1Z~zgbKP!hQ;kXBF(wTZR1IUNzC-QM>G0Ra-D-bgbKNlY5 z!YB$J98DS=A0YaP82KOxoq4<97xE)(+1EDR3kc^XlPrXrC><+KG3=?8^S+42*K1gZMM2p{l&}xx(}e}?m8hp3Q#$5kqm@&in-%? z^c~5M-leQvktQ%>pMTI|h=lEibj1m5mTwfWH~`gXeR^zU9P7=ujh{01`c7x%*kk5Cs$^C(MW6S$& zPX;G1Xfr9D(|+CL1oFVaJ!r$F7qWL17RqwBo#~B5t-PtIt!gvpOVkc;z4GTHimg!7 zK%9ErohbOE{MdJ3U)8L+V-P~gZY!LQKF0PbMLonPJY60T_tF4x$Jp3jzsQSLI`sf7 zR+F3^O&N1#%T*BZf~vrtBYwaN6Zv|kbt4m`byuON8+SNRT-60dZ{R^#;A1W#WzF8f znClCd-Z$wSLPGL|Te7%km5@VlPharHW^PL^ygGUi(W~RQU6%|+NwQHdpIglx%Vh8D zq&VX}86UgPOtbx2`o)XJDF8dUued#d_$i}=IRSs==v4#(7?}0FOzCN`lsgn#Il>5x z2w2D!s{Lgs#`@@W~eQnXPUeFjrodo^H~M(1i%b1E;m^WaD6Pg(!7aAI)njH zG9pFTg%pLF!8*;?PTteF!~@Pbz(-+nF9l<7A6Z+3@U|F_xtaD`j!POM^;Wzb zEp{B@JvRB;Rrn!weA*#nuDA66MOA(y#@JK7tELkvB!7(o2sbq2r>B&5{x%NtRD)H< z-M&MWVMt8^r`13Mj{-5;4(7Mf>K0|$!gjpCUm$ql3Jv2GAvv6? zZnps7EXxR0gXuzgM)^Y`Q`Y{&1$qD&XOmRBw7W&bw7Ka`Ha8xobK9laC?ErFr9kt7 z*-?ys3VyNL#f1lw;Y?s1XrtboF0scW8sZ1(kyGdY#kJkbS`e_1e$;ENb6ZYD{U$dm zOb2H)xRm1iB>z6`(Nu0TSOoJ!BPx{%mAf3$*{gA{&^bqS0BklNy8Cx)XvI#^AP?Rf z1M!l=1@M0NC~SI^wRz$2@R{Y!$a>_EDpN@G@XGGfP!lE#IUU-dG#kzf(QTWfxmS zRI?Uqyt6dyOeqs~f_ehnCSHLo z$1)3*5KT$y@z#g0iXk?3w;Mvq3UsidiLB*Kd*J%J#E2zPJ&1;F+bM|1UNZ^%CNgE-L2bC%Q&az zi;w*2T;dDW4YiV*OkiM7;`Mp&9kte}M9(hD|2FQ3K6HbS()~oArNGk-h+W!Pn0bXM zuRw|23fV@ItrqEm?~_e`4Tr`6e2PA70(bQ3t!X2)bFn9Qysur6?XtrDCb& zvitxLcMzKoz~iAUwGrK(>NV`frlx?Dl1PbgHBoQ?V8B}HJ30QoRVW1UUl}VTu4x!< z-ScZiY#Su2mVp+#VG(7RR(Q~AieD$PG*YtnpZV%~l^BVm4N9M`<9_fuHj?IVYn@wT zX!r2XGiYj70`AUEnJ#kkq-uI&6Eqg&fA-C1|B74sjo~1OTiTuv=?w=NiE7^DOKvr_ z>QyA~0eQ`XGTB=o7Z%Zw53QTVM)HOuDJK!N{PpNDQQQ zAN|mTmUi04J|661J+ah*MerW$Ac@3}Bo#VWe`Ca=bh)d7%WeHfWe1WNvHK8X5K?rxxbYh3DvceUsf(4}})s5i(z@{qPg z*XFeeCmcWM$EF9SSXytTWsx>uG#EB83hWo}O!;Lz5JhjEKa%{3pfevDoIuPlLQ`4I+mnvQxx9dM8uBiG$ZES9_&KA1ui2P74 zR6QSdIeI(0>nGg(uu3!XVcgx{W}}oAG2=OlQ|nP`mn~k3e!t|fiQJj#ma0tV9{wnH zBuKqo#xf1Ib77qKv{{vXMGQxYmrU|Pl=sK&+P8sCTgDDdIzQd*{|4b~wYOaf1=Idy zs&kQrMv>b?`13QQu|E!t^Wfu1Wek!bNP>_m56mG2c?aop5qzoy6mB`*3HyUkc_^}$ zhmRZT8f1(xV=~%%9iIJXQ}ojYSF)8hGlE#3gZY*8gC@}4G@8q8pKfXd%k^*Iw{pq; zKT7FrUH5f0P6$~Ws*|R@GjyZP${(00Ou7SxxnXG^jHM^R)tuvy!`&dy1rXS;K(8~j zOXOGPC5cV;6K|*t5#h(ywuNz#jS~6Gg?@qoCmXjRGr>Qb6#e6>oaR1G?`D-X3G$T- z?H@Uk3!&ydJ!$QT=N`IbW?g8lk*#gaChI8{gA_LKDx)Cvz=wRkKCrKW7#u1m><^$( z@u24NCZ)EZI1tkn^&fU5ZI(fDPvx~3Q@Zh`o!LTgd8PZ5=RZQ&ozZ~|i?Yn&l5bP5 zSOYmI5UuUUT+n^&-7JNQg=L!%ol+8G|WF6oESuE1nnHxUwGu*y-h|X$|av_>Y07DL{IYU zo_%4|d~QYS&EHbNGac3@4njZI-_vn#Q$eOH5X- cDZ%p#G7?pIHaUNFk@VwF&7C=@2Pt>F!cG1Qbc>5|HjrC8VVrH@WFeZT^Ml zoO{o`-@V`S|35xUVeK_XyyG2X&Nb%5yV<)H&_e|oc^MEA5)$YY@CS6a3bK^;w6+9+ zl$Aj&AP@)xgn~p4LIu7<0xmHmivRdt28juT{OA4y;6pAD@HgloaH#+naKrr=1VaA( z&%bX?tsPw19V}dFc-Xnwxj=XGASnAU~&pNN@8M~XEbzA8JSs_$-r!!Y)qUCOw3I8LXgnW(XlYF9%ErWW+Eph zXZrvAb=LtRzyMt#ogyPW0X-lj8lQ4^RPA?t%IH3+VweU@tlbCKfjEKs3<7F(|*9`AQS@BM^CsU&>pLsqSHDNat9^kV9-fcbrNa(gwa2L?Hr7W zMNC3UM$Yh*k%^gwhnJ6EKu}2Pg|v*UoVa|=tWH`X>Tu5Rugo?hM| zp<&?>@7_lyCVfawN&WaK?MrT6enDYTamlypn%cVhhQ_9@?w;Ph{(-@v@rlW)>6zJI zbE|9X8=G6(zo9!v$0w&}=NItHt9!qYK*)c&^&g)7H@^q~zaF5VAfuq)`-Swt1Gtb0 zP*9(6p*@mNM>lnPOv@dFK`5D!Q`Lz{_gn);^xF9+7BM}~D#OveYkxfZf9F{6|1Zz} z!?FMLYYv2ij06M^nE(Ul=>gVKMKL z1Zb$31I0EBU+F03f6v}Y*>x)P<-4|MUp!%(P)K+VO>l}V6pHeK^k~PK>Bv{XHn%Ey zzAr!M&Nq@rUg)WJ*N$d*VXi~db0EOYhz|Cy4_JK&8(F^t5gx?cfdaV#j(FM2X68)4 zQ+M5gy1=U$g$U+-iaQYK%N=OV8b9Rb`DPZpu*U8VH1omaMwxm#;K$HL+$%>6xH$+t z!qpeJ9}V2+xOsvgM~}mQvkXTixdT0xt<5^&_M)4$^_1tsy4CVfKx{u^;g3N+ zdUv4bcyi}}g@Bx%fMbp~mv^8Frs_LT_FuA_J$>XxZ@mENJwNwt0-lr5``}UI!De4U zR;kA^F22Rxf!=3(Lb@fT01VFK;;xSG@8r%+A}lGZ_Cx@C89i<^oA?o+dlM$Dy2QxI zz_7SC8~2_D+$ckAAzNk}ai#&Q_^>5FCE@u!j_LtNJngV|o{rI;J~H=?wg2r`1icTk zr*OC4diR{b*&RqS3Q(4J2MXoyHU(_PK*Y)#`bBaep2h)U13aB&tCH7nIl8WR+}n@j zXN?z@RL^~EZEZ>U2d>EmzVEAt$q3TBmi2`w#$wWcUbQPGfAC|AiW3#Nn0`U6MD?pYidkc=xEy}9yhEEq*MAGux10s%XTY}#YNOO zBi(_rm;g_W#{+&Kj*j~)OM%2dq5l&>FKGb237sxuayo?cA_Zd*A`A@IIIl)nT>zMn zWzvj`aOFu`%7*Sava@er^AJzhXUW?cp4M{J`fUEQ4s^7+w-nt&Umd&cAg z`DPpK=^^uXW=sG$T8hb?Q~LrYc2iUR3o zcOV$r-;bFCaZUupJ!ya;?x6rm2v0BI@OJ`$&jL@4D>MbMLHs5~+$ICEb&(o?uM(DfJkzcxyeMW5_+pAcOC59M9 zuSA>`q!G|fQH6epLz>-sQ8}a8k_dKxum~i!{nz;|WH)X4H!0cRZm-uP_@~)A!BJAV zgk57iFH&0eQo84l1JP&MFL^h(dW(GBXDXgHH8oE7gRQ@PT$f8{H5NK)*e)a$q}fM7 z8j&l47G;@bO^O)6bY$9uEV4rLChfnNQ7q9$;O@N4xZwBqJYOfOa$9Zoqj;hEt{vqJ zlX#B7n!~l;-E$+x|0>x*f^t(HI+PIfdCK<%bnNsH3!XXAC-wxE+4zc2+U<)C!xy%s z$M5$-o?JcjZ}pi0GW40Yy({T>x4`ySfjqP0I{a-7HALZ!v@qD?X%H^*Tf_%yqHn^Q zRDDI4y%KDjHT--qRVPBt5xGeIx8zE0b3$2N`M(?tnTK*~h?Y}RDh^&m%TXSqG5;EI zO2Z)H#u%1E#}*Hdbverg@%bbud7x?riWX6V`#$!467+q*=`((exgD*6oP6Y@TicGV z$cidGmB;XL1?e37o3aXpi9)sOfM!StMKxboXCMv6CE*BM7b?v+UmP&3ujQMu~G0TsW4XKgkC@NZ=pW> zT~*Cp88B3BGe;aj8M3gU9=Ogrs};R<^D=9H6gB7$B;f@)4L)dAW}hE*w?;phLEf=h z`#R3hOs7}yp2GAM*E}VDMZT4db`Td24JzXna^ZAsnlb?uS@#YoplfJM0+^jta_>O7 zd!>aU$V*l1>+x2{MGNWp#>q6`E)UC3&Ci^m;{6v?SEqS)`^GhUT;F5LgeQV8Hn32g zWS=PWY&Y)sF+J?^w>-^%hWyGhI08A{Z2W_HTz@O~3x?>p1{`<6JnYPxGGwlp76KL0 zZR(nE-bS-bfdZ>KXRco4C;kCZD3q_XEG}f^S8lCwE>F%w1&{Kx1n)rNs<&heMEj<9 zpoqueg*~HAFvgqr#^C;2e77s;qRlU zHWKv}ZLYq}$D?stR8jh46&_XOD&m1|tW}-L!(nRa zlxGEH=B(x$+7^%2XCjr>si5yfBPzU24w02m`bVA{TLgGldqycwI+h=pxr659ihrA@)fENt<+!1z)RO1s&r62)bto>!BMcpuA^ zUeoS)ZTI0SD!{1H;1r$4q}4vReweR*9)je0(YT#|$O#N~tvJm!2Lvu*wZT+_()#rh zaQ7Fx4F|ErHX~R{9*bgLI?Ju6yF^boF3uFCY-jq9#B6$wU-don3!XZASx;AhQ%8q9 zj}#zu#rg1M9m2J+VZCzeF#2>?F(_V!E7nFqFpC5X&xAAGfiS0l<V6|tp z_~`j!3kKIp7XITg==2@virLoHo~&QPb|~=zmCbf_kF$xV#DWmf>|hYl7aIB%4yVPCWOKIabAXRhjT(HK#9~@zFJhPf~?Uk2``@spJ948n;)L?ZuzDp@nO_Ui?2 z=#`3b-a^Qwx)5IiNzpcu3#6ZlR?X+L;*epln|2z{7BUGR%L*Jy2d=k0v97d9H71=n z1o_yu%DkaBd1)^O1CPyo_GLJN+_1JPY_D#|nDbd;emedB%U`$P{XC6T_TV6Tfjl~j zi?z``fc&vF6##$=u+2MA_(6Gpcs9Z3cq35XvH3H6whtYow}QMJec<=R#zYhO z%aINeX=g??uVGX(N zOZy&uG56rB&pPk!4Nf2c;j(%j)6m&APrl2AC%t8IxQj7|;jTY6IwJV+4wT35Hq}Me zA^Sv^vd`}pLY^n@#j8>L{xw6tq0>vtgm2^DL!N~M-S(DzI0(%(i*JD(IlHpAA7f4i zoVq2ut|O5?WI+=a&LuS&iRsuMu?CF^M<4Z)p~m_Ze_+J!gcvi69UsY|Ff#cSuWv&K z2zyQC7P^8aGbe*P3b$NF>o+A|xn;j*=ZlVg!?;Pdo1mmk6u##JR^Uf-RAIu#T?`-m zZQV#Ja+Enm^OTUCJQztWcl=}D_n|;R!J;j-ANXK4<>2j+)iU9(z7#aCfDksCyuJ25dBdx{FDZDsLI<{K70=Qp7m-$DwFjbS+AJKDF+8rFu&ZsZAfC5rn)>?LGNsOCuAeA>ej$~+<(Y0u zq-evjc)#G{JkgZh#&)X|Gm47~C2??Ww12QDEfmCAX+u|cgx6Gi>HHlcHVu1s0u3?nuII=>{OY1Wvx|a*0)=9n% z{ge|-$!{go{cJ@1PujRNO)s2J(kR{N&^FORQ7$AR8KQJf?&(8;i7noUnp#z=-)xsm6WdF|=) znt6f!XN9$~tcv}O++@bY&lIJp7rf|VU7G7y^W)GN-cugwosQ)k2kO8I#r-9AB_}QM zqfU2s`+pwPB-k=cfA)3=<>#)EXW~>OK%LSp?r9vEn4sEWXgLZ;;{oGe-GK(29T6`| z#u6gbkD?3@h43TZuhU)I*im}lfxc)Kv>ZicjOKXyCVD~UT>_37_)T|Y^L1@KjG61E zYD?|;hS{EN-&?w*W#_j%Afc7J<=_fRS^)yeU2&rBWH`gapuC+X;&_Spi z8c50i4x}J2gN9!Yf}q#2(4v2e&inv6SJTN9C?XbXV5}ev#ielepd9ZpXcM@|M)_E; z3CA+_%zM6VGDnZJZtyH%OcZizSEExKfgt~rW6LOsOBgU1N*p|O{tooJ_N)FpLea02 z><$$F7V>2#zx9-HopQbSpj89l!{k~2yfaL(SmCj`C z>hx=gnudoDT~B)2?4$`YvC#xPLf^W*m9moraoJhIe=c+wLHGP}TX*82r9|bkBaWhe z9Q17?Tp5Mwsx;@=dY(OpSFLriYd?G92O71DeKPvxJU2(Vgfp{{VW}>@=k##YG zYqdk}-?%zunw+g__B5M!Fh!v+F@Rs6WlEqCUNqk-WfPmtZ&#`GgbIsQWS~ zzL98Ps)k?XDkf>GbH{qwBYj1UgmgRM>O?o*(8m8sLn1!@_qmC@O8F*VO ztHRrR00ismcv3rhQ(f;(a6FXd1YSGaoV47qsXV%iW~jZUT_?%n39&^KceuKdE~gK; zQc|kO`wi0Eb<~#hq+RT;*WxX7Jqjzkand(t=(OGW^lQs8!6O%pe#+Gvv5w>4l6Mdj9NpFOKv8f zy1==PN&h*zLD^;@+$iD#yLQ`LocHYSc6u;_^_sxMfWuuwARbSC6e2O~tsPeSYd1}_ zpfGQwo>)iyJ#D;G!Yzgf!EB_;uo14iMeRmrKhHt-R^DqolI48CwnG7)UY8yblOsj# zX*br4=c~|gY+(;B)pC_!>1RUk)L^rSqxDn91Rpkkj}r%9$2Av-VYk=j(|`qJqF)NZ zHphb7FAL3WpvJ;S5ux;YytXMve4$yp&Oz*}CWp+F0#qtq7eohX#HD6mp?pmRNdlQ8 zn~ zeGedMQ7-h%>ci)Yqf@rGdRYCO;CNu@hrH^`%c@McXiw!%Y z*SQzi$jS^Yx9Qgp<`%v#&do?wOfyWb!=`F$7vckKjD_^8J1~?F-pY-Nvi>}6Cgm9x zS{j;i@5Vw=zx6LH_xRaVP|uWD#wWvtqO8=B(`bNGGQw#sjp-- zUwGT$V_CPrdBCNs4gYE+8eTj~>3yVtF~a&>3ct5nDNXg){>Nt*iTQbU!XyF+y|259 zRUt|f<$L8icAVML;F%ro8EHshp9z6YWEHiCl><)z@lF~bKJSls96-E7d53rOG_OCM zLI6hjOf4vUV|^mu@;QF*iCmLh@UOZBV@0Yw``?Buh)-X)|3~RV_tLXP&ij73#@$N~ z_}lnD(xC=ynSqv-rAOqNb6u^c?ghn? z;@dB>+Cn^{BfGv`e6?0xrRtYht`${rX>gjWmi{Ql-jE{tOn|9IF# z-zb{gGQ-irrr9*?0TZHKbGpg;28|mY&FproZ$e-KowJOycfn11@okjt;)A~%Zr7!i z0Qz*3cbdzG3Rkx^*l7_Hlk$-A)2VXXym6I->q}}cGdrF*5}SK;%LeX)_ZPa|7j;L& z$|jN9&-hSJ*T<9IprpH&eHQ@73S|t(1(A;`B@IpTelBt?qNmdOG0TX!#MQ1HR#brN z!494VFS})gTH8BfylOK`3Q7^dNt8D`uxZkj6@^vzFFiftEB8#>kBC^Apo_^PA@?uE z*(c@-bCUOc_7JC(CAvTpEWl65oTE$TAq6?)B|CfZuv|}47Oqx0qbJj1@1bWAb-!?9YkI0b< zp7tt#JaAch43GNa8Q0@omt^Z@wypQ0%HZ3QEaN<3_UofSFXVWq%;X3d0t}aKdkQb? zat9`aPfmp1Q_)5_cya=fLZAh*81HuJ{J)B%EOMLtj41s6%QSte(3In|4D~W`x zD34B_eQ6!odkfa|q~U^zg-UcFM(Tl=1x0<>x9yqe$2+#&Sv@0XRY_|zoO-%TE8l(@ zce{4D%@qQR7UKkpvZ~U)&V)b<)3J~xfPNT5CJ%R5LcJJcdAQa&NR6b3E6S|ZXQe3F zT=ESsA3eADm}5s-F+6aFJpPRyt|Yz<^j99@-}VJuV~v!R?Z3{hY3PNk$lrkyF4jQn zh!Dta7{?8ZzwC_;@Eio@atE5#_C-h^UjjQdp-gZM13xRoBNM`1Y-=aN7_{Pm^LNQo z!G`QVPjJk{LT8#}cAwcCRhqvd({-h}C|@~z{IvYZq$cv9uTxG%bc=}>p?6?B@BPwLW zA07-j04BOW*6EtUEa`B^Xat4)6g*&^y>V4njk_WLdbl6FETd`9ZCzU^$e@AF4C4q67giu5dIeVm)$7*Jg2 zkkF}YTg6`zJ}0Jml_)gLvo^WO3P2Qlm07^oVil3EIOo!^+}@NHlUre#Ib&3Bl?0!W zG$Dfz9gx<>n8_>u<>v0*@qeMn=T*)n^c%+IhyLyJ02Pen^|hc6O5?%D* zwf~6_vuc+E{(qye?uP$UPofsaFV;&8CXYNz^_3|!Yg<$1HSgmPMe{vuPRum3Ev&R2 zUgcHP9%fHJF2d`$*2=zm;$0k3G!!kmdyk8fk$F z#TH{yx_d7_2Unhx30@0-(X8iacm1Oqk*ON!UV&#Vu7dT(=Y722;z_n35Xv@d!l?e9 zKZP&FgmJ&Zbgi)MXHiSxUj>cw-TvpaMlXEikt9$kSF%PTSnV*$P4L>teqTX)93Pu} z4PvO#*5SGXng7^-+EGq2TFn-|k*VU8j-w@%5-j3#RA`*ItUc}8>_?&!qUuu)aLXe( zBabVkbAW8aJ4i9@VAUZU23H>da`XD18iBql2rwM@83}xTpAyV2m-wkawBX7q9Y+^E zNTYu^xF*KsE1KG!NfKqK`pC0T&xrd9`xDLNA;7I{UlQyZ-);{R$;nlS*BeEB0-0U< zzbc2^Z;3*k0w+`}IAb^4I^PGa>x+(%YW zI2OfI4YL7_#`*fHc#Tv6MM0gUEAe-)uh06LFj6V74x>aonXltIMHp&itdHlLa_QA9p*Rr8RWvj&Z?SwkgKV7w%U|F-26Zyc`kq7OzLC9(^)zNq^3^Do(f%z_R?eu` z2#dBgE0tyIi!c0d7PXR`>m^H{$9@45{eIND#a{KAgsfYsB!F)C^^X5@lFxfLtYodt z5avdf7o69L-dVs-$aHz5eOcY}t+sbjFD5jVz8y<_dTPn7%t~z@e`cmH?v%EXwB;d0 zTUJKpwN02`hi@kLf}cy4hXV)NCP-pi{99sWTICN&TmVSC07%3a317Fu0-9+kSKJ{R z_R_a0R=oeSMVUM#ru!nS6vm4LA*C!U zB>g9H`*)z7KRD5)UD38jlt1d4oX;h*0C3{krOPa{)f~&5>SuNl&cM{uH9XLer99HW zLE4qaiS(pv2$w4q|2dGar~1}MTPCS&!Bc_jPw-+3|AiFL?@9Q-1<&|7N&a8K6QM}V zlfrLgEIz*jooO%BO&gG%n7ok9fkx&3`k0)i_o-ztpYD^nsIs-Q%v%*99s2wq2X@KH zfo~f-x6>^5>NvgfxTz$kmo=&yD%--WY8zs{q%i*e-Hqb^a^uROw8WR*WG{=rU~xwb z?|s~?n~y8EXrA8-m!fUt?0dH0+Gc0D)KtS0R!V14D&eKlFGbdDd)~JnrqCdgnU5|) znt(lUz12M+rxm~mmROzH(wt>jmZtzv?lG+*+F=&>K;2hzd}oXs%WcrBj|M_eNzw+; zOggu9x;m#7_6&+h@ubOiV{1>HF;all&6%yN5EH`qA7gW5Tn@+1+K^!B)cCL+>m!93 zerLHEl2kh}pHK6Lf(WTuEb>k5M>CrFCjD{xhDRD|Q|N+hy;8+`^E>2z!x^WFqUAsA z39A|gT@2SFT-Nywy8>IJC9)IbA2U_3DKQ+#r*L61}DW_U#>Lcg&yN z)2M;ND^8UTSkY>p6$gwq25hw7B$)it0M5iD0H;#gFCUfq%E4IME}wl`hIo~INUI0; zj$-v?%Q*bh`BL5ny0vL*=5H1B0~Tc)q2E&KiorLZ0m{?gfxFM9`i3MiE}iCQ8C_xt@dg1`3;gk8rylO8YuXa(!1-dv|5 z6ahWx=UVOC8v(~aS2mxqC+oq$_0sUClZ@flc?dTfjwoZo_wG5(T6?9Afe@T25%Ze!#y}|HB)Z`rbpV zq>P!|xXV=lxqOo-1mN7?aQOY_7>+$4Sim}9WBKO2Jc1tnNFIC8{Ku^aZ(@@6I=pdJ zZv7W{?kA|@WnBljoImFCQhNKb2|`Yh$=2qtuo83w*oFmO&$M3vi_i*X2+0knftbZ# zP*48LI-UOn&iUpQtY0|uqJlI87$WD-0XM7^J`6YnfHICNS48-IzXLGZ2VKtzDx{N;8#tlpPxbkt|`mh(?Y|DhZZ(*NK9Q+rPwa!dZwK(o8$Hw~Nd z8$H+;8M?TAdD0b@`4#->&wa|JLeAHK*@KuCZ1x&|DS8$_+`O{1R{$cv~)nxnj!XF3%{>5#AfK>;$0qH+<1B|<2yS-k%2FN^<`!9;p{41mpe;nFQ zZM_4vgKxdH;hn3_d5*24jtj20*8jo{{4YI^#Z=!@qbK(y>ZK$#Q!p^{dUHf&5=L^q zKd)8eB(jI0?<%i9y(r{pgWSZYXiQH5>6jF7Oc!xaX1q8r;CRv<=++yu`qtAREAs-n z0r2NvT==)9hkx?UAMJV};6CjbZ`cm8t%MJO8f^&VQ(Ha9XGT~hfaN_gOQe}Ba1{x%+4%Y()BBit#2wbzbQOvEN;pgS!|8gy z%ZwNSY`AwO!)3Lc+%~g7w(9+7u|_(c=|DRJ{a!1qUh4-^Sh0_Iv2uT-6T*69AKZEo z(coZc9w%}s$GLC`2s=#>g5p3|dmX<|gt@NZocBhTLi z;8MDYJ$3gs3BI8!@(hq}nqp7H9^|>UOc0x{I@#n95Sd(tRkUFIc(8*ZFMz!N-9%J` zvN7w~MkTM|y*gq9Ck*Mt<+zi5EY$m#WKPYttV8p0a>&5LI=nkYGR{~T{#lO;2 z>RKD9L4UG`p7DkSAIG8Z`wuh7z3|C^u54KQ1&3cdus)wIJd+O?9lW0z-UZlvNB9Bx zeqVXR!00z@iyQ%%_XA>JAzdq!42SEG|BDuu8!)VqaibLibUCgjBLLIFk?ue`UeR}; z(SDQh|IIjI1R>x=U842{;@*j~5?%lam-PJK)F;4C#eNzffO*B~&&2hl ze-%BfnE`qSsspme#x4M(gpsx)&eNrKs5nUPAUr+)BmEi z-vs~(Q#f(~h*#Xx<3C|A`8RaS zz;mpz#Mfe(0f3@hlTb0T1u2FtpVtA1TCmoC@GkCO48n&+b?v4z90csP14BOe(!v@M z*!QzPFodJz`~S!~Fs#V;nNa@WA8zhy;D;KM3=SEe^ z`HBP6D+{QKSCboXiPhJ+-o_#O_kjFw{J{kN7fXnh!8ZV%5;^`|=IOKLG6g zpF9XyRr56QSZD>fVsx*FzYB~V{aW}S0DAA;A4NdAG5`elcNSp+iuz0bi77K2vg-df zwIyKUzoHiPFVyZcqRMa&APXS()ll~WC(*Q0&R-L&Y{qtNYETZeWQsbij z2IyY?JEj5uj;T3ZYSn`Bp8z%Cqr-*eVckkshR&rwI7jIY1WpTao<}Erm_K&Eee}Ha z<4_(Y;iGn2M0o~IV6uQquNdzTtj8>xz{o0-H#rK23!KWc$Ehacb>$?ED{WyZ{Qd@2 zG>GnyA1aR1d3=7rI6<11AdigWJ%$YPdG2#sV0vLCS_~@dVV44r=U_7qryN4XL*3#Z z@uzF9M-EOPC93*_ zuVlI zfmam4Qob#jZ*kpH=PG{H@K5%}oP{0(j)=wK|Y2jX_`=4d$WJW%SFMyo`1hy^(e2jpW;1*W>N}eNF)(Y zzU39>@Z4`je6ap6s5j?S%E8*f7QNSIeIQ|!50M7Ek6WSxlqsYg+Qv6wqSHJT6ZAFOz8L%hM#rV57~o0RH0*M zshT+0YIbLGRLxWr)K=HGz3a=gb6zm`IPQ58bCk74cG%0TVQrYtbNbleC^jq4rtZph zY)O?ThBRR%ut}n|GF)c#d(wDzQeVm;anU)sWrb^sf?Nu#q*;1MFrD3MrT6J?C&|2h z_wEckwQ&UP++Ys$A}#z=v9!ofGK&{=YXW`z%7egcl+?N7$MR$Op{tL*!ttDGS1S3A66~)ZZ;yfaeIoEK30Z@ z$5$3$d*3Q=QXjkI@*A}{Wl7hd~5T2 zS#8fA2P}?Cw!}fz+T&Ul-|9)_+XRm*a@3U1{F1;8S4^bo_F5{-BVuC%N=tU zCs{ucpN}5b`iy5DgS_rTJmp|#5Adik%$%8??^mp4++jb3xq~V6YFZ}ih<&k!ux-+{ zT!S^-gIdddp{aOthV4Q|oIbNfQ;WhNN9f%_IlEcQx9~06KIYs<%yj4|=Gy2n^zAhh z4!jh~hO@Gcn5+-$WlzkvK`AK5Z$YGDXM@^1>?8fTsVvStlDtnwJ}b=F`Uz2_`6elv z*)xpWWqi?2K!??#$!=>C9t>`{+_Fs1rPn^vuo1>X2m7FBekf13@VqFHOXMHOd*D?N zX3E?tj4`SpN%Z;6AUGc>q8PboEs%Ajdl2nUc_JZ# z+m<~+)DNL>%2eecdIE<=K3L~OPG6bud3-2`f*Zz2#xreN1GZ5@NeIG17uoufCJyu_ z59O>z?m#uHXh-=8=#V20mF3gF3mG0Gk?Q-*by${O&3GH-Z@$#;?$vCS0g2;!gr$i) zQY;BS!`upc^&Q5wOse+KvIIuAK7JLHH*qn~h*l zr>&|oSngrV+-=+USBe zLa%c_8^rbta&!+fAJklbWIq!&h+^ttWvCrZ8KqQ_0mr@BMl|B!Ds%uFzAowPpHhMh=Ijb0|8-Q~o zSY+)TbGwye?PT$|r|$gxf@Ez!;pO{FT@aBVh{ISA*sx{eI^HR>+g-w|nmRMt$8_Xn zwT5`K3ERdb45@8mf5o7uPUeeR^-+GhwZHGk%NXotLHuozB>bU@O3!bIew^KQOkWY-#8?w_y*UsnbrXZV!wH#%togf0O%F zbwTP1Ri1Kma?Xa0gxRj%a_qS$F8mPbOW15k@{R2;W+eLI>DWPh1g(e6Yb<|vb4~1d zow)66kSm|HXcjg?c(I}RQonhp_xm^A8ZhddH9wb1>RiUc(3Zx9%X>vGQgmF=@h6HwX5yRxT<31q0{-3&K}It`h9l(1XUrL!RON#nn5`+be>O|mqP6aV0 zFR$Io!x}hdD>ZZo!ru0uq>D~U8r82Tf#WMq+C5_%?#pqQRyjmDKM76tpsXC>it9?P zOFp2CoEBpB(X^v|u(i4t`{bcKso47M)@y#^^%=_3G82L~I&%f(Rz8l!-6-0nO~PK~ zz8jA=5GRKf0v%){Lb0`@+Uz#prP`6+7lxJYv&eqZE8jcQZUtJObnZP0DGB92il6Op z9=xyQI*{C0KPe8vDc{YkRkT;ptJzq18NVfx84_Ew`D!6H(DGv_oxr&$6L1(+g=;)M zlRS=F^8cE`8`4l^EHMJIVe=Vy6;0RwZ zU!C`Pey2$0he5n%6=4l4S;J_++QqXpP9EyUK-(qo+)dI__=qF2x7E<8C3QU4ZSVtm5 zjd?j|Ic!HR5%~(!#n`S`%+j@(^|8SyRd0(+hg3fcy3`KFKp_{hsfd#vvB2Y6AH13} z{-@)rBCt0Nk2o)5g|Y0pFzefx%kqk8UTIWG#rkIy!%gFMCFn?#2dG<_`iGo_BF!p$ zSNl|$B`AF~kV2g@omAHu3-f7ERkJdEG_R4MN+`%=>#h6&qam>$P{XK@#6FY=`Mn|K z#;GSAexjM^1r;a22}e$+w(f8+tgw-MfLt0Z-pi#{p>(?Q2I)a{_GpETcTtS)Hmn!K zKJM&E8=t<9-9Z}^r^O&EvXva~l46zCu(V^eyiH3aJC=_54gTx7({YQx%57$ya9jk(Ug1gZZKQQJy93&IwLxL zEjWaV`K=^^XAlj^+(A|BG%)=rL}9&(TH=*(8s2yE@`B>dAUxD$NI;7<*_tpYu_T=M3~ zjg+lYvk=%pz$*DT(9;r20Qx{6qW)RW@saNx$D>d4t-VSN$`X0-oyk?`X&gW)pa;+U z6}Ceu4^mxp*fqINdZ`(vZs@3%GMsXr{oEmtJT~~T_ccGs3QOKFDO`Ko!Lveq^6-$S z0(;npv&Qx}+Xa!eZ;{eR#EBVpmZpw?v_8vq67huk)vWy|9!@oZ_15Ldas2kO?ubsJE3z+Xg{LR=h2W?Cus-p-ZbT>+3&rWQYu=r z`{l)$UQNNQ()h^4GvR@*M?@0qTYcgy$1KUDdxuUgt=$Ij2xelq*>^N!kHH-C64f!2GXj=>=FtJdun0QG|yLQvVQXkFl>-FL35!~ zCaRgPXOh~)X$JANQTWKtk?Y`B(-i)AE|W!;L;7__j~{Qnos=ahWSs;R-Hn@%L?_cM zQ@z|>S+9Q|Fq->dF3G9o;dQ6S`aE>$yveSDM-|njdawp#dGf82C^^gsrm>7}#qHdU!&CxWkO z=0@Gad|kL^ zFky4IT$jfuW<)ugRSHLAE91;qc~~ek*X8}9P)xQ9Il2mckhIxFRgGo{ZlTDDIG$$c zlXeAZ!&oHf^hacKa1!-t*$)z@n_|$4^REr3bPY4g^Ya3((wMx9VFfh8tw6f?n|6-r zv}62~B$QBXwiC0{e9iRhu_r%cN|R>FK@UU&@uu(%W#Ybw2cjLN7?%(8ck|T1^%W>-tx+U|!ekz;? zet+ecelMlMAbFlb4pCDeXoVV4vupocwJunI&2HZ`mht3~z}ibKM>WvOu~%-IQFroV zy>6nK*8;S$Onq`M)JnL$R5)A#i(M7MC+R{oSg#$GwM8?^(+M&WyURG za&rHe0$tQ=w9gjyH3w* zLfsgG|NG~hqD`7~@VtVQJk~soEL{$3Gkmao&@RfI(8UY7fc8zQxqyV zc+fRaxWZbOuf*1N73Dt8LBEJM;GSaVjUlhoiy`hUiEpO0W=b}08Bf{g( z{pm^RqqP{@XS5Xd$`xv7UtYey&a{)M#eyO|S!{t!D!^-|2s{5|m0OVZtZX<(oFQs& z=aCG^_eVn~Bh^mhrmdl2QKN0aFM|@c){Gj($Ene>SVh`&DA9O$0>d({yQJ(-n}dhO zSqD86Ey7-IQ13^l8ICsWMY(f!+rLRL=t+RE-s)sd zJ&ERCN%zsL#91}(Qx?g@uSI6qQfaP_L-9BYDTBQE1ZreRpk{BVU}zwV+K9bI*=a+UB$-GPp*LY34)JKVALkzN)1T! z?5bTUYN2tW2&SRyvx4<)v5(nOb-~;MSCg#A+l+!dIJR7{LK6kII=`zeQQl!#9l&ARcoo- zGR>?!t@Mu8`PUC`gqj}cXiUsrQIL?`_)f$PwOnfISV?}a(ot^YZ}KZ&T8t7=q%l$M zp!BaLI;byzj$iV7oL8z=4m`0IPx$aa9(xjoFELlCZvTsTDb?aPy<(K-R!lv8B$eC& zKF!2QtY9{1gi7+2?)|K(gs}u(jCIk!$?aj7e!)ZD$j}4Q2gc0Az`q z@x?h&32rT>o$kK3y^A*|V_K(t-sY0^-e?c74Hj2iqm??Ozp>YSp%!$C^h!%0FVw?L zkfKNRO(yd!bTxB{g}-{$CaO`gx$WIDbVNLOTg*0pZbSN;!|s_~x#<>>0&~P4ATMb> z@z0r0`Z05w81`nuk9GUu!VWy2su#Cr{OU$~EmPL+G;MZ5OP(*x(kt=ZUBBD#xF?@P zlAI%CFE{2R zQys@qU)F5e_!(k{&t`5k@@&!<0mthWlFeOPF~^|VxMuuL>vL?V=8>Nryp!D?o!pC8 z!?C`i=-W`45{_gw&#iaG&u)}MjbdlFP;Em_1sxKFI+!_<+bV$5ZSX zH_AZJ{@G!HefiyDfshm{>islEt}lx0@^)C%p(8$?ivv4cfpfdEK=2imtK=z7ucR$vsS0HWi4zl|7&)v{Yz;*_*d9>JllsW7r?A=AwccUa2~dxEKzP zZRpl7e(S5?;dkeWz5@VvUaoS6pRrbdd>XRz66em0`a-o!uZI2Xg*&VacHHXoZ9T_> zv$~;?*F)*f7tdSI`Y|9r1>+;1F)=*i2ja)Z?|R4_&Vejr+nbrUrGh5ka}l4_$)yUu z*z87|e(!a-JGVV%PiIn}13-aPlO~UZ;VQPZAM{l*Vh`r^%vBk~*v6v5*q%+d zvN=BGz>;}j00xA@y$)D28jd#oW zYr(I)w=~+cRu{Gl>!v3!%x88|^0Q`+wyWAZ*V(s1z#m%TDK@fiei&Odm6=h@Iuvw^ z9>C&^{X&1f;EXj6a#*WhQOG})@Xyk9Th%_|GD}$5u{`8GOI~sClV>9HD>l+K<6hxE zp!IaMfNr89b7;2Iob`>oLR7w)S5ZI8yW;Vw_WQUt000hGgJpY1gdiR(weg`PkF}E4 zr0($=9(`5Yk!Fkg=}u_CcPs1ND$i}fUQp{BrX&G9$y*C7F4XqKWgIOuvmB?5nv-w# zeyTdfqQpOk?7>vxMl4F^>Dt-mAHFj;U=?&mm%o0~>$Y0x=)2pu?tmIUF}nk!la9?d z>Jzz%M~IY`vN5$+#yqOQ78rE(&;0uMxe^y{eB0PdHD(jT1(+TqMN4Y8o;K9aP@n3f z)))BwOelztKL?DoY>sGU2M9(S99VxO2^mQxgu)ERXjQW(LY)N~SC6O4$O|XYdjwo3 z!qTh{I6E7vMC0MblHpdN^u87ntTB(<7pA59lvf_^me(JxmD&dzJ&B6q09jrs+$x_la^vqF;|6Inxo!KyC{{BXK`R%JCmbh~6`F-fUZO zrR~gHgQG{Qj2evTDQSW`KzH)V=iacgccV)B_wbN&gq?(t>0gG+G+(?vGKFlweml1 zv5a^@rC@#wPlNi&X=x-G2ELv~zm|my@kOY^6Q%RthYEXhP9qe_;3=`e2W|EgUG0K? zcG%8+(Rsp1$1HG?gm=E}hUCkjsD9!R$}Ags>ChnJSK=({(4xSf_|CFfMDq%2^`9E6 zecwN6EBRR^#uD4?svsrtN@{Db2iFOc;gvs&tvF5YDo49T%=ak6M-yk1IA@Bo7ubSE zL4%@)$Y0~qJ82>47=rGo+A(IP=(^vai5T$Gcw+Pr@sJ~dX5bz z#Ub&<#XEjY_?SeMr&NN3|rJ zzh6O9mlw%RV8q#aTe)ZN;7ipEW1;AJ}d{@#Rs!u#{baDPz-_odM zz^KEh0b2fvfp(l$aH}lX8v4-LYFC*&*>Ul;=d0g8QY~hp8TQx^FOK($mv0D$sh3y| z5n0L;y1rRD*lQu=N=4~$vcY2>*@_g|7H^*O zFxR)&rFCb|DF{}*kPH=PmcOBB>0{efXCW{OpsxfQ)C zM>jjmK9-(_*L4^7&MdvpdJ3(RyPwof)GxCck;pXqAi?*2-)bWH+$9LT$k(^dCh7Hh zzvm{tpqJwBUP4#W0^}ECyY3E7(!Q5ANy{oc-u+ZwxXw_Fhu3LQnR_8#`q$nZ-aMqh zoFpOZJd0juFJhG9dc42qE@Avg>1NVS5h4IaU#W%jrC5ExW#YWEubhid#E7OGQ*-H_ z)#^yq083Ex+G!g2_=V3PV_n?oOEO7pZw^926gwKR`QlUE$zru%!{y^I-(OuSWVGwc z?Aub7;xT}`MN?)?@EPx{X|O#Hx^KmuFNm3q-99a`(i^wXS8aZq@-FywobB^<#Fgan zg?6QJoRn5)IbLO3t=Izt-8+K&>^?|aNu3z`yKY0m0w!{7qldz<`@Bq-U6TI7`gk>; zswc>XEIeJ@3TF+n5{+t{SpzQAJ^A3B+)p{o8_Av>=^zzA2^UZ zj`TNu-y=d6+c=7IqPm! zP)Pr5BgD1=yIF?Ri&dlMp!K=&=H11aD4R94PozyFl1Dn})1A90E`$f&Gb0xQGb5NO zedNp_K1V}+n#s=er#3r}VE8%8YeXdMVPGAPnkbs#Q7_qU0bZ+yh|bshiI5zA$yIEj zQSJ4|RijrAHBR=)m1o@RQx@$|6b{ZW;-rekc{(MJ_Z8kriWJ$WQqI_Yc6;4n^hdWr7!(F2p#DSGW>@C3`pbi~hGw-a2Nm1MgXZ21 zS530Zlm3&l(#vQf`>je1j%cUiH_fe9Hj-N<5oTNuq1u6u+&3l@KlkuNV=eHO&CDD1 zAP|g+40Wk{xVNjjgEHPPVf#5~b;*6x?u9QZeC))<>l*PCu2O4R?bUQVzSABR35_SD zZ-=7yMWp!V9e2^^{Y^@_HQu-muJ5kcGNec);l^=ZR{E$xs99INbIcaGNq|l5;ZNuC zKoE)Onz|P&V**F1Xaw&SXW7HBm89MoUI{&w?~&crTsjS@p+MnHauVG5~;+pH6=iE`(hlpeL7dmFci z>x$U#-?GoEcypSJE-wwJI=SSja$@7ux|HAK`~IF>9SU07@KilqKv~~?L>fB7dz0kC zHgOVbC0QIf%o*_}6@gSBFD~3D8W5STu6j@A>w|dCSvWfNlV+`2O)<>HxsIJYSi)*D zZ#L%kWtJOP5SDQa2~a@Y1(d9`F~~YT6*6DXU4~~W;}YoYg%}4Qo%Z?a9PG-4qn_xD zY02<+!i4dwhgxz!Dv?zOViESU9gk|u4(ESER`z}+e5{OZ<>;(oRT~?-qgc8~Id43@ zN#2IkR`O)IBR}>T{r((6&7BoTX?-A}qgI=$AWxoVulI&yCsnVdKBM9Z{ql5eh|W}* zqt@mM_7EZCN0zcmOj`X<%1?|l`+JXs_c@&2b_D?$bb3~W+if!Emp2ihR^IeUrMgW-makBX?lm;i|i1SdWUV@

    >qp=MfeeZbDkojUWaX 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 C@l3`5 diff --git a/assets/manual/chases/chase_initialized.png b/assets/manual/chases/chase_initialized.png deleted file mode 100644 index 801f6e8f77c71f0c992c8057685757d5136cd8d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142599 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%0D{FtF6an`x$1vXi4 zl_S3Psm8imhWq4p>mm7u>rC2av$bA%V>-q`ag5IyX+OR5rr$Ya_u<1Dq1k?`wLi7v zh6p`t&f+7E{l}dTzL40JqW-RXhkotw>W3bKRpm>s)Lnf;$L1S%j~g9f9nfl>5*^o=-j2^X@KH;$-={6-*mBBO# z;b;mBoSKc8t28m0mG!*llVM?AbO;`5xl>P>MCnA&2S^0WTOx!SbU|0TLlb-`DALT8 z0%A!9Uo(K2CB$+RN2*$BU@)JFR}wNhhU>kHRs>9P{JD zzmzUCu(hzm$x(5$Kt=I*)F4}4h|Lj3;m7SlG@*cOF~Iw7DX)~5D6C{Em4bwtN_KF( z=i#0AXB~6m6+b^>Ke8KB!mEDzb{l!1H1uQih=K?&hE8qpEE<;fR6+%R&k+(+#@2*2 zqtmxiZ#y5re;Z(9RIj(WWi-cd?y&%iK6cNFf83K^~Q5E4GK) zv%t!Py{JF_l-gVGteiP}Sz|-{PTMU$=BQ=k$ND`}N}b4005CSDq^8)&WK`kv&PM@T9e4taTxr9D+q>3tuRF&+3pA|*S0R89hWG0qyQ%(jvrj(Yoz zYy|-XWWniWB@4EyGHc?dR^{3t&Eb>f* z2LsYKOqv%0!IK&UAoipRb}4;r1Cu&(YT$;B3;V14qkf11 zy6c7pv&!^(RwgM^cwlc>ddgH)efq0^DNX_Z4I+GyNxu?ItV5;zKmv_P#t+{cVTBxO z0G1UIRiiiO_s+CF2qqa6Z*e3p9w{iTuO_`GemX-MtpQlXIY-p57`pp2H{B#V%hM4P zBM7awxy&2fShprP}*I~^)(5a3>)vSR<@7#FQx#F`IToD8B<=hc@d1!!@cIz zi(aoU-{#8$+7hVJMbC2d;0dMV2ybPAhE+{7-3wbhaSGWKW0st|m=F@UMwKQjv4d2} zkgCd%nqjAq7Awj!s1P15c@3ktw8FaqdQpg-JJ94TP0A2>SdUed(^9h$A;ge!m5%fi zt$|=d0ZA>Ld>S?VLh2#ANJMS}YyTdJ!|L`QOA=-BjK~!9? z7?42>FB~cF;$O3lyv2@SU{wvV&#(h3D)U26ENcoh5u$B`Y&Xe>b*j3UCJy%O^sOOu zV9J)3A;}bOqrg^{O>uQ)MQzovU&clW_)D`sQW{2KCOvtjqsjR54t!-f1Vd$XxVM7{89Z0ARh60)W3cE9S>iyK6o%#$4luoJ|3>OsZF!20K0( z&yx#3UD`Ei>7cA#$hb#Ia4j4D#;-n zl>8;z)uNq0-h(}3O-I+V_O4~RMjvebbsfUY~u(Ua>#&eUl^TV!Bo z8q&&8N=gb0nlOMj5&{;0hB!f*=#I>sp$zEj9O@gYY6=7mQOu>Mq3$gr2pJB8Mu6c3 zjNkx}JD?$#!;QbaKe=LHae|C0w5dSbsZtdx&J`ODeOktA| zT8ai#M@_cL%ee8aAjGQK_xPW$<)mwsG%zV6%~-23p0EBleZJ8m+3a04cU zg;S(l8)MhjH!?6}$Q1N|wg^7xsV9R_#`I7YlZCgW9F<h zQed(vA!Ue;0J|uI_`S3Y7_&$VKxvN4L6FJ7GO^;9E^tF0=lg!3b;{ETxA7B|fL@Ui zqLnfh!t{uanjyal6GCPNlC;_lXn&zlD4sBWCL`;JN-U5QcPs5G-Kx3$jv^18oIxuv;Bl?u`;1kpZdrVezIZKrhpH zgW2PMqRak`2;dP}pi;NM@Zl${L4nxB?gj71;X_*lH#XE3IF@aD5P56@EfSn1fZe3w z%MeXkC}MrpONcDY60(>l!@-B4kq*%an8;kZ!76%u5y3~iNqz?je`vzg5<8S}C}IKX z19&xzrm|k}7av3-Q-yKD&Jf@$oY&de7EiIT2F^efXpk0qsgY@lI-KdN*Nw6n6tg08JO2w0`&lXz@E* zBN78J(Y!axiHrOttHnGmi7PJY6<){PTtX8~3VYwdV;n#)<$q6{c)o-2q;fXzQ4Ps( zD1*i5$Qh9@w*Foe4PT*sL}!Pd5GXU)HDMjN7R$yM+;c}5b4g*ZZ=SB?e#hlMF(a8c zd+rmVrf;SPw6Q{jaGIYLY%O(31TdJKBF`+-Ho@sb;%32(l4hO^K@#E21o$tKJAp(2 z0)U1DBAO7*gf28O3UEJxGX4h8yA%$v`hS7Ly@NKEd?t*id{pQBn;10PQGXOv=~?o~S6# z{_m1IcX)6^7mAR;M|CowIJ<|sU?{}k%-lo(wc3v-Gj47*5U+B%)UIiLxzw+9|04HY)Ank z7bSOvY*SLri1_y18fWEMm{Sd?)BHo zB=iDw=we7_B)U`2=!kESuRN)0URLwG@^aSC56v??No(DBxgEDpMHS=Hb;<2aky~gmz=}}Rz9K^ zHSR0K7-$|%{{>*cBtZwD@xuJ2yWnzQvbwsuAPs~(fkb3r@vu98QQ_Kwwro1CvLY?@Vor?}RwATWT zOO2r!?wQO51ds(~REBP;kC8i_gYjZWj?`R+e9+LB808>3nS1z`+yB^p(ndp4yFYjo z4QFklP=2T>N~v2y&Q_m)%RsTHkV&~D(%j--pDpi4AheEgZKMRnZAj|b?i#J%6vAev z5-8)>%*F}WLB7zgnpEpvhSjB=5t0Y;%pRu5;Q{rF zu(?6_37z7HOO4|r`>P|r%zkyKSQ?qvGV9y0wY(IponL=7rfQD&O3erO5F>hU&h z`9VE8;yWmk7&;hR_%m9D+Ae9VGzhFfZLYkRC z#}JaJM<~mvN=yZx*d9>GLA$4?#9+%t4QxS`KVro1&F`sBZ?vE+vp@}5!FMp&C=MhF z&QNN$duAYpnR!IZZ(Zdi;Iig6q_k7+qYFy9m07Iafp5u`(1~nh;jDj~j(LbV{8{Ag zAzhq2wRsCxxEKx$t#rx|dS21d)~?58)H8Zbts1mhc5){d#EQabX$aqjQ-h|A!C2y( zArvQc=u5#YWh)AHfyPxNIx1vUMUQ%+T5v#YhL899Q?EWoehFthh46Bhg@G2+(aaqW zBiU9FV9IOIqYxbE9+l#QZM@7Nh+JZg+S~N*az>yWIWEf8euFs$0Bg>0z{?c8-B$s5 zq-5yjvn9pHy?IK^2c$PRYEa7qVibDAgo%j3q10ETLQpx7-AQdtEg=zc1xrSt4CveK zZ@i-3NO!=1O2&c)MIZ}%MkS65;gB-*ll}Fsn{18;4?&dKL?*$&N`kYU^bkN-dTA;R z0a-p5a4)W)QeSv$?pn(+mp6sPn1@TYvdvO~Q6NlQxN*szn9+(ID5E+I@r5b%7=TOl zHwX`3YWbu)a%sht>S&^{B)h|dE36O>hmy1IZXF49p;rIEA=61QVvVzP(2HT}V`Z5v zqW2}*F(nk01TzaWW6Q8~lz7t1E(^zD0l8ad>D9$81hC|%TBP;}Qie-7>z^Rn+X)HC zQyvqk6sDDq@JOHM&H#d}o*tFBS+_-*oJwKEuri8U3P7TnBV(x6RzNHU<_MZ{AV(^d zB2)$ZbtFVU15IP1fq@cf8BjiztVIT8Lrrp-J6QDtCj_aF0Kp*;trW6o2xuT=;V@M% zl$hKLKSV*Z2qBUzI+?H^sD0o-Zi*Y~8&Xvn^gz}DO&MFrYxvuXK|;|B005f_|**G(W_{vOhEOPEZ@)nj%)fT}zqlwyt8 zOj8re;zk{Y#7ocyK#=3u;e?q|n++7%~0?WjUm@Y}k)kioqmA6G&lY z!So<6wUt5R^@mn}#uoAv3fz0tY6q%R=^L-`W05g|6<5AM>E3YGm)nI^`W~rU89cZM z^rz@Z&4y_bmdBH(ux^mKm?wHEqV!NiL+~>U^2?8<<3cGEJ+KDF<0`E?LSU7e%TP?u zaH1AZeYc`xO2BmXuU;rl-3;hB!@QR=z6ac)&RQr>6#;4T!wmWXJj0*C+*4q=6K5qM zt$-#(iNB(nP)yeuP&VdBXq|fMBNo!D%6;q*Ne{Dy@p7<#@yjm8sXcg~ceJ|O#g;1%%f^+ZNYCG3JNW&TL(te)|yi43Ry8KNGtK64qC z=Ieiv^PA;rs?&cy=YS$bon+82mEul96!h|17yCIV7=i=a$t_wKL(l})4YN|9hbCgA zxJ7(sN_db+SlV20~sU+@evwXGdVC01(}u&DVbOp3NNqaF*)+XJo`cFRtCDj zgsvcw8j6+daAQJhHWCX1Gg)%I%!@+EL^-r`wQfFKud%GLU>%h{a+p|vu2_cD!C*KD z?Crj5d5%PCq|qEFX02bHY~c_xbu&!p2`MTBVI1a}U(#nms?^O~aP(1v;1ED;?snpi z2Re_ICTSQm$ofT0mM}=FDuc$$#`lI@Paep#^io5AfgSdz0I`Vtfo{=E4ZK*DCP8lwbT21F14Bx)zYxRktlLD@Vj z^_}zawjTNp8Z-zcW3NE?5xYu_qsa(7O(gicog)`%&TJ5rXQ**qd z&@$?8s+BWjbQp5ZV+gQ5rjpWY@3g6^mg30I53|%o@q`02mP=9x5=K+J?}$5MIx?YK zTU%L{DdRlUXNpp0l5>``6+T^!4TD2MxVE*o(8}^5+v>HDYO+4@5dY2SRap<96Lpr* z;YOLg3-bg?C@X1IRgx2+ht|@`hOC7VMhF81g#a|EguXR}@Ev<8SVg7KBU`n#>S;dA z5di063OzB2%0ll6I&Ygfdmc2=m=-LOn1vE-|q83|xsQSp zpT5He(7( zoj*2IqW4>YakM<@N0j`*BeYV;W6S}d_rQcaRMM5(I~a!gXcXQd!^lc@mN;^hY@B;z zpt$Ve6Rr(9((qgr$4{fc4*FJ=nzdpr6w(ZF)-ea z0t#cJh%I{M#sapNKpB~$i9!W?GT*F`;+ZxOaEZe@x^+)YJzC*?C@Euzc!!#0(Tj4N z10iGpCjBP&kTd9ulRH5W1c1nhn4=}EAHeRZWKXA(xak~SB3?0isEH}4Ap}AZYOPvN zU40#af*#}}R8!#kbDhE_Ik9A0MuLtHISOl%1oe^{!XT$0OS0XQMloT~C8%LS6jDXO z9JIm9w}eCm21i1T$gK6e?d;HEsnI=2CWJ;h`BzNWp#(^!OBe{k#;DETvM6ksSzNC;S1`KF!ZjKzv zA{3NS&w5QFkF|tWr7cfv_={H-mO*TksL6m~!|nmSF~jKSLV=Dnph(n1j7Z22*m35z zMP-fT@u*?KGxNhKL`9@yZpS&(3JpdOJBKdTQnv_E+kv6655@|QggUwV*dK5XjUpO- ziE(u!h<6ABb{LFH05UX@kn^Dsk;%M9+B~_J#zrat^i3s($b12{^OwQ{N5v*7W>DBi zsl8JFl#f!uIkd}xSu{sVlRIU2Qs7Jz1tLEz4@+8+pC}3%piP6dM!%&?n5(Wmuj<*gM7$YlHYf5cH{E9vC;o?gI~!06&!L z>h45L5>5YyoRJP~vHf3viC2cm@rdUglOOvsTe$F3F9w1@CeyF~c%pJppbid9_z1xq z)I@@yJ7=OfZKBzaDD=}-D8MMGWME9rvNIFRBPuwGW+|Y}0_o{(swxBO<^>xpf&3DS zG@v`9OW9IBuGg%{DFc#80ibiLGGd`Js}ep)kK&xw$FD%dWokAe7ig@~dJmF*Qk4N& zjMXQGB~^BC35{%L!E%Icfs$ZZBn0T*uWeyWH9yi)dl-$rJSKo(Lj;I}4`~9+a~Xai zBhbL5X$4}&dq&kT3R-h`K=hC*gh8CcWgr?Tz|FnL?#bx^I_F2KDg)dCwop=s5u%K- zIgnK2dHdyYY1Bk9?MDC!Im4fhQ4>HW&Urm#7>JbvT|yXq6mw9-Uf?OCHSX$k0LQLxF*F5k6ip%fS|kCWtxb<|?tm$^#uZ z(nSWzWtEV^o1+0||KrZv?tLy=%V9;5?ZOtw6+r_d+c$mmnlhYUHl$KTXLdk$EM*1> zQBQ&Ji<*A%$dj)hbK;eYmNYYN*xGEPw_wqPH{Y3Y#IG)zF=ruSU~a_AkHpKk=iyh* zy!bAvDaU3!>Wh)bJ^VF+8Q1eCAU*YzrsKiKUp?{6n>(~R5bJVkQ*+y|PQLCx55CM* z+#u(8=!w^UanjXo9o=zDK{OC&6k?GxNdlK>di`yW|NhkLTibNckqm2u6}SxI9MsUl zQQnlJPa@0V_Y?D@mtN?OH)E_I4xmvKp!bGNaiv)og83W-f#6Jmdf4U%#+2?PAa{Z$ zE;T_^iV>AK9D@e2 z5{rzcCJNL*#kr47qIV!w^@kWMUkE8jeOx-T_r`4$?AsOb%n?STfXGo3P=7NIhSEq$ z*fHi8bve}L*O@FxW)nJ=<>+!CwEB3b??E(5Ov7SCWKn=XC9kp36o}XWF_#e=Ls8J; zYt9t7^;Ea0iG=Ti;W@*Vvsye*-vqrfh*?U3k(jzs2^jmWcW3_n^1GjVc`EU9;?ECi zZt0jiZwX|yhRNs|kr(oXEwMKeQps8WM(KyYv=XLtp`dTLR6r)5p*Fh{%|L$~AR!U{ z!(rNqXGS3~=ncd`cj)$NWo4eoxsVtxo2{iWa70|TcXlmU*aSm%7;Lt=y`s|01>_|5 zVDZ6>`AeJi9e%--CdeRVWXkXdh>8-_qZeJ^MH6E)4l+~5ZFK_%w6u3&wDz{nL5{^3UFq=!^^h{jWQpj#hB!fjfTgGh4JYwf*Xp z>o#6@l|%N|e^gv_&3*G1F8SUeyFq{MW%u52`;#@*RoiW`=64U-y}rKsFX!B{{Z{Ml zzT<}EY&^-*aPDRI-2L#YEv}CN{>7 z9z1K_;)|}j?}vwey1H6Z9c$19`AM`)PcHs& zIiN;QCpz`U(5iUUggBfLv)i9tDw+)9Rx~4w-h`;w%N{8pJ98g;!1x*$R1T=>DOtC~ zP@nav0wL|$oMJwQZ6II}mTlO?#AnLmTmTI1tKQQt=+FDMzJ-ah(YhG~V)o3v>VVi|w~w_vBxHW$54r zSTRwkkwS(ntF4blkIavjj4x^ZeZkZ#tUP<^8;++Vmn#pHlJeO*8Ttjyw$rl4#scYV zw;eVJQ>11?&c#cc^IX{ngk2OAQhn9YHe|+}MK8ZT z{na<8H#N7iQa<&ZMI> z@4P?f)bnp=2nTWwso8My)DH*NgB_J}C$#-NSojyZ`>`QZh?mej|hdiEC6WgvAk(2CZ!wzlS`rq-5Ly#=GpUlC4Z|JF8rtQjRL^&hHhtvY=7 z-FFY7kHp<~-@WY?>!ZBWHWf*Zc?*}Ge&HRcaN;k%bokfym^o+RTC0tlK4ZbWg-h;x z{U2P5X?GI<( zbkaFDzBP5$T2scq^!f*XJ^$ACrp^8RU$37%fAQuUOd&on5FsYRRa9Ji^P_h^{NffH zt^Uv3p1Agw$DV!h-9MgjBV(+$=0s-iS^v0$L^E~T>~+?d*woVY@RM)svif41CYbuz_uw>^3PqpwYwH0rbq?>OPK8y|T5wJEEN88v(m z3F4U--<>mm$#4I1J^Sko*PYbd+Rn~*^;O2OkDfVu(TQi?c-F;tELbevKbSG^o%d$% zw&RB6yK8TK{8uMmf9)+#aPPC`YGd_(m$DkrynpwDIc&zidC(`>=gyq7=<#RYnmTRn z{6)=MZZf5&rkW&m_d_pjvC(Rao7&F2=#K5TTKiA<@vFOk{xe$)9bEVDQ*Z9Q%O>Cd z#vWhYe+M$}n2|%yKH=-%JZR^Aci*hBp}-7a3b zHc_$Kq>;fB$*JFFvo-$u+k?OU#T~wWz>a%8ugspegb3Mk<0%YH z_&)yZI}^u`_{IS{9rA_kciLv1C!Txf#Gf6=?F(wIyT*h^pLuiJ&DJ{OxUYZtbK8CS zv)k>n`(|~8n#Z4gd&`a2_{H}>S68UMm+H(iUnrcon?KKII0X4YmKtrodC zvI*1NH*X29)C$N!`XJ>g$93yX6p6xGlif&vQPwM3hLn184OQwzB8U%=(Z`fla@LmF@9B!oRrHM^BY{HWt9}4Wrv)9M zDWGGv4)r91ngDeVGMaQyb zU9lFCk^CPsw6DB-WMdqgupPllG&>SKkp&qF*2D3k8BI$5xQUwhN-6_qrg)#W!n+Sh6; z1Elcq5+hZSww`)((URt4kNN^xuTZEy_Q)@AbB#`qJoU!IPrlAZp7Xo~OQ(J?=Z|OJ z^!zLDMa>5v&VB6ZH?F_+u_oW|H?x^*YrpWS`yPAdtyL$Fn!8{rA~r46XP+`0a)XYJ zu8Xg^@9F2?;qLoicRn?3#{8+%=A3xO4bQ%;FXwyc$=5!dHGgSK2ea(t; z+S?z#{_YI2(nC+YF?sxmD{g!Q(}l8^T=!tuVfxGk?6MhxttjgjH_-DJG_hi{)xG%I z2gsGkaO>UAOrJ4dHz>r}vSs%@`sxK&Jplj4hPq3ydx(Y8QPS%pEI)SCkny93QAr%I z%c-rczUSdr&icoH7B6igYM~(`Jo3crt4tjAy|3;*dgKtST~}8_E~C)w|H}u%hcu8_ z*;EHxpeT$2()itwvC&q%_23s;zV+Rcl3|WTbpZAyZZr}Y&C((=JpSL}QvdnqTEV`$h`)}+Y0|5_GJ-D%~ZSce) z;~Ttlwk3VpjH|O>L#ks};!p3OOKLV^#I$n<-no}V)yf0&!wiWibH)p=yftH+O;?{Z zc5ubAEE}^3h*9~eYocznLoc6n~k(jv8e*CF7aMW4HfAb%w9?llBuC}_qwr1q; zLEk%M_ly5>I6J0Uvll-1>ia+b-oA(Izw@N=BSsA$TvO0z!E=D>s;alA&SYbI+|LfW z``X{!e&w<3^dEobEsT549}d0rba)Og)G`NTodfpS=ItF|V$M1hQ@7G6u{(yb9A2njga6ODBjn?S1 zHvQciQ&t(h$@;54`@+;0Uj2Z({wb@Ceew0_#~iWW*ALiv(zp>LhBmPIB}5qM;LmP% z)!E-)XZ3N-&Ao59eB<4j&%ONK2|qpX?yG)r+oeBSf1L>!6SggFolm{+?q_z{_?JiQ zxAD4@M+_S@bVwsx5VZE^i)rezTOZU|Us>GPl{=u?2ed&6&f8HGXNo?YPl-_3c@Um$V+R@3yn%EN*V= zuBk5cncZA6yGITibnFlITYs&I*y{JE-ZXQzRu|;QH~`&hs;Zk?^@Lfg^Z3xrYL z9KclX(uZ+(cZ?d@xa}5ezBP3QlZwh!CX8xrZSU^X``xQ5s%oohDhE_`wPOU>BLg!= z@3vyQMi#2BX6dT+1SG}Rl5Dd>FD#QwySi{(rxxy>ZYq=%db(?Bsu-7gHRum}cyhXL}lwI!#8Y>Y3Dq>qPjq(L}CA`%4#-rvejEinR=TdEs zIy<^9xboh2-kbHK@9cB*xA$VpV)lNx(9<)0=E7k^8dhIrOn43~ZEhJqcG&pQLu#rA z*4K%6;ld_n@~1z!No{RayFS8RPpN=bV)p)>-3u0JB^~C_a8Q-=U#qyb93A2$9>})2Yiw!a=V@zA}|XN zxBquO_|hfUJ+$p+YYrdMNCrIb@_XKTcjk}3v*(Y#y(c*hMyszfdaqqJVM^1nwXGd# z=Pz7JM9rGJ1l^}h9u+eTj{YlQNM3i{|Kd$|J-yrZ8=U=zua6%ygn&>w@sl{~UNN|_ z4*8p#nmanQv)*u>$-h1Nv+S4efAqDV|M40W9K!yyrux-4r_Y_gI2f~BU2^RM8?QfU z#IUrd24qsbKS%%eqSxZEsUK^SfNYskygO~qqQxy+ZnWAOtBk(x-%q~w_Kbb^*kZL+ z$GkUv?z{y}3l=q>`r9wxbm5P_d&sVA!?|-JLdK0AB7ZqUGe>97UG$^x?ERl>etFl` zzu-9XTc06uy!86C_12uQ<;GK5TRShj>i(@ZTVsc<)+M+<%;@P^;r zckQq5x%!tZ^C8US@gskIgkI^2e^2`; zU{8qkDo$%lOLKE`+FmT{A}O`CwKn0tPJcImlXdtPM@Iz4dKv4Jx%C6`HSNeI8+%Sg zJ#0~&Ixhgdu*!lWSWh|BFH{Qx3gT&~knPGNCFO{YaflVa)*@P?!s7%@lByi;3pYef z2YFCcMOa>U@dZU%mm?$*{4(-KB4~~1$9kqhYA%B)@RNVE-|iI#Z?JFCO+zAsQDvo4 zH(P!^CG#hxYgLe8>90BHdoMUZ52T!4p46SzawFhlfepoKlSiL_#XS!^{#w+mHD%mp z8%{yUx`J+p+3r!fbZP5^aU-s}`H}q&JtfHAd2jXukG*!&olnK(gt5a04XPh9q~XnX zW?XvR103T<4?FSa2TqLpO zF>2&sHn5A9L=wlFm@G`s`kyvCoLk#FCypD@SXawFgv-H$8-@*SIO5og&1t}4U)p({ zHO5n*=Y+Atuf64o`yYEXn(z;jkXEk#SNamG1NYgcv7wGdW$FiW&ba8`9AwWEkNMJ| z1{s#se5Tb2b2n|ArcdJXlpDEr3SGcLLAK@KT<%op)6+Z(ba6Lk2{#yRts zOr9`|+a$2YDr4s@SbFde&VnJj|K_OAdt|+o#9o_4>&^#W}%xH1v{V&X(=O;6SbCw0#S$5hxe|+2(afyz<`r#Ka z%U{pCl_M(m{nTb(*mIlrr_bMFqt%dY(uCoUJoV;I+pJ6Qkh`CLaq2<)Z8LO8{n5X> zB>Sxp=>iSIg6aaW4FJr;jK1UK^jW6ipa2jAKw^9T}ma9-|EyI;d_)W8JVp^+z4L$42W;M#7!9U3bTA z)+yB1j2tnDnZNy(Ywhxh^>HNGfAaVdgBt4g+hg-D?!7hRBFWlQ#xlgJ6GtEO{r%Ql zZ7c&J;eq>Z$41+-EB_KO2tmz`+pN3Y7HdwPFoKNyv+wRpl9I9`2JgSumSaaFcjV={=)YA@4XF| zNWRZ*n{K=LT0{fN5(Ik0Q8{qjn4$9*HMMqhH#9aD3N<5#H!NPVsI|3q^oYT~I`Xq$ z+Gm>~gX;@*wd<`p@h`tQWSh;_eE-9_9NTZT_9?&q3L}OV08Lf!?&vGFelF}~EOK1Q9YAypKqFov)Wbs?iW37VkN}0$tq(-3FcTq+ zvZxFBKN22X+qme}FC>SB;gqUY2+1Dw`AQ=!R~|h{(69cmYGS2O7Ln){g%A&hSQ!eO z!dYJSVu|X}$|WarNQ*&qlvO#ezx5aP+G+KZPCAK;mBBH`9P@+2zQ8a3GwU7|=i}O^{g}yH_o-095lw%vX(NbB_ z`|Ui?1Vcce!Un_T`<+gdq-H)2f4@K%tFAa>R5;HqOWvHsMrVl|HXVy}XN|0h*4^HUa}CzW3~%=kQG>BNzfqO*i$`qh72c z+u}sFC@_Hl_aJkO!nyceD4FF`SmQ+a5Fu_%pihJ={7HxyG)#?n8Gr1pk53VEJBV{| zrZSHKkT}}xT*8EH%5P4&{!5?z#QuA28&Owm2RJ~9Y#~x6ZLfK`G_g*4YFeqcX}7ht z;StU_5seCkdL*l^slf2oFZ{ZmW=>EI7qAhhV~ zC%@I)&v6dZVIri}z+^~)W)0g)qu!pc*9W0WywfgUIJwvnii7nJ2#Bh}iWI&8; z@gXaW4+s80&p8+(MYsR&p`}?biqzHD<1*xgRk3U`l|Ll~>k-jty7!@Hl+50h1V-0p zP-(9>JFft7i^{;c#4Cm(6v(!EpQ*;dW>s295<%(Wk;om{a(M>m88i`@ED9k>AZh|| z;7lc96g2_7$k`)k_Z{K|alb&=9Aq^|k(RF1Tn0kfhq6qnGLREZNu%twaX-n3ar?-u zfJfZ4{tHw>20tu7Q&hr=8=#%GUgz=~9=`9<*PtLcFs=OPTk?3Y0A2B{`!67qXPXG1 zf&Fr>azS<=Z+;N*&>#%apIDS3>7ZOm)Jo=ffiL!$I7KNbbB9#UWWZBua^8eEWicnh zECzIrj^%)oz9A&mjLc4bu`WS5YtG^`F1(ZbtsS>s&lXs&uU7_PH$Z_)+(Zl@bcCO{ zdkmWR0}W?HQwU{?nP`xkkn(}}T%{)eqp8wiWhF_!zM%o;gc(e!r@%SJ4cJ7zN2)at z!#37p5YZk;&1Dd+J8()>f&9}uaFm|6u(x1oLBUkXxqF#DOUp-6UwkYqzp8Yi%%MRt zq*2NsWtjz7wpw349FM{{Qu7L-@%Z&QRT;6!F=(H8M0_e>G?e~k@uQT?28ddw0A#Rp zUm+yVjO_eYdQV0$=SWpXn3#e%PM$RJvB%Pb;}rw4$&)7{3S)DLZc)EtATcIjDlZ0?>ug#e^|rW+64N z5bg-M=47h+IG`s%K$by8E<=oH3SPY&S4o7vRfRu-yWNNdgqPqe&pr0 zc6~e;3%pPeswSi=w_2jSsX zonwG7*IC$IaL|OJfkLnM`9U3D39dv{Hbk}AyzlrGde~AP(X=f zx6*iy`Z!XRp$c1Ak7cet=ZFU$eR(B6@^`l#Hy=Kv0fD&nh)QHy@nacMI%_FvOTeOq zodqnFBv9{TnQp%Th{T*3rB_RTbOC2pJhM?oDQ=UT`E_3wu(wpHv#$y>| z2+06yikE?e$c+DxliSa51gkf?@I$>N(G6fGq!xDgFIcdURc7$u!SDzHa297Q>33@C zwY%Dac$z~BksRKq$da5{5+Z|eDt;^zwnbW4wYRsTFOuX>5(4y1B}`|>iSP0s%bwK4a@7BT#&$1*V+!*NZ`z3-8S z31p!{L;WCe)?JjoN>F-us(-x4GCkdOg_@RDeUU5{pgUsIN=IZNfMC+pBmo8u8bm$D z#J1rq^Hd(eFG!3s@p;RIx&pREIm#H8U494#eGWR49wnqCNjVGOaV`dgc?=_eOy{ya zftZI)xG<&WNX)p96Cq70^vKEPSyk26+RD%r*v(R)3u8bJEAjL*fS}~er8xTiBpn^y zH8s6)MK!I62W7k71*Aklv?Cd;;@~;3Lc#<> zLN^k&+Ka?v8P}yx4`r6dC0Md#36*vAbuG=!@o@|=p}yFjx`)xr^{rH*PXsxZ;Xc6a z0v5myFzx8j!ylSH{nfuHx!?Maqp*T?5pqLU+bfz~5-8;(xK!v}s|omw`UuvpF0>^< zNXFD`uo|b5!ol~IUdLkgmZPIng0fYCGP1eDLYZAs0=>(gX{Zm$qQ1UR8`+SvvXwJ0 z10WT4gdtOcb6zGJ65?=)IiMjkFi+SgQwaM)%*23UQ9!FH0ykV0x?t1%87?%4frOYC z0(dfKsDxo>`Vw?~Bn35rcndsC6p{W!Tq->o^aFopDKf;YC=WO$EvhNGYp1MKMVSad zJT6;XS}8z@7|kusFy{yHoZ6&|CbIwetzrQ6G7Cc!o9Q#kWk#{ZXh`ER1^Kbp&iIPi z5iuY`1v)$1!o`}q{&z=5*uYpg5rBcw?~D4 z1PN+V-`dg=!9y#TbjfLuI+wxbrKl^kKq7K6cVe|sAIKdpJQ-GM!F%bnO z3$^*`1$QEoh(hJuww%M!&@durkFT#W$kS`EBHy771OX~TL2@O^(uK-C^BQ+~?bley ztS+{A7jfjUL>)~Ezv_!w7!fiGoCz2RBBj(+_r^KhQ;8Ym?~0(NxDwP9ZCDu-`{%03 zcIe~{To8cp7h)nwct^3S7bIeP(J6yjHsr(?^|b}POV!TBWpJP`=O_p0z?mMLp(L*M zIONZY0HRH^PZN-_)GX%}Nes}L!O$wW{J#bRNw=b?0-lZ13Spv#OUIwwBiZ;(e?%HI z|UU?)Ih8!B(@0FIIS!TyGsW}7lhtT10 zd$!ZmI$^V9Z&D78mDGJ}70Lp6+CGJ`>`_6q>23xi#7lV*e@x(@F9*yxhZmxz92(J5 zF|Ojw0mqM3_j6&-ha8%G&g|(rgB0=S92Dy6tOdd%onAkn39c~1q)GRHQz?Iy0lhT# z84EzH5le5eC4x2#N(~{Q#nviSJXiZgNUy=|I2H6)hN8fk5%bK>e8$vdZ7L<96CB{O z81UpwJ-zI1&xO*Mp)$s^T_Ch|N@FGo1WKR1L|u$UKv9Ff3Vi|3{#&BVD=7 zW&^rT%`1&Ov!igTGNMYgwrx~mmM8=~XbPBA_5TbpGz#MSs0pMT>p+nyFoqLyp4n^s z?RvO|NMxl9nFH>t-JvE}KDGG`m4a!2N-S-H1jgVDMIWR5zd*J`;xNiYX(CeS%m8H%s$S5w`|h0E0ZKLu=agl(e`ss&BxMIk9A7nM9+ z1xgS~?DD7#;><3}><$SnW6e;#)D{6v%v+LR#8b4!C|q(2!j@1^rk4LAXEAI_!clk4 zsj3WO?eX~oTdgoU>m?>%>6AzfHZXmbx^l=^M1Sm$Bd0s_GK5;af}jp&)#0^Mq@pf~ zZ3MIJ#UWK0m=(davrNMBqf(eR5iJJ{#2HFi+=*V>R+7^=-ji-X@%X-y!SFjS7%wnr37J|BIMNdKo`7`a5+YD~^?k(yT;Si?cq zS1&GeU{JK65WdL4z?`X%%m1gq{z!@#ec~`&8M1{I5eCs3V6xMIwB&c_^8;W;bx~JE z2E^*grcCgA324@+qAhVG{i&wVXR!YlKsm*c9|)u>gMdupWwJqlw$#L>l~O!I)+Y%T z!_5waQeUz{VlfJYz6XimE^)yB3X(iKxYRIgmPt=+4ehU}p(#bIeiajaWG3^lydkiN zoI0TqrDmykP$eb8ch2|<3+_(11@$eyGNA9`=@vY_VfX79`k#RGw1*vBw3fs6R$sbA zO*t&S#na=p^rJ9yV8$tt8c~G?(x()t(7{%>wH0$AzYc)JmXNIt85lCOM3G_|Ham=} zInZBh$mpdngyIO#An)JVUrS{DAQk4q@`>Fs$Z~;##;g=7eHW^6Uw1bXA4QlIogJO@CSVzgCen&;mi+YAdoIy;brF3|Sjs6} zN+!z&E6$KbldC05Wd)-^s()8QNKHTQSmB|*@s!F+fhcIEc-~r)bf7YHks9>wr0N>= ztr$??R>(^zmo#Bk{ojQjiHfszFe`d%GSib9w1X>Sky{Q68k!1xz(1BKZY1LLPPT3zCQV#;eJi#W>)t`&fU0+vUS65)5 zo&n29h1Am#-6@klKNzF#dp8+G-4vH=EAsm1l z;V&dpzR;)lOEp=;H=F9<7cj7~3}R;x07N$(86lK1L#0AlPs^E#)H5grI7Cel$ds-J z;%|`}8X7SRooM9}TJhCAM|Uid41$$oXkFvqV3LU{0rYy0_W1C}2+X{YfdOMI%0Qg6 zkYn9}v$#22IkWMutt||w(3e%w70ZOF^;CL5MN{)q`qtOiQ-c^-m^&N>DAd(4+Zh0| z5FTaqJWBsu-AzaK00u$%zWo%Wtg~CJ$B=OjktlfHtH58BrwdK7YU%BioUAew3Q>1q z2pPdp6h%)NUwZ|FgbFPfn#i}&xKv;;4%taeRHJCYVv&`QQ11b|`~@%3t_ zzW0^Ua}YC}V;=(tF;PL2MDi$*6#3BL6$-eO8Zpsltw=9~fHMTn7OGLMG$e|{h8lE+ z8$8hg$q|*YoE)S@OhV@(#*%%ozG#%t;HfUMH>Ux5Nkb$0F&8v(z{1v3U*M9;?71}8 zbR`RT2vKSx$7=?9AqS~7L|6>hYJo7Qk4-#jx&E`H9}2K24n>;gREa@CTB;gGPFtp{wM@#)y*$IOimKCmzmz} z8$XJx>_{w(FpDHAmAM!=EC-hmd$``WyJ@%SQIr!EG`*vR^(a6}UkY)?vH1~`9N@7q zj>Qo@%+-BaH^D&-F~lyosi}!xY!(I$8dO&(X3Q>-br7Z5= z_w@_Op~NKfD)t2hR%-4K!5@SLlFA0G)IZBad8-FelciIQXR;^x%E5U=!odfFL|RF0 z{XxdD>to!g3<;?SF)XspUwWsaopP7oJ5W_QbjT1~ga2FfDXDt28j%_Nkw5uTu;r2q zG;|&SeeSfNiUJJqV(&pRAk_R51Oc3r3VxK4A5mEjiIPQE)C4S8g2N~O={+LjGwZZg zCa92DtTb#6*+yAXW{63tLlXRpigG-Af@1?30LL6)jjjlm-P?o_pwDx6O=ZDFC3+Bg1 z!Ng>}0!3dlv_Bn9bfy=?n29+JO;{CrJ;Ctv8EVAc^29kWU|Z&5Bm?o+eT<$?cr3X9 zUxn!)j76(ow6?aAvm%}8%|4X;R3$YpA7PUm41vHX=T%q-1i8#8qLtd46394^Tsydx z+f{%NG9LJ#Gi7QJJ~fv?hUwPFvrxt?Aq>voGR(rI?4pFGv-)I^gS6CX_Te*{^{HVk zEr=Tt!MqFpz4Xx_XukzzG|BOq5prnXP$W+d5vy-ns&l|JWL`-i3Bgd#-?F45Rjm-# zM!%d=)yDxnIpb)C3l$J4pp;kYdNm`ot)8k@2nSI*Qq@YM$P9E(2Irib4e4(5*;oTh zn%sfNQI=)ulRR+#CPo3QwTUC9A0VeTlUEa@UKUN|giG`v5u315V#+_6E z=G5daK@od6#a{Z=DIJjM8Vb)Sy5z&<2QtA<9eooc27cJ(?h+Zj^ofJMAtedI0spqN zwk~B4zjUd;@I?>!=o^55ON?WaD0?R{^zHSEExRZQgDNZ7xdWuafE<$5zaX`hfkg_Q zAYB_#gB3XYUQ7REnA$vVHARfbndnS%l-S`O!KLNLVVDw5{L#+6s_(1WeIWZ3JCV$y zcSPuoj~d9pEQ%_hqgQ}BR*vSD=B08#6Kid(Lt39KJgqn=_?x!_0C=;{W$-77Ym;vz z)&>OhfPln;Ci!7Q`KLeo)5>^}{^CdtWuSk^&?jNhJwK4M=%@FvU;HAF6-+U<(ra)I z1i;;#y}d~}!B&ylaZaR0STB&ORtPgnNL4Ehi;1PR&Lx3`kWgL=q)KREDXe ztY_|D{@k{(QzZK_1-pibD%nbNrjm4rFmDGm^(sHUbdA z7>>S#C1naISY1sdsezXE_BJ+ll2d-+q(5x@q)2ufL7rjBU}V}!Zb&F~{qg0%-C}5g zn)bFfsv<#AgXuUE7owK-GOzAld+?|V#n26p$TrS|O=h4oF3OE1K zpwEP_tf3bgW7u}>hTDi5*y1;6&ACGEfMywfAvwyMba$kr5jkUbT#P00GiUl`Rum1E zqX-`@*2{=ENmW~`7gNwu#t_7nltP~v%Ntw{IMKpppBb1wz=So%%TX17WqD`*YhFgB1H?s$(bksy}%tOWmmyi6Sju>jrDw)>Q)Mlnj z7S0aODZOffFDkpc^l?vxTE74zCA9$991@1<-Jw^7*&MVJFtqyi3He|YH=3$pYES_K zgbArIg2wVf7``F*sh1>_gGdBusA2vMyKAxkhpHIfK{R5h>~aWGu97R7;;75c)2fdj(q5Go9m?DT?P zRZTU?5UDiHQHX(LE+tWk8op44?4y_H_`(y4z8NU1(%jU+ zmGHUhUr#DN0_@3ezU}Vs|M+*`JL)&5o_+Du_oms@=9y+fg6jm!ge}A{w`MtFM93e1 z^7*5F`ulgMzVE)u1wp_7jIPIjUetO|rOyHB^}+O+M;-IKC!c-}p4L>O2NKb8z?8$W z9FZt<;3{#c7}(s}a`I{CU3lrWL>u){>9d?&bm(2lie(3!;4KdVU{HYE7DoiCj6N2R z%jiK%@~+&l?BdI>JO3Y7$GF8HG6+EmCdS8jS#wlPp3D>!sf3=kI(>J7L5X}Ji^`=N zPi%n<>>wy36)dSyAyS1DPYwckgvF&ylPOMmX0b=fV3;ElKocU2$t66qOr&Qrkcp8~ zjQD2oe8AFD3IoC{>VpxUga?}m5cMDo9!Mqskw$dz)?1TpV8!_tU%BbFpW-;;sAHEb zX@VxkqL6rHKrqhK``@iJ>(J5ih_biUE(Y0OQPPA@F;4CXhNsXkwCgudqz#}Z^z?;W zZoQ8MiD6UQ4*m#rd}@X=jVtj2f5HW++X`V~K}IkqPU1okW(QM1cCaaet;m$NAd4sd z8Z<{REZ5N$k%LNPTi#qQ2A0>X;5U6(u@Vjip6-0vbUV#QYK>kOogK%~E+S`U0YG@!}<|Ev%D+1l+{zr%s!YgyieMU19h zg-`=a&I$-W(c>pZ;a93zozTe)63oOW(P`32p|WY)FM8Q8Ke>BAr;47>mMij%6*~q=;Ad0fWta9Mc zAw&Ll=1GTr{a`iq^lZ8L#w7ZDtk^*0pcm(mJhTB4o+ERmwD3XM?LnsXl7OQlVJ#t< z09I3c`vXH0KZQaa2yUJg=`)HU;3_Cr9t;{YDrAxc^oTXCl5xU5VVu-$g`k6E!y};; zCw}A#o#G&V@GScSCWU5fSjOYh9Q$L{WU#6UX&57FmdXRxQ+rw z;jGN!7ZEv;+z>0aM3};z(}S-Z?j(cy4<}YlSs*p95GMC&`F>Pf#Y5zxPzQ8Or7R|+ zfT^XLA1334tX`FzDeIa00ef$G_x+D_baw5#*RF#HHER4c6$e~&$+dsG;Ig^%7R;GD z|Mt7?pZeakjW=8u58ZU@-RGQt`M++zd*-Y;tF1D5+J_&Wc=DM|&CS=`aLX0f-Y{qG zyta;xf4}nDn`^AT8p4E>2un~9nsesOfAoo`*I#$7DXUIy zZf?H(+8fWk@Y37wy0^Z*ValqjV7G;fmi+C4OD??Rs@L9nd(A1U*4Nje#gZjUue|Q& z^De#|%B4$N#*ZI;)_Ip)b^X7Znp@s`fBKEL+_`As;xS`J|LHI1G}PBmo;0Dgz3qx? zZ$A6)m)!B6`6X|#*ZCE#OZD^_h3)Y)c2;Jckxx1UH#8TpLnKFC_qy&VBi~XzVo*WF2C&R8=rpm z#YKyk&=;$pd%@-Ft+QrhLp?WAe>?xO_ovTXd#x!`r+)DFi?6=&+M6DK^11r@`f+1M z{o~4iKJnyp)27cj|8Klaqfk;BK1VQAk6`1{u}7dfb{tqqwq4-NEXN@#KQr$Q46M2!vuf=E3?T&5rl zmF_8GpP;3zd8O9^mHIsO^)FgLsXhDrYf1z3;tR|b(F_;$%mv4}Hp>Kw9)o&xy0akA zA%=@H&?rn@3+X41`fLsMV^nxDN?-)gOAdaq4l-skcT1OD`Ok6V#%!_aCbEeaX>Z6F zQfEmU(CZm201~+S{b{2=bHK1aoZ7nCMgvw`g$$GPCmB$H31>v2NDJyyKsK@Q5Wx1( z*ImXXKyWe^vd8-Yt81#sIeJ#0*{=T?wqCk%Fsl*-e^k;=0txj(h%>e1^>eqYt2Uan+A63)5lB;HlCx;ld-nC3hp2V)t)b~|1@Rh?RBja$TDc5R zW(NY-urv%cuKKD%>w|>sVUbaDSXcr}BmrxrdUbR`t5j{FR?*^nXv~DEpsisNndddP zJ}n_?YHJ1$8Z>{w!rz>5+V_t7&EZG?=1+e)@13b15LSbSG+O!u%B`(!=Ui~bZFk(; z(yISseB$ZnUU=!%Y13xTU%2pJ|Gw+}52m9wIfYGUp;oWa1+)@YRW4q6L;`cEqrIcKxwWaKg(>}y%dfxhfk%V>x|?o$<<&Rg%+hu34Yz(UeFpMB^7zvW z7A}6^ktc7vfo8Tb#>k+5@WzKTKz=~I1fBTH{{_)=X(=ZDQl7NZs$c`++4(n{mN2 z&%bob?RV30`iCR3Xp8t5-Pzk7GffEl%+`Qi~PVuml?PuvuM*rE7utTN>ZT0#3^|d!&zFRF_3mc z+;Vtlr*PD6Nsp~)!ohKmMkV=|j-F}0C&;3lo=GZ3bOFUZ-Sju^4^T}VZG1KQZyfZc zpQ@FBx=%and}8KPyY3`Do|6>NoY4^jVW@!;-DD0Xlk!W&;LEP*9N1AdS=|IHr1v9X5(I#P8aPWO|MQeum+6zaIK-gnNJEx^yoppu zM;Xpy;wL=OS`OPMAys8?O!Tu&w(hd71j|4XZ(=>rFE=2oC6A<53VnuB95~Q`sX<2kD{kjZ%fD#qCjIE1`OE$bD!R0w;k)!H-z=P_rdhPUv%}X zS#v(O&mO0p^qURVTbtvIKmYD~-}=hyZ@m4|%dc;<XzWCY3hKAoB`_sSt>G$KtjztW}ats+f_}HI*f9D;y zC0oszJ@<*Ho?BzeDkmLx%-MfEVcm7ss4o9{T0K{NY#ZWIwsnwtqkKkNbc2GuScwF>U(H7va3&dT0IRxSt*UJtFm$SKkN| zv!nXnp6UL7{>A0VB zOrAKNKz`!s=W+W_e)#R*{^H1;cG#w=scFF?z4+k?sEkZvQc zDghA_v0e^w@S>KkGf>Ygp)bLQQAlm*j;B&{8JG|dGj3eM6L5)4Aq-*{%Rnt>O+;#q zRM4M(Mj?tg)5J~BHxEC0=B&Brocc%GN)LZna@-o*qHe8WVFa7Y3rCv4SCRqR*ukxKZ$^{?mUfX92o9;a4Df`8f()3T@QBtGL$*$ccm4W5B>Zk**_p8L(D^}^P|6a@!b18ZAWLvA z2YD(#Qk9W>L5eATB$b-WP~7UV#jQ_N6Dr(xw|B4yZe7;H+#wV@DIh!@AP_YnMF4$v z@7+%Q)344w{rI#0`n#`v`SWbD-<>)wwi`$`Z{C9T)^$Nuz4ZUyLxIoa?oS)$E2ip3@u%$YNf^G@4uGjaS_qG9RM=4l_! zWY7MoU3MHfVt8A7+q`)ThYlTFs4I{TSW9DhrAwF9yB}4IR42ZaYD~*(Mv3n&~`k#*9%TNA9-sj{07Ty55_K!2Ed&;X|PnL$zz|X))^^ zw%@9*P&;nS$e}}rbar>4K26(fx!DHmug&e6m0G&Pc3bYe!`3(5de_m%oN(@iSF#7k zbIuE~2ko3YcOI3SZnFLc>#bFxcW}yFEVuLLFIZ*Lgwt%rd@fe%%DV}8Kim7C`1!ym@^g{1wUpHV_`ZAqP=SP z+T(~G9$ZpDRMMguEBd*NAkKqc6FwKL40M5>+n}HQ>V#c)-r9Po-; z%2*GBP_9j%KT%PC?myag+_rn8_1#5c+tKTUTX{W3N5M!UaZuy`zSOf9IOLFQ z%7n`AkVSe$L7n}WB`Uot_(4GtJYYXirtjkQ@8kxg$1b zcq-;2>TR?LA?!lAk7WY*G78~b;2c{rgdWp4|L_yOqnCUWA!{Vk6@u`{yHKJg#Ln`H z_8hTi*Om7l1loX}fgBht9eSfJt5g&i7d~+is0yAq%RSklu}i_Ynq^odJ5oa#6bc!* zbnN$Kh`k9s433v2K-fwp$pV2o-0`0We{;fV@4oY%ZX-LpX3d<#-kf^Eue*~?KDiHD zFqe8ND|!YGZorH4<}b*XCf1D@w?h+* zruL4GIdkWeogaAk@#Fq<+TtZk8tUqsn_CtvoR1~2kfTr^fNpNEl8Lbeu}F=*uDkDP z(`GQj+wZ+1>Ru)*bB~#2k(!Ix)$ZF(b#09+d)?G3@{rl9raX_uij&;wfjp_U5|-tMqRK z6DEv3@`!Kz>4cwuV!JJ+^}vc{6$3aZ#A}^xot-o1%$9^QsfJKO@@ErLCI@MwvTPXz z2(T90O6p@7qlV$JAhaAbLehIMfcD?;!!|Rj<=UTl-+63zPewW@9 z4O_BvS7&=`OGkSvF-WZ-d_`b3dYwGrg@M55W$jRS<%`Hs}7tCvGZ}AGKO)Im2 zLl;FLijW%_STq>3xkVpZz&wW*38}2BtE;c8rv{6WcBp}v$w^1(>FYqKM3G`(9?0OJ zZ?LiDnTM#REaG=+VVQ6l2VfL>5&Se^OoD{4p&rX%VEIv>lg<@V^|ZD&V?_pu)B%4+ za@1)zU^NwfG;t<4HGqAM*p5g4(QT-nT#Lgp{TCR1q(HqWVO9F@P$H#EpkDY23&{CC zhy)I1F$t3cr8z66{Kma1qPLR!X61cooF`NdD+Zz?XJpjl^@;)2HL`cS*^L;GtU&7o z$&ghl9kenm2Zb7}idLOnoY}U}$f1S3G_7MB)(EyeLx&9>G`In<30ByXEcA_uq?rm_ z2c^2zR8=onxcHPaFFO3kzdzz9zd!zzbDn+S)r~h?XS0nrFt-w{Ib~HwJMY4)zI)`a z&bi=9YF>Ex^;m);1?z`I$-1{3*i8f3M%UNZQ)Cm`(%MpAs2ekS)Qz{^`RyMbbNx;K z#&KiEj*1lAFUE}u>(|SHFGKnde^AP+z~<#v5+9?z$~4EvKCRx9=Qz%!QX; zwX~_JV!*)l)>#YwC!Bodw}0@n>u8tTO4<*WUW! zPk;ZTpCA9)>u*h)K6AmsMeOCt*Jqt~$&o)h{=AE>>hY#b1XDIWO8r(rr zV`U<3(He6|N9q0xN^0`SvpmEQ5>=1O6DRrK6O~qqqz0$Z<@(wp^v-8MB^;bolv}ur z`am!zu|gk|WFg2PU9@=dbI-lB)#jUIJ0~5`^b3WlZw@@_vO)j2viZQzc8?n!tyD3M zkRUGeLOC##K32 zm@dxpX>U$BD9a&RYG{p}s>(o<2uzl$RtO9g46&K!fIlUM-_)EzUh{1VDI&Z>_%VvY zz>mc+MUaIS{eq6chqBj~bVO@89Hr{A0-i-|O5!kj1y+#La-;;Py-tb!ZAe)%!u4YT z;Zw`(nzd9}$C4m)K3?|tLoI(8P?#Z;1{#*P`q z!ocNPt4}^?|Ggn*Hm!k>UwLh0VND!zWHVw?y%jKUq9r4(W6I%ggb1v)n=P* zs2DYfjK~PcT;I?@O*AoSFbHK>QBdZ|;C_MwHDz07PO2?KY^eYiK^HO#`!OylP(y*f zky{xqYWjupUv@BY7+T`_VFkiNpexv;Nqxkkh^jvy~N;a_L$B+Hmw~pN66Q7Rb z`$r$k?VbDe1u+RI&q{bBdTOcy;CSn zTL0BF|e)4^^z}d+rTwG{+RAH-OSnU#A+Z_q^tA&?I2T*0op>{vOV z7;YvfM8vKP!sFf!=}s^zeN_?(N!0#C(%02Z+0f~#ni;|@ky4~qCsRN_wqv0K%?Pip%!0GPKB6Piyy`@-4hUv}8n z4*JA4TOfn9VS<@0!NFL7(ao>#QXEo2#<{qaE+lsXmMwFkPLDge0Yj3wQ=_Sm$&fZ* zW8*t8;mK_QI}TVe=_JHJy(10PVjx+>|KdULMZ9v!Yz-!WfiMFDVWm`+A?L$ys`5m& zd8Co;rU>JQ1VBBl&|nr?Z9|!ezm z=vkphN$kGarDk(OW0{N^nyQMvcCi?R0yjEJ5|ptRrUT)c7|702I*512Ax(5dd-5uGN z?8NpwP*bBPD(pXEO2Ziy5F7so0U!oaNe+tGkVB9)0)QM!0j>FQYj0mR^$r+L`V3x^ zsBeTvK=D)*SE<(Xg8eu>sHB`~ePaP}P%=3ztu{9p5Ws}`DErBYJ~kubjdE?RzR)p5 zf=}pzI;O0G>PFdvE8eGfZZvbHq0aAvB+65&->cjzQ^`e5QtzrU3N2L;8c9fpCtw~)o* z5Vk{nw@O3~3WN>I6{hU!?u=L6xJ88t#GRe(on7s^V;z7s8LfNK;)VA;^cY-63?IS} zk=f%9Z0!<#8Kac2ZXn8lGNM6%RD=%1(Mlwdz9l`oW8^T;IH9$cE<|S!Yb{hO*$5~r z;}3su^jGM!aGjMXa~*y8(Mj6sAB*72VAN57TWq7E00jj)A`AsdA}LC|DBEU-d&n73 zHq5m^$A>%{}ddDE&TlSMj+0aE*%fWY#ea!1J~tJUv(2iSROQxoQZ z%G0YC*d%g2=0enXSV@5z+eQP~kltm-mxMSfWK5)#V(~|Y3qA~iFu6P-10=yMfR1vI zLtotWlMv5Lk-4)|pYx-mvyHeSWZ=R0uo9jAPgo2io+&Vv-0$yY*3cn?mjPNOe^n)W z_BrppFzp>|d%Q}&dq*px5Rm#f`DUv~G~dM1P4UC}SQ$5ld-jr`|GauKFT!r}gxo)o_IX&Jafz$QabzyeW~o-ZwY^ z;-H| zgtXGm&w6LOu;|<``iu*p#|&5l&-zk6Q1YSV6G4+5nv<>+7?htl2qUH(XWAoJIa7`y z{yV^(GsCXHyo3V7Q$U`mDTjqkVk2s3#Nq*4Y8-8{TfZO({8CaU^d^q{n`{VA&ddqf z%!wE`1yCPzXkS<(8d0e*kN;o^R&|BhmlH-_!tp_evx}Z4%6VyQJJlxV}u$7 z$S4QBkvfM8Ib=_7MJLdT-_5wOq$#O+mPtulfF^#i4yJIZ@vF=T2b$E9?FJCg z@rde~3p2nj@h-urj2 zb=i>+#C3(*@#Dr4?1bq0>#X_BLk<|^|CJ4z9B2}S@}}}}CBJ7An&qCRCR)o86D}r( znaMC55rP;Y;wW|^xg;xzKC*>8a3hdYRT+r0@JhPw50cqpBOVOH{&XQ1AS(oZ=$sVc zh+gHO7hG~jhj}pueJICeaR#7S6gY~Tl)ktcMY|KTegd+yH4h_0ap1UJ;Vh6$U%Bn~5sB^`Na6~O{aGEU)$I8yUUBV$8!mGCcy zl7o>Ih7B2X z%+cTa+iAz2d;0M|`oUonCyXP90>`yOTfeD$F&_rY3w`Dl9RT$#$`+wFPvwXS@5A>; zb}u7BOoupNOC|GAO9j7dTC+Fjtt2E{se|FGk^0!A6bOaw=nGM*DubDb4F=*8HJL5! z1Y_&BV*cz?NG<3^l0rvFwab&4)dfvyr0fdSz!~USgLXLj_jv95mEiQ_lb%1=m@3c@ ztHaqbs^{Rqen@4-$#Q@;x#QE{W{quPH`ESyV_A2J$gW2GRw+xQBCBBbV(hHc_s-;RgMsVzf9QGm-B$iwQF8hy6R7x&zZo-rlR zQ7O!fG&i8JU=UzuM(P>R!wnPUtSGuvsLLa&F-J+ECm#$(t0I!!KTP~l#y#Af;uqba z`QFq1qT>Ku&BhE7xb#_{F9Abjih?;u?4m8Z+72b6N@7mR$GDz*selq~?JeXM0-l;~ zeV?cE=|G9i6k<5DQYuF^M(yg->oX!_ObMT?i?az701XhgNcaA3Fe-Yquxnq&xu%-P z;O1J(5+O%ydcUtHgVgI5!h9J~Z?mt^-84eh7HY5u`zQ2e#J09pcu@(>R_zkNxlBPONz+r9pDv(8fUfkQ!IMkP$z6 zGUm^sVd5dPX9>Jf-1-pev5Y#>&=hqL0YhnB+>?mP1_KSJD#?11k{2Q&3}aCYA`K+CrU% zM-q6!ksoQJ??S+sTt#wWny@oRB@OMwO5jUJh;2ix2NP-lo?{C_ug1nk$*Fl8yD?>U zL}JrGM~Pl^CSfxi63Qa%m-Jd4J!L?8`ss~Ypv1+DNH5WOwo*yLK{g5idaC3MAH=*Y z!a%q|8!t)1bW%_$HWW@VN_4NSsnv}&R+VfFioT>8y&uM7F_pC2keEPQ9I2z|RrbIe zq$52=z(jBpiQ-?qV_+&HQEvwwF7X(mqrJoXOs2gCf>mv;UKDhU*Is_(WB%Z< zy|zFOI0huUVYw2*e{o}_AabjRu|$SDB~VAJ4+0B0^?zK|RW&Tpgb^{{slAN8)t4zp zQZTm!i=F^;kFVyEAvCN8MqACs3>GAjVeYJ)x`(WgVKwpu1=^^Q`#mK@%e5x9_MYls z4?&-oiveSrNIjt~G=RS_1Q7UfwqhNG4>W{`Q>uz9nCQW4XJRnfB`+Y zlnnt)tW-joGu;(-nz=ggX>^RyqYNlTN8lz`0wq#`BBL_2>bkmWYV;MxaUf?z3(!A6 zNfN?QKjs}$(@#YhDS_mu&^$qKtt9hKu##MnYnr~BXrrTokz6?G6cmueDTZ@|E357%h&rE(m59{Vx&}*BdMfOLa znj-EEK};quTygW`5>%#9o{^W-o&imJ4?N)!!tNgnA(p&rKBNh5QN3;d?}5CUY<`k! zMH7e>hNHl6=wq|!4J4^s25F)tyF}mMfP~Q7k%i7EJHQz&fFYOjSw^{q zb9g9K(k~xcOfvYHf)vu)s-+wWxsOQ!5D=XMm620b8I<4^jEX@1DAYCF$BsjW!m7BN z?s)*DwhW$HqQW+q#8avFh%PbzC^~vEq#J0@l7l3JN7xsbb3zff?$}>b$*p>{t~`{; z{N-Ns#WV_9XLfF#kPdOMT2QV$y!G6upB^0NO8Pr+?O`Ot|DK%&`3Cf?mJ_`LJGM73UlwoWx=^!qpcr;l~ zu`Y5J@Sw`(1cRYuL8o0j|XvH86G79#=&Jj{v_Ti&BiW;s&Hexh< zCn+-tqf1m8!2GY2hk8|dVJyk8$vL4^vY9uLv(AK{=-hzL1@oSMyCuPR&eZ0CF3%JCW8F0 znF}|-sL0IHML{NY$8bv2bG8={TE=0-LR|p?P#8f-Oe_yDbd$tGXxeIP^?5{)!4o+n zushn@8I(c}+egsTB~3LM5Wpd(1_IzUq!Q6U79K6JF%Z2Gl^}{+4f;lEi_GAefjWrk zoS^Bb59DD4WK^{JWgCweZj@PIsBW6_vXx_1HBl)|%p79O72RPJy>eg)h{Vg`nrhV( z<0H62-EVNM39_&}Ls1WXlEzJ8TTE0_Tf-$}bhN>A10snk2WqbQo0+j?brthYafQpE zNsnbjXsD&=XlQKIGHy@D86bfbO-EFg16$`usxs0@Mye_WJhh+E+XSl^9Wwlkk6T(> zI5Wopg+%>P2-71daNOGAhU+8)sw!nvRo2zlM?fpl7(t^va;p^aIWJ^EYZtQ^uvVpMnK9&u?1SCmjPLS8&b2RO4b6Fh*_azMm7o>vpQB44M6-A1;8ghx zSuHI{!x%_QEj(qN>~+pQDg>y6of#yg27@sf8X5^=A(0OnnJ%*x4JyPsmp|Sq&Fr{X z&^EXvKfsr>BGbD@{Ki2cS_2y1lA}!2tQbff1$rS#1P=w)MaGv6{dqW81{(Yx#N}W( zly$VodQnL^3M)n!Klh7lmjyho$I*?AjkM-RF`$W16(a+RR5EgT{MWxG7I%d{~N+2P>4G|fO^pyM^u(WzE2TQ5wz2 z1guSHs2?4k2f`duDyrJh|VB}OzEG9<#xWy|8eduAybKc zKv$QZ^Lla7n&FWX;FE)l0-ti400fRMy`iFXC^b%Qe zi^kS~D+N`O)O@!NFIZs`@${WRj1sUd(~+uH8V;&-&>x#24P%6;VriZdpg$u>LO*$r z8z6|HetAGUSSbe$bPnoL=1Oe|xGy{6oy&1J^u&#Wws>A0VWoKm7tUq#iy^#{ zX*my{riKjEpf3@KzA|iv)NDim+edOf4B0%wwYP7V|4BI38z{Xer7VHc|*>I{rv7Ot_EXI7bdKC;jTI44@Ka220(_AQ~IZ zJpv-u9LNq6_5;%*g@T?-E3e%Z(AiEahAYzZZSRqOAlH46_U&F4ochbQnGe0H+U>icvU^MLu9J_Sq3y=vPTBZgXM$>ts0dLsgY`n5F8SUX0KK03k2+H*9V(+cXW{>NFro^%5u6lZVaTp z76y8zsF@|8UVfyim4@X@z;-du(TtrO#-vg@YQL5|h1v2WWXBhJ&n}iQ8C7nTfql*k zX_<`4LKk{i1A);A*PCJBee(#Sc?mmd-{6E(3mNIaaWC2^a=$R@8z z1SH@x=Ilp-08TMXA2gTIz1S2Ab=uQ7eh36;unda0S3f|GC}4sR#^&kA&gDQAk@|#r z5rBeHwr3e8!eT|KS7g~A=}vbJ3g{qqD+IK3qo8N*U*CTRLIv*s{?7yFoPWiQx7_vm zTknh+HGJss;Rrz5!w0fDeFj#t{ZltvUwaMv%Fk}Sld?b}$esmL+1b?*@%G5$&zy4F zd26q^`sh)kWT_rK`V?QkE76LmFAk9Y{;+@8p-~(yEv-wMmj3-8*S!7C`|Gc_rX8b) zHl6z9<*>HSjKm+3(VcfcaNSL}ZMnt9L8%=CxdR(zVS$YqC`P1LYm2@(O>8n1sD&Oi zDN@kcV+7_cSaiW9*Ist@%}+f2{KgxsQ(s?)&%$%GivO}@bLTBM@1mvCs-C74gT zo$b;;bK?b0VN6XkuOdufMn_*?N@Zm_YfXH&ceZ2ehK2^^YbGhvucMPukwtEGeE0Z0 z+Q`qP&U)}yTT@+&c|b%@_>P0kx2GSSdOADW{m>lG4!{lm;BtKcC-s~$B-SaBN=2LkH;f27=Jy zIWBEOm9k`^;G~i&KfZ^t#qZ+W(b3NKh64Ek)!={|=^v^=9CM0707>;o(Af<)Q9~ObLI{cS2&b#=sYn&fs)##E#abl!vBWmut z`@v(6|MS8{i&L#3dVc(flS3Idd#_tSn-uR8F+tP>3U!6rn%Xd2sxr_Nm$2VQ<5XqL znK!?=xs|a9p;T1{ECoSFhgMEZ24|bP1X0N-iq{N?e*KNNzw+8!iV3wUSdjtLlji+@ zZb*8=&37gm=Xy*rf59RWlelHTP*@NqD25_LJfM(9%7B4wXxKP_yqzhApJ66&2|vwt zk{wH+a(YKgTbsUcsN@IUuI_PalxxnyaRVkMR<&riMV z!32h^^xX*9jaG)^0=X$52Vq0}5M}5>jV4AWaKse@!9QwN3{=4K$UwYA4SiutbSo>B z-HJ&l;In2xb`U>kdfr8sKlAL158V0Brysdv#>`p&xZ+wUHSh)FC=oNyVo z#YccL`M0H|W%1(0XpOIi^XGzT1i}fKk$QhKR|A`g-N_>lZTOUuOzgRCMTvWiIY0WN5iXYtZy4?g&%@^Jkq^{ zvKOSwmalmDu_s=%$IjpQ(kDLk@%PW2tFKlM;Mn?rF!bdu`>ZYm6KZcg?wI$#>#a-| zNP-OHZkoXfLJcxy1$4JIn)XVwfqFuNGvNxF))*dt?9eFZoj(F&`SKNA-SV0O#yJS6 zhHMKvA<{s7)RI7ug)76Ox2K0>#|e4iMSbQ)NHJWOFJHcL@IxPZ_%Z$dxRE&rbG5)AN9L}sE>s*G zA_Wi(O3ieP)~F*_R{1&u3~;_v)&mkA0T|LscluH`DMuO#P%YO?VgkXDC@d~$hVHnv zMN2lyoB>>b48}OpG3K*x_*m=jJR?uvy(rif903v@4rdN(qwK|{|VNZC3NYYSg z8wcsm-P#4l=ty;P zlo0%<^4MHwYwF-sstllsoLm3#2sV(wOWWqvaQWqY7O-u^$^oXXQ|Zpx&Q7* z@Bj9Xe*WabXWn(<8#h{iJ^H7^%ATHc&;Q+xH{X^^V7qO$Jn{HrCpS;N?Dv2A)1Pl3 z+;`b=`@>)Rs^^|x{Qa}f+js9h{(jd#9)EJ-Uc2wI^;TP)^YdRLc{)y+(s}xOPQ2}o zyYBhNeeZt9@pu2@zKbsT!^`*I_sXmP($mv(?2)hCXRlpR_Sze6y5zDyE?u^q&GMU$ zIc%MEX0rqi1pvJsf8xn+egCJ29Q5+tcirLapZ%H)K5v~lS6y@cyt#AUbvN z{n@WBy#IlRrc9ZFRcB0}`r*^x)!EVh;KPrc^YaTId*aF2vu3{Gs6%(#Wyc2}dgQF{ z{p8<{e*F&HZH2M^blqPs`pp%mo^t%A8*hlM0Y#{7`S2r;|K!|@9((-Bb?2>f+#3(u zWTW+edfsoYyYUvB62Xx6)OQ}=+1Zhfn(T*1&O86o>u|Qi-MD+v-h1wP!kdnK z=;23yb>Z(Ge)LJYFW7wJx1Vq{yF?}f=wK5W(hu`#?b+9h!SzKR9Uat%9l<&{kS%9P zF60Jco)r_qD}Qv6|Y zhG2J3@0Y&%tyjP5fL(XlDfBsOoI;cBZPTc1aA3M((%R_MGp5}*IwF>xaLkeqy;}l! zU?VwmDt>Hk8hyBkNuO54gDN4#FeLA>N`?!mmgOn+nlk+~J&UKFp04Kn7@n5!x}~Ot z5c6eaOIa35ZC5$iuw0Cw8rN~A@>X}85fk~jY4`ML4ai*0-A9K+FQ+z~?ue4GI znZBZ|*w+x~?;p)g*pntB>-JS}I3qc&aa)$@VcnNf_`t$Xy?tlH8 z%YSX~QH z{MPsHz3)L}VC}iGt83QG8OTh=|K@kjdFq*G=FFZ2{h$5vVrr&Mn>w|#^C!Q!fZ6D} zzux-GUta?9tQr0ic@G8zCLGAKXMOjlk39MWG@o4bG+F-n#mm@Jb7{@AZdMz66( zWU&6~!pr}1!>w?H#V;?s^zM7^d%`~!c**5|eDv{!FlClnxag^~e}2IO4?UJ_h<8XO zWN)$ttKDVGuvia1WMxO#b}*xd}6wl@8k196wFh2Arp^D$5A&-e&^a7ItLBR{cq>J>4o(B4WfTI;UlP5_K_Z-5o%rz&owE0yJKuiiJ-@%| zFMIB`^XaF)eS`JplU`r;(tSvzcmL!5_12yDf%m-wnO3gsI`~yD;~;QJSRZ`fJC1nW ztEWuu{M#LOL3!U7?Y?l)Gk4u{@AT=@{{7SwiI%6Ies0SxHofSQD>m3*-H)7p%3+5d z^w6V^F;e!_d!b`iUe7IFdi{+zvn|+UqYao=o_Y59owncR-6x&!&wC%3K4Thr zDe}d8?{>{!ZejvE_2lCYdc{kK?FSx0q-|(@_>m`0Iq~0K_3{@J@5r1tQLnr4*12V`-S^#e+nvWAe#oisJdSw|C%)pP`y6!O zOWN96AA5Y!M?Y{1`w7_n=8`{byUl_RzW42$Z?^I6fBy&Ti_R$>xDR)qcIt^ZXywY4 z+ikPpueaPmkeu@NHynA`L3{7HOGbh1p<9_O6fjXn3qgu(8tM*ltZhpRm)3efl}e{W z;+?^*w>zusz*!7Tt>Dp4isw>qP6&YlEW#x{MWddQJlGzCL9EWB*hrK;h@=+(&ARs$sl*&ksLE+aHeBn<2jB}6;# z5ZYL(ut`g0Z9UDeqaTHb8bCp^#V>YDrb$%^t55)fA5d!p6bw(3g`CNz$taCwqxy9$ zol!YSZID9EaK*6vQO|a$A|fg!NQjXJIjJfvtK~2}C@YMlpVnu%(-;L!F9z{4P!2u? zrQ*t%s*jm<+f{Gxin|-=1)BTj;bS42*eHEfRS^3ELN(-aJcNQC0~ibCLrernYfJNC zha7n3XV3V~nV>I?2b=KEQmo1}!5h#O3`I%?*E6=ZZ>Ast6ya9!kE4x{GllNcs zvi(?Gv;TeWxg}&Sf>?ALfCXT0pQcvk^2JM*u?BqIA+KV+i7lRgZV8jn>{+vR-f=th z?d)u42%tABUx*VBXP))L_kZM5x7~5qu}2(AT8GH`>&@GF`)wHJjP19)=}1=c2?)U4 z1W1KQyX>?r^X-DoH>TabEPxU5A3(<%O52)2>+Xe5asK9afBNqq``oR!-~EQ84&7k= z`3o05&A9)cAN=A&|MA7!?zjgzH{EE%?ry!2MlW&#DzmJ6?ZK~TY1L+J@#3YZ4ELA4 zWFIyn&o5cJV);t;AB}kvY1!hj=a@TZ_A6eoUt4E;TSpslgq-(3{3!W)@4a>f|K$hl z^VZ{!p42>)Dj z*i}asbmbUkEj&0ff$oF7y#5wSe?XNa9t^fOyt z?y;C-(MlR?ZOPJpcw#m^dD2KCQII@i;}Ds3b7$PIW{XpG(AP9Xq%{AZf>qKoQSm%jPv^I&wuYJZ~4q8 zKET$2@WmsST=vInZ@8(gwS^IW)t_(3AQ3bS3}jfbqU+gbpT|9S-u+LI*^ZPpjTzs! zvzu$ch6UF229)y-Y&KYL-n&kE(`P<$+Kczzog_tYsd9t)r@r&}&wuKJ`|PzFVG6-? zVm%7MdF#xcJ9{?ql1g;PVvCn7Aw&G-`kP6_Q#(88r7(40tkmAx##X(nyJzw9OVENQ zX=<5QuIO5^awTix%dh znILAPJTy4G?N$pueA-E0`OL?d;D2?&?{Fn9Mm%&SvnQJa6cEq#V~o~l^Hl)LXr1O4 zE-^wf7o9j`ebg0R1)(R#=bb%g{FzX`AaIZH07qh6-<90Q4Q%e2App|X5fL)*4D-jU3&+=4NHAZpR&x(wgYr>1REXt z_>NYVJ9LQ)kct`;mcCqO$cWcCdunIk?Ls3&v;f?p22d!?FBlx|1qwL>^3+E`T@8#j zN%95?rFJY3PAH4PnXEJq7!CSVVr32rK#)^z1Y4`zNU4EKQxK6-wN?NbRA+H*xez1u zx~?Dt1dx#WM=#y9snOEcy$0rDgGwrJw!EcTRfW$4@!^lmGd-Z?Kl! zar>=y*>O8BzLkrNudljZu=%ExzWbw}zx&@m@x8Opqx(Joyg%C_$f5`bX^Kh9@1U4| zZbV8W)S^N_q;__6K$jgrcTYFx`RmO6^=~de>C}&$f6?!70ITWdrdB^d+{WR%g{}T9 z6~=-T;!m8~+3Cg11QIR@Zrg3QBrtz)&be=Y_lM5-)E7wfAhor$Y`@Kx^t%6nhrjl% zA0hV1@B7%**IfVWi!S}`Wq*9p9=m?-Qy+TyOZU0zn(O~^!>zuVp&1@+$jpqpt+(2O zc>T&*KRWdT|8>o^H*LM;7VEFOE@;>UjciimXBPB9C1-@ByL_muY?+AwtIs-i$B6Xc zqi22hr|&-fKTmqk$F9HO*6p`mU^yT8`nS)1=X*c?&i9{j-3>Q4+lKtNk`^aUoHnJC z3;_Suw${Z6#2V1KVlo@huCAUwHcI{aCX@PbkRTf4 zpp{UW(#ckH8jFM(GiEinv?b(*21ok!%?KL)ZOyICMAY!a;eiph&69?iyI6@$rd6v2 zC5>j?7}uMrOvHKv5Fup;l0Lb{dkAD!2^`3xW8z3l(|0yXAgo0M(~`~x`;&+PI3^=Uk}?W3k0Tq-Dn~|^Mu#Rit)1!T zZ^mR_1TBJ9OHR5$1d~z4naRdhR4986)%=uXit<@M!B=TEpO<7loG`=~ahM=unFt9; z3W!P>9wIxrg+rgQW!`LQr>s$Lf*?W!3d9skRw{@?Na=Aw9~MDzqFtz;vV~$qf-68l zw(^opriXa$#&ReIY zg%#_h1)FVh%#jCApEeaQY`xXyJMXZ~)6YFObxJ3h8Vh0J01OdCy`v9%4aP_P_0}ynj#mM4#_qfB_}bSTh^Cl#mz}oTa>1rgE_&)E`|k0^qhB|D z+B8(#XRlpPIq}Ub@WF@0teG=rOrJ&>z9+x^jX0WwywL{hpZvBruD{-V+yuwA_Eyvc zhv=L?Z|=@JY@c_PH{NjlHy(A!w5e0Xy8_3f9~fYz?~H&A0V)zI41LZuVAlF5Bn~oj`TScNIvE z>IMbr2Wd$SoEd`fAAZTcy(b>m^wcvQf4vpr{3%;{zUl4h!q>Lx3dPwmav;Z1&PE%?Eh~$K;X*M--71@rM zXjmsU0yUU}wo%J+Ah-X}0J%YfZcB4X8kr?h29OPF8&~Iuyjos0&<8YOj=gu9x^mF~ zCK({@3n&mNsnD^yUV+d@7%YK(A{fI#eJe;PD(uGYEMEv{16AUo89H$^P?`YW*~tTxb<&$o%Ox5-}0uT_u73IPvnYDxWJ17?q-dm;n3W| z##UzN~?2(7N*yByi6z0R$K^HaR!i3cg9-I4FhHf?QIC zYe;c!q=OI|?f%yayn+a;t-61xk?EXTgoziu1_qJJbPP~WEd_d|254(*XQCp@ zCN_oQ$G}*21_6Mh+8m$kFt7$C>fsUu08=N$Tjo*SwM;e|tj$5dD@+;Wlp#(lH2{TG z9+|CyYodsP7YcHR)l?o!8X@HLu!`?K(HgRqwQOfERyZdl6q%FsU<~b008#cfwnQ<2 zhQ6%R!#$P>Oq}3vvKnUx78;z~B8w6U5R7Z;D9VtbjN^KH_2@8Vi2)uLHW2I(h)a@t zq7EFoN$bJE*Bt+4^)Zt&33K_s1nQeXrC1z209v7lU4uCukd-547j>}M{nK?f689_~ z%d{br%BsN(*utwos_KR@_>F+3oP$Ih;KH0?;yTf`ZHWTi=)}9m^i5BFpOIEWTW`6= zmp}Wl1$v8BAWiGTafki4*nE?(eC~`bwF6E}C=bm43%isP!WlAR-rPS9ze7K)FA{X*!O^_gQtgOaI=@Qc`Ihc8A zGg#_UgD@B;-}fTQ7SA>;FZ2any@=yUj2Z1KIWzDaCUnq-y*?N|^$`{Uh(nD6;hUO( z=oj;<6oH?O*eWaDHNoQ+G%Tf}OrA7lkgIQ_?qc$Rfv7top)GblG{Kq3o9DtUwCB&_<2vVI(&X|Yu0}nm& z^+4(UDuD_G`C4%uhba5u#c%} z(tT>I=e4uLLCQu3bfpFdxlE#`dUTb|8ELU61yZPpSa>cu+dj$WBA7v?f_UgV*|D%K zuZcV(KTU8>+|pd#1JHfY6oACuq=ipS|NNP)f4Xi`S2wHm-h&TZaojP(>(7sEBjk8M z0Nt|p9ppya#s%>yf|XjWOyz>KGJp$)jT7rd32LN-wig-;IJ)28w}T>CXiw?r4B13} z3?e!G&DAL@JgOLjU_-nqYY^>W&Og~5b_zsxFuv1_y*fJd?!5*JwnCKTGEIjCQppot7Wc@iM;fKNwJc?CWt`N z`!rw%XllIFJW#O!GnD|B3M-RMJVegYEEulikS0!4K|$lfp-3-mhMqlI z%2MkXC?%T$?Vw12VMCF#hu}y*Oc8zK9kfOcx|fwZ2CEPCtpG{oRmm+WR}0FL8LocE z1k>X-fI=>j1P26p6%gslOzmy$>#aKZ!reM&sm=%iN2BsfZ=RAI;a}K)C#0#c)j^czV^9Acl_ze2X1=$ zFPAL;===KDnO)Nl&Umnfk_eef)mkB*NL1Ge$PQBsok-TjdY?>6pkIrF*YZ=pxKcwB8L&3lz`~#F`{&jUob9)1+(09HzNUvrKHEP^@A@^ z#>J(oz-UY$xv2{Q?omd9+Rb=dIG!UYP>-pRHTdZZqRXRE%Q`EoG3#&y~!!0RGG`*678%6*ptr>n8Ndaad6;0K0(z3CD^4ier@hA>Jl}sEoF0m|U z_TAKDNH7U{8Yzqi1OORxvu24E!Q_wbh(wcXq;fn*4K&k4O`L@M;7CHrFvR3WCBk4O z&M3hpW&QRhJ-rEFJd?JHb{TpOI1zCkr>t@1(BTrLK!`@HL?E~ph$zTNUxk!E>=$TU zxswx=^Rz)8W*d$Tix-^SL5Mt@6D*AOy4Tx9S?*D2^NciR;mo~ zZ{%m_mRf&7m?nO^gL8(Jw@RA$VU}nFK%hU#D%#<6#z=`~z;O#fRuvF&>Xn=cu#|y% zjL@U83=zr{>Kbn=bF0_BKuQLoMx>I3SnepD1>Y8-gNEK)PT zt1%dYsK%LADk<3Q`tU86&_w-OW)Tqy0Z1rJ4a(|0AO{l2u*MoeAV-1_uuh@_W_Se> z0|^PbaE_eNDHxK9iqVz3WOh8Te&!m4#7B^U#+5sOq1DatR;ntq*8nwY7$AuOYM@CC z^-dK6#sxA20Z|Tp%U7Kjv;ZoHmY3B*=VGiX^Nt7QR*wo%*OG{S0tzgrbkDqe%y$e0 z6J52Yl-3Nes0w4Og8@rQpE#NQz79QlHD<7(o1(xkC`Anjja~$#EdR>A*m3kJ1&od< zu^JhQ#D}LqL{-{iGzx{pIFOm`b`C;}F`#?0?QO)RB93@LR!5#f!)CPGBnwce*gg_1 z^JKt51_3W0L=4Iq7|6spFP`w1QVG4vSr9=YSpo{xx=%R9O3m51v7 zeZBf-L?)aTrMMO>ppQK<-W4~pD;>ngyfB~~VUd`g6*q{g1&Gja0SZ#al&ljJGK2aJ z$)N!ZJE2vIXR6R*JnJb$l_WNUGLSyL#52uFVhC9V^*93A3t^SUrJTksc4EB4gsm&xv7Ca$Uj+^n683vW5qy!E>8P)- zUt$*^PLNXp6B#Hd+yqo8q0p<@->-x~bd;R_gD(Ba0nF0qA~Le0G9ArWgG&@Ic~11% zVCmasA%eSvE0yj28cC3d6(aGO)dG$S@f^5MN|A~DjG6i<@J3@EfF{cYh~Y%NA24|` z3NhxG{Rt)1%D|Du^ig&W#TDkIBi@9RSfPmxf#FHMgc+1+fhM8g<;frsCjtsP?QYev zTDe;r35LftDJYdI4_Ipr0R+H*#HPYi!h@q|LG6vaLW>DZ7k$Z0ESmj)XDjX4KLzz<~V0sBfe=1gS*gL-Mr3PS^s z&?21lBR@(V&_f+tM!s{jz#nz!*xTEONcbH^M8Yhzd`wtY(B9qwWoc$$&%{y_?reZ1 zyrYS}a+bgJO`}`myNntr{p`Z)b&>Ff2hzxx)e*cv0#qh<=m@{E5&YA^hy@S>eB}${ zH_8ogIliWp);x1+vaXI&Wl$8>fVs*6Nrj(WJeHRt(hwx8B5=6Nn#4o?^3vh&gyIUE zLSh_%${7SiAi78;#5Y|SZr^Df&)`tWL|e*{=?r4=EzRHKm)d1 zgXNi5zbMFo%M=qj5p#npOpf z!6hOkDR7zk@qoUZ>24KBvKg;yjFVM>9+-EP*a%Gw1zCBb+6SxLYIQMXzc({C^i1>3nLbQR5E+xiaW5{G6m@P7&R!6*0qE7A=S}P z)P3-%hUNv;pt^?qP9RXQb;KR@ILBr&oRb?lPHC=?7zd!ytD+o&qAc$^o$+5#*9s*t zogqrq8o=U9JJM*7qX=SDia4k9LKHM`kCo%QMo``#8?^w6_w?w|Hwc!h)kCDU;_NKE zQUyUn+mjk8H#QODHqKbq$`lWGW8&WTd3y+JTO;y>76MF>h!B6k;@qLcuPRi7NbH%EcOi8q2X@ z$ZEE!7AADZ8tJtrfSO@+Xi!OpO6z!#3;gZpR$-7!WYApYhnhSDlqe`W8nwW$JGQsA zwfGHxe5dDbVoj;=sv918~WU$ETZ%-NNWHa)(8JKT|s~nwpnGO5-0Hd z7fZpBS1==?o|d`%Cm+1v(rcSq+8H(J_WvlzRQx`;*{`qb-~)E0%(9vg*LuUxqTpRcm3OIx17&r<+g^XM_aI^va~?#DB?dpqC2g?e%XmEbU#DJ1v^*w&VI#i_uvhR%-NVQqj|Z`Q;Ub6Qq; z-K{l-erP|#x;z@Beh|%L21r>wZb3cg7XPw@M-D4N-Gzh~S_qHB4>$?AjGZzF-8d1h zR7-^h_Gw(uVBXx zEiEm*y*ZX#GP*R+TfUkNdx8Un;FQIXpuAehF?S$oQoJ~xOO*jqrKGQll9ZSkpTbD29SK;2pkaj4 z84h%T4)$lJ#hY+X{9rd`yLhTl^a7M~RERY)Odwv{0o|$MiVG;nS(QPs|3Pp5f|C15 z$L_tNt9Spsx0^A23M5QifCLDwcekn)I)U5Y*Vok2qO*rLbB8jA$NbR1KwX$LxdppW zu5E(FT%Ndi>GI32{7ZLt&uOO|&o%OLMmOaC)o=c|qO0fS`|YyMoS9KWO^JL($4RX%t)6S89I{A7>CWy!KX)03x#d88tXckxrDzHl&N#!PQk6LeVm1EBMGUG^ z>qI~l(=QpS)H>+>i4VQY2c6Id6mMQc!$_CNBW}7ckxR}rH4ZQejTX$%TC#lk<$t`f ztE>Bzw;oP9pa!*!VVYJfmDxGz+q=xyGrZS&)}08DVp-8ky^KO? zsb3|zr+Z26`te?Tpa30q8NW@G;kCuK?6NL#0p#zNF<9Grw%zTp%54FhepB{ zG5Im}CqWr#fL(%?AyHbx6_%83S8Q|UDnu_4(^ zNvCw-f9=VgSs_`8Gg5)y+}u_tBOqm5*qGdrd^CYNhdPrx@QaT6f-4GvWL3@pj-edO z01?(T1&!oOA(oWx&9a;Mj!EtT}2Wr_kQ-%fI2Z#D=`kdj4b`&Q2 z+W;FuI#h!Zs4JtpQ=yf0NTd~D!YCz=&ANMIa<6j;a#KkwF{$CLYQ1?CLgs(^@*6auDvpt!eG96Y0+ejlc3P7yvk+m+PPy^u%lI-V9=j}zZ z3CKq9^9r+PPCxj-{qFh4y%N2$BlVnFvmf}<-DmnM%*F$f*GCacFsY}nr*ELQe?Z@= z#~Jqw>O7j+0UM#5N|mA31?{xWx1ZBg1B;|=yk5LW^umu$agp`~n1?G%t9j|=JZvVLV0i2@uMakgAj#hFNzGiiS zJ)pf?7y(eI0W)zXWO7*pI!J;cf1(oAq(w>ntB0|7W;jDrD_x0%a|t!mtZOL@ zRX0uH|`)Ku`)m^tVc)c%dHO#E1KTzilU}`simfID%4PW1dt6!eXY+}R`sxu zctX@u7>qFnjJT%|Asb}IUy?!xGLMiWMw;aZkLyV|O5YaM@|KphKT|q@K#y zHZ3?_l%29`qva4?xXTq|#%v=b1$xwL?+9k7#q1!63SOT+t<(7KP#@J}GH7X~J0pZ;3ukTC%aE{y{&&~agb3kp!on(5 z2DrFKSrKpsiQ!P1*9az}FLARI^d7q)vyR0sIs(p1A{gDxPWoybyCA`J2UDLl@cRmi z7W@lw3c|MOVkl}7POwcb3r!-v(V;amp`Uv!ko7%cMXUJ97FBYrq%yvU)G~7hXrhNE zFs9h%X6#Rajv%~n5F@1V({-X(?Hg){`(Tt^R1Frb0wpX9@0}~sk{J~ee#$GRK*IFm zTt$e0ULq&cDY@&~R>B~tt5St99#|Y;VVF{YOE&rp7RswYB!pB&UcmYtGp?c+0KU?b zB3bqnYPHD-NLf>(wNx3L)5?Kg03&F6rVtP@B-V)fm+>qR_ZUrfC9=zr)&RCe8WaJr z05$0XD2x=~9!Qlss+W%Pyofpmgwz0BhXV4Zuv(xaXLPYu6+8%lBa(GX=*t?&=x@t| zG-uYq{r!V|x`P2D&3H(KH$W4<&tP_TcD8!IX)>e0g0Ho`Wm40mzP?`eE%hNUlPI(% zn$Xj$-=ksAIyf{yXdxt(tTTyoYEsYP{nNnkP=7sLledRh-^m~oShKUJ)cbw|2-^pd ztiJ{a`?A!^0UZKK$3UO%aLVuI=*b_-=BT%*ks<0p_R%Mv{qL_`ylia@;eHg9QdZ*FO&peMfxA}4?#V!hGm=Yq z|70$TfCpd})I@#sjR07f5>cw2<)faH`UjX-ve^OHm!<`{MFf`I9UaWrD>olWCS62@@;uLD=g2l1F==enCG>APyP)}|T_Kz?~^%)H!4iN{4Oqvk}MFj153QX

    ht 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

    *?)>;B$*tbauAlzbMtp_Ki%g@sr`8Xiw8B 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 N002ovPDHLkV1fhqwyppG diff --git a/assets/manual/chases/chase_initialized.webp b/assets/manual/chases/chase_initialized.webp new file mode 100644 index 0000000000000000000000000000000000000000..e4a9d633468dec9d9fe8915cbfbeaefdc061dd49 GIT binary patch literal 17026 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 z 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 F{}00)fwlku diff --git a/assets/manual/chases/cut_to_the_chase_1.webp b/assets/manual/chases/cut_to_the_chase_1.webp new file mode 100644 index 0000000000000000000000000000000000000000..34cdf64d45a36ecd5d8f23e8eeaa116c23e1e6ae GIT binary patch literal 46080 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 z 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 ci&}&L-OJCy%~CdMD}XHz>6QAGLd0MP?BmjD0& literal 0 HcmV?d00001 diff --git a/assets/manual/chases/cut_to_the_chase_2.jpg b/assets/manual/chases/cut_to_the_chase_2.jpg deleted file mode 100644 index 509c5b923e30b2c4b4df308356545daca9c6d040..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91631 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 diff --git a/assets/manual/chases/cut_to_the_chase_2.webp b/assets/manual/chases/cut_to_the_chase_2.webp new file mode 100644 index 0000000000000000000000000000000000000000..29511932b375d6534894626e554e9b20825f2bc3 GIT binary patch literal 47152 zcmcF}Lz68Gv}@b8ZQHhO+qP|-wr$(CZQIuA?$g}&d+!(A$z7vVDpi?ekg6;dX$c9c zP9PvnaSUvj^npsMW zu!jCQ@tbhaplPTA!2F3khkRYo4CMc+co;|n>?L!0DzwAF2?gM)b&jOYJMdg^-7g}L^|uW``33k)*j@ktegyso0>1iwngK`m zFJI_@%_uD+By%xg0cBuFT`ke`>^z$`+jfN7X2Nh1Wy!8)(6s}lRX*PwB7Xf>c+rXf zGh#2^UVHtyf~TwltxL!CtT^K(F@ER-Uo8UrIT~V*YIN8Dt=oPn8i%%rBh2F+^%@89 z8I}6=2d>J?`dSCN)w1bjtg>Rj?osz36ODiTrZboZL$gGfh{`v9!x==4u0bM1z)eY| zw9IBMWjf{$7cKV+`o70I%U*7g58}6;$v>p-h91G#9ha-v79~{w3Q^X%aJsJ{M2#)1 z&`4QGiNjE=7FzBD)-8SKWX94_l|3J*XQ>@+Hl_+QOIC!WJ0Ar>O&20vNv36$pVI() zQ3CxO(>RPqi~_fsh%TQov#+b$-r+QgEnJ=5^SPo3n>@FjXe^(REB>Aa;;3DBE4sL! zvR*|*R4e6wUSogV_$8<(VF#(Kctqa#)nmR!&A2koIR{I`-=G*;bq8-#8$XKohR26E zWG$iGB0w`jRDAmoiqtCZ^v;4%qhWRPvgx5L^D zTK7-tWz6E1P6OG*%@rtx?EVU;7#iuk>+E1&m3u?YIJpuIW%#?R=j&g|@%UU*`W6>5 zVa<=y**05tm=BhUysub_MM9+HQ`KO7nR#F=OCLTX&YxEXpg=P9cgDF}go!$&b}2lw z(5sMtmX(PYn$3=KP8jmzQim3=kNH$59g72vqy{ypPaRxU`WI|Jph;Q+{Y!cA+KMOM-4BrY3Fb7*pAyTrC0cJ7 zCF`4c+6kj51JrF))QyITl>Ob!RZW;kw?8?$^{I^Ueikf2zqi+|%@@zTf_{n%)2^(n zvA!aIl_o;2gQl}BG{1JW2$ihtm_gDFP;;0CtxC)+UaZP59*_AuptxAoi?X_z*4 zzTcogt>_TNvSy)l$|&Z+9!C*yg$tP^ixw|W7t{mrs2DiZ@(PHzKX*a}Lp_y08J+Ijjs`;GLqhOqn_`8eB9>*VW-FiU%Yl9UMzeo;Qt<<4^l+OBvbz^j zK4t=;)5*FE7kvC1czs;#J7Xv)w=YXV5g9S(A4SS|-;sR`e84k6)v%CO-GX#_Ce&dw z_dU?Bue?4$B7^HrrC>$cDLIFe&Ua+PBEpv8W^V&rYH}6_azq5+_M;;cPKRvx_U@hi za}hxkhv5Z)toc+!*Z-;Tct_f>fD%qkoueVhF|WHxKj?t@>Y zjsh*Tv$Yeqttu1jX^I`7Jdhr${GCIstmv60?v_=Ov}MS+YqJ@^pq=^ zJ7y~S;xRhed`|uI&oEx|c5tGukPxvHOT#-HPJ&R$J{kT2_~PRgA4>5U|JI5-)awY?xJ}p|3pvDr(bQDY_E}#|MatNc+;Lx17bR3?4R9(NKPq-tEGSn#s7p0nE|=@W2MNeFEgL@@!{5~if+2S+ZeaXqF~7PlgNG(E7g_`B0;SMSlNlLWtWn1 zal9N^(q+{TzTqM6zVuMA`Q&h=itOLgyWDmAry?*cZ&LmlG}fH85SS3eu< z`{8Ync3JWRhL6k8>oZexH`9Q@9TvSh`r3cY$j+)K(-_+ow$jg-klNkm+5gL!_|B5~_N$NE|JOTMI&sI^I{{veeV@ z`o^iIQSEoRu9d9(2H*x5V_tV;8@^aRsA@;{>6Je1v_~{@zUin=jbwU`uQKLf2h1ru zGu@1-zxNUs>T1$*iTk)P6U(D#^L_PKmXpSz5RE}OzXB+q=wmQ=#nHzREAQG^+`Nxy z^!&2s)-h+-7%jjD#k?0^yS)?U>aXj9^A;}axbZPua=_WxQ7+AQEr+0z$_1z}+d0l8 zbj{@=y;=YmpwTzZ`KQDpb8>hS5BwJd(GjT5S2oFn--fLE(|l5y9f(*!EPYy>k`1$( zC8Af{z}a%IAu*`hb-o#)5V%unQc}@?NQfl-1NvaCffv_$rcm6l^&UbTr6-2gMxQW1 zR!7(OYMPHhX z$F1UmC?QU2MzhN({T31TD#^+*HI??Qgt{Amoe6m7HqLz z4WIpF?b_?!W;P} zTnI@{@%>1sX_r`+1Jw0Ll-#p_a$Q;SZnVaefbz}=^h_`A7kQL}7xhE9@{pyf41OO!;1E3Ie*(tqm)r9KJcb z7!5v6(=AnTzt(WbGdN07UP1i&*hKPGjOo74VCz9zzSIu^$j#@5;0J$m)_l?Ila5+Gs9i?~N;2 z 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 z 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 F`#-CEOUeKM diff --git a/assets/manual/chases/cut_to_the_chase_3.webp b/assets/manual/chases/cut_to_the_chase_3.webp new file mode 100644 index 0000000000000000000000000000000000000000..ee838af8132961d1570ae983dc79db7332b947a2 GIT binary patch literal 40826 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 literal 0 HcmV?d00001 diff --git a/assets/manual/chases/new_chase.jpg b/assets/manual/chases/new_chase.jpg deleted file mode 100644 index e3cdee30be0a85c0c6a32bb840cb1de5fe80742e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39617 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 VE97VX3HgJ6LcS+1xIBoy{ diff --git a/assets/manual/chases/new_controls.webp b/assets/manual/chases/new_controls.webp new file mode 100644 index 0000000000000000000000000000000000000000..730fe7892e619fcb7ad3156818524c90b3abb936 GIT binary patch literal 4544 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 literal 0 HcmV?d00001 diff --git a/assets/manual/chases/new_participant.jpg b/assets/manual/chases/new_participant.jpg deleted file mode 100644 index 6df3208866429764cebffa962b61d190d08f3922..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18250 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 Rk+))60Fio*QUrSR{{g*Og+u@V diff --git a/assets/manual/chases/new_participant.webp b/assets/manual/chases/new_participant.webp new file mode 100644 index 0000000000000000000000000000000000000000..2d3a4c173a07686ef0ee2b61d3a0691e7bff979d GIT binary patch literal 11052 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 literal 0 HcmV?d00001 diff --git a/assets/manual/chases/obstalce_flow_1.jpg b/assets/manual/chases/obstalce_flow_1.jpg deleted file mode 100644 index 4db8468fef06387d091e2234db66e9a2d3d5dd43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14160 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 literal 0 HcmV?d00001 diff --git a/assets/manual/chases/obstalce_flow_2.jpg b/assets/manual/chases/obstalce_flow_2.jpg deleted file mode 100644 index 24ff3b5233009fbcbdee5fd04fcf12254b63bc31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17409 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 NZRy&R5OcvN{~H@DfBOIc diff --git a/assets/manual/chases/obstalce_flow_2.webp b/assets/manual/chases/obstalce_flow_2.webp new file mode 100644 index 0000000000000000000000000000000000000000..974de5865e30d291bc8dbefabcbcba98f13a3336 GIT binary patch literal 10280 zcmV+@DA(6gNk&E>C;$LgMM6+kP&gnIC;$KugaDlZDjxyv06uLrl}Dr_A|s_$+h~9d ziD_;oP;~p%$6Y(2_e%Zi`+wv|oIW_bd;2%+_x5k5JRAJ4?jB=*Ec-Y4U+y2ezv6zH ze<}XM`-hEw`M-Dk)&D8-3;6Hy&+xz6KOsJVKI61YSpO^jQ`8sLZ<&9Y{>}aO|0noQ zlaGo2C-&L!H|T%TzsY^keSm)^{(JtH`>*3C&j0YdCVv0^)AiTj5Bbma&-q{C|0;f= z|FQq2{yY4q{?GSb-9C)}wf;N(2gpD2|LULbKfiyT|Lgvv|NsC0y}$qd>%Vco{Cl+i z&wunOqv1SO#pVOTv-kFQs<66DEX|l#HzNI|(k4 zY#$F#k;jZMfs%C6IhS~A5;W>G23<-$U9bmq~Xv&3Pi`{W93WB671@CF}?41^EBZPi5Xi^Yc5eBJ5>tf=4zK+XUUWw>3eBD4F2~)fAlztlr*dD=db(BK<1R# z(7;ZxtKq^(Qtrbad+FiyM&5LIPt}dX13+#HKd&S95cvh~^@`y;ARbF!68z=|(0Zhw zO}=hUkDiofFz|S2cs|h#k*92c%Oh!H?}9fP$8ddj?;Toqsf&DaHE5Z^ch}%lCT%lj z*id|ayL7II2J-FyO*pjmIzPlUatcYR7bM-GK^RVC=Bl^gU{P1I1W#p}qb2YkxcLns z?C{P6cVTQ?K8GeqYl!>w;A6oUX=)I6vAL$X)9<^tPsb@|z!KYU4g6s9viPJ1d7d-E zajNB$vS?q-Mzieo1-zE#cvV&fWiNi-gpQA`-jv?WXowdO?Lji-`v^H;tBx&>KMgM) z!-rDiKJ2F7|GWVDL-qj$c(s#`km`{@nT5UIY0Wk8%~%PzL&^8|=FxP8#hs!6Q(i<4 zKlnX7cR?<(6Q~@pwucew1ochcm2oOCMCtVo`l1kE(i*np!%b z0RH@_&63y`lHXn}M~HemuA&CpY5#sFKTBW`2o#B7AY_ezn`ceO37#&OICkL;Mx`^R zbV{(4?1EuFIM>(G{Or! ze~%3$Zp#B-$iiz%UKc+M%7pS?hA6wYQT)wU7aQCZEei@#dVE_2VD!vV6RK>}tcLB# z&v>~#uUR#}-STsMAd)tqvHq6`s>?EDO-wVR3_s4lnHCcUuCH>vi8{y#=d)s?<_gaE z2Oi&#NF(y?#5~>K9_kHB>ap}ltccgJ!De^o(1U68&@*%6+@*D@QD$}}2;j5KXGS=x z!z2x+kSTnSu7Su>4G(zAUa51cg`_k?6QYxn;eWW=2ilN9ca1N3$fl+U7bP7xyv>t zFUDW@D^iaI0Dg zX_}{K1oFgFMC;1M3_u1pbj<#$q;3IRrQANT!hQvJm~Nfb8kY&Dr&5xj%fKMQ#%EvL z2LHd(h|TV)YE3GT2b6V$oXy4^?k~ zCNjv>5Zww32gpu>^DRJq*PLoOF+wgCYdIIMGL7>4hzGsX6FV#ypvJ>BIP7xqamAIB zJU@e74*+WJTLehWP)c7s2kO|rHH1N!sC1!0(}vJzSIJ)e!n4JD>n_v$7)uSPkSkf( zJf?4R5_y&B`5Xff5jHMT(VZRr@Kci<_guB6THk3Kt_dZRh&%6);W>yf7=a;t28OKb z?=KX{ScY>Rzf|bL-htQ*_At|p-AV$=HbE5=FvaP@=I0US%m3Ngiq~)*1hc0Qj*oa3 z=lZKQjIG|Ty{#48)IwAhPNo(M*_vjgEr~rHh;3Rvdd_b+NDE_|J=aeCdc?k<8S(_) zc}O5c4(~epA&qYc)1z4E(F6|`O> zKtNT;Ps^P-pcMeo-ZdvX9_RH~G@ie}x#}?|p7Eh`SbK|3bP%(Q;kc}!JC*H7=nZHf zkZ6==2Mn^@#d^HMrg@`x*&O(kn3&&Lq`+U>dvYxd>SV#({N&mq#Ld9~C;D&mDz3i% zr-T2e5_dUcK`mNyyf8!+G~+(^2bnwWXVJ;&NB(a=>ujwm+!26M?WySY6(XMrBr8+5 z9;plD;CjTlg&$vcBU{ZVd%dh@B{VVQW-6L_o(s>B;T8NN3s>xUPYK&vNloaErwkj^d=o1pQ`jtLQ*wJH2!^PQO2H;}AZ95t1B1PT^(V~8l<`yNsh z3`$9}^lOJgv{jd@FR}1sR>IV1nV_Y<`ACFD`&tMF66TBr6B--8Z9QXqzFn}d<3=PP zmqO8WA_7Sp;C~K|{HJ>rfDTe(lR=3(y-+vdZ-f}((kC8@fA$#V(b%QPgp_e229F?J zIdsN3taNmVY6=HU4>Jv;dEO1IH%9VkjJ}E2h=mF|E^!sE8wL1SMNx$+M6!z71g;;tj@^hc{x|HZs3^uZ#Ahjva53qx<9xBR;Pie$Qds6iH} z?1c?SYI1U5dxS1A-uHhqZb zc)cE_o-xtHJ_fZpcm9Pzs$TykOT65V;}-*s^WGgdN^^+d`dsw~%K%t=AOB@_SwK-J zo9dg3h``OAg&Z)Y{0dryPCfq5OvkO%1uSCSa}5M6FTK3p}pPQ5*{+;pxsba7Rby6B`S zT_I+ks4bE@`khpcb88+~PXKkq6luG5wJ3V6?U!wf`|4$DvYW2<;(&wV-0#T^=I8z1pU8y zhEc8ss_3m+n-OamxOmAaS=^O-guT>j!w9ufnJbqZGc zee)%bp6{YT2N|;3ywTFQ^7u2!#&eaJ5|Fg*yPa+E+1-__qv7AfK#H41ZEHNdj6pTM z#~j`IxZI)0*Lx=N(9wba(aEI~(PJDLoxmM-Hf6MTm&>fHNJAw`^9RoLDiaf~tmq#j zRvt~1)lBWs6Fo{9q!Ll3s{7WwPQdfZ$W}RW8)}y`PND7VNn$-Pl$r6Fy}mH8>oS8` zGHR^ickCtwk2S}@eQm?cQDy9iGTRSp>#nghhQ0f++9owIv)jC0{$OGzL&H!^iTP|B zTeQuR2)*qB&c34GW@@K}oYAghan)OLVu?Q7*=5Q9m#ku*jr?--=j`GkqsMb?B`9ZC zoRPvd=eI>}mg&mNf}YzipGvKts9$k<1l7lcjE0a_F6PwoPA5j*JX=*gqCA~^FC!lQ z(B4x7W*t#Qe{h|?0ZR57)&PnVe2%@!5J2T(HX}BW>xva^we9~&z6^zBr|FhIW(}eDFckq;;JSa*A6|XVPT5sU7C8Y9YZ3mNIgD>|FSrBU6#w0g1p%C>1^8^ z=k}xiGd~3QNjE2`sFD9)qvYywYBPe~Da0CGSZ*IYef9pJ{pvLX;eWlZQXZ%}KFUwj z5jKG=0n$hFEyEO+Mpu_m7C1hWz2lN0ADr(p*F=|@8Uu=&-GCh!0F`pw1p>?KkHLTv zh-9sFymiY+H4vi_vamaZeBHzD(9O41t+}zB3cKnpvm5T zOW1A9HzqszP^gFe0AW%2UB1M*!Xssq18dc-Y68FVoL@l6VdVv{2HcIhWU9c!MG~>4 ztpdp4_tP>jeq*O5Ku}hl=iZ|qOND5U8q6PT=k7s_Y@e3I&#bGYF5y!C=|kIq zwbVIuX?*%cM}f(;_}rL8-d1f+&;3FOiC}sHrkl!{yd3iPjm<(!T8id{8K?;}4klrr zV~mb3A~>g;j6dGA`NqzrbRU*Wj0ehR3MVPjewinp-c%DmIkOra!=J?e+dzvvHgkMt z78xjGQ@eFCW+0-!vM0S_~2+p>P zG1RWB4@4L`m6LCLD6&Btv%RlT%?yd(!MJr43`Q*9wY-?b{SKA3Yaqw1x}HR+pVVNK z6AWpF62PrG=5%{rY#>1Z&O~VS?@IdEK>sX% zYq<6A2|om1v0g29RX`wFA;GBYsZDGIY>v`=Y3zkoap7;HC#>pgnxtSoSY%h=)j9ki zATCGOqy5U2NxM)-V0XXur!t< z28k(}_()39#;!W?0rI=WGO{$sb0S2O2`^t7ArSU~)cy)}97eWdkFSmN3ZnX7b=$f1 z>!%!cQx3B9u~VEhPR2Aga*n@N7z@B<5}UCd`dmm%2QE7%SBhODp`sJ7vx6Mb5}aH@ z@q0OK&3rzB07(g6>!8%k;8H>rJZ8D!`6UrVC+=Vh_}fR;-)F>EhY+ zL?`0FaH;C4fj;F=tpl9R@sbPNI%3ue2NtzQ)3&5;Ka5|No5+C$@$KEHL8-MrUbTNqz3!D|}TO2Ec z!1mKPRmfpfJ|Hw{EX{`Bo@N`2n-1eccqj$ictKQF0-1`X9+OK+pa{?t0ORZJ=Jv!W zPU9(mNBC1he>KPJu8~-#xsHpM^tckiQXhoiu4#&G6ncIUC?lxF$M0Jr9<=LH0I&BL zF5O#)i-}(?08jo&LU*&YF37i219D*xd&7XBCLa|@;E%{p?A|~C56b+r)ur}u*f@H39yA#92WB(3|kzq1y z9A4rpsFVJSZ!086IP{1De%>gZ)|$qPy$@%%avG7wp`f{hN2`NDex~pu-!?IphDvxO@ zGfa0e@8%0U|Gc4zVl>rPC~KMGom;#rF2$L}v@Z;V zho{v@ere33;^@YGKR6P1Zzz3_lZcp?G~iQrh*<*ysPaZXXtEgiZqUB!X3(4zUHIRW9GF1Vu=EMz zILDrF?is&liSS{+&&BYO+BJFqB>6`E&Vf^PoX3Y$r zE_FuPiqV~~i|y`mDd{%Lw>EQ^5K2E`vYFlQ1Yg#*E-ULFhdLzW8=wZC%0M0Gd_KXR z;ttlp`}TNYEscB&Py@IN&C}CvDcBH`sLf+Ixp9RZBVbfsw%bdQ2&Pl~8NNV|NVnL( z;LCxU72^#0?Y*zOD-vnf8;;zwuD0NQZk!1W#$)k~b0yvp=g{+vj(JIz z;?q};2vf_F)EM@oHHv0IA1SY}c@}HP2_~3~=fv0?9X(e4*_43h|3tUs2shgAS6x6~ zwxl@4x%TPK>0l>^Jq~e>;5))qJ^g@k4br z8<5BjG6$ESl&@Nh!0<5th2K8%W#2A595~|g>^a$P@=mqzRv+=dX21UfCrS%l9<6NT zQqo;@rv19WMGM*2Ou8Kk#CqLQjqlTb#d>R9H>>Y6 zpq2>TD?^;rR#YR@PE%$WNl2+5+T`!|K)?lK66Y%2SL&j}TgIN4gTqkM+=8(pHVskn z9DN(V2biIg2Q)_?)MF(H`jQ*4<~T}d#tjMJIu1D-%NN{2{&8*4-$G@SE6lEpD|L`- zLVs(`ZeGF>y>Xzl=ZXy;`=`bPic%e#+-pTXJP+>(tw&_|o$bqM1C=cw+rPv?sYHRw z$+j{g07Dx($v#sbsk@MEPrO*~IkNH70x21g&KFkG3y&igtz{OozJi1IX_LiVE9vx- z_u0xTu&Wd5rCxBp6-#Fh|7PrkR^o9e{38~)IJX(D+V(>~ms7~+cnwTM$BCB75KH>F zN9<5mW9s-kn$m$xbhj=0d#Lfk3Z2WoL|1Q$MxxX&f!zrtiR@WkVCpP25P@6E+ zho>LE1N(;lJ>9)OBGr>@Fa0b}qd86>*L(ATieVtEufm(s)aNFZy@gkDu3!k!hZHoy ztO^yRu@RL`30MHX&fw{}{a|iL8Nn~<<)|lLO}2m)p>wc{iV?M&6;pq`>?oU;4u#qHLABSvb9hQ2#iIQZmHc@On}Hl*~cUovq;c08MrC? z$2Ihx2IsXe1)*!CfbFOKrg9x4syb~K%uNnfL4QQ6_h6u90~I5QeQY3+0SgToAefiX zwIuxw(pcP9IZbq}TR=7F$awZ%H}FwsJRfhZygWB(g_rNZxLj&RMOJv?KJt&%KaS*I z;o;^6_=A1&N%LI5lrtHzUee6L_h&aep5yA`d!0cGHK}4t=AszjwA0f0wevLtjvLEi zyYsunHn_`0CUZ)4h*FVm7S+LjUPNFwQhZPL(BGo_+Cq0zDCF5=lt%`gW0M0vFC!^; z6m0g7D5C$!0e-i&L~Le<$j5z{Z=0E+%vhRjeu7jg*}07C+pDo(W}4>Nrv+|=@Z*3v6p z=97s3%yv+zr1W*!VeeW3R!{W?UJc>=meO_pv*zD&>)~WoRpnwBp@z`Z{aTQhKZe=L zySQyE><)5NxYr$`xpL=~L*dx2_tmbcIc-l>h_oU`d1dYT8nZ?2>Z49~!M$(OP(o|% z32Cjygc^h{OX>M|kY~rch|^$MfAM#85*TRXx;VJe^bi0|^qO4^p(EChnxE1SJ1(mE zmSyrQSSUd(;ASyvdXuJ> z2E(v-FGv7*EoFPxxp=)@>b%Z;h5I0DzjoM(8cEyvwP6aRT_Vp%d9_?_xR z9Bd{MmLWULbLpP3(RVCJ3%R%01mdv)`*MXwDN@*%u50ridG}j+oHSnJcKg`^+6++7 z)DR)7;2}kBw(d~!=iG~~aYo63Y3(Ma$icB)h?5C4uBUPHkcW`QFGgrI$T+TPLW$Al zuG|)0eSha!s#x2ZykLd|LbEvy&$2J8YiY+$Qa7?%-*L55;3I@~+X_qB6hhk|Lu<33 zwKYYx2R>;#ku_$~p|2XA6m}SYgPuJ$3IhGq{PblhXWugN#s=-$F$#~38{729--)c1 zN1u-aDI;t|{M}t2!Sj5Cj(vUiGL|^r!63R?GWiFho>qYFCZN1=20x2jK2wTmat+UN zB5WbmIj^W0S)5kBSkcW+Y)&RSQa*F0$#ZnUjL%1GX5Y7Q1FgynZ}tE;kZ13DX+G^o zU|98eTm~&blEbp-Z%%_;We2CiPs_PPgB;4~&|HLzmM`4FX2=Apiri+*zCJN6mgg<0 zaxw~Q?$mN~*+0!^`#LfG@1?jj#S@rI>-kN*YCDcOoJX5OcSIfrI91m8NFtL8YA2l$ zOuF`)&OicPRrC`2XxiA49+#78Bf_>+f^q{|zM}{}m)g@R0nSIlMNqpBeWxueEM*($ zOhnxUWYosg4%`120j9Trh)B*}iiIIGC0jnlHAQG>`1PjpP2H;|8onIn-;dihygq)3 zkxk1xqm{S|00+G$)}eTflhU@(%lf~}&)~pW z8m)I|I6v=wH%n4s-ijA*stghY^m^2#7O*kErr4TPz#f1|eS~&lT_bP}^2K8uM1saw zn_C#OE7(bcO2>-t%zr~GlJk`Y&oB}4FqriFc)*;!Z=z@SVPX641%~`g3_UOq4c@e) z<~S`gKE41lj|Odlg@*Bn3H7j_XK%9&YbA7@gJ_Pd<(g78xWvduG(@PN`OOzjXV?v( z5JG5ea`R(Ep|3$Fmiu-u+B>J;c(gycv4T%KZ04Bk0R%fgM=Pz5Akn$lV$P@Wag+n@ z`*)Fn^af9Wts&oiB0Cy+CUq%_;CK%t{PBw1pJ89?-Lh zP>cy3F?!ol)70P>&_MhhHlCRH&?X9U6;L#hDktVHN0K zIfOeSG%bo(D`_5_VhAY{TIMmGkhGUlT`QsXTWjF9nOkEV6lRFUg`awQ++?0;1bv$~ zR_7P8xh$ZZl0&2Elg;%cIMNM(31GGpM6c8xNWLv5Xh)7sf_mKEg6}D}HNQ|K9QbYD z%B79=P>*P@kIH5f2>~0722S>he5E{7k%wK|1ye-Wt&hl&t~~nl)KM^zE-|e5l5h9m zM4V%APmqf?=`uR8>D4Egd-x-|u``RgEqlIzhYYI2ETh9^S#j zL}A0Kqu-c0QdnV%d+)$CdU)BoS|1nPyyA%&h0|{@MM<^z2kTE{nClyj1P;bKcvPv6 zXr(6(Adzq){Umo&T{X4`ECh{qIq`0cf>vJj$cQcrb(Oqyi0$z2|E4{p1O7^Zi~WuU zygc^z4eD>1PwL`W84}pJUxp(j`fMhG#4v4V4$FYH~w2+$NGO+ zKl8|d7pZTW{$fz3e-X@E!*%dLAV-JbNptU-BFlK8M~*2C8sQB^8C6eYJ4R!PJP|~L zu8$0}isp){03<#I(cp1{I7_aiZ4j8>R%FnrWRF+Xa(%|O?d`$5{^lF}f7i;tx@*>& zKpA~X2<}=rMK`uhLsjL?(&*pCwX=28ixgN0f{06;FREdyM);Dda5T&{>a2%4Lwj*_ zGhEGl*8ZvTJN+_!>5z0czsAuOZP9u}W4<`@DJoJ)6jhCTxP`6LAR^rGEN8`6Cf0hw zklNwr3r3D&NCTk@rk!tocXlHX z zc3sNN6$vQ%T>TA~Z50zpfU*^SxoW2S=nWmWuBrZdHI7J7C7J|dgIn@)yq}c(F8*8B z_YSOi$pWZWyMswtT8x%{XEgm zwQg_ffAHG9oQ!)?dSB*sYO6mQHbdM`Yd69{KboTZvd{barXqY=oxa(84;rRtQY*4z!TFL}Gq>ByKo=b%S=3(aKjaie4Nga=$1OwOhmQhXjd8_??2~A)Skk6;k z`H5wEQp)g z#z~_zuVha9G8wVs!pQi2oOy~>H^$kah9`(tGl}dm{IX2#9Ee*36gwnhiaCQ)@uZdjVxvKh`5_8AZxG zzh1l{M8x!$qJm&Xm#uW%wIkq=zKy~QUI}6{k%!GWp6QiuQv9bnh(2BebJO)EVlDn8 zw>-)kBsNJtxPxxc*ipABD1>Wr>yFUJ#o0Gcr?J(NLFV`I(I|b?D3r?i(G!XQu(b;t zwuq6^?P&%`9m+~p6U*;qoLPYmza0s&Aw|uAYi#_SR65Oh<->08dWOruEC!*7Nl~B` zT{%Fy7Jq*&tiKtEgt#EH?ijW;ZYu}>xC^^~p>;|`Ml1^L1&D7=pjHmNO{t8mvh=JC zJ^qNSS0|V+c>d_T05yzF?%208C{}u~;K)J?HJ&b?8-H2$X2VFeC-_ZAqvKVt)D|DW zOIs}kHr+L`;zzXu4dtt5Sy+Lnr8x=(@J(Zie0@>KGV!Nxj=vxHQPb{cK2fL^e^YlL zO^S^Uu9S(FdC&ytPTN4kr1%+ks{iUYK%}8_268};!J8aP_Q_5ex-ZMEktxWaT)yJs zN(em3t&aK{!7307_f1_Q!lQp_hcwEvo7X#)U_*pYaY!anAeor13bsPUFPWg9$p(`T ueaOO`8CEiw`aLLH?{tV8DDQ23>VF5!?5ogtEq$Z~@<4EwuQRFHkpKX_+WjX0 literal 0 HcmV?d00001 diff --git a/assets/manual/chases/obstalce_flow_3.jpg b/assets/manual/chases/obstalce_flow_3.jpg deleted file mode 100644 index 1a1e95502bb379620a42c69067a4d7a035bbec3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20654 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

    4;W)H{2f#Q{tY_vUvSkR{{k$U`%h>@^8X_F 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 HHTu5*zw7e| diff --git a/assets/manual/chases/obstalce_flow_4.webp b/assets/manual/chases/obstalce_flow_4.webp new file mode 100644 index 0000000000000000000000000000000000000000..f65ed0aba374d6c5b81ebfa4d43494c404c29ff2 GIT binary patch literal 9432 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 literal 0 HcmV?d00001 diff --git a/assets/manual/chases/participant_controls.jpg b/assets/manual/chases/participant_controls.jpg deleted file mode 100644 index d35c2b823dd5b63de4fa15588c22a0739a05597d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10999 zcmbWdby!qi*FSuak`Saj6p-%DQIRg`4hbm%hwed1sgYJBL|RG|grPeH1d*XTq-V&X zW`5)Mxu5&FpWpTV@xJewYtNi(_Sx}SYwyomd#!_+#w-JOHB~iK0UR70zz+KXFe|`w zl|a|$0HC7-@BsjD8^FV11n{wUIM||u!}RZaRU94w_n-f7VJk%e>^E>1TXeDI?`4NA zf7|@?`|_Eqr>~HwlP|l3keHAtfSCi70RlXH0(?9I0(=5OLW0}GcZrFKh={4l$VuO^w6BH5T5#i$D<@wtQ4j~~S@oi!%Vqz*D zMp{Om|IZhu1E9DKX ze;2rggNu6$4;LRF4-flv7`7h3qrj)UC;EthO8*(*eK57ytCWJ<9FJ=|X$-~@oZ|N0 zuZf6h>F604xgK!y@bXDWN=eJe$|*llQB_md&@?nMHZe6bw{UQDdhYDv>gMC?=N}Ll z6dV~99TOY(CO$PSJtH&g-TUlMg+;|BrDf%xzkaK$|K89DYwGIm>Fw(u7#y1THTioA zK0PzLvbwguvAOkUdk1-Rd~$krj=H$~iwg(9{V!PmM)rTP&aD7! z!KJ{%zb8sS`ADDe8JOz6*sI&rk5dY2JBc{N4G=W;-s8lyoDwTs$iLA3LH7R+*z5ma z$o>uNe{jtLq_{X(<>68QAmB_;%dqwPNzO1 zSJozsyo&+eYqMR2q+x(WeGEVZi3@N>Q{2mOKr5|dfHj)_n_@k5m=Ol(09`pWU-4pq zu}cVw?HZ@MkM;ikia-kdMo14Ws)20^jeCUwQnVq{?Vsi3#duoL;`LBu;$A_n+T{I8Bc|2ZPtj2;^D3kw-LCJ`1`Y#jD3MGty; z^;b#;5G()%=0H6L3{d*FFX4S2$bV1vKbsOOIIP~wM-`zI+u+<7fW9Q3E->m8k&o6H z!~lIf=!sGcp!6BC%y#ny;smUi3W-P@uZ?{y*x2ASP?o+WqOfx$2aX zN8SXX?@t-@2e497+pN#t?Mc7@B1vp>=m)77;7HMbWmmt3EU@9&qQ+X6RF}1yF*L0q zq|_Jg_c0Ih2J(lh5G$}LJ+#`V@AXQD2N>YB&!UQD$YL`3!^1id*9;*p^=d9rp*` z&&V09nqRgf{rHEC(0Wp*KmGE}&p<*{lTo-3ax~?m`N)T9rl;;cl65l9WZ;a^#fYnv z>>Z;A>lsi`uGvi9nPnKU`_0Fp?|oshCCjk>3D^=DD$Uq^j>LWsZe{8Z>#j9Z!owdzeM&niOM=>wBrdoMI%{Gj**;RLeFei z@maZKZhf=sc92|DS}<+c$K*n1Lb7*PFtVZamAYAx<{dC#Ch--DI{Eo$EN2 zrDVj&G;c5BjEIvSYg72t7L;#~mBlUxt?7CM1T-guK?9)gL7Cv&8!}M*iYp zE#20Xa6Gqh*i_9cEL-Ya)gqyZ!TSm$!>iPib$UF58$l4bC3{wr*P@TKH2MZFt;_0d zs&Dx&-lCg%d8e(PZ+c6bfdlHv&nKPcT9y36n9+Al*Jv(uy!o_QchQ1%2~lAML$XD! z{5}+BJlv-QWsW`nUirDylQi;hPqM%e=Cb>Tg9hVY!=8&m5iXq{$uf)HKhWN98wR1vJb$ zPnuQG?k8%Y>l;xeOKMz4=e9dNx2M^HdmFI>0We$nHe8vbC`EO)1y)*XvbZ3zTNU)%bM@$OvK5{_@Q9?xO36 zf=F1h3;i&jSPy-MOkCtZpXtHm>{8_E_Weo0lZqr3!Fv9{RhYTGpJ@8S#sr3oz(2vJ z-c@%bob!i9SC4uRBp51xr)zOFKc>%57qtpE9&k~*#me0By=j88L0Lda<;1%hp}W*d zl>!U*ER+F7I}zv9f)5On76u#;$;~CR(|1^RwcTq=6G&?6Ilg)f%BRH2ZWS<3v_~9n zOoaEHOSNqKpK+5;3#58F{3@WS`JTLf^i`PJMa(rgVdw2muw;BykC=s8_{M#%`#g`f z2M9S>Ginf>C0@i_y~A&~nwqlxQ&ee=?_I>!-YW4nC=KyvG;y3_y;~cyZ@+8$aBS1D zHr=Q|S5{Jd7FfO4{$;&6{_OF1!)!nw9WnXB+);Ayq<#eF-9eXLHr7^Jyj3vpGtRdO$*EWjoK0c}-(Dyu5O zZ1wVCfri>h!dNAOe&=T{+pF{*oT3jO3VfyI1m`#tv}AQ(s`bw0n#?X4Hz6hKU!@O9 zd|EyLZoMS)85JSa4K{hxZ!)SpeNFPw-J)t071=L(fAPsx-L4ppJJ(!YCiwR|Z#C`X zldW*+Q1MB>ebq5b#D_tGQeI2TTILux4bjd6a)O6g}FgmuqK_fT_zWd0es8RJZM9y5AqkgHpWQYHRqUXVb09i z5Xg%itqhl{oZCM!Ks`4Hf+AJbjtN+Y@J_h zZmkAt|6=g-BbibEL05Vf$jq&VGce8QZa1hdXZWiy<)64Uc8N0~qgV5LFR;EsM|8+i z^tDzIs#M2vf#8zAk$iFX<$&IE!=d~tXBqDu{JDLpG5w_blO7%ig(mZqtCD_%a6IF< zRrM~__|NgTK9_X>{bQ$_53+gm6=o=;b1PsGgS)Q|BOrX9Vipoa?`s3I z9_J1zS8ji8#E&nY5CurnB7$+I-m}F^5ZTDA!6i!l<&8}a#55EEhF#;mt(jP{gBK7w zyx;16ib^2~W%t|aQ$xV-3(eE(Acv&u;gY=4Uk;Q@-Dgz`!RxM<#nF=}!Hv$B$4kIrM(ouO4A9Lss^;6ia1YHJ{*+E| zIy~Lfe8>lm2kG)C+WPpb26W<7rH@G1M{JaWmj2Q5=YMM%>lyx+mX*R$=Sa_x;b!O^ zl>M$#Vo>tg4yaY!SG0Vu5XPd{V5UTOP5i;6A;AC{Ip*ZSPEL~!5vVTm^A2C$?zb)W zUz+Lvu`+*&tAl8W4&`@f`laZD}d3j;}rIiwtrKMjF~ zzM8T->#WTF_NC8rIIp?dxfWGT~1;1Kmdl#@H!_7istuRAy7KQ81h?K?Fr88pyICaT%_+c+& zqYX(vZW>Aio$+CJ8?8d;+aMjx`68>`%~|!<+VD){k$CdbjoZ5ESZbKGR){K=$@dqE zn}Xi<&<*iUirUe?4R>PZm08V^wtpTIla;O5mr(lsvmbu;bZjE0Tgqpi?*4jZk5R%O zy59WNw(rQi`P?kd)hUwJ9;(F(#XdTM{BgIoHB7U5i2(xhQ4SXahgnxepkCo2oDrI7 z@0^V((2CSV0OY6Kal?&7eT@JLy4rxK>7w8&p9>2famK}c9i5N~K6whEYbWxHQt zEt{X(%|t1x@Iw1oZzjLv%Wl);;=SMYlxD8gw717Jgk;$BpMH#ln%FAass+yV=m#2h zUB)Gg|_A${cnomq6z1daW1EJ#(%0+hL2&%?DV$e2U}8i zIC+4Re;2>GlgAidE{)HEo;GVNeN8Y5x_l+f7-+Jq)nZJwFYGSLATpdxAL7r^D47Ts zsE&bVwcXxrXd^}ykY$B4@>Fl4$C{&)Z^2&h2fv)&`k8$t(#TS)VqDc1mv!^pRp?{< z4#T}X&O8Pj(_|IWO7f?Vmg7fo9``Fx2t+1W3v~e-<}DSzRvEHZ%l-;bO_(2^_?~!Q zGDp~U>!aE30@m2Y4{4tJ(J8v!k0)MuDvdiAn^{^dL#3E}RXcYF7%I@3M2Q7=)jJ66 z3IzzY^H77=+b~(TX>-9hjol9UZlw;+Ud~i%u3n^f*Bi1Z@vQPnai>ZS?U+ipEy8m* zbLIM`;6G&32BIAn4qnPuxV#jd`rxtCV~-lF&=f*O{RLojhezAA=%_?N&KP>`@ zieFBtuy=8&Yf)tW1>vFt8f|Gh++HVnRi{Mzt2)K(Vz*N3cu$<``yL7cil&ptt+nceUm=` zU(`uz{9M(Tf~?tRDZRtL+PaRAQktPQb--n^WYXJ-LQ9^G#nzCOess;+AGWsW6=ipj zf6KP}emZ!K}r4!}=RqrO#1P;U03+Q`CcxtGVl=(QNp+N%f+ZonaX zRMhL)eEpptR2C$0oK%m8TWy4MM0QgWw-BG@o;Ns^&uie9wTP*8UrhNtrbfKf`pD2p z$l|gd+}7!RGl{gY99H;2$@6xQgLO#uK}B_ifuP)S2=zFtns}B?~Vl*mhJjyJ0@po1WQ$)1y(v|U=4rJUFcLa z?ZWFD%{0fqmUrzZ-5xMg`ipuM7DWx6&rN)6gW{wf}re z+ts1jNj=l-vafPkbj&L~PfdHX4TO-6bwb)ENG#AYkUlujsS@f!TSRC{$uHw>pVHI| z-k*Md28mF>DF~#U?*BBG3Cr*w2@+ip$eZ~?_@!eFp1pVXbirJDq=Mmya9<@b%a)o{ z|7)7N6R8m4Qw`_N^KNK2&8cvt-4$Du1d|E3$n+zI!NCg$eN#|05p|0dJYebhgv6hM z_nS(71KG-q7ku4(X8d7m{kk72_;q1Ya#Fdh#TyoPqzwW~yu{D-h2Z>|?4gZLz+3SY zV`|uo2CDh-U-kS?ChPfcKw{gZ9OQzH3l#5a$(B#p?=-&y_bWsi{yCo-e^jwk<-=sA z;p?bTc=0>^zR)9vG4_+9)vonL5&j49g2Y*Lzk1!&t^~RR&~kUYrxMG~8t~NVlwnXk z&ex)uJpJ!z-0*3FQKPyf9V}Bd{?XN3gxQ{Gjk%KbM~^XW zKl;ky`j(&j5()Luy$d})7W9*zGn`dzBH(FhhW)h17Q2($+j}nzwLj>7gYG*$t9R+N zJ>|ytw!Qfp#D?I5_PnYo{W@WIu%OYl#&+B*Vg~6*{(VVhUK(T-hL6m;PH2em#|B>t zs{Cqkzfk=(Rzd&ESmCLBQQwT;k<|@fhxB?BJ0g6quV7vQ ziBB!#i;@@DyV(Ap``j}+J`FE)K#1YvH^14=HS<@Y8)D=$w!O83PC+Z~4RaFOaFh3- zAYJLQOSTWVzgzkLa9uT?kN6syq{*aohq@pu(S!&~+v#5BEI3tFC4sIneT;oiK!+h} zwMB0wps$8%a7|FIzeif5YWe^uyljCF)Br=uM*FE+dEk<7fQ(&vungEGDP zQ>T`Sglesmr@T-6{c9z@%AT;qmMa1W>NMF5$kOP2p>Xa{TXXJ&_0|^Y0RE(5W*0<=!>>;kPl-c=Qpzn)OULU zxkrC|7GF)hqR$g&L+UOK|1H*ofB67-&Ukq))!)*$s&UB~UClW_ zGw1o2QnTN##i;|7=wgUcINwaDFG@3z7Jp!eYMTn$p2tI0vbLzIK?fP2UbZ3UAzP|z zs?VXKNJqL$t2Cj!iHq;jaq6O9wuT*URxY7EMGFg6Z`Cg8|PN{`wtcIKZGk9uG`<(3+ zhzzts^mAmhBp<2RuD?YZxz4Rme}14>!}2xEu%Ilhx$)=w;b5fE$uRb$GiNn4eqqm0 zoWS($ZB*h33wR>c@{24g)Eq4EU|V8R3T&Yk@N#pDEdDB)#{XFyNuIfTiB_4DnoF_T z(I|YjV_#;Jyr7d1`8i$IpE5wS%I~5y#I@wh-R-Poj_-}f4eC8xu7SvClYTr=g~V5L zA8lGczYvAQo%RB!Cq+2Pm{@&O)^fyD+~rw5CG+h?slZrB7JJPGHnKX7N+}ON5VS`d z$Xm{_gHSup^&Z1?Wp5x4htK2ROY?Hme+oSd-T_>36f!NRm|*cPUbMSv|#jeWcLLt_AJx z7pHhZLfnD&G04>?CiahRW~{a%kEx)Z885T=s7%=rhcRg1ER%+`bN{Jvf#)kN-yIF# z4ludfVP(SR_Q!-s+LoxWL47lg?-`yr??W*RudcPLphS%1rAMU6+PXbicl=2p zoOq0lZ7(eS4QDIUOf5T1VReZ7Upl-MzbmWj{bwKfJvGdCckG72-Kd2XhFHk|jR8)i zsx9&lvElT;2Gt0%zz2y3rH|xBI671@;dsieHps-1y(FjK)udzK_^9amkveH0OthCN z_$e;8FtgBjpVM1jrzCa!IA+p3g0Nj-&EK9vepGPJK`6=nqP?}EF0KY&4=9iL;R`%pL8)k zOx&u5MaN#L27c)%ppXl4{rNq@4={9OI`V!gZ|XXVmvO28MbrlTkc=(B(}m>q^!oD% zQb*)O@=NlqhxCgQY)G92Dbe%4Tvmx#xcT-!T(&)V~EKcMM1V7 znY7(#9{#~uJFQ$V{*kZTmZT}#Z4~LDYw{=C)&2QFRaM@YqY#WFtU!qJ{&+clgOoD! zN$-O+ywn|G*@%ADRpN^M>9GFbi|wEJa9EIBX~?dZZC~F|QFu+rNo@TU~&w1RtGC4L+X$S;n9a^4y$^qz<7VOIhF?2 z{zU^`7{J+z59Vb2R6Mn-q9KEn(%O2!z8;D*&+Cx-5CDicQ-NDe%pR~oUCMH<+ny)N z`&-}IqPHfBgPz4GQ&(_$F!e0^I@!_tv8b4R`Q{EI7(c=tHq_9#Y9^~^`1zq!->nT2 zKYsn@R1h?vGuai2TKkaVwDjUX|Hc%{maRt#KkKCZm_r`@7B3< zq_L#qm1M?vQk&Pk9I-^UX85k!{noBSdvY3^;o@z%r2U+`W0GGL-cY9r@bvf#1?nHT zb9XI@jVox923z0M!NGm3W)AlLm;0Q+4w>r4K&j^^hSep8KZ^_wv;`0^mg7Fhcp~O9 zFP)Lscd7a|JF2X29e60Kd})Ej$Z+S;q^u?D^OdtR6EcgOQ&$!DX@!NkJKRn^+hp?H zx+Cz4aM#>>7iojCKQ=?`WnN~hF+<4)Z)-4!r!?YjZ))TzJxSd% zGcSKBb_zYjb?yN!cdYyzw#r2&e{T7>)=cB@~uoURIGAyo(aR}YqNu^oHE%@~yQ9M-!$EL$#EeAI0GF)@HMSh%F@4e}a zvneH=&F?yeSVVn4R)@VRPS$b}GErcY994JXR)Fg*Gwch6YLsb|F0~cDcx$P0R{C;d zI_Ui{fTI8%O?t$FFr^r1dz=?IuzOlLc9+!5I&#ud1OxQz7`E0w^lqoEo32rih4_Kb zwyXA($GD;>;q zKq>wT&h|O5r;yz*A#PL47u74Ijyzq*$vzsb0^(aE%KAvPXBSEl0pE z4YX53j(FA9#7WKmdATED;Cg9Kq(IAFaTv@{^hn+<_`!Ao8V;$h3VZWV1PjlrIFRAGH9$J&yJ#fMZB_50GBO%TrG0hZoHIqM;oOL|blLzi%WsO! z_@>bjn>(ou;~TeM`DQ#ra@2N?A44zQbzrqf=BcBe{UUr{o|lfJw|gaT3U9`)-z8g> zqVpi@g~bg>&Z~0_;2;L$$~uo?J}aVa<52H{?)g0w0geG`&_3G%WW94Z9RvItyH00? z_xRj1WfbSXMf~OMYen8qOFbIVY}3nR0IOXGHr-7On#W2aGK&|RC(gg%&GjmGJ2xG1 zC7iZVN%`b#sZ}E&w#D&d=3DKdX~{SE0nO@rUsKhUjHoDz13m|VE{kd``o%Un!R|rT zQpLq48Bp8E%!Q&RWuX6s2;^I+H0t5fis=+N1$`gr>*Hj?%b^;S{$Kez{PzTFoeLNA z0`819fT=%Gwej4;Q)Rm9SHPxK2}T1){GPdtW_y1=0^W=|h0$jaHvFQq6=f zJEnY<3AwqZPsy~DSSzCVfA8M1#XH0{Ks%6BHE zdh6r0Qd(D=;yB}#N;{I-MUk21_c&yG z@)3akn8j92xHZMTW82tVTTmI+*}e&wQOZ&zVj|3edTFLWhx|{g#+b@_*@U^XUv%@= zQRQ1GGe@#q5_@{DDaspA^oga^Sg;T;nSRebG(V*ElCXR?8jvF@nySa)tN?dtNL`xv zT0Auul$U3JIQV0A!^6tMUF5X*pfgWR)@ zD#qpv54*mc;LcC}j;%|L^qk$B-Jjkl)SrkdNo`9o$`9W@Q^*4`px}KI>KK6RT2_Hk zPSki(QfoW*L*h~458OFifB6)H!62l2_uHEav!BcG7wIt>FNC+K@DJ+<2d}Ar-)JU} zU{6`MvM!*zzZ>cxh})2(`^w0zPC-hBRV1k)4gT7(qes=e^T-x!oxx>PNc%Oh?IznS zjl3H6C5hMz){2)a*RDm_HyqxCEiYrYjF#Ir9UiI4VZre4WO-#DRQyGSxhk?fxlS18 zo6N-h$x|IIePZ=R{L@kD{7=gii+Y~S^6_d#*CvSbL_ZQ8DisvOhajbBYp6M!A+(%b z1>mvrX<%3h;>Im;AM_2g?6D<93%Q_~Y-t+a2-G}}C#mq>LmR4JY3@IlXMQ>JKj8vcS*;p7M%`3S0fPOgU$Ib89&{55Qe|TyHm-c=w9}=@DK`6|vavhA5H&*EkyX@T|=`ZiruE&fXw5%n& zmQ0%Y30?=h_rm~eD8eqOCyH~nBo~uZSB>y?w!O+&H145I8ln*g@vAE*C-(u?+C3>I zUwORa>yh(?C7Ru#qxaE6qP3TY8lv}^%NWND;bn@w{WS}s-V)Jo!QC&VYXT4 zsJps;Ns~q%xvJ3rI%U5~zA6D`crZRu_uhc}dl4w~D&uAoC zTP3wQ*m<(&e|VK_<$$|w;caVla{q?h0Huf6*?rjFf)q{=CMaE9(11Xcl+5U^5~feA z-U9Rh7+!|5PC>xC!a(a(t{C8xK|ym8KZ}U$y!>X?>w?%~4P`~~*>~8Nn)<+L>Nrnv zBQyp|sp?@YwGZ!T`<%)Yv_mCGAGZsGbx2J;gEn80D+2w7R>BF_RHdlhE@?*V3zrhh ziZ>qBhKI`R8Hnivd5Z1rsc)^Hd$C(&MtB~(MYNCh)mF*hw6U7!lZ9$e+=JH*7P z-p>sfp|E;3xfQ_T6L}CkR`UAD0!{!S4L| zF)|eSn_3$NT|cSVVU_zEvYM3nu4@&Th|u@jWALC*8v|ZjytjrbR4CFk>=cDaG9 zC&FK!Qb5s60Lg6zCz*;Q3eYH5Rcg52`?sI>r3lX5l01rJ`}rKpZPJI!2MJ%~Nsoj* zUi7?=0nItI2%qvgvb5+ zS#L#?`OSQMs-7ovj`r^ZrPQnZ!SI7JW)a(A?dI}};Thw~ppkRW(@~nKuO~&p|GHzn z%LYkVuZF1Rp%jz&F9v%7d3T+@U*4dSUXsA~?CGO={2Opt86GtuMick{FZN7`&mJUC z;S$1Mh7hygzbao8K|s2(-w?#`4MsHphvhz-EfUZBp^0S9u!iUsOh~Z{>>CTyOvZiq zXDjSQM@15MK!gFh4aCgC#ilYen76V3@WN>cfFj(v1pBsqAd>hKm#YY*tE=+e*kxM3 z8(#k0gPZeU0RH_ry^s9ppmt3au{+%J$!LGTBY;J4G-9d zn&yRyC9cVxRkZyL9KFK0IpCNzMz^lxNt6Ogyv9|r#jM8HKE$r7GOy@Ljk{ zvwdY?Kf2E{x}#?Nn_MS>kKsHWue(<&8*C^h>o)fqa?d$>^qS?!Li@DkyoF|3mq0d9 z#PtXYZw^~_XpQRNp2%~UNEU}}tvzJcftL6V%3PkI%LO90kZ(QdH%S}sNt8In8o1eN zVtQe$zMpC-*TT(QL|QsAqyJCAY_R4*>1!AuC+>${wX}i-55)3#jv| ztt_Av#Vk*U2Pg{wz8ytui%cio+o_ek^MEy+N3R>eq19<+1?T1l;LGa?%2DZLA|yy| z$THg3ur8U@4)`lr{Gj%&coE9g?aVDS+wEPq!h+m;0?e!BV&4 zAlG#ek1_I)=QJl!SVHkc3TUeu+=J-1Fn~-fpAdM-?QHe$2F5GJCjQl8)d_Pe1vhVV z0X(T&*c@WCA4lpf=kcT8%Lv@mEEfE-k-Zz)2LV=oz(0x08wlNxD|3Q1ic*@YpCT*p zJ;Ci>_M60rSL&f%5$uDCt5>5>rg;3%5eKvjVS|?UTaG|E{7RecXUO|ZTBqcY9!=v( zIk>`lZM5`n>DFTXuRAYuSyRJSm)1wL zb`ZZ>Yx2@Ed1*OFglU)`Sy~wws%OZ?*i>t~k}{K5$k4w&1w2^~9#?E7GzZ^K0*&=E zAm`OXtN0oXV6|QeqUZo|fd!jJX|zWRmJ(>V;~u@>iWlDw(2d(KnNJj@K^DqMzQYtu zXW@7XL};W=#af<2{5MG+6|iNp*hBnF-Z3zJ^Njoa^328Su$OB|I^_ZD87Ht zO{UrBx@dxEjCa(CAbG2_$e2X3w}}u}3C!x}cX5&U%Q*e1%}{>9AFy75kgAT&$^%z+ z)sde35ZQf`YS*#ga0dsnWM9=!Uq#U=uzh-ml4LS@g|@zIXIlT%;^8AF9L|D#Al@W{ z6y*dT6@A6}_9|NM*1S#xe5SNT{?UH97O=*ZY6kD^KH_cWx#I}>*w1`}hifGvQKm9` zalfM6ZiUy42y!)a8F~FiX`0qO)FyMhJs>t<&og{@OiFVVi47Vre2Tqt&Ho40Ezyy* zC4Q&qlzkF}`j({-w5*GUIRGL=lK`*q3vxu~lPm84}HMaJ_ z7?Ht8VfBAxb`-Z=wzlj>0q7hTmrE)`nwD_yi2Q$i3KzjU?mb*G_X_rbiiyFWx^d|e znWv57SQZcwC7XrqS|`{tmrL^xDHn3@fS=M zp$U15^vrgKQfT&Fq%LCZHwqs53>U*+E61Nvr)a7uOVE?6Rc*n6hf~i-5wv!AeUj(LEFzFFb=o1r%Kf3o zvo)-yLFyWVk9$$yYO$68DWjf%>EW5!tJg$VR^uu#3Z3zgrRjQ^G0eVDO?N5hn|hx} z@yvMTzA<>L+wiRhDe{~?GTo*$I(cxzxJDR=6G`LP(7P@Tr?Ge6u0E!WYJy&mX-VpD zDdQomiC-Ln#(6POY><&TpHI38jmLmNnY5mUne}*ZjNPuk|7u(pFN=@)Wk&`sJv)qG z1YJ4=;xS3g6Zg4OQm@=+=XyAidqk{<(!AM0g|cisArOx&Tcc1=GF!3=U4KBr9$Sgw zywL3X5t@aSK6yQ)lBj!SYEh!sZylb&GM*lwkk2OdQm$T3pP?N7^b{e9OO`qLhh#^XWlEtE$GDxe>SWakV=%AzeFl@7I$>?Y0De;p*h1;;&o+1~ ziX2?O_IybiEo=HEAYB8O9~lSG%#lrIpO#?1lhcKfDA58-^R{suCptelq%>2@uwZ=N5=aVKxqV8nfM)706bMszI2|2XHYC zKmHrhj^N+IFuW{EI3->Hl<(UBt@lkB#ZvVG&=mJ-u)XR~?5Q|z$4wbX<|{4fWxD-^ z?mgnkAheAP(M{^3_|_?cMY!?$n7qiGAjUw{Sv9HFSEH0yxpS0#A17KdM9ItcegKK- zzXK#gL&V4l>PUWt7$;GkmufU<*f&qj!%iY!x_XMGB}v1oPo>3(p$A83vL^KBvlToP zLe6kwb#9|J;gHpcEB=6z;AtS?LVeB5xnQ+aQSyyttQ1}kmlo~+e^g@n)_F`In7Xe+ zcAO2L8}i?cJBH&Ur=rPNXW+nnuCZ)x{kU}eiCp0)NH*z(4sZa%ZLE&LlFq%2#>A<;#OSI2Z~L zewhCb0!I4qh_l-WTMSqS*dhL?70Ec}XuE?7Jz|H&u4{%N3_n7$>3E21isSVClp~-=Q{$Cl+2-buxyoAlDT8!2%Xa{kk9jZj7Kp`q~kK zSsb;rImMyd|9TSsnNW`)Yk{P$fa!~x?~;~WWnrN+b-;G4BQ}Iha8;r0o8eCQPWdem z#a-QB8rSXs4-uSRy&`_=MpdmKL8stAoW}8HkR-!zT*a6yeu*`7Qp6wn(MQLRJ>tn^L*Zz6XoXNl5ka7}eAslM&{^+zn?4xcWp zW!T2MzN*SL_THEOxMTNdl>?o;nW^W)T}lxz1;92h9*PH)%)=suma6Px+aYlw)6pJZ z=^rl-$qDb!5S5z_?9O#p_yIi2-S_MK9vv~u84B_8%5yp;)Vu?v3U=4R>Z{w8`hhXH+8;h}w6(|DZNl2>STzVg{AX z67z$r0jV`mXm6zX*dccVA^g`ZjH01l)Jw|(ya5T*go3@EDO0dc#*hG!7!Wene0wl{ z{F{(H@`B~Rz5>xD>~)TB4dox&d_HWo5o(R_lqV(DxcG$$cvwRb;xOyv;it_ES{(_; zg14!H=2$z9T*yZ>5SuQY)N(AtpJas!%E5Nt8pv)e!K2ELvwdonXZDjbqsnec3 z<)zM+jvPZ0t$EvxjkB)q^p&BZW}aTEx`*+wSr4M*lG(!4J;z0`Zwx{Iy{~go1TN<} zLT^`-B8q|OR|_e)C*PCYY?lSkNPmURh3k~2^;3Vv9zx>`JTOv5JA=T0Uwxp!+tjYRy@(ENe^Wgn^2NP#R^6^bFm)-ySh`?C4}+ZXf+Yso=$#hIw?B_ z&ILx)4WrStivxIsOwk>kQp2v7BeD~mC(wDSec&8w|4kK2o^|G0mr$a!270m>Ho?KWl@F9{FGoihfo2hsCGTZW(@VPi!`aqK&rdD=_Dn|UYWyWwfi)ayiIL3JU z9k1!_XZ`~RFM%W$;*(-C-BX;fF7`{+6ok)S^DmeG0|q_ro!XnyOrvz3b)<_)ORq#? zd<$Qi<@YcrmR%c0E)Ty?&Aw>8oX$s#%!LOgJr8W~^CGWYW~=V-0j@VaBwNz`K#j;> zEep-{HX}HNYfM8bX#`FJketrR@#ZGk zpSB!e%xYSs*#;D;Ov*w9;6~FdT&*OX+A|_RK!at88kf_zCOo>zO&&^egwXPUu z7!T6yf6(Uyu0u;G&TXBzxBMU}b^bDQG$1_yXhc0!BAN?~{_mvVk4({W%?nrN}qPq5pT*ORx22{7ena{ zX?#nJJ!M^H-*s7wNfS;7jmZDkmYvZvV;{kna*^2Wy*EQev|gCc`TyW!$01fmD7Xd0 zTGivNq{{iET7w|1OUtjlX)#LD=pOlQfn7vMea}AJI4Wu&iK+};AYfQTk;S#7dKxR@ z{?lqt&P;~zl^fJn8s z`GIFp38D?ebJRF7Tz@!8#8RIuhHJZpny3|?utQ0#qyeb3T}+~W?=cO%DS@Aa1&_?; z{)34;;&t zK1H?Pf&g$|{OnDn6Wkp_;Qs(Y917$T!;=QZ45pZ&w7l&OHCXF*w6ImDj*~>T;E>*cXVM{$+4d z?!0$-xW$I7bww?MxRfqB8!Hx)Y z>XyMFSMMF{5atnE$sEs%U(`Ue>a4U@B$o6eI?EVgPcDnM%JSHbpDcdXsC3%YC=D_D z+C6jJ^XCd?#)lW@g_mBBS7-g52ygx?1jL*}?n@d{$I3S^_d5b#7Ic4L!%icIo{*G+ zRv%F0Z*`Kq52uOA3@P?rJtrRX|8XufhOk)Revkgn63J(z`6|QiSxUj$7JCg^GR%vkdeHX15~T31$YU*=_;XiU>!kWsrwTQRlj^Zt6}b zt5MjTfGYz>q=XH*JV{U)RV#3XR}+bM$5?xIDs2v_=Tyb7;*UE3{&ad@IYRBCQ4ZA^ z>$yK;W))Ed8HsWI0mWO&A~Bjb(vfaT{^cfDWT+0yfl3BZ<*KG76AK z^Tw2jY91b$k=jtl^Y3WQY=(QxS<^?xv)r_&WI#`ur!Ch{%Q;o&k zaLsIeNxm|RKmur7@T8aJVT0PfMFv8JL1714**3Z@Ka~W;s?LzGxVKbUDQ0jSe&_OC zA=&o0&mUqKT}vP2O}IhHAwviLLC_~3MqrL9?13U2iLT&xygp4{CkTk)| zP(sh%1e23!%-EO10pGv@hpra)Y1z|1dhbi7Dx=$%m#H`?Jlsuwe)SOF2vaDOrXOrU zP-K`ZrXKSp&&M-Jc6}qjvd4g9@j5B`x3_ej|IKZzZ)$5JbRY|VAt{REc{4i8_K900 z&r)@k-d@b7#_f3(QJZ`d67CUclu7SWC*I*wMGxPP6b3WW@H>UL)C=P?+}V9_Z27`` zG5BJi0b{rbde}FUZn{_@;EYRc-0n^JzhsvGDNgILK0Po*j!y(~rt1gFSMS#qDj>(j zOC84EL+u{=b%{4|2iyU~P&8^-s%jvM|R6v;};7G%z!`<0EbY zbmH4|(e2Qx#Y#T8RwXtcuzqu)i=wu0p>hxkiuT$|IM5`A~Eq2**-KC;gHC8q?zd&+b z^u*5&X3vJwqZ`stG_=;-E1wpUo_3NMpJX+~e9OhFAK792H2HoMQBI2tR=s*7xH!{i zFLh-pV#y!%&nL)L0j^Azd*miQ(Q}`>ks_v9s^r9sDl+cA$4_Zb31az9v)m_uSVP^! z+nJPb1JM!O&vXc>QWXCt+6dbB7e@aZYn@@7d85d~f~e;Nxd-e_?^%uHN7UWvZYp#N zZAC|2Ez0EL&oMolcM8W(wHz!cK~`LZx=ikYlk5xw5R=l{xA&GIK0W#2dqTgO$&F=+TN0T$ z_0N|CKKA*5QvxMlC=W~G9>RFP>1x25$Qi-BQ!ui02a{6#yFI_D7NbZLw+_@_$@a7H zJCkGO4M__Db`PDF93NQm>s2t06BIK4G1U@^5v5+R60o?Tnm#|)p=-hMJHT7b4@SoZ Scx;#{KGQC9x+c>e=7&|@TVdG-s1l`VnBtS?Ah)9SCNJxlC$jC@2Xphm*P*KtFv9K{76X6pR z6X6pQl2Xu9k&@Ap6B0gQc|!Y?f$13&2^A{`D~NcxY&NjHHC5 zjQ_81w?9ERC~$O-;Njt@L630Y;Bnw?+d))-?TCOXcf$O=!99Wp>_tXFMMDQJsC*21 z1P2fQ2mu}u5di_X+8cNtgn)yHOU)^cgs1clnZ_QU%P%?uh4w{R3xV>`0UfuY!v|C} zLLy=kQu?P1j7-mXc=`AR1cfACzLJ!ZmXTF?tE#51p{Zr`-q^&{%-q7!$=Su#&E4ap ze?VYR@TZWN*tqzF#Lr2|-!ikZb8_?YznA~0sI024sjX{mYwzgn>hAe9JTf{qJ~25p zy|lcty0*UYXLAdBcyxSndUk$sdFK}#2>!vX|9bYn{K5hJdW3)gkAQsV7u+LP;0}+2 zfJn`Wge$Iu{LUVahRY8H|3!30SqmyHxAFmjp~DawAsx>WJ@n4Cd(Zy=bL_+aC(r)t z*#G!74Z?tj1A+&S0|JB2?4wK5>cd8VP0dtOSO(9|qXx_!l69(CXh0^sU$w0) zqzzPqpm_b3>dU%uiLsjjwB~Bm%okkdCEf^qz69@Ik*M^vLBpuD29g{l7t&4)3wM4~ zsLPEOR~qZeV}7>uG^tEx<JTeA)@tGb8?9{~UB8Y9U2J`8mheoWu$~ zQcDMGUg4$43|Cpe`~x0p{+jHuHYL^+qj7ixhbipOqIA6n%>{zO#9mouI?kBk{5L zsd_59{9uV!Ip7-!xc)hpyU3ANa&GY2kQdc*+c(SP7jqQv_E?M}E~nKrh%t9bZ3OzY zefi&~U?h`!Z)-nSlrU7pm2zGAR6^7~PBrOh_7q=+*G<)D@cClr`)*qYFzFIII~%JP z(bDmOSbeUBKvfK;@{}_%YnFQts9U0RVPwrd23aD6rl<~S;FY|dXC%Jc^v26^7L%|) zLox^j-ef;x@@O3&&%FIOyE2jOs5U+R^}EG5uFiSP^n&)VQ&z~pEDCLozXkKi) z3+MTOR!!AJ#h(SGgG)NcuDq8a6O5ck90mlPd;CUCLZpKFw%gBZ{Z@AM6&nsH`m+1W z(Bu)bE9|9=@;mG?k83eH(#ewf)aDWpYzF9#i!Ixf{m*&xv}P>S2rskhD%AO)RT&su zzV(s^=pSlm^SfRjuUE*;&E&H?j_gunrm`BzMYA_`q1085r&rem;8PqjCs2PV zB?*i0KKj^xzM%c#YRSJ!h#@#&BDO$Bq?dQ=70Ur`I~6-~qs)^fb;^$+!5wqDm_MS= z$+@8tlE;)Tin)95OTNc>H8pG`uXlP`4vt5*G909SOqL{38Lq{Q8hy=QB=$y9^gJD@ z82$a_uoHVVO%x6{W*R@m_l94c7)Z|)K@p>Y?gO711eaM~IZbZVm{wI{Qf?Fe9>x`L zJwicrAYzUkJ<<(~w*5}u{=?!(JAt#%lAz4cKWq(V0y$gtR?eQ=Ui#Gpr_K!k5S%$mvEr250|{A6tjW-_mN^MP~E7Is9Vqv z=CdFeM(!=BCjvqh)8Ho2u@I38KChF$_L;h9pk5w19=TsZL>Pv93!;XYsPAK6lPKPT zVv(RnG2rEBs4LY8Hr2H*KMb#nHVxIS{@|Yjp1^+p*CgbwLXC}9F}ALok9Skb&WqC7 zFHsS0z*<&rL7~|LSb!kS-H@sHtF~JZlFBV;wNq-P^G$sN{qpQBXi@|Mby|lW;T)bz zb)=oM151jzxdL8`-z4cbfDeqpu-C|u5j$xp=M}f0*@vqESu-R$+F(m}D`ft4`X4@! zHi=ppxJh+1-_OT$ep2cPSah;|3J1hvcq0hXs=rG04}-dMp{2Ef(#0ZV%SrE|W$VOJ z3JbB{h+BC1@T0E<90Y|v7xyj5%_F`AHEkZXT{Hs{|6?^e2vu~Ln_Ndae81DlEogZQ zZ>0+tHx&=6ce;V}6L8N_qIrq^5PRp>&C)ICBhxMD&}gKqUt{keEfgJYPy-vrmaR|4 z#|h*@WN7n&9uOwMrGoK;nbQP{&)49y}mbMuXRtpBOIGb|n{>BJm;k|BNNh`N>Z~U;qU3 zPH6r}83q^=HldG@8{pQT2i@5J;f7%v<=4+*kD)fAkRNxkmxhTNN?j{cvI0iCZQO#W zGL!$$gbZmC6#>FPy}V$+b5|cD+Fd2h;Dg}vYU2Gnvm*X?_#MtKTA@qqgewmjl|?BA zZo3QTEhz0So+JNfJbTExc2uYig5B!VbOA@4sjeCNQoU%G=f8sQ?UedIJvTi6@^*xjH2q!>9!NEr{~_;OtfEb<&!^2o7LS^=^k|5_N$WjM(;6nuwppE!s--1>~y&d!iZb324 zu$SQf47@9*UKf`p(jO7a!eF@bag<_}-Xt2lym(06Px*bwW&;$vvHa9S=0g$#9YI}2$cngYD zI_ZIcVX{CTK8AG_+zdRl3Zg5jmai~!w`$mp+%2dpzj?9=o8IMG5Naa~Ti1t)N=?vT z14EbrDgcPUOa`d4cyq@&8-3{^P-5o1re@v)ZBuKxo$zwEwNg5 zAbooDZ$UIvlP8eczhz_69Av{og*n&Q9}d(-#~X!TZ@R5QODTOTf~W$V3RX@*@JrZ4 zm_kU?xULL@t(Q+MblvQ`dnkN-8Sxt!#RoW1^ zLb+RYJ?O~iu36uL{-;|LT)X|Q(MNO3qq>9wty616#3b=DJ3FintKRU8rH6bX;hVr2 zf@!BKrCm@ZYDYc8x!iSdzHgBNo5Nc9u8{T3FZt#eAt&c)?rO315G-!oE%14fQ(Kpi z_Xcs-bwyQSxY2TC&~d?fP%&JokBRD3UH0Rad4;4#PxK zjR&5^{&FyL@!V=21Qc(W z33ca>Pp>j38lMl2(>BtiR3Xb6(5|>(^Zdl7bIRgW*>mj4qFao89$+Z(-ic>@sm@*+ z0c6ufOuD*G`KrF;Zc)1D{H+|I<_Aihm zlLY7d{KAystLcvV;6d#4;Ji z98cp{vyrCg0dnz?m?@!q5_y_eZ{=bnnycCQBF}T3t>PD$AYTEA?&*ynJsM}7WGU;(J-6j)wFCE)p7~$HmSll z*5iE)T?;$nHg~A>^8tI`+-ygWp!PX!Mc-b?;>@<0`1Jb(HPxOo&gGi#hNcRNvqKQw z$im)pSLEuIX6h+LC%L5D4 zVH6VPE;zplZa;D)mY9}kpE$u_3dy&m>n%quhrF5N8%QdK>s?PJ z*stN-db4?Tr7D3;w%2q=S+WB; zY&If^m2Yc$qUpTTo8BVQK3OEBJifr2`qXp6bA2OIp=sjDNIj~mea31Z*UfrmlOBHuFdmMwAR-UB3j!-WwbPmI|yBXPC14zO|OymVW zctuPzJNZ#Jfs?$EW->o)B5t{x#< zRSBuGTd3wlu}=LeZVKt`4WOxhnVv2K3+As7_1aOM*c>e_?*z-KUE`zT5N>zRE^$1F ztEhAn+5L6e^5c)sO%!}VRhHP-CdAw`6fxVtrHX6oed78E#Io3rg& zt%uXt$g#YIqHVOeG|A=w2cNNWaOo$jY10+t%(z^WI=(!~GAvy!Z}%RfmQ1(ohv-jY zin{geer1{6+>;Bhh)Xvud<$728KxpqMY$sO5lxH44r?nX(%Q~~r60E-Mc_SQ){hYp z+hwYADW2@l)N@RnS%q0$WGib&oZZT9-QU|4qXj9|v;!{ZY4F*h;7yOl#H6)k_TYtA zV_#Ha#@qYY(i(#s8L9>|Q>qkscN6%Zp2=6&AEv_dSgZ>QyzlPEZnR%| zrUxxM7Lot(c9s)Oy(!JLxXyWJuF||*Aq?f3xo;JGkaYb#Mo{vG?4`h@R4>cM#01sI zd_~bdFV;Q`b$#^~RChXAa&bmvtLa&A)ZBe+(g~vF{pGeVH&!W({{CQh)MX-SmZiz4 zR)-CRR#-dLoB10i69a1`NzQoStJ8RJ5RWvkQ+<7;Qs7G>j>h9eP8}q>Y#*QNgXiQE zua?;_P~A)oHg@+Uy?uJ@)fV_0w`A1@$F|RcME?}ZV}UzkxB2F2hSv_p3i(|ZjOu>L z+C92Rm=cw$_Q=TIY+`_lW!T%Uc=L_3(ntq&7jng5EM-o&e;lBLhP0OFGcnTdom?xj zZ$9<(mzpdRk@+4@@2U8gotKC?lAA z?#XwN#SOa4%fY$Ub|S*4Svgy}p?ynNc9Nb8jSt+B8N6ECugYp8j1w3roxYj4t+~w# zz_~IrAu1pV&;&fKLdVtKRC5`y7<%>5mh2S{i;SujuAs<<+3L|7Z8ym4D$KQ+X0{k? zE>rJ%g*Eirh%w}EVeFM+E||13u@2?YQIeR(vu+T@nvh|>5VP?qk(w|f+!w!6yt1SH zn13$D2;?hU8dRQ9Sbx)$@TOR%n;A6Z;pZaGT(RvXu@3Db0Xd6RTFj4=X=pLON2Of% zdY`J1z>wx(=3r}|70t&{YY2X3l|+ZPuMEe8#2perXUtI22+t5^?A9-oZ1)O;=PR1; z+Y?8KTqB~=a{UL6*g;XS%fcddZ9`O?U3{m+O04ZMh0jlL3OF^o6!77G9us`~r2#*TYk&B=d-Q%*6&yb4!T4c80~qk4%x=z$i~^|G|=u;FtS zJ6=U7-4Bss%|vsS-*TK?RGcD4!=a^R_+sQEMa8@H0X9KV8HU00uZNx@!5#MQ3^Z}8 zXAbX-*->}0VNT40w^94|nsa4c(H}3ERS~&Vzv)G{s*RIpicpuF2f=-0LX@5sL~zPf z7--Vx$4!P^*CY9QSLfpu3dS0|at;R>QTO~$DBs$3pT47h~J$KK*c<gmDO=h&&=f$L;9V+J8)+R|dG&Xw?aQHs#S@2wa%?=V=al|rDDsqUE z4DGwh=s*crY|XeFNUE%__-54XEjxLWRiz*$Jj|pWDN0-zD(~Dqd!r+|GN`vQ<{t&XlvW+1?_xkbk*;sbTRJQ77lE& zTTfdTsj6nHr)^NTG;25ha6IGx-jKNNEODm!K20lDZjHe8yoW+i0CObuS=IqvSueV9 zUbJj1S^T@S7lKGtTkc5sVg&v=+P$9nTgk~Y9B%LG<27-DB&pvL(w14loGtb3coi|= zI(d=77fkkAjz?V9?=8483|&c?Y5KK0h*Y%Pa;0O2_1P55bn|ICwHqS2X2PSRq(-4L zHQA)&nbl9vkVjxR1q(2?Z-uKxrsw<@q$(W-`D|Lp8%(aD<+q>_hwFYzsX#I?fxg9Q zU7LK~+#^c9gPR$I9)w-Eav`j&i8s^ZS<+zZ4OqvQeHdHqW>1F}088i%v(;H!b5WHF z3T)Lb0s2RcRh@s~8`{zZY~TG&uI@I;whij`Cg0h4KR;1+XtE8m#bcOZ*YcD(1L%Qf z?!@81#Ss8W9^HcWUWGz%wuq$5JM!qtN?Xg_EKcJ5x`;j8CU`lTp};6UB%vfUWZkiZx8$OuK@}A>%5V@;Eg{0=37uL z+ypO;`VD{XjU3U!wJz06U6R$81=|b4yTPJaz*4J#CLC_pKVV*Cx1gWRS5cWdqb=Y~ zVE12Zc;{43xZ_(2TSXWiKQNwh*c(7Lnvl;dKAN{6F^gN!qW(>{MA4SE{po!33CjWi z>e6OBQo$=nz>0Sx*v-Wrs0+s>?0(42E$F73Ol$Nr_A&69b$maB!cw{W79`&<>ctJr z-!ZhyumA}D?&RJoz=*3TOiN{krw0IGGwi!lMz(G~hx^{|`-cxg1>GyG{-E%4;EMF+ zGpe)u1#)#pe=P#bt(D!)KXMwoe+RFQ5Fd29MhBe5gw2ehtRI0W=SiFHSd2nt{w-)= zAEx~;zr7(WfcU&Vw;l~N)q_>Q zf_pE3D`ZiLnlG&M0i8yQE&Ly|D^i`X>N^7DY52jYvVX3?Y?&PW2J^2CR5Kn)X!0B2 z(|eB|vP%Er!D*Gd=_RyvMuYD2_AdS7og3xS@2oKa1Pjf0dzVUo6}q?OtF6j(=57jQ zGxYUc)c9)i9x>=+B!H>r{T*Ptox&MAt_r-HY%8XsWQj8MeRO?BGUKa#0X>^@bS zAwZ@gj#oZ$VCPJ`Ot?!naMcM1_NDnPsP(>9avx%xcoDgMVS0U002p~j4X&zW&As7? z%nh^!Mkwy~sXQU;{|X39auhTlS*?E}H{e+vqdI0EVPXfY!Z`6IvWZV8>5mI%&^&Nfey?;I%HZ$6~ zvYU2cbtl=sL!f@A>T~Bt#f*lPhtBc!rZ)e;X9g(F`y^HTn-JI~YiUR8B|wJH2I#uJ zoyDGk98TTaD_NcYKGySp7c-UqeKFrBDN5a54wu->1S~rgXic$Kj>?nB!0>x_|0_?6 z(OswcTL&+0K{gf|KzD{9*#l4>*E1z?X45lPj)YX!z4U2OJBPT!{>fIPLB)|Sc??A$<# zjRB$)y|%V|Gi&bwJT|<4{Ll?PJ*aSB7%Ez$A8~Ct6m8EX_aWzXg|>Tp*K$i^H8n>@ zS4L6bavN3-pI)$VmLaxEmwxxyNJ>iK0!+3il^agra5!5@W@lz(*Hjs6u!V^?Q*;{dsMIE#qrBBe_1B=0(-j z+BQ{X`B2Nwx{jQZTsLqFI@x*J+l#QG4^`2QiDE$?9K?UBw9u(1yQQ@*U|thB6hO(e z#;&E7-SOod@s&A6RxdvwgWE4e$U&C#;lm@2(6e>TK@nDC`<&ioTR%P8=8)6&^$nSN z$4|)fIPtXSWt|SFdnivEbC>kPcdy--q)+IAwdXsiKO6$DAiYe_NjlwI`lZ%JN$HCV zaVDzXQuTk<_~3vfbflT!uM!gn69%>v7>@S!6y|o^lca{E4g^x;p9SW&XO7d&lsQvY zs%1^76UkSViFe)`tQ0X4BPYM0gDiJ2yh~e?M|mNPL)Nfm!)^?6WAnVD@5ytWtMg|)$!E~f@-)4T1!R_dHfn{I1uy@aSKGW{4 zl;DGQ>jOR46R9}*9gxg@eVg~7BlD?(*Jct(KLMWT<{4qMx4d#EXLX49rkc$zo1AYBk#aG}Y+d#|$f!lAUx`GmkgPyT2qfcDWRy=wD$svZ{GctLb}+gXFUHWW2N699b}JhS~O6s-!7um$Rcx z<3M~um*ch$gMv@;-^GTsPn7dwW5ln(p0Wdb`fB`@8g8?1tE-MD-?B`JpiEgW_OY>e zJePsb0*b3@Z@5)?{y6QEX#Yv>&o?{c=)kFV%S0$tc_eli;gZ&EpURwCnazu8Z996Y zQ`R4dy8NeJfjiE2CK+uZKK6*G;aygXu|r*Bf%%XHmKsmp=-MOZmr6gw!Ht_;Mefxh ztZdn1EVk(r$GbL)yy&8JUF3N)fnutwCC!J$R4-#EChA$ zrK;oS0%#2>cqy)f=L$p9UY6%cMh4>L=I?3@IQ^J3Hct+mjd5DCuRid5L`|@7$YRMCvph5J)o@6BG)|+`;YnDqJSi(~@ZOA;G(0DJQ!OVTA05N^ zt(I#KV+FBA6>Sm2z=r%lo)Aavs&i;sU(Uqp>w4Jl=4}piHj%QCg4LDH`LB6yflIq5 z2y*W*3pyML8h`bBwXw*~G|4wJUMP^+i#Xx$@N}~pkJ*aIWOqU($2l~m?B0`xmDLjx zvkZNI*Dp?{S=R4yyvv!OznCBvJ?)`Dm01eFzb8_VXCz@JWtp9c0F zyQRHNSSt$SoX10>V*ZWsp7UchIaTbFQ=YR&+U!JMX6|4q4r*Nh{SjL>=gXP+$VBu2 z8X2V7_zSm<)aM0R+d`wIbz9Netqap8Q@yaP4cXokHd>J&p%dYChpZJ+{^~-28);RjiM7=QI`-K&3nL0*{`;*7q_~ zMgNq38VI&osiYYm*>$`~suL22#44^SX^vwGaRvNhLZyj*L`8(%5UZTzYBj+9z) z3kE-sQjsvqt{Ft{@pW!_To!EIZrOz!`?Ct5pm>Qy&*2Ox~8)4m|AU_D*`+jaN%nj$GSj;Ic=K>mc*7PAY7E z7MxTfd1j}5QA#r_;iT=H@ zz;`KTEn5Z?mP_+*PP=!`4=^;ZTsLlIW>2OWl^I|7c4-ym(FOJ|8N{=$9rpL=I^@}p zMvA{tT5rOFCgd-(`Yb5K$T6x7k@x?RxpGG+{!@-bR9oDpgIKAEnU8>z*9`0c6%q+5 zr5P3DU1+!*)J?_D(U{>Su-|+TE+H~MJ%Xd-+N|#Wd8R^N%G15G>xH>kUuKA&U8pRd zxV683iKdFHmOu8?WpVp$K2<(@phM(^PqW`qU}eFArTTzt{%nsux2sWW=o|2qX=r-zZZ`MJ-Y!*^Y#gwYX$1<%Y8I+`N#9 zQJ-@dKf)*TlZgE4V~G8l+_`1rk6KUKrwhUc8K|)A0egUzH9IdO?*cyhdw=bz>dzzn z_?Uekd_xM&s^16i0a1$~+Z4Diok0$<%vjk% zmlUI9gbo%}j}4xrZuq0j^uV5(TrKgBF+ve>8fLG(QMbjz25AkFe#ZZ>?+($1U4xrI{g!1asWM%|Upc5^VE2>k*x)F0pF@CHm3wEQ6G2Qegt| zkpTGg<075Ku*+dM&VlS_;kna^N>RLp+`8iSG_fqteudXS>q%B}ZJPD9%A&HEM6br4 za4sDbN0Y~Pv+DW>5ADXdQy8g?8L1i4A`d+}ru>jwF}TChkVYfO|FVy!mt}w@Aju`B zzx@ZfeGfn|KS*0QaOP;~%=A6dSqCB5SFZMNMrB2kx%+~MxuV{NXGTfMx};^8pQ@dfiKFjUM(2FW z`ZvIILJHn*5Y3ru!B>%ZqOs~OCijW9$7OaYq?9G=L?vFtzC%k$HR0IVA4wB7oX!c7 zskZUBw2z3>d9`j7`*S_AP9WXv6?Guzw!F(sDp(5%!DiJt%jiQb36F1)ZPru^Ysb$} zuQO0#jO;Eg0r)36?h8mc2l6}B3Tt%5VfyHu1c#k(9HzAi4k6$GuTJZN9S$LtnnFuc z^PeJD5phEwiIusq^@Ikwd#^PQ#y#h>+$+A6Je}S{^v$d$oQx-9+VyqYv7gCJ|Kp+B z6mC#8o*v_4PVbnQbXA|aIzCd+M}Q~L+Q07iuEAq*I4y3E!V*v1uVo;gCv09ra8o9@ z7fP5@XA^Gkn3nQ%@@De*dn$SvY+!Kt2zh@)%qi=n=MR`gm6e7q=bS9UbIh}brY=I- z#z=-b8coECi+e$^rlHh%{bv%!ZrM$3tn*Syw%0fhATV!ZtP+*h zY_$O+j6=17+w%i>zwTGzbh+Yz?ICZrZ^!t}8c7Sg;45&aJ;X1`mLNr4JR?XxV$H`+ zrBz+Ls~IzS%v%4=3X$*PEokruu;c6)=S*a8%e|@V|9&nqfjd&9hilmYJSmhFq&Z5; zm9r}w{Q*0WJ(w1DRl)*QY->iEnKW0K=n0Z&^3%B7<+8pGFee?+245#g3HLw; zJmQ)U7$Jvkt}SBN2WNqF5x1bWgP&)@cGZzfGZ!<1@vPKno?bP@^P-k2REHOS{~=!z z1$-xv3zoq0Fo)@E_G>h%>rw!wRT=GO0*5W{cx6i6d~Suw)g1-BV+4s6iID3A30QX* zWZ;+nIX?Kppoh0ey7U(G`ae`77eGNjf&D)5EvW1t=<3No$8?NWaz+TDM17P)^dur}^2 z1|Injxd|`YGVZ!G{TF;gK9v-P`6vUBG6S$28PigQg8eW0*eocrco$&{0b@LH8CL+f zzGsLtYTj6TkjT?AIcL_p8hplbN8Un=nC=W~#+eeC~}3-Z>s$_AWnSl}(qJ0kbzGzOp@G5?B#Fo1}_hnK)dq4&&=OlP#L zV;?|>^T5G2r^c+3W|(Z(O*D{vX%G3>qOLm{h&)5|pG#sawScH4{ys{(AiNXH=K%nt zU(r(Bg1}6W#Ww&{^)D#iawBPif6y!GraFJW`@bACch~ri;6(jL-@AJ`)oGB{W3ZmNli|cMdyK^dn{C9P77uFzU-8+>1Kb`={YwaVE_82_g=>lNbUEX3A zS$OXY0%h?(bWo1EF!LX-e~>EL@)nzlfc(*H0$+*ZS_&oUpI>i)0j_<|QSWml=wE)^ zf*t_*Er|8bj&DNaS;W>2`x7vnFY^%SrD#_D9hAr3`Dd=+hTE!apYEkS5cU=z+do~| zGQhI$3jS}ZeEe5PKF(;5{&Ku4(fdylUPo$=s@k6pg7@yt{EP7)DhhZnd0$ZovAUy? z*Uj*ESPc+)YO_sy^mF9#P}c*MrsC`M(SO2MSA-dDMn$$OEF?T$s^H z)UWzmIg#e~?g#wKeE<%=i@ekzziX}Dci6nAXzL};=}!n?8r793rXxw3UJl$W0FbMf|Uhaxz}Y+6=vh{7wBJjnQfh zJsT9}y%Yv{8eh&pvh+kuu}-@SLp;M`xP0OXwk5+X#l_;cFFKi7xO9qT=68D8!rbWvWVhsh^!l*6ji^EPQ{+PBNPl2|E69V~DbYTa01u6Omhj1j5kkRL>)eEMT-ymJs@y5E9~4 z2XArsl_eJM{vNBgX~S{m^)e`D$W2<|9v zafFEquV>K8=137H%B<*{)I$aiJ#EvQx9J!s8^}*0i-kVEtkn82xE*|9=XRF8tNAU; zA0k$+H`aG*kC(^d)DX1WT{5ZSco5^=s5P|fyiFgP?n}8LTR1rs7%1OG! zC6+klv5~JhLt4KtP9$^Wnrs&XInKOahM(jz_6yEFQEwr?;TYgMZuE7-E3_d7-4}1W zw>*^2yz?a6ZZ62%6Dzz>U>Z8#XIG}=5*vCAZ5;pY&MPscA7lUQr!Wv ztYKbH_oXt><=g)F#DzGducUaW;E^kUfHNZDw5h0|5ClH%Bg$Kll7gP%YbsgLt3}H7 z#BUq4Jea8UsS96e8N0>eFqFEEzHy&5Rn+;d`|v|yxu({RY<{`m$=$U>-&` zaz&4piI2h$g`dTqFsY@dDeENvajFv?nKv)hk+HF!R;uqcO7U>ndp4b5D)>`hHn5WM zO?vI-j-p5VgfD4VU@3@d`VJK)-l0NMr;q1BYp zYDsY-^5#7=@Wd|so2p) zl+^+bX_l|PD~Rn>Hd|whp4+8apWi@n_YQ7B+2Z(*U!aiSLbvRHf$=0(-WgpL|E{)WT z^lnOfw2M}Jb!H6%Jy8LBk8zG)2@8ua@u+^web3EVMsuk+s#~_to1^Fw8 zwe88?CtGgXY7MovY+L;G2JlHQjWtX0qqvX+7QLA!+1{H0#|XbDj-u)7>9<*u8_Mjl z4o@$WOony7?W`r!c>LPvP{*!?(vg|&atoZq2VbeA>rZ$|B7BxH?vCeLjjp|!p zo62NxX9`1D`B)R9I7eYtTCCnMu~)>~_+prXUuiT>r(2edYq(@rUFt2ngk`5lxde?*jQ5hk=^`gj+j5+vKdsD;Kh$gkbpWZF}j z8uE?c(HxAN$BbzCyCtkU5)8$OKTbu($BE&8_A|gosgn-kvCADZMe8S*N8J|1)tpUh z?~APRg5+Exv^kvGx05YHKyQoQGqe zFZB$JsKY2~7O#_#%f6TDc$b9IH#Ce`XOulguQB@ayDqK+FG208fDRLGH(!kU+De*^ z__uA+-({s^->N?~SM-&Cu}tF*?^+Yi(2uhN$Y%PGLCp=n?%4P(=#9Mc@JNrmq_A`t z|LZk=gvCfEH@F`uv9S?9hjlEcD=s7Ac@?W_`2#7S<`clK!c=zCLf&D3?d$ z`!dgtVA?<*GsEi}Xk~ zY7@qaa#QJ3853sXbbpoM|NasLbq`9FjcAj2dF7l_WNYjGUB`mS*=z#2KY|{Is~qEL zyMEk0*ptC;Kr4edjT}V`Ig#pU9=vXm7P+@yBtjRf@u^#5Tm|N;WX`$vX!wd)>%j4GNVu@F|Ytz>SBF+R2j)G1bX_fPI?GbH8#-CRYsK zb1qPPyvgO}FpOTmP^SARmK?LmxJprJK;dSart39SDtOeeu*a((y5=hFtd)7R zI;G;ibW|}%lX(LO<7r`))#u@hUsTVnm+R%wFW3mx=j;sPI^htp#GEfmJq%Wgu|*q` z{TSUgtRqfOj-lds|(?AOb&}b568Gb^|ZjICd?G z0!3;RY^+DL8v?kel+h6Ya!A_ zuaO%A`%pN_YZc-;$yoEOPPI{mj)C7tvoa$7E@Z1FRv0N5i|;Q-OowdU#{ig<87uA8$X+&XpH+@Nb2l4FTwJ$7E^-t~_ke=8 zyjtDCc#{41;&0G_)A)E3v})x-$>$uz?PTw)T$z*Eo@xU8?22sW=F1t^bJirU&UFqM z_>uxjk8!@x^jYy`^-+e(%8F`5{$J9z#x+MI-M!XMs-b={`B8GXiViwh(bn%m+;hS? z>D!p1R=>7`kpD3AxY^2aPpAE;A^e_C%5wOOK<}+k;Pkmj_|L^d&gW<%qS;-dGdC&C z)6p@nV$_|`x>)iGrJpO(F_MUk9E+lLNm_nl3FwLOZZewHm9y)s_T`uU4ScZ&jg7}F zM)VNN+-ranOOgo#e>eKYA?N7W+u@y+QN8O{J?J^^uU+a_0>5&WU6`i1h(OUX+^=8f z=l&t}4p^Dh>SAI zouaMS#Gfl;)-IzgRme1=c|{FGzKRtG7mpms^I6MO+Z4h}Dq2237fPC1K>7pcu~;xs z`Z4|$CRS^|fLC7D0!9%{Lu^Cw@7{_87y8dDk)KmJHx-u4FvO@vtc#0QLxh`;ozd}4 z4ow0$II!dNO}wGWb;-ubD^>!JAQd+&u!@wu?fsE#B6OU2;6y3MY#R@2)s_-Zpr9_9 z8+sr{7FTqI1Ingk(l_%{4((UA=*!dU$+Rp3w8&P0hQDPDUHO$ghU};t4%WZ85=WT5 zM~gVbW?Pm%vo-851P+uMx=Y;gSZ(>I-CP{Lk794K?b;3H>m9=`?|JNez5TY_)8)_U z2zt4jGPCxVgFI*+rj@i#Jb@-!ZV>s3`s8&1Ixbmaf*5y7-np|X$=|Bn3uYwyGMQ$C zq%Q+@5>`AJr9#AaPteVKxvQLS7(VsId(X=4vk!Ly>udN0WTD0?M1(7SA zNGa2&$Lh7^GPe?*62}oXRv(UC8F)-!n5?N@mFTmp>^xiC9PG`{)=Npzj*lz8*;9RA zUtnR^M1O8=Z=c`$^b3bHLztxMz-0`Dg8B>yy1hFx*ubzf$y1;j_(aaxoh%``zD%^w zr9W5Xts>&|m$;Iqg^5LH&ej*u;nYRzGki)%S63WxkZ32PkA~+PB=z7*xSUNQSHZRj z+B2h{g^}3Lc@!}!+oAQ+LzV3>6HNswY;pD0 z@zYOYn&y_m`U;yrvX} zBOPGFKb^0V&n!@Bt9Z^Jk5(hlIhOJCIxFTXh5q6*seZtI#XipbcGLoLV?BaU&$oUh zE^%S0q|~;2-a(rQDY;$%EzjOf(wRzGND!;=19;Wa}M{ z#RsAYQS<;HwYhRb=&VH-S);)-vAVi4zShV*OSiqy+vQ@C%D2b}4LVg)4@3P?lnB0X z247==uM5WxAZ?=jt^9JXnKPQKTVd!)7235rp5Y^pb8iNjD{;4L)-PvnK?ttkYnLE} z`Z-`cilni_NS7(b5}UJ(yn?$IOElhQdk^?811J{&f|GVfh*oYvzuJ#@`xc;A zz}tfl!f7yJS>p-mu9>1n@G7z+0Orh2RqOAK`hWWR@^~n__y2olWXlpp4aU~U+9QKB zgJF<0*;}3xGAc`CDa#0hqBO=HX+jxWrBbpap)e>*LkNWiW8e3!-_6tWd3}Gs@8|XV z^EUT6*SXgFoa?-=%gu`I5HMv4iv#Nl`Hx*dZR-}k`3*Sj3^}>O#`3>x#9cc7Zlh`- zy7Y4us{^ck#efO9qHV8tnvUnd^im91bW8a(2m}u(h*M zo&lHxCEZKgAIrfC!r~0C%FNX*u$ZuBm#^&ar>8&6tR7rm3)o!G+~(O?lQ_#GuW$*J z)C*8j5?&QxI;#^L`$~965Pt?pPrcrim5Ai_Y4yezAjZ~X<~Ja?!^4RYk4G;H!2$XI zlLG1w1rBh4RFb{i!(Qu|t>_)OxZP~_liSh&8SLZUWohzR0BAw`{>Om5%H?sZ+ixXT zpu0TedR||uEYbb*wDsu!(M3%Hn0O=byc>lbxc?no_dm<{(iH@r4Z-u_KaA)6Zz{%z zKS=RtT&Om_=~@btT-$$N;l_LwZuniM!4vz;t!ICPYtTE~zc3!QiUei*8#s0WdGE7x z*yOH;cQ}b#?ETjn{=1RTgL-E4LUwFqM`I=~UAnC0{~zzrlL6HJ^ZXm(_6s2B&y6je zwYl93KJNP4epSA~f2;6>nL6^AP5gc~$zx&4S z2&Y3`#I1K-y37BlP~^r(UFLf4zmNY?3H`tQNpJ#OL)-)?(A}ABl`DGwL6PoE&-~AaikN@c&0twQfh-TYEjjW{r1URMms#7yPgP{!#e<3=4Nt&v}*J zr*9AJM43mD%Z%&q|KmzIlO8*EEAZaJVR6|O3<;nDlw=le{M2ptEc)Z$rd1##nG=N8 zkX=*%_AlR=*HXh;!C*50?iq(KR@q}g{6fj{Z{Y5(&*jc^fq$30-)}j&>tO#|fibR2 zLCjw5Wm{#xl9TL%QDGu(lj~zvI$c-8ra8c||2_DiZ#ou^6P53&cOC1z%21%lpEt=+ zQvy%-Za$mil2A9|$i2Y|567dPjbGy6@66|4@5k0Sjq?wm4c2`9%%$^QY1o5_V0&I< z$uxD!hNyfapedttIoRQJFY9sJ-J_Gtsr#$qpw&%-+%&w+3|xQcu`MQgYtEGOL&#(G zG0&DAOzER;iA{oT%5|ehb~CbtW1ywYxp!7K@!IAcQcg|xm>zOW*L=PC8xV#gqi{96 z%nLFZ9LpiB?bx@4<=zNYs$}8$?_7ei-1BfdzF%7WI9 zi5!yWoUlRk7YbyPc%mpkoLgF2%q6Q4kRTvaRsqwj7-6h_eIHqcUBRc^g4m|6Z-mI7 zR&*+}4}g+HBmG1VtsOw6LpUQ*SuKjHqUZ>}X6bvS9Sa7~XYpa&C%lEN(+XN8lCeER zZYMLi@XSf12Br>;c5yUV3Hp^C8&G12P(Lf66#L$vW=*wjL+G3#b6crxxuJP&7mz-2 z7K=iCKIUxE8J6aZ3MUuhBF$>joA>xov`7t$Yzwu5h%fY{m5bESUsg&X`vY_z$($&2 zNp}*QBVk*K{$DFbW*8*V^CN)I%!y)8X1=x+?0~YxV7;qL50}X17@F7qhSwJ4X?oox z@$y5zV6?1KV9#kzRTG%Dji=#-ber7q7IkKY|3<4=+veX-#&x7T{pwOJWNsx8ToSZs zu#H;go~o_Tv?WKr)i{eexZueg^Le`1q;ta=4v`uAK=-z!(jH>w-?c$HO8mk)=dE*- zPd^)(8tJ`U@$`OEq7uKO)w`Eb-ln=eM|Lu%!oA|HahJQVQj)FI_B(OJ7E^t7-^_$9 zUMjq%8r6a(+XhQZKiiKGipQxL7{+69A?`+Iw{A-H{WOG23x`OJ^dnELlsm#7yW+OB=!37H1Om+OF4R>0`%gCSrusV2KL$uGi++ zYg!q!BU{XfU|aU1m_~`pF&C|lmlpDDsyggkW9{nojTe__oS{Tkq>*3sNMfI}k!2It z)bV?j(K0;CxonSD2W-!h)>wJ!we)KZ%y_rE^VeIe;P(4WOl6W1EF3HFXfX`O&y42q z#>OlIp9m8UR3T3mv#SuMf1H~V;`Tb?2M4SWCjKZp^JChlcsswwnk=qxF(b@TgySPh z&`ceGiTyEOSq)E!$fsS`=>T3fuyUl?2)du}5c@J6ddz7Fs?Zpo=aeEBhc?4Z`wJ6O zr^M+_C%aGyl`4i4iE8yHr4Aur9EC=9UcgeltAXeca~Sy>P^{}(155ea!fI>4>XpP_ z)Bqt3?+;al@F;@4B-pLuJ@^$9oM_z=@i_mqRsq3+|7^H$cK-ZlvHZ)`62&B9{1;Vz z_>vS_=NrB@uAGToq&Y;-W$CMlKj+l8DIb8Dk{$Lcx%iCfZB(~Gd8XCnhKOyqq$HIU zfRFJCvD`thr97T#kydpce5kwkwf85XPPE%2*@y1*hT|jj@rYLII&>Pv1SVeThR!li zYIP|7;Be@t@l`9JyytrjR(<$FHn8OiQ8_Qt;&&3u^ir#n63UZJW`_;eyF%erbNx}wg@p%uJfnwd(e4oEDocutIZ$?Q0$ze{(9>}z8uec zS?dj%S$H%px{t_hAeE4Y#jr_yyH_Z9^cwFQC;q7ezX8UHnEYv;{*jo3v}4CJMcw2| zyN~EDdcM6b@$;>vi={7K<&$=Vg15KUf(b-SY`uf5xrnsIA5950Y~i!SF*i5T zM%s!gn_wk}7zEL5G5m}z&&pDkx$VkX1_7a)qq47bZ#DE`=6mC}F#V*?hh>{tejwyM zgVmXgWN}n-8uXHXCB5J`m@vopWm<$4BJ4}1-FP{@gC=5JJ!^b9MIMu_NnA`2yr_Y- zN5<&ylfc`ziLQ|`Y+=z@(9{s zE73mjSwf7nGZPlsXGNs8NsHks6{RY`J)>E|pWc?l=@ zQwL`K%=Ndvu6B6U7FE;gqlqqdfrp4Izv2a|e#rGaiJyuaX=JmJCu}yA!RDS{xXHAd z?KB1>Tl;pUm%=9>wd;u%dRwkEHPK<{YWoRP=4$FsiLi;n!s~cwxlCkC>1(-XNcKLV zq#mlJMPCQ0Q^u5}vxI#mnP_nmFpKnyjH@suzX%>lXFtRy(2&cipLPk?toX78QYS?y znGedZKO2D&ABzx<{@mdMV(tTJ082c0&NTKpj_wY4vm!Iy?O;560C}y~Zb7}R3=*nw z^!r4;8=bNThJ1hQgM2kc^0o?M9H_1{UO6W5V~FW!<)=C&+Zj*K;qdV`g z(?X5-0)Fp`KES87VD`y5LbH7o=5t?WeaPao@Wz|z)a~vTplDNW)4g8NT9M}~nu_AeZRmnR~z+xqmqvSoCR03x#|B7eV z)pUmQsruBZ75qrT*Aa?RIbPZ?SUTv9HBOxbx)8P&))f*FB%}!ta1?$kievF{xX|bO zm;qKye8jWPM0P2$)Lz}rjM_c)LHunP2oG>bMR_wP%rBNL0k+{R3NIRMWDLteTUY_X zR-87$66M+Iumc#c5S$xXtr4CU9@wJGtq<^Ednt=i2gyg+<9*ppC-Ak3oR~>>Wsw%d zmb_DV(r2+~+q3DLVRIU@pNZpqT)%|BCq5&6%)a*!Z4eD_O5@cmQaNJSlmQ37nArLew#)I{-AW6W zv+hZk0Z_Fw{T}Q*cHU1`UsM7W`KLXzyK>pNq}@9X~LWfPF~8D z-aQ+dM&zB4Dege?lyILh%5xE>E38ct9hGB>n58-ZalT1Pm=-hHjzwGQZ`FDn8s%vMfd9@|1t+G zuco_lBvCs0*3;Q;+m^fC8nkk#V2W_eC*RqpeLo4G%4JEzzubZbdCE)v2NU;R}7Dh_44p zp}IIzZos+S^ioU4E$Qh1K4YFA%xwOa7_OAP#k3NXoR-=y~Vx zNGApS^!t4OD}fRXA7)Cei{j0m(QO$II_AtdG&i#{o+Jn<^KmfE5wwA=lj^!Faf2rN z9+soh{motk;>IANC9`>5g>0Tvt8LKywW6MkCLB7QAX-*$NhF|g{6u}x+u_n(;cX)s zG{N$1Md0rdyH|iD#(=!EGqrnvhW@u6Fj_DC*4YS1f8n52Q&-6}Ij( z?>>7kwvH+^>Y6W-Hi)w^# zR^2wPG%n#)k)TJO_*%Z0rBB^&zdU5?AAwsifFNM$M$9Z-GXqrYSx*^2fklFVkurLQ zD$(&P)JdlpsFM>nJQk`}7OKt@))ce^|8cMU?<#IKGjF>+*pbJlYG3qS`AIt9y&zTr zX%LpVDq`GrV+#L?%>U9o;ZDsI9bSC}QXj_s>?zPW2a6C5w2QNHv2vqdKha%WeOG3& z@1&vhC&{@w1+Sy8Za+v4uht$({QJ1OgH3*n>IDh_E0B$ESnS<6Y1Tir|A7CBw@ZE^ z7u&srUR2DR;$kW@MR>rr|r`g;rg)N;;|0$f`yq)q*(iYEEmWmm( zki2Py{$aPR-e!bolm0%|;$uDO-DJXM#TK0qV-HJ+At1B7B+X7$pK~Ut)vULt4W5*R zS*N06uGb<7o$=C-iHo_fKI!1Kt=Nu>mp39u9(!2{e7aIVv*Od)=3IVmDZtur{B)BX z=BlGRyZ_fyt-BA$N?jXt9|@yWUVu(;gP}X|5j>C?oj;>jl|t9+ESS7It*hwLig)|U zbZbSaM~SQjs#DU;=Q4^XWic%GfjA;!UTqPh4wQesK8jH2fX6ZWxCB09x=H_LEt zzzEDqC%ILfdL>7iCwbpsay(9ZWI9FF4Jg|7&y=44^HyV z6>BwYet6*r$6rco`?tQ;JSfbk=}%KV^-J}1#@Sa$zHcT_ec@=4NkiL?^9KR0>axhV z4fkT^JE87U?AC(QTvGZqUTTb`w665_!UD&=&r5l4=HjKZVP+#*?TjA#$#|$5MXNI{#@EKzL*K1YJ;CeP$9P}wz`Xn~4y!|=EOphJIwtq5VaRd8 z-@xSC9O<6wdBwc4`?Z3566zf#l2`qozbIoOH_{^>XuANxmy>iA>YxJA)2k>{4r;iF zN^ApYmy?gpa7|E>0S3#%{|WlF>e->Ck??z!alHL838}*fbxzG!y^K`d_X7gvgk(X} z=3|(KQI3OYTrFS1)J)cTAlgYL1~HTNarF^KMkZtU+N)kN>$Y|SXl({m^}D&m+r4ul z%QRI5aXg?RL+(6wN8IA^V4|4Zh8}1Gq|zPl@0Wwykv~;AWvDTHG21QgL0snjZxvia zevE?2TkjHusIc@zAv&f`O4yQvx?oeHF&K?_D!@KKlJFnNU_i4)Xy^tXdLCTIbYRPk zbnhd0*04p0Z(biWCEYm9TX&|f-W)Q2gM$$-XewcMl*ICRqAI zy_Gq%2=9eru~+?b3z$7L?&;njU9+%$3p}ecz99l=Qpv_C9k^hq`7(;au3HS^noW04 ztl0?q54ep;iz9Sfm61HKdq(;vh;Tcj!;|cm^)DEgOb)Rq9Y=^JB8n7rMzP7Ho#HG} z$TEvF3qrk~rv+qd+dv3TeUS+kts>KIq&DxqZFr+8q8dc1LdYlhLT`zhH1^gsAZ?&V zr~(v}!p=|lnGT_a9k3_c1v>Mcr_SQ?AwvT7s)q8H!SHu!Hi$W@+3~P)-DWSeM2rV$ zm@wxwm{qGN&*HlI%8m&vkEB1fTZl`|QIT+ACV;JTpQg^Un*?7T;olNXvHrm|dEvot zfVj#UIr!wtN95etgy}TrDYjSZcD4r__tKt9Xo&rN)@2_t0;d4sdyx0t?es5RWyap~ z-Y3{@L!p+o;Xhvlk@(ynR#fcC{m6w=YgOOcv*TFxWbmX-=G$)GS+p@gN}g2UA}I6f%si9SGRm$A}Q8jEp4`$}T_ z$`)sA!YSZs338E~5D_?%D#HWC%a``F)#%(N)A) zs?tsROLtGQf2ehM4bELbZ4-ohWrMEz%ICq^D+5eve&MmBEjAL!z|swql~%s4b7deM^7h1 z5KeK=XgEh0h9*$XW2@_=d3hj>Blk60ywOt=CN7?$#V!KtjFj3y7PxQr@yv3$!g!D( z$P?if4wCt~Sf0@UN7Wh;$YwcbDb zq;2{@{EzhS)eGtwM4uz8whwN!%)6mxQ#a*{wQdg`yIfo;!!RC{TeS(R9qukDYZt?MU7xjLBE)B#$d`&jB(+oODI6XphY)-~C&7U?L{QObkwV{zx~x7QbNyeZw1>>n5@a4NoZg64@>+%RcP}5fY~j>K%=J5q~3- zSFjAcw~7RBav{o!*=4xc+`UPiV6HJWdRxi!FeG6sGbnRo!{dCP6EnxYVc9VE+jKKyv3FY-8k)3^E*XHR+hg|%$0?rw3ON1a^Obh> zJ*U}JDS<;)(r4Tw!|9#W!csYHD}b)ZXRK3P?_Ji4!Q~^eUNDOn$I{V@EJl2N20ec< z|2=bs+f!uxByg51V+}r_5f5VTQBs%|OGk4Xz$gd~{01uNZx!ca*s%5~V~j_ef8)?G z1W`wi>np!vzgvZjz7m)Mn=zu)C6fmrCTw(~Ek&Lk1*p|qx(k0GR6xVoec~3K60k%2V)m#sAe|ez5T6 zrRhpqQbN6HByISP&D zPIh;oyiI*WHd^~z)Yh)&LZJq8AW%NHw8hsF%pt|M4G##MWVtP6U8KI?ICuM!lH3;> zrC3GQCQ+b!r2wITspB*^zxcX(!_WMT&Sl+bk=9}ST`sz1j!dHPMz-vuYB(#;VsX~n z`~6p+*wde`P($3x{z^(L8^g1kOsuUlcBAqQNP*z8?=YQfr^V;u9ExYlk#WfzZBfb)+ivcAM8$zv`Wl1HP)zNZ zzRp|h)wtArnhFcm%ZL(-(=~Gz;3AX#rY4M=7hE#kA&Jv1dadRJ#)DUodedeAN6}w| zhkyKltwRfX|KOx|-o7fQ&f{hu`(394%cK-nAIP7YI2oVVEsirL;*C^Q*@^8XiOmVs zG#&^n0yoCJN%gfXgbK$=%GW%%+?TLbFc=ShQKWZ!z?~AWZ60_=am|-!O`C$Lu{Z4- zIt!93^F5_R<-xU6l?n31M*~+L)BNcOi4@d<8RW{OE05)8N{FBN9vr$EU8lc>`Xcj9dnU$6bL&ZOQsnFL;dep3llAxhLjV;Aw3}CkSzQa22P( zAqFDGe=aU<)DBMh zuXdSL*MK{0UB{p2PY;N7Wi8g(mEhk+b=v#&=Nx<{Srrp6V_O<&1YmJ$6nThA)3U^N z@l%ai%^25<+pn05x%W9$wdPDojAN4L_+S8$7{hkdO8T#)DU;@uR)Z-#`-nZ*-{<@L zp#fHBl)CoKEGHNR*SE|Ih@W)%KV8&{q&1lk#{%VniK7d}xG~;p(!m%qnM%TQ;PxYm1zmg2VOyIe( zl3-4qQ*GUKJ1t0;0xUmsZB7;kyB?EAk^K5=AZs*qsF%c zmW`G$aK#%nty|Yi3hM{ojP)P2bdkYY*k>rvKtY~4sN;<@JjM%Ft|J+UWt7wvc)gqU z7ZQ5H{5aXX{I!0b_UpWmG~7 z*u|cj_g8}yAstXFjq_5NKh}WmPsfX}MPMfVOy79CiDEL+Ze93tmI}2nJlfmFXM(h1 z8-HL?-F^jOPx(kfykD#XQoKl!b!f`*p7Va8*Kd)^#NB}BVC!EFc%4?-{xPZza7Hoo zVxks9N`jyXxu45M<)!E26zn$B5bH#%gCfF>^+p_7`ROV$Vs8=*4CS0{=QqDMEawEQ zl{yh^_QsTLqgw4nZGJ=(0Yq#WU3}C{fQ$SqVBR+qp2<( zU;GQ`{kga5kDvG8V2)Whi>T;4$l`1~6lJ-$PE+4hWUBEoFnsOd?3ihV*gL;E=sxkM z-zU~aZtE(y(?jKfR|e&fYtNA~@E8ALAQ+-RO-M38410bip-&(K zZ%u>$kpSSo?eNGD9i)3~0xxL9^f{HAx+s_Ke8`#mKC(T)>(s?+csT6HmvYqO&9P>( zBoV+Ki7XXInx;ng(Gv(+*#EO<8NDpR5ZCQb?gV{8e!Rh?6$P7j zVml;%&Fg(a`Y|O9F%btY^=OZTumiSnUMb2jWs`ANd{m=k3n#83-S{f?`bw4)%&U5- zMPdAXX>+5vJh111g)y5`jBh>ygJE0A;;5R9$H1RgU%_zXDm><~F0av{+B9%F8cY~K zX?=i5*obYpP8E!_bcm`oTZ0m?Hjm=ez-4Q&$?IoRTuU zT?@*-oX`4HpMILbcl8KAs`R1f`KMfQeeJ>0H`p5t;+mowVcL*pC9;(tgNi@WX6=0d z^P_B$l_L&8u-$kvfC32OdMGw)hKljaLTRoed%SfOy^bCGfEjsIf6MBlzOm&wSMF1H zb(T;Ee}3J3s+RFqku2Z%S;8mXnXsPH#7vhVtHI*DiaAflAeex2;?drf=+9m1Jb}H# zgMOxQsT?^f`X4Y#>kRL17P1ZfzH%Twa=1)jlo5+Rk?m@YeGqXa|p0H;lRw zej0T_{94>%*}XB-m}afmY^eZK3KV^wSvOlwle+<{aqV|da zHZGH}YY5scRr9Aa_YyLUh_J(3289N9-t>mFZrDcqjTN;ue->*GLDk_nsK5R~d`(t3^! z6Hp2*~Ml|<|W13+G?K8-2k>^MDk&b5a?ts`L!9$|gPICGF)ga}*XGjUEwbkFT z*MYg*L}SUhBmX3ssuIe66@uwUVH8-(dOn?$?$_I#FTXhI*E1fTA7 zOxuE$w|XCwDAYFaHU~bs2SRd!&buB;R73g#h&n0H*FJ5wPBOP7_(7oi+gWVW;z&3< zeySmhT#9JOa!$Dlo%ES9i>u>d%%CJE^`^tAd&o>)41^}|H zwHYQ+$>$x$eXqr)&L{vz7QJ{8EVf-Bt}`M`fdHC`n&%89=}XpBke<}GBatr z_y+uRdc<-m7FoZF{az=AFuw0?GG_Q(<+cTr;_cUL7I@7(-5Hs!)S^H(n}#jscmiR2 zupmq2y2{wbEro8jq~TVSjJHA}^b4Oid?cP*lH=uP3;h6>#Vn3#*bV)$+iR-lLF|CU z<7INp$2obwr-4_*mpDKiL@AgIC_LU=nKi!`GG=%(M(u_tqTk`%k5BmyXZ!S!2^^&Y z;!VSQp)y9|1c$VI-J&BPkTd4tSrGW`pSkH=Yyx#!gaq;;%`ld|J2XyArX^=4G#^y8drbA^o zr0&9g5Z64f=DwxNO4)h!$w|@8urJO3n>erNrn2$fw{aUwyR_e@TRdhdW(tlE1=B&? zb-f$*<*;MiT3pJCoaUir{!P1gRezS1*&Xm4JE!~-{GU*Tx~p}_@qTWQ0@l&z!0`_t z#2dBy%T(BEon&{w({bawH*RLGU)h;bp5@q7CAlDUZ(4(CP^nb5ntDd&`qmF{B9Yu0 z+Bk>qobArCAMN}h`%#!8IP2k!xb6BXG;3S%g5wL_Zy-K=E=J6#3Qb*oct&@*1%#rK zzqU&5EHtLIY;^I&HxY?L-{_JHEnrrLY|9=OdLHBmY%x2%`({hkj^K|T=p&AnGBIy-1Y(A)Yy>{D2ryD|7fVD`22KU?T$3x?kIWj z>&*9{IgOX}E!AD6E9???9uBE5i3`hI6S)!gkAf6FXFJAQZpyr?%3I&DBFq1f1{?C% z>>7ja#G@UJ(?E%d(C>l+S9YYX@Q)&+m8M}vRbC$seftf}?8qEZpj-5EnYk_K=?MJ8 z&B>FyG6%WI>@ID}iW3}PYu%jRU6n>`XrPYlx0bN6T@pF}ND?&R?nRF|a^S+r}6Ne{* zpfj8-~#^RM%E#pHui69M_q8- z-Z}^B-T3RZh+{h*VEK=u%KPmaGRT#&XO25h-nQZedne}Bg&o5!cxY5ry%QA9{0Rzw zd=u^afthMlh1xdq{4=YEYu6eGeSdgn;y0kZvr;~f9e*cShtPTVgM0Qb&CkR7D?nA7 zs0Ysmf+q5>!%ghG23iPR=U!N;?rf3=$M*M~WyWoY{s#PYK?cEjbN`>Xp!wIz77u83 zyY>msKK`L~lic&aB2A=gYHu7U_N$Pp7_lWgXxWtKYn^KKv$AYii-zPy{~2S=(bU~2mWf^MI@OUoM=7(& eAwE8mclVU+CGPxTI{-&|^49chb4l3m@Bardjs{}@ diff --git a/assets/manual/chases/participant_list.webp b/assets/manual/chases/participant_list.webp new file mode 100644 index 0000000000000000000000000000000000000000..2bde05ddb8426ead45f007066f6e23e2199fc3c0 GIT binary patch literal 16600 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 literal 0 HcmV?d00001 diff --git a/assets/manual/chases/participant_list_2.jpg b/assets/manual/chases/participant_list_2.jpg deleted file mode 100644 index 20b881706d73a9573be7ed5f34ddf8bb2b962031..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29646 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Ð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 C$dify diff --git a/assets/manual/chases/participant_list_2.webp b/assets/manual/chases/participant_list_2.webp new file mode 100644 index 0000000000000000000000000000000000000000..dcb7833340a8ab709d3dee7bda7596b72a8071fb GIT binary patch literal 15436 zcmV-SJhQ`6Nk&FQJOBV!MM6+kP&gnsJOBVt&j6hPD)j;S06uLplt?5Zq9G+$3z&cn ziDPBa*98Cm+j?Z1THENzMF-HGu-6}}`B7wlfHB!Wt?o7K|L=W(ILrN?+zX@k{Qf^e zCnEB%IX&K%SL!{P_i=wS%Ws>!@_)nisp7fnL;k0&-|8RmJwpF7{|oyo?{og=)_?gQ zP=D?p-n!9!2!CmPH~)109{;@mx&6BKdH>a@_w>Ide@y#X;-8w|Li<(y^XGFAe<9$H z^S`-&kpAKOx$%E0uovTh%0I>bZ~fim3ASER+pZE5_chYJ-L#=4ac59&E<5}ixM zqCSt3bNzFkZMRtx2X&48+=yoILP$@hYAsZnz~%9tb2Wz}3q&g(akf_?BPwu|ds7hM zfN*M!-q`dWAh|aXk7hlUMe!04BIa)BP8N<%f8rdQKky>fuVP8|#D3y-? zP0(&*D(Z(IOzO${ghv-k0To}fu?JI?uo}j>0?~l7=D}1^DmqxeybSNFCr7ywPboka z?r^4reM9+=69e}vP+~km5N4NAOa<%&-;G5*o?$x|vWkjXo_v57HlG*iEwqtfbFNU0 zih}0$b^lQ>9>~q_5_6xj4NCFDJ0nz#o}4;GXy^5ADN>e8T2ZM+KmE#VqNPO%flEl7G= zo8fihu3m*Lm2NTkI5mN``68IDDUYBy^+)Sy0dF&1dkE#|cU$L|TnQZ))akFarGTpP znP8y@%AqOtoA`z=B$O!eH?P2}Y}!GFMlUH=4J!wL7gs9-#it#FA#YjFB|r8?R;Y-_ z`FS8SpV`30C;5w&kOrC}a0@fxzhW`@F^#MW=~zO?PmTm5~lBC#^}3r@Q~FS&pb=ODQ1eT-{KsEyCt_DfcAr)M$c{!TyFc4t! z^CGZ-?DJMgGE`pWX?g#msUZ~9rIpk|e5?Ay8i2pk;C~=l{>hHScj%&`W8L-Nju!-5 z0l*f(CxOGQVdJr_9y1I9Z9YH<(vjf0d(y&0Q1OZXtOUcbt`$!+uQwaz51@(!F)st} z{dtSkU;#{B!!o=_Uj`qN*GV*e1h~C|<{I@DdK7YeNad2SlT4r30FzgD!=~mdN1*FL z+#FrkHrA!d)QZH*_Ji^{ocH@^@OfJ&XwXo+y^iCpnQ@3aq;>*tpbd8Qj{eMXwNdGe zbpQzEX&5B0UZaU?&1uT6YM0w)U}O8}54`6eMhe6N^uLm_Xh<~z^6tm{l~Dupn1iZT zv(3u7ww%3f>)oaq` z8%7D^awB<}P!Kbzd}=BF9AHA741WyKzaYRjC+=%0^5TX_yZh3c(GVc==$>)&4U0ZG zoxy;wT&nMH93JEJgq|bj0FIdY0~Hm!pNP#h>>H4BK?!o39g~_ju?1_995cQxyKb2E zpk{6L{})KFv#n_)dgAZaPc;>Zr)k!k7TX3AH$k;w>09}w0^Y$+5xLU4}F5&YsiZee0{Ie#rEoe+9U!7}}n=)`}XfB*pgumtp*!T1gk^Phl+bekbUT5#F? zp%yaw9g1xX`WxxnGWsDa{$Bou0Ny?&&G^cK-?s7>tc#E{?x@PtxXBTm7}u9EIK}K0 zakvw;7{z0r=?_U1%Ipxs^;n11+tPW4PW_;HI(u4`y+=2P(kFLvBb}6vF`cDBiz;t6 zN^e+n^Ag&o08f>Z9OTR-fix*Ys&1(EAi@On0hzMzie3jMdtK&qe)5M-2alNb$Sp&` zc-;6vT}6D&1Vaq3-2F>w6|Cah1`x9=;Z4LgektTBan(VsAG$ecRS)ppX5vrl71-&X zA~;A$!_`zR3zuq`AbhvtbfhKraFz<_m5$~-1&e|mb7eKJP-*p}iN^{-c?0&nG9Fl? z)&GA9+j-Mm)`UPo;XQnP$s3F6EH+GqY8}Y3S`WBvvty%4JujvfGZC4WhloVjF;64D zxPuuUhDiz$QX(Ul7D~K-B0ozIO7#1s;_aCE!muM%~y{%_*OxPI2OsUJMK6UIAItRaxt@* zG^JUTN?8AdCEVRz)(J$b%$Yfrlj z%8+eXxfIeTqGa-7Z5Crsb}GfFp@sJ-56E$QQ(fwi3mbGh)_)Cqt!K>h?Rv>XYOyI9 ztq5e=?K?Q-p@8$ zv$~M-V7pQq^9mS8d?D&-{pe-1*{Mq(UVP@M>8l}_v6{8)aOE&u4Ds-Dl+9L{#c#{` z_PGN5F*VCPgpVZQoQ+x2^UWvDFzR)mujU;ww*sk~-9fPy8^(w@H)rm%nIx2F)wEXH zH8PA+ zg+bwOH9&uNfV#fYU1Lthv3@_<#JQ$vqokOQ109&^&5dldis!33MrhzKkr>Yie#nMQ z$ZmXAvKFR{Pzp4@dyMug=T!4=u>5!Cu`znbQI`EuJBVpltzVf83+> z?$}BTXokB&ewIjm%*XLNVrF3gJ2hFjJW_RAyB#AQfZ-X8Lg7avr6%aGtYBLoPtMaH zaQV>;IKmaZkbU4VZqlqg`#N&ont6nzxEJ)t04(w94wNE%Yu2jPtG6>`x`s;_%C!gY zyl_A55a2^N=b2b;3E>Vj?{WPnRjte%2W8ozGr>+sQK3c>x9K@~iTY-7_W6dW(PjL` z5^f-Y#Z7G8o9#c2OCiHqS`QWqS+Q(l(GB+M|J=zKG>z6j*^G}$laz?Q)T3A<>&e&v zR<61c8W!m&aA3~y{CeB7l;Jl>_{ zRaQcy*(jdBs=7-E$29drMZGebb@fN#`tOWsqdTyu{XH-lvQlec$h-D#5|_NGH1pzQ zt7K%A`zz}7x&x`590E6j@2r)@He}pZMbVWa7YdtV$0-C7$cW7J*3dW0*$f6;yhQW zB?S1vwD5|aJz@gsPGuwc<(ZU@kB|rDvqPFVPj#d<=l9dw!X@97)YBzS_9j7Y)7MH@ z+U`|p&oTx`v4CL*mkW>@R5O6HCq6b(@ zj%@?#)(Z6}KXgCSYMt0hjTwyWb1RRi{Tgx#;gY#e*eOso684#fs!r{H3zT+)au zqw+SJNhZO!fO%ei?&cTq7?ZjM^jY>uefff6cskBGSuLpW#iELNNIxw-q4a!QOh^A@uzfrAZc!8r%&?SH7Ll z`GQ!W)ZmW{eIdqeD?HamZck)$1D_VBto8x;NxNAq57BYk!anWOcW4RuOhvj+Wa-~O zdOer&_(Cqnii*TgxOXP}$p~)9wa9=Q00ZUEA!6k@c`5aO9Wdfbiau$4!LQNBoz*u~ zi1R-m5;(g1!eK)rCciO+(IeQ=TH~7?n3t3mgc{7@__iX>aT%{KSOjvdCZp)8kx;{q zLYr!O{Lt*4Wd7bkFaa3?O*~ax?+O-qp};D(LzrLxh^JuzMg)s`JV&9Nj{|eJYcLqe zOXM5ckERF4{~$viY`h)Lb*@U)K1{P$0x*A3c~=zkFAlrawvDx9H77|g5= zFgH^XWDFig5-pcG7 zKP=W|<8W^_pxSGrmjcJhz=M`+!CANut~Ctd%k^xHv`v6MDT=!ZjvbSvnTxCm5Famw zXN0lMrm?vwqOYG^R>^40fH67h-}Zs-UDvA7sL#W&&%haauU-1AB0nq)60r5C&1;*7 z>jwpxgqpI2 z#3@4Om^AU|lle9$2^7Qs0afs&Y(^^}Zo7zhj~CjsloDdnbZT(U1?1(P`Fbon8+A^79uuSnwzke`Oc@oO3n^QKu3)>AOC%xY z)<$h84Md-KGKUjcHJCmpBiM2rW7ir4Z&F{AQQRQc&+KDhtF}vPX^-72edn+aEL;R!9WU~aahibsqcv-T^bD64 z?^2;~OdG8-Ls1XjNp8g=CTz>YKMj;sjDzQ?-qGf!( zin_6tki?<+x%Mr^b7#oTvx2aLl@=@2gMZo3`r|;JYo3gO1mCypy1zhfI5i&;)n-Aw zUzLzG0=qY~2|_orX}fa-oqun237(|x&W5Eh?vUsn>3-R`afpHL2iR-I_T8*!17@| zSWVNdkAiV6V65jv&^ISzM~!?!JG*S;8M+tmpkEj=THvP|ZOkk5!=R$i&F{x?WxXTm z7t*cq?f`xl-I!s{8!UW<&vQE*V`wUg>I5GD^kA8RwcFBp4!rAi;_@85ab?m#cU>z7rmjvs%g_gaZSn2`hiV@hEgVCe0pPpP6r8Zt2{$lpmL6v z^|#RN$-F!h{a$wP95}b2f1_82<#FO3V5lk71mp*FFG!~+t#?|yheSmkXp!2A0U}3- zHv`lui?y$Z{>2siFf75dq$Ut>8IZMZBF)AWt(Bg&_|FB9NpE{?@6V9hH!Q277R#iR zw0X&!(!R56xZiR^Wub?e=4SF$PRfr1u|gaYtL?C06X$ zwH@dZZuR0}H!{zY(CP^b_poBSQ2+9~y0#;hwx=@#{9nV37&7a>3QtU%SKm^cFhuIN zk5Ks|=k9g*^0OOYb9)zy>+K>AWE$T}TKPzO#o-k^`?@wi-^ef72>7GZ|6R?K*38H* zm1~R@s&%kh_(V21c*OP**(!9%D$X};l6pcu@aZYl*ZV(Qs(tg8oP`FrVK)Rq^_i92 zTGiOR>ROK?8$b9&?P?0Hk; zFsPoyt#(9|ckVn6E`-!c-S|j&O=McUG^2U3Evy(ZMfraGX`I;q-!!Omz1x$9Yw5D3#ZQy>P{_j?8B1)}uzw`oFM)fU0cuj>|`Y)FpEzidNb{%c3 zPzdA;Exq%q{WzAvC|Ryfd|}B(C0ixe4^-i6X&IF5rqFhZI*wX(3e)YIiir*u$8c7D z3uuiugpHf!o1yhM)NS6yL9@a;jib@}WG~oIfUAKHc2x0o7PMtv8I2cyL2bzR>YRm+ zr|p|yi0>mvC$$o<^!g0@sIi8InQH@ zfUR^E`|(^mqtzY+5ud%IVDs3Ui2n8+4gDQkeRJNnSx+e5(1aNsk|$J42Hv>9&Q95s zfGWvK_~gBm1*5BsWvL)|-IaD#W^;lUWOkj3kZo@5vAVkxbOEytkDtw854_moFVki) zf1XgdgKgDKNTm^B(ledxgQuCPdSQjoMCMcQiL{{4Fb-ERr=D!&v_&CF#9#hujBmvx zINQ>j##F*)rV9XgsC&k>jR5Q?y%;@-tEVo7&N#_yg8NvxHirtujlD7sUk3DoyeE17 zsLul2D}Wph{u-_Z6>Z4gb)t#R%RGv(oZYbfeQnpn9`RLO>UnWh23d!&%w4LIBWzgi zyZ$_n&BEkg|IS?U&7nEVJrrg@YJK4$umF#O&|z0e6xC&?%V9p^zY)YF<^mJ;YaA7l zy7#*L^&iAOf@8lE`Z2r9$!KP0`s*S>s!rl{OD^UQYvPn)8Z&T|{z~csq7z&U|LM0jd0hsEFeK8dV*jcX+-;P~O24AASBw8H0o zFFvBotC~{((7@@W5z|K# zoBx8Q3R5SVmey-k^L0Fg2qUZ~gUKLw--!g5k~aXy6gQHKgBL@l zL7_?-zu0YS7UpIK-MJCKMebAPA$~^WM3Ik}T$#A1$gI8Kf9Ar}V<}(*C-PEIXP|fg} zb^(6%ppV6LM{&>EjzG;*Fe3mjtQ5=9A-x1~>A6hUGs@boS?*sj2Q}kRN^jTY27)D>PcR~P^uNbuM?>_N-m5&kcUV^Fz zT~^`Irei#&|KN-x{7bIferWe`DERX*pYtO_%*0&^Q_YUyt?d50L@tkz~ko>K?OfJ2NWvp7DDvaya52=t&9+^wNA z+aOB&c9@M7MBWQyQfV zw_WV8NLL*M5lo|=po7b53p%%B{vQ8b%Q;8J4K4Wncb!zRmm;^wOZ*8H0z9e<(=#In zoj|3#i%nb>67^A2^jE>}xU#evTDP?)6!@r7EoA>5e+0zj94Vavog6ZBr$_~?oH7DL z${cSI+!ZO9hRk*?CR3dVyCCCdgwZecOb(^ph`h=fG@Pu!swY^$;lo>7Oh)|}sGjJ+ z{1+ZU^<%NtphxjS2x&jx5>ZPo$F!L8I3J&=JM5f0@&0j9pc^4gnVZL9O41y_(o?a9 zq6x=FXP$#2W)Werf%c#YJtvlq)Dq%VYD#PzBioY2{)UH1BNV$@CB1oIDW9I!`ziBf zLaz&#_DATLePVTE436PZI5~mlql4j)%nBkU&D-9z8IRSju-BipaGCC!WtKPNB71&U zh9YQ@Z>54xfGem<)ys_3*i+GL_<(9RHlYFQw#=;u3Uuj%t0`4%j>AXXTn5pH_XA`T z2w(Z3TlzLhcSy1&Iod4M`e2TYP!e(oUP8072+|SF6vKI9;zVh!3QSY`Vej%yq?qp5 z(dJ6)$rXi$?kP6jnJT3;#St(!64JQu;b}`u;sG|@e{JPiyqe?8P3k)`Z109G%hEV~ zbt$Awlxk_`opr7mB-oPh(#Z5$OB1Tr$p!%`K>6o8puZt!(r*If_sSOZ;{9X~k0l%Q zf+8z#{-wUVd*>SDRwklS?OH`=K%*!Z704$yrr05wBVU^{h};}#lQ6}kRd#Jyb#ih!Fs^U$;VI?lJP?fq9w85@&e z=(_9jCaa*kJ(+_S$>R>XUjw)5NVLsom>7K-QB{l#&8jj8?5A5>bQ5-g99TvAh<7-| z_L2>QjrBNRmn!~-P&=_&t`TNmfS(DXDO(CFupXS?XR=Mh7~r-AB<fv`N`2Va^zK>7MMXIr99al@ZF?KG zQd_($lx<;YJgl>eW+J3Hl(znBJ}}eAUO;w+I;#aR6Q@lEd}JD*s<3{HGP(>?>-KbW zN}rDyRL-mMeG{$`6b~4jEwtizvykeqB{c5M(v=bx1OLRF_o%=xyL0EuejW%Gc^!`! z#r&xvi|jSlvv?mp0%!-Df|LH}t~dz=y9}|jKz||xOTOE2wJx8v24V_t9QcQ5S3st)A2JR+re9@Wi>M^CevOsJ2-I$0cvBWu5h=N)LK z*?Zzva2YNQj9Xc~VTF3Ab3?Mn22z_6Tpja#y^#smMAFxy(3KoZI!IDVzv~tFiC1{h;DkLn@Vz`gS+={S6}1CWze6i}i)D>H#)Hf>L)-w;qTh5SScbK246p-F$YzaEeLFR|b39 z>*bgd)#240MmJ$+Jm=2v*j^U0E#gW)qfN`Fs91zg+R*=>h6g$ko2k(sh6x7sTMzwl zwy)K^6dyaS59srv1rWXuE4J5TVhfc;0KsX$DIz@K1fC<)D z3U3xr3-JAdy%446X$oOk*YW=sQMlmy;YXpFlud^li|mW(u!zh0FKGlk>8pE&=1S0P zfoF@fbc`dEB0o8~Z?l#fw>kVl6)P3)WjGUv>OlyUo4n*GrH@?_x-vZL{HS22KL>~v1t-HxR?4^O8bBx3B4I( z-IsepggoRZ6Gs=U_k34jUOOjla9C?bx?=oqan67XJx7GB6r70bY(fonwmSxb|+a#>dHqX z>kLNt?vh^A8}^Y#;)|u)7hRv^DRbP&mJJgB(N;XX^hr4%gXRl=PErMd9sPe=92UhwmWKbTu1XV7)iZ1?H@}+U0|La1d!jGXTf3X2QP1cWv!c>C z9TGw23LZ&~Fd?dDLLdv*wmq0!m%--hNs0}UdlliQQqn=2Sa+&@ExMYTrlAV}zE7AZ zOTsbXSyaGyX9zzDkAh8{8KXAC=?9z#%{mDEHu|}2Et?fy0f7k##W9w zV4ANP#*E)Xs}&`iA4IWmF?;jWMVcQR;uG8IlS}%TG%-6Qra#oMvElL=qA#;s#LXLS zA$+tudpfFL(6^Miu&|)W|E$!KEL+;YpeTgmq8PuNTeGnL(+-%iD9_(Ub390vtQ;Eq z2DCYnfNI{(S<03%*AG`Ytys!(Md>*}{XH+zWEYwpb#3$IbI80mPQ~h%X8g`bLMDmb z=^#7@sk-kJIghLqOJcak@UL^mjyY4zK=dKy~AFBnA=@q-7y}r)eI26-UYx{A9sxAO$d1qZS1eVcF!W$>FBr+*2gyoO2h#MBEfL!m}0t(#*>ppFyvy_EnZxOAd04MSH+lqOLI&KnLb4foExCKtfc3(&a z7wva~6>IRkixLVNubJz^w-msR5gVGKUPyAe))y#FgEDty)}npI71luT;6kB@L#PEF zS8Ez>GtowRjJgu3(0?gHF=V&CYpTb)ow(vS)?lo!0>=9^meGrEN|(I%^ue$8F}AT? z(~1OY27IZNY>|T8HP5IQqR)soPpIa>OWT|xK>9uCXldTuRcS|sU1FrO)mvI3hb*_B z>IZ}8{IFapEeerk-Et&ImfNvq{s2^WcAP7N(9r_*3$rLe8L~V z^ze-&+xQ;6&P8a`|Jj>BZT`7|RHd2Fg`VL@=fkjOmxZ*@X)cHAB*yQ<<>{dRDFLz1 zBeh3Bgxq2ADrE#7G!&q-+Tf7Ot!BzL+<{*ob%VrlW_+ zhNa%-*n000-^KCe;kU5e%ZKtWC>kbGZphj9r1Zpy3|bh$oZb-9wBd;x7?;-$pV=DJ188m;slOa~oK7TtE~Abyzpr_2!>ddYpc^?F!7V=^>YO zWHq;0yv|J4(fK6Y`qtMK}C(AqsBpX9WCY+ zABgnZw&NO~MEg}9yPSC5*db&1TG9v`HMevKuwolf4^o|O02sWo=!=t3B63@#ewu#hg_#tYJDG6>(6CbRBH6Eb0BdxB=*_!GF2Coa6N8tT&oSY>epE^ z5f*rVF@cnM`*a9bH^qm@MYv?!<5&w#k#Extj{tMwWHT3DiZF{>7uWG%th&!MHQ&*2 zl2lg-CJdhxWlLM!O{<`=gPuOeQA_VmK#nmYDmkSpZlJhq{u4sSrYb8JBCUSrR2sc} zImTyVZ%BYv)iie&p($Ew>*OynZWCYETDG~G>i7OGpPiK#?;upMjU{#^Z!9iGKpCO6J)-@93|Lz-3OWd z?#8W(hK0U#WlJUf zju>foT$Wm43mn_aLSn1VMCR=|L8OZU!x-F>$A@}#R>)5xocP%)-pX*+~|AXJZ00?({HN6^ePS^@I{(U9#%*cjPR zkO`x1nJI*+^Si1DlY29c*wt*ie#M90A^TG_OiL3v-@zVQ6p!A>#U|!<5q#mvU1B)f z_G2suHQYnfAXz83er2Z2wj<<01?yRGJt+)e!s4_TjUCQ;aM9%PhUX(_^xJ`b_{aqMHz3IG?ah2> zSEi_AV3-UA3jpZ`D!{<$;z9x`)d->=dpq#A)hr5uAn;9m8!3B_utI22K9*NTu#jBp zjsMq00rB;yD|2QG6dAm6Wg8#!XUT^XPD+Dl11K}lbcgTjbacyne^jHZ>erP_7_=hk&tM z*vUE%fq=9~ZMjxs*M!2i1cJRnWN5btN;R=oAwkkRQB^)mu5ySPy1}^Bp%3o<;|x|} zfxz(^jjbGjl!zkLcqJT%5fi%_lN5j4#l)odqo}i#LNx_oXv?^ix3zvKttPV#Pxp$@zq3$&&SC@XEb7)JFb=kVd^)U7C}4a4=ne^{P8lmHBSM6B6Wd z`+6P$y9UrQ0U#KBiz-l{xHA>c8>++t$(rBXCG#DfP$>jd^ULeIF>PnmO$dqO=&2R{ zF}>QPdu`hP-+OH$|0lMlooZGrWVc+)NGmk$!73f+g!i=a^XYcIt36o#yaT4u;Iat) zLldM?F(xqK>+%;#NevRj2vA&O9ZXc!64>=LhhG$<#5_pt`*T#oVFcv3;|`sp zF|SQ???fylgY7|Q<8R1?v7MiiEQ;zg)>e}L+s!?z-yB}2x|Gf$k8j0iEXJ`H%YqHr zXHt-j9R0niwA=FTygp*A7+N*{QqJO-Ln$1XDWzlW=UWu5mqpNlqG@Y(##K7G@8(Aw zdc?yPD`dItllxE#DP~|IVvQ;_<1sWPv+vb{s zCC4NXuK;wB=l;cp--B+8hIb0E=fEnxbxT3HbwSjX;n!3~1{RM#8_&Zmp-ntXXmlQp zlUo0%wcXxXitt=4p0gv0MY`AzFxDY{Y^ky5FI`OZ_&BMCc9}2Lsp);D3={$1reo|0 zYMo%tKuE3Vjf$Np5om;h!P4~FDcc3mi811=#gIm~yNgUA3 z@^ZUwtSyOZW$0hu^c$&^onk;E8|7-|)xcQJpox1(`#JBy6Xi4m&%#Mbk2M^XTzOU6 zCpN+(lfROQ`<)!@oq1M@8|yqx_|$$r?KXd{|KyIp>rU-x@pdzXK4g1`vwEJp?E2ff z(ED|>Co5VB1lX2#3uMY&-54f&zqzWoz{s;%eYZXAXgmXA;C(m5tu*PVbFD6d75mwvOLSbp=qXg+HG^{nk9NjlSSWhiOc%o~XQfX&<;cXDl2>gM zn`<~%4*4lWozVGVEulx9DnVlZ@f?m*chZG7#Y8V#BbJg(EZ-DE)iX*?7ZknO&@}T6 z24W_bT(=XOQ(Oz?@SA)fN%IvPc(D2uA-q?$N`4jn%=2!1$D5xiO)#(=;xaXGSD*mn CeINq> literal 0 HcmV?d00001 diff --git a/assets/manual/chases/roll_card.jpg b/assets/manual/chases/roll_card.jpg deleted file mode 100644 index 4d93330db76516f73911b5868faefdf626ed39c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8444 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 diff --git a/assets/manual/chases/roll_card.webp b/assets/manual/chases/roll_card.webp new file mode 100644 index 0000000000000000000000000000000000000000..c996f9af8b0be659f641cc5c055d4a537c7f29ee GIT binary patch literal 4180 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 literal 0 HcmV?d00001 diff --git a/assets/manual/chases/setting_locations_1.jpg b/assets/manual/chases/setting_locations_1.jpg deleted file mode 100644 index e7092ebe047357fdf5d817acc4e588567113bcf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78512 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

    g%P#>L6H6l5)QDl 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 J&Y?RV`9H;&|3?4- diff --git a/assets/manual/chases/setting_locations_1.webp b/assets/manual/chases/setting_locations_1.webp new file mode 100644 index 0000000000000000000000000000000000000000..b814beb32e1b5ce9d37e54f636042c2366d9f430 GIT binary patch literal 37980 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%0ARu|A3?KPi%oF`VZ`w)0wiet5x$q(x6 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 literal 0 HcmV?d00001 diff --git a/assets/manual/chases/setting_locations_2.jpg b/assets/manual/chases/setting_locations_2.jpg deleted file mode 100644 index f42ef47ccae9247a6521c4214a6e8a5dfd5cf7b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83218 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

    xoni4^W#Hp*OZ&T{q~*zeXyF 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

    ECMEhqR z=V`$7!e)NSGtzs;9{q+x70mpr-{aL4X-^_=`~UWZS^q!#!c|(;kr7f||K`{$E232L+sZd>97 zTXhQ#J{5i#L|&R))EypeTrh!~Z(i(79adeNZ!2Fbk4#yo)Q{sC{5T^PQ>x`wWuu|z zMr&-xShq%bp^Fdh;(WH5ceb?2=d8PeZ&*DC*=jYvo}PkFZkf(vs7tG!Sr_EEdN999 zGq%um`LaPlE2(YI(!fk4UD$i?LG5{X-hiY0P*O<2qsIsu_t!mr5ypMihZGbtrju_^ z`ho+yb_JIjBKweCoR38Q_|Lt<3p~zS9_F%p>i=c(apTYY@95vI{_b{l=85y6zWtvX z*w(_&wzl*X_pA!*+T_FI*_9@Tlklrm!JtuF=irCRQn1XPQOx1t z<)-$d6jzX=c}n*jv<*Z?GSPfc9{;jZ6E2XTB2n2Cp{^s)29$aH9*(V@(Kaft50uU5 z!kFiZA2f;Esad4CvSB`hcW@!my%mT+xL5UCYj2a(|qOu-7=r`qux4?hk zLfIVGhO=S^~G`&ptiQhF>T&(HphF`;;@A-uS1R0d(OfsJH-`2Kb)NaTg z7b5$;E4UcxQ}u;O8jb={GCQr2eh6N^;&-j62f+5?t7D^^KajlLer;}@8;XC9KeMuI ziB9XjT6H1W;_FPs%w3FDllN75cXK45410g9e~T)aJ&)*|n^l(sX^gaZW2;u4|I|1s zb^Qggu-N7=gp?QDcZksZ{HDfGHu&d@A-t;>X+m|pS{;)ZQ=@rnt9I97>j2pwa;B?! zf3gBNUS9W0uf*hjzE(oG(UqSFJ~D_=MRhPdsQMR3!>u0|BkCs%UOyK1df#0OKe(qJ zvoNDtKc1iXD&Y;a)%s%|&)z;X(RIVNaYfvp@>jA!vW$XS>zYQA0UY)Ho^L@F>E2kv zg)Dx$!2}1!cWk?0sT_)9vc7us$0D8t1;D!u%8}G1LZUI(Fu-@SKInv#P9h~2YU%A6 ziEzT@zM%0E+6{aWFXaw$}gz2mbOSP|hPvr0|Sg6jBC}Od*vZlNYLvL)M0$|ZJR=GxP;dI7D&u~p zbhf>hq}HWlhVQV(5STU$wqx4E+>rCnsR3r8b${vIbzhQ{G7uD4$=|&mJ;Tvmz-}Fe z&sQlR3!L{=x3p2!$PSmCVZwa_vmy!PqE$ zmLs_tp?#eIBLxTOR_=+k!ca(JzXmz;f)&L*(sSv%=gKPC8ik4YScVqwk8h;k^l?{DGeZMEz_gJ^Ar7Oct&tS7~{`xVV*g!>Yu zAvB!>itkxf?qStEBCeG|+lAIZ2vPc>g7CK)`c?kW`#pz|bvw(S*(&Tt-t_}=EBjlP zHY4gO&61q^*P<@J+(Z*tr{dxh3HOswyF-O^{q-Gvje`AR=MkFOi0MCzYBh#yol`4p zu}I~^U|w$9stH$1=+72;?|gb4o0kguAM2&gFs@=x_aj_Jbu14)-!Tt<%VP8A^-}$- zQ;edeW?U{KCPO|t1%6WvFW1c1u*9!R5G4EYDDG(hSQ_7aA09J#{*<=r{MkU$k)`&h z_l`#oo>s8Ekg}7tx4o5kitncB-onasnS7?}qmg9r!C(s3jZfn~*m}8f{KeRxZ<&9( z!l%sLigBwjRfVnI;$9yz!k}1gF*b5<6k%JXcD3|H7naW{gPv`sb!wS*yJMfAeRo|_ zYEa*DY+MfViaEaM_oSGv8$;Qr&qQzTkiF0?Y3GbDkUGonXDU>i7?5~h*92!zd?=(2 zcK;JggMepjTq`a~`;>&s50*T*h?y@F7}ba%f=MmzTw%k9YB@2k=T^FD+CT$8s)Iw< zgG$|ga5T8u@Rze0jekamkp;)y(@JedUT(M}f2=Q-0Fmu2Ga2r7qEVm}crYiiy}%ib zpJ3(>DpvOFSficSUOM{KQPAvC^w5n8^T3rTgUfoAk~<2rGm$0bmBEk}@xA7*M~w^F zj$oc?IR>A8n(Jl?k0Q{Pg8w0=$s{@{NT}MoyeEH1{GhevgVPJ@uNZ?^vJJK~43E*o z52vYf7~b%?8bQMmS#_VlTK?10B^0vLm(%uVuu8kxqkBi%u4S!d$&=cF6VcPw0d0|) z(}Pl5swd1fLYpCwrqPGVaqjC+h3@a*r=@LQS_Bs97DSEo*inLObz@j^SuQ?9g@bH| z+3Bk$Q9jvB$1CD(=HqV67daQ(UF->ACSeecZ%$4>>rjg$wzSdngGATGB>bzw1Gse5 z25yY4yuaaNj7~V_Ym|UcKi0Q+0DKSJ50T!}M4WF!F=#^8IQ5M$YakDp262ieD6&h6 zJh#AGM_FplJVL76K~6&WqZ|5!QB^y>mh>6N9gklvV6Hze$p_~f{{?boGT#cnnJ|$Bgw9Y@pQa2 z4{$A-A7ll>STpl0W#O9NL1f;jVK8e-+ocf;Ekf!f53KQ^VMQ@c0QO=*U7QHc*aVMJ zGsS6K4o3#`VqZ`)|5h3lJ7-W~4oAX~@|(6f?*;duZ;Tt&7F<-N4BJ>R=^~JgzaGeD z)=c3$&^JWIVY#$aOAQ#n&)Ed@LK?q1Ls~#-(f4!5|IeKPIxTsY-Dr zjw#3%aZ!=O>W{`-7yLHX9c>Y)5`f9i5f|sjH^*2YQdTi);JOYKh?gH zcV&Wk=yg>DWKsZ-Jn3pp+5QWZM<=)OXEgLceDpbd=gTY#w!<8{F{6LW6*a!|cHy2} z=osMBrpuJ$BX(svg~rEL+&u&?&YDTR3b2X=EDKwJcZCeCJx-$d=z>&Gzl1U?t}Fl_l*Z5C#4+v`9by4c z0~ml8;&-Hk{TmdrHve9Gq3(G*Ue6zS`hPy`K|zj(FKIhlf(q?RGCGbTjv{f?%X_N7 zQf`;9iuqbkJc$*f*kHcLWo z?v(rarB6YX(CR~0L+G2H6+cTI^n4IYO_*0^+>rEfp`*8#e*x}>U#;3uJtsn4Zdk;y zz5+~;CcPd`cISl}1bANf%7mj}w4fY+K4L}7SU373O6eP3kD~`My5oei8ipccP@Xj>P&n?? zQVZEz=^~nA1%@$tpCLW*ncR-03UGP1;xX^_AQZPX>D1t84)H>PDJ&$9%s^cwLj5LlQzXjVb{8tt;v9HSnSbmPzI&($#Mpy zwedK|%!6~4!B&2@kfXu{G<((zBw^1ZSyRKjP%#N)(?}va-oceBmW3M7K!2(9P9hI7 zt$UM)foPm;p9c@=Ka>w9pSEckC+C_LzK~wY2k9PupOe}+F4jWeaPMd9xG#i%CDiix z_|||xB?Kt3-b}40%<&zHI)}wfUxaN>(s9o#6okKTCjZ5%mpt)cE^6gB57kFG_ifFj z*$UVMlES#EaYG^H!=iB({&|qRVs#lX5MlYVBI-kNbLPTNK-d#{!Dsm`w3!l!J<|U1 zCIbqu|3z(_Y4!RC+4vfMEPU-Xz5nbTi1p!V@Lyu%U_(Q5r2a_Gn9Txjc?|ZOQ*2DO zn)!83+SRw#Z6`oow%Xd`_F5fh?0WWu_Yvx}OK@akp>I4JYL1YX+K}h#yu3{#nN4lP z>!(KE7o%cYvIqkvqUc|e9cYgE4ND_KJ)C!5J!op#;Z$nWcBVJ4STM0|ws?D{#2tyH ziwiBomYv_T`6##%l{&hn)km7WWNm-fWJqsbhQ;|%yu9P%%U74(02rpj>-FaMW4j5- z;?ST6hg&nyH`aJZ4jDc|2|}K^P7a(^gbi(Ymtc`e_*bi7BPloYXMK>ysFjFNzDF|; zY#T@u5-FB0j!b->hREBjUqZ@uVRsK{$pu^9L2Q}Ul0gAitwCdO-%>YT7>;$*(&k1MIY@9ur8`2XY-w$FI&sAzXm7daml$`u=@{EDuY2 zhB2M4aXI5}^6m>W{6+3B7acV-W}tad+|u?W(oFW5^CikdoiaXk#?~KFd8wYRb}rWK zHCMufh_~vccQOif^K^0p=r-q7Zzi6^I^zkTYzw5F2 z!pf-0+$Ozv$>0}Fo2lOkcEZkvV{e+3Gz;pP_o}|H;lJECEW~Bpy?w<&*KU3||3&mW zo4o8WyZK54?-P-ySjJW!7||3>n8Ne%7|%^FVO~%aX|C;JmX^980}StKj0$x|`~8u_ zau}ZAed<^S+^;-6c!(NM-oA(?zwP3Qyco3oYmqt3FaLg`KP|{jR#TyIK;ygk>rgr( zf@=J$Uzv}32~puE*+f&KeLn!1vfN^3PoLv{HWeFpLWa60E&toB2RP*dsX9&BJ^c$`feF_O z*qgt4;tcSv)LRmeMz1hs(AQDsgCx?V0B)1brv{*2k_Y}Ykr22#%>KxslCbZ(7`m7M zJhUoWLux8&gS=$NKvz>cF^_B)BQroY%7+03)pr_foEj)}qGX%K1^P7?Ut$ScxkT=* zZHOOUnX&m~<5TE~O7AI0i1n<86TRiw>f(sYMaT|gqH`n9gGRr317eBj`$&rQrFfk& zLyP=&Lxdg=u09XHqhg8_)i1vzAmyTq7o5rEKLn4p;?g0c?x(2G&B2>TqlM$brNHaV z8if>ZIdG9g22GL_#K(DFBL%|xts=xjaP1>s8y=AIC_ALR^cgtf8`1s&u=$XGT~NAR zO-=!?bNhXfXWXv?0ETH{X=w9*wWifAUHvy1eSf^6vm*h{aKz6VD^2kLp~>-q#`@uzg$c-O{X98Shg2f>bW>93q#;NVjPBz4L`lod&X!e?$h;>rom<9>6ZE7@WC^;=UTVu?Lw z!Nkumx$Y-PUQ!=U7B=SNBksykjh$YcL_nCKApqE<-C+T=e(KCOq)8B`h zuWp3ZU%3ccnEn=q;v>A9Zz{B&@|%q8xIbuUJ>ZImd*2sO`uy>}s%j6|{d7aX%ln)} zqPCR5I_7dusmaZXg>!V}-sv`uqEqajw&z)`Lkl;21r>m*@aC$I)8@gL+gu(Fs8JdG zxL?h45vgJuran=uSsvl6P!Jtg>QpD=Z8=ck6s1p+I>bb+_U&CbLOy^yF(f6Udh4sR zqkhxDi}(kh^Wcx)jT94=QVylbriaJI_`3zDRgr zm`pTB45+Y37B^y98o&H$0{pi%TJ*CqbuM43i%l9x7-b(v7=SoH5qT_Le92kQt@_h6 zf*Ezj7o1wOKg*HrE>^Q=k#*J4YiIrEZjSq_J@*!>2yoZ7vbNccF+8(3B-7ABuXqU$ z)jpmLtT7r>$wi_)dE!@>pxD6v0(M!1SeIPzf|@GP1(ar7UUTvl&NlBlO14`^|f0^ZXlt)_rZ79kD$O|$U8e* zMudl?Ibj->YLgFk4*U5moduK9C`STS@1+LlDMY@Il`UwOBF~_79-qucVLmSIIKc)j z2#(ATkJckWEmMfXMq8P`>)JAL$ziFZGG=JKhTj-+lNNlscC>GyC>c+~O<2#Vks1 z>}l{f^_%K{p*xY_k98lAmT%z2ml4ae?mabpTMvo2iZe z;s3GlfMfIdIY76u*iGgv^+}1H;#t!kJL=HlUEC-d1650h7N_LM-y;Qef08un(NW#sB3Lc}pBpOFcgTUNf9$K#)?&oH9;dQA@W*W7C|9HHi~1mF7HXHq>cRE8%BY9)U$^k&pBYB zbUy}-h*n}i9OXPo>zkfDq~u4wbTf}&bTD~~rqhBq-OIi&+&bv@^txvPfb7I>R{8Rk zc)8w4IIu{g`RbKrj5hADNOj>dyiL^eo)u@m&|q@U#z!J^ZE4jLDHi36#_eQZXS2Xn zUacrb;j%Uh$@As`^|LTFO}vCb_<;D`nZE5&B;`=AG&sf{(VmRY6~;NFW(|(bh#U~o zTdDz)_S_3E^F$sozE~gF4 zC^OIqr}YV}{+W^rN5Dr2Mw+&hYk5~s1j}-afa0yxg0vadcoIBw<9oyI8zYIBOYXIm z)wiQrIPF6n|2BkbzdR$QC|J%plHQtPxR71>ew`u++xk!5(ERXL=6^rMXHjH+5;Y3{ zsacX@32%A6Q@I1EZ^yrl&kBis#Ynf;CJx*wB@bG!#duTa$MTrxST>GV(4U)}uesyp zyUwGQWnEL=Lif+jYnbJBbQ^B2BiXt&e#@*(a-OYB?g`0#aL(i9c&X-ARlY7o-^M(k zs}~u*tU%W)_RLlPPJ2-g+`&`mq1`=KflywK0SiSx^ps6zLs@t2cWS3VnAL9v)bq!8 z6F=lt<5_fGMLrLWXH@5IEPsy?oc`F={FI{c!129XS=j@gGiq_%ojl2-O5Luw3aQ)^Yf-N#9d5i+JlRlTKEL82?h$o9yCI%tw=X?9TqW{eT#z#SXk~@?NaE5p5YPln7-um9O-g8li5swc06w6&%zTKWC zgDNSW*{-LapSPUjBQ~O@>QJi)BYfTvdu95H_Xq#uC!Dj=+MpOu)}a80~=Mop@1HAd5$N2>T0POB!^=V{N8^$E-@YghauvmDu& zAKX6=!vtPiO0_yB>4X>DP1HR#e3){d_lT7RC^!fOwAm2onzv3|8_Tpmh%R%Z)pmB} z+&dM0948P(Y_KTIe9^uLG@^@*O`96Ldy;DbfAkq2NmK9N$_xH$8HBBpvZKq7lW@#= zWR`kNUuMSk}OX$Ed zajE=@+t!TM_&v5nM_k2WJbDL`C_#!_AI|81sUXRSH7#XGcuuwM}^0EL%nX>)Qz_) z31L==5rK?4wFjB^d-R(EZQ-)}T=J4F7gSTEj6@ud@~t_J;=?sN?9pZ&)+YX=cglUjKRdTI`AZXs0uI0&pC zc~XaUwiUwUTJ*%(i=rDQYI((#)?lTxeK9=7YT?SbK`Gj;H%fe-?mQ}(U3ug{gV7PN zuhqWrnSU}Vb|O_jbEiTazf@Dm2rsi{L$&c4-UCN?9{1X8 ziQB0!eNW&h+^xEI$v)%@1xaUQ;$-Xp+H5r}og3^SH9Bq@bHqq#sj`y(O7myedG>hn6ucf38hat>A-fU=) z?L>6NuBjy|WZy?QN?bYQmJwtxS@*Wg!7Kfhk0Z(dW?n-=g{{E#u&0U+slr2v(NZ&6 zLV=T%{H4}=g4#p3!dd;JjT$`9R5RM0*C+`2g1txvpAX3CB$~VJ+6`AG9-@QA9iq*l zn82mhffVU}I&V0U4)Yt%-R&ov8&R0ws3H(ZB2Q+8O``<)v`ctv&8jk~j)%c+CYSYK z*RGBy zb{Pyytf|=$_C}goso;7mLSOX}%<@5|-sbx`c2_8H-D<&C=cV>mSz{~o!3z+&Lbx)a zYIFlpaJiWeRMm@te7ZLbdRudpv|;+XVd%ZSkrCKj0l$lISc0&7 z9B;UEPr&zc>t2C-;;+TOOjgZ^lz`=w;2-w=^Lt#M)CGXs^w96&k0{Pfdh>-pdT;)K z$p%wVcb}MC4n~bStbB3xwQMX=FXL>K>CUuVk_y#xUXZUr;OSUs+mz?$GW&5OsZ~!& zJHBf%6qOy!PbX*@9u7;4$O>N~rto<9D~+12E%zEMr6P#l=??^#LJw~}5${kIHu5>W zExbA7jOd5q-wn(fhvZ8cdLdl2v7L1SbztYGwM2@C z&SG<(R|2aYcBK+6U8|~S3cF^UFB-eWQ)e1%)Y}bz1UE-0$E_ITxE!0z67qU^_)B2R zRAl{7_%0hJOrrI)JG>+H3e8B%R1pi}?CGy{iw8b^o zsf;C|WPHDCN18^zwfC3btzq)PxzO6&+&QdrQ6guGN9l7ov2qHw3&?I#T%LO zRLpR9YaTB0nwGZdRi5$)LmBtI$B8>K1#=9OC?$E09=-*pP5MYXHzXZl#50mnEOFOa!wGb*LRvrKXU9wdUbFU(2H&kehhN)w8k7hE2+-gGl~8fChj}ffX@(-7~XqWa)z02{YECwo2RXEZyr3$ zs9EtLRaGU+>-D}d9U^}?bI{=#0^hj(T*}*Tfy=g9mj;9@PLiL+ZHTX2IU_Ea&~th^ z3o|IYlFzd)FhPfiF$?2S2(ne&xW6APF}Xkd9O1|xC2S?VB;Em_9xr%k?xwNn)pJQTp-&=186pTrPIS)AK4Xh+Jmq zU}@;)T1GP^BG`N)&sm-s^`Yc(WZc|Cf}qjM%#e|+edG4p5=l-8Dar)(0XGqA*y+$f zIrsN_#SF5-h}v2Z=WoQBHi-PqH>xG?fM~Ca;b0eCopo3%P$H&Y~2V z+}^ zIWK1z)K)62R9LCnJTh008J-l~Ryc=w_ z>wODl*C-lqnJgyQsGGTsZW&0XWP=&7QT8mSE5;}@@X{YF^d0YFUllG-+ zSgLkA08dXGJlz-D-5CmR4KXCj$^m7t4|8D5P9y7g*g2PLUP0fyK-hY#V;gt`TPP`v zI2z1CQIVM>E9K8h3gWr$$V)%Nyucn`bLX4T7TSSoRzu4QVL%l;l2vMZ*+$b*nHYPd zL|%$v2f&SW^G&zqV=)H_^_rHHmCIoI90)xAooV5<$-1RZ1jXP4??{G%-BkGrTjU?7 zX^2VW=6|hsA-RD%=aSr!ypjhE({jd-;KvlLC>P!%r}R28=PQ#P8weHyKKNU@^-`QL zVL(mu*QRUd3dPn608q)x9BAsw7;+PLtXmD}EHem!jcll72jtH%WFDTjZbeO=hQ?~$ zL5=?4rJMf0Gt%7o`mG<$OsmU&I6=?_>b)DpvPsgPDK0A5(*``%g< zT5;NeO_mlHf0ERnnrI4YS{(Y|Yq7}$*i=7aeZ%9Z(VD;bFQqH}fbm0_Xm$l#yvttJ zu#}${PbM>O-fds5DrX6}{2A^Mj4qGYumWo=^P$18%h(v9NW*_o<|d`7coam{7_SNr zRb`nafurDzcY7G2qfniOC}RSRjWnmK8(jX3dej#qM3`FF8aPQP8icsw*JWh&3~tp* z;MAn$YzUiyem75?DrZP_ZMJS%1OeoL0BrWSYz5*_c%&ph_ghkO^Cv>vXj;orDLI7x zCM*kmFC?$#szK{aFpwV`QVvi6Qd#8ZE%0~^OJE!MkS@_(!RWy_cSrOgk%ilARzDJE z1GVWI2~Rs<2g+EffMeZ-kg}R1i*1x=sI`D)2JUQ9Sg)$}%@s-v)XNg;KJ@h%R~GtbJGc+c48&<@N|m2t=P>g0&xIIe>DHo%kYWSy&7X1NUobXn!L3@B z2+j7OPPtZ0OQ~V2mL|eCH3-n3;uqXmfliKBwE%9yZkW&dK--cBpg_q2M*Sv!VV#BR z1r{mUU~_zS>Fq{)x5>7Ddb`XWJ(?+w?4--LQ#t!KNWe<@=dczu*@?of4=S6x!I zE7)=uCOMnIb@{soNn%fvS8nDYGnSy@+T^b~loNSFbiLuxgb*&vTdnp)*Yk}yqGeI5 zK{|0gy06GT5%~NJ!IkR>6GaPgZ_9z~hB@ToSQP)@CzB5}`#vBL?H{lckel4tTeTtW zN^225lFGDUM}9P~7fd?`CVa)m<&@SnC3DM`vnNz}Y8u2j3s7_a)uBPj<0;XTIqrri zC^9y6!3UjDzy;vs#s5W**TByr%=lBXhgq*7V6+Q>4-B;yCHQm2#F@*`0f;UmiwB*p zMI@#)d$d?@+HPlH1HWYi<|jagYjJuvv+1P87%Pa00F0|Bm6Yt+VHpU})&6{0FTeDi zWo#CQyi?%^tOo-qk_9HS93Ys7Rt8)TQJ0HtF>q^*UJimt-A@dBROF}_#8)Q3!Ch?yn{b;G+wWI|AgG}&~K<)as7!?sq*Sa zV_7dJk5zUKP6eO8`5q?{l}M+)`>S0~&-hg|eY#ME(YVq_495CBT)FYNZJY;@Jbbge zn0NM*PMfj%%8eUk1@hu!r>W=Cde*fQfKJ)1qH%;yfKR2b&<8@UTTFO6MfsvD-|Cbc*!Pg;aPtg%%>LEh)ElPA@OnH zNq>a@$2M@r(LJzsOMOw^XTEUSXaeW3DBlC1JprzR#Yi3Ed8n_`1cu}u=8h`98`L>k zg5gRk=sp3v8?@i_W`W@n6)zuy_FCB6veinFh`cIdjkbfJ?Ke^9t z3@W$oT(#_M4W+oKk9j~h_>V~pnu*=S4Q1QFv}+(ZJZf$?A#sJuymB$tL_nEPGp>)C zX7_DfwXs5UEtt%}P1}B5&;c^z+=T0pTwUH2stnZR<3e$N5=Ev9_ZfoWR+VIh82C7b zHVuw02AN3c2NYHkZdJy+4iLP-93a2ZNRrCLbQCg|Z2&tQsI??MxfehCCcRkhSd4Gs zq`CX$c7J6$OVvH$>WU2LJS|jXK`HJWQDh|u`mWvEp_j9)6JuuyO3UO$fvSy0;OsE{ zJXSA+uo`*txsl{Fp=M+sYKEN%S~V5)9sB763q6mTLRLvK#U$Vb1z<`h2UIN(!O_vx zHgTgd9jp-O`~Sj%V#6XY$rRNA3*2f)Kt-Xv2(Ld)9{ui9QwK;a2bI{1ooJ8@xt=x5 zG7a7Cuj(h$wE--XfLdqMs1X9gPA*j(P&u(&<(5;Id2G^-%ETVymPD=q)_zzxx37yp8ev&JS30emAW!64CRq&49`bY6QU8dxms;u6l2rg5_X- z6T3GQw9;9XL+n&J&Eq-E73nlegdU;(JiLQt%)WjxR!%?z zNVRweHyaLnMgAr4v;Im7OZ8wvM}Tal(ar*j$LBNHzZV4(Up$F2O z1-_Q&4oVlyW~3(W7)MJE06l%c%q}nh8M?j?l-9uDW1DPM3n$;-7$3>nNQo%HKgyKi zGC>4Tk`a#&Bv9GG{7&~+(AU9vpPHtiZZ^~zsRQZ5ZD??B1o=617ra~Yfl z^Q6B(=aC{dV%hO{!XzY)RKPe5(n5Nn>*5?VP&T`5?W#KZfG$6ARcr(> z2B=nuNdcW}k6(bgwlQaS%~gj4({U2Lg81nXuCa26VU}t%Fkv>L&RkFmIUWGC77YD< z5U&M?EPsgTJ=W+tWtff0~zncAf z$5HaJa_hvt+u#koStJNw2g2*_Nvrc9jcxS8PAE^V!>oo44tVOEGRBRS`!42oY!|rVaf5WKTyA z8Rx2DO_Mpj|rPP%rW zH5|n-av@K%6GJn1kk)t%J0HTyGk%#eR*eV&V)w&8%95XDx3)F`KL8SZidU!jRsZLZ z5L-)FgM>_qQ;@X2jlrVFSmrpciLEMvGZ`seBz_iD&tATO+6)OI{-yeYR!HLooit#M z6@bL5h+ekt53}_n5UReQyRole8+Bzb_y?ipa2{ahJpR#6)aYj@Ni@4LS8Q@7+x?YJ zGoxM^6X?*@DCmbs)zoJDK28?c|HE68bv*>yrP8k`wpnVdqqvGyY|Z!I<5cwYd(CoB36Hr|*Q}&li{bTjutX0UcNix?Tq#hx~W#KV1If#D9AD&kKI_$aX)yo4lXx zFATvHmB&o3w{H!Jz8`b9zcqEarKRiK!P8qR@7;a;;<2Z_o5_jh*>RVWe-`M~j^F^- z47$_Hw!azpXWAOucM68{4*XWAmGT^LB5hHr?m+y82XCmx{E6gi{F+ zkfykZl7}KR_w6X4hNcG2 z9NHt3?o{<;)T9AX{Gmn6D)=S#*P-*rb&9Z}-*%9588GJyt{C<~mhV0Lz-8}3S-%SX1b7Mx3_Ji9 zUl)G@OF1j-N;Avk-U`L=A0B}A1uj>bNCH0kcEfzp{ zyFWVqruaV4Ww0a&_zB`P_$>hB%muCr&H1wd*IV?hp@5WEO2e$B+wtg z{iP205BrD!fX99(;Fo_-&`R(NrFu+U>r4RpPaFSQJ2xN8Uf2J> zblN|nzJ`k{QIwS8ZhxQ`sOW-wjp{c1Ep|`A5WR3j!;V^;qh01o*}zm_hXZWmgb?w$ z=uFSVs;xSw_5OtX$$*JTMHy07G0~!-k&^`%myWt7KUa_Qy=4-}p`bDQ@fX9(eY{hD zjuil{=e6l`hA^~$J$LiiwVKo$#%Pnvrl1wF&(wO6$|aD{6Der8zmK><_=8JhumW_z zyF5}T<|u)^|Jm&Lv+@pwdUHXAEvOL3tscYZSp`;Bw3 zB|bFMy#OVs+)x(XG0~FNmFqs+0&OrC`vTODSRJ3Wl_NN&kKf{i;%vi6j(8xut5Ez^ zh(TXKU94KcG(1BX|@<=@M@e6(MjCNZ|MYh4Qz{O|(f8>dSnz5*@u1@Fe_?Q?vyL^?HHcwnNhk z2XgBEA4HUyd*1+Hqn3=q)P$`Zx&w+n|&2`eMZnmH%OaD;D zl;BeKRt?V&lJcH^G_lbFqH&#a%ox_%?7aH+fNKb&2}sx;`sRFtwdnJHn(YP+6;o;& zpiNu>dwv}q`;ID*$c&Q8sx(jE7UZe#Sz^&dhZ9J|RuL?aXKPqe*%B{h@c!ye7iOh;4D$vZF9B(Kcg)M?<*Y zxJX}UD-qY?^yS>3eqeig=#>jSj#GO0+o??JCq;1xy$eL&r}r=$>L2h)uQ;XU`8)VZFbI7|4TVuG46iKQ6=HOwTJz;Gk8yxQ7&FD3-Pkz1f5g;BAu z#D}fz2;E=>McG@9!vsJIA9mQFzUbz`yomAg-#?H3exZRqPEF*|#j(}B62q4HW6mju zHHJMb5LGpH(!2y7^k@4>aZ=w5Nj;cY-~Nf|_Sn6fDHJt`{l-SQ2$6rB-yJdllM8b~ z^DTzNYt`i3l*6D=rWs-EV=|xxs^tv7ui-k1xgII?Mhc9E_R4)go!7$Sn)@@MKvsu&nUiF@7iebkd*VrV`CAADZD< z^57CfZI@;R%6PIf>l#`mhe&7j84RKyx(C%@4V3>HL8MH8NH_0%L8-+~^wXDX5TGDx zvwARu04u)HGB#WI8k0*jx?O2#aILM86cz;xk1UlXNM0FXRhsG%Q%fcgRGovgmb;?= z{JE{1&6k=vB~=x$bnx}8?y3i!(b?eNb4%torXl9wez&zmHv(7Vq(w~fbs4kI>9FCLwR==1D(%a7O8ea9O8tZsw5ehhV``qgF!?Z< zL#j9x4lbi7cjk3|NI{~M`5dkO<0Ai{`z~}((>cXU&)~37|L4GFP1e+M?BislbsN04 zJ#ft}OoZqwKCLRLNK&QHjzzT!FI|ekH{J`fC~nVsb1pPu{6ci4RO2m%c&Lnek3Qed ztzUz2fOG9?U4thx8H#ZmVfY$j781$l@H}L#Ju3sw-uZaK&~-Z!aSG=FW_RiDS#4lS z*BYjR^zuBFqz?(S4{H+Wfgi%CGa>sJX-<`<}DuVtkzcO61j_-?Jk2mH* z8f!9U=WUAEX9LCA_9S8B3p$^Aiix9B(p5@Q&#YWh3B9cBo`x9_gorM47M)krP>9K5 zlsZ2D=PF+PHgyo`bX`~dSKd_Q1ExO*fNXWm{NP<`{8flAB;l#+VrB&K$RM}2a$tV3 zJ!NLcD_L9ID_s)bGv;WR@sL8f%oM7D4+LDQZ;<^}-5qxh#FWn#Tj+n&o}v^IAs|v8 z92aFLqYbReq>=dt&r>Tnzu*#=8Q0g7T}TK(<5UqXY-~;&A6iBsFsVlSB*l&fY}Q@l z`BK4l4V+Bzr?56|w2tm}CNvxb-evznpJdyi1m13>-hlI5VwDk@rP!s;3c{8J^D!>` zJw@shJNSn=_qi*9B*8YcN`1u2JCuEu{opM@T}dYHcOg>u{=~nZGJ-@=p%ph9+*2a$ zPmSwXa3*CI7m~X*4Ix1be%F=x+aT|eprH2&C2{){x{tS2tXXzDye(XT?m2>I+ zAqE-LGRHFTgxjg)y&YpIp$8K9OHKxLY`R(d+NE28uYgx!kNT-l7qjYOg}h=tU}$Ie z%3xrKaPB#6$i&V}Py5346Pb&YSS9j;C$_R)TTh;fjZYKZaL^uRpc0dY!FmsK!tA5E z<1>aXbo_Gx0T+auEt$W`DpEzQeK^o2o*x6=DxpHxc9w$o=#Gv^0lv`qkAauXn2o4Y zG4*Aleo^E<3ALG_%b@ApvBHqD3T0%o$J6UF4w`fZKcG_OOHli+2^@9q*INM+4%f6O z*V}>*%e4{*uZgCWOM#y6!7OBW+5&H6QhpQ*`kgZ9CS{%RoDG2;)ItXvxD>x7_q(p> z%SJxALul$H1A$`tR^6feOc0*#d1O0x(rO9!Iu=2$YBY9w7Wd*uik%})o_q8BDbUr0iodgi!FBLniy;)kK5vjTORPH2qD20{ATW%!NkKuDvZ1X}rGB6e2J!06Tc2K4C=U+$l4dsQh;EHBt$)!)lP`0Q)5q=fF$Zs$Af7 zNj_T`wO^T_d*BQwtz5~UmS4^jkbYrDzrnUTudYrl60Lp7@5${J=|=dcbGF3}o0L_7 zr3NXCJcdEx)`zWYj_4t(#c7XFu&+;;&p@^b;&iLa?`L}nzFTUqp2r?{T@t+Ky3^|| z42G=s6f7LehA!-`io3tgl1Cu2jr+CWd8%yqbsU=w@eQS7j#~S=DY7d2icG9J_1_HtZO`;aUv$Iey*BEd&sIdg26E2MX2l7>ZWv_) z%@PNm|Mdb>7;FNcUWH%Lr&0nDpb4C3Djtd%J6}z69R%P6wm^92z3 zfvD$>5bd-Z($Gy~j%zlHp}_1$=Ofq|mWL@^sEg`}VQI7K{hVYlAjOaf0#n^q-?V}Y zV{z;@@CS|PswJhh&;EKNsNss0AzeHYLPj#g1A`)$N?e9ZfvYR@P_*ldt+2=2MyiY$ z+*g?Vy2`T;kWp#6WB7k&ugW*Hlrrx&Nnx6qyjm{sj?${dTG}t!F`sI{NaZXDwtU8W zVs?|kU!M`0>PSa6 z9!vgj{fPK2uDWJJ7VSE; z`D}1~|8F?sat*0*ApMJ;GyuJUo*lupK~^aR^!wAjH45)JBZV1*2KD4goWs=pMI$*< zo<^D7j#xFNaqzYvz&b}*a?(|&1H#z6JM+0$RPXW>P_}oH+@~Db#?>hRTWlh5SwGxzQNmY zfhp^|Sf$>#8WNFj6~p=uiQud99{GT7Q@tD^7;_QjQ<8|lHkkubIh4C>FDcF*^%!PJ?ErwmgslL^OY=o=&VtCk&2Zj^vw^w$> z6#jK2w-nmQ536z?g(xoY!BW(#ONH}$n>roUDKZft>IAcFbhxMV z%u6EAx_r2AC%qQ@0oAQTLM2Gd6FQg)8&3%-{j|(1L>s{&qvT&qG}h-%5|%V9U^kjS z|2r!{XCDa3Ik(XcSP}C39vaqLAxQGeMk!83Mf8KO3H7K~#~#4mwP7yTgcd}u5AQR& z4aG*lHVtvPJv?h$1)9ZryR3bC?Q(s!Vq*CPF;yiBEElLlTW`pwlGanNo0kEHWc464 z0cX9#G~{y>KP1B`;=V7e>$24#h|obt$dj{sCosc)JzzmFyOakP`Agl{s~ryyaL^I9 zGZwxgj{&_Q&&jCP&fPqPN%Tr5N>$%xx_3*5rbX|}6Coo3)IO*zSjn|l z7Pgt~rn89B=KpXh&#u?WWkM%pShRHmU~~qx%bOqO7zH1fdgOG-AO$Mgl^+^7>zhEV zJ@Q%NJ>RQB=>A@WNj7@YVKt|v3>AEa{ZHe^S&S!Xjpxz3I z3ih*uWFt4^ma!@cO4T-MEh`L!@nHibz1M|#|5?-stRo8l;dTz#UL=j64|a%q|J`;p z+A_B}>gH>PZjht~!9&Lr_AtxJ_ZD2@ z4?ik+nXYKYd3W5%{`-$vFV>cKP=dV^3qI|S2VE1vOG)(U5LMfKg=CM31~mU&t-q1{ zYr0S%9N~RntY>=U{!Ho-2rm`<+A*Bm!291cErJ%X!jF&gr(D_{2Fa;sj$uzTSVD}J zI_$|6(p?P3qQs@j5g}BYWP5i%tNWmjHaUqXJB(Hoqn;QO2$!wRVQ0cIoh`d`x|$YQPVfUUc;1S!^gx3Y^SxaB zWc65GoK-`s3}2~PIANn9!CoRvkd6@r3xlp-%P}M090y8CiE%bG)C_#}7UIgwh{0b& zxg3yXgbfEGjnxj&cH7jILo0 zRHz?&#QYde6Z!w9eDLZ03_QW4WY+s+UHTeP#b|{=j9$u@`{@R|2*5Av|4@2$y2LVl z=WGes%p5up7aSd64N0O0;z0S=UJ?xtl(1tIFq#Hk6vEi}u1Mc+wCV~*-q6%2=i8U~ zMoALXRp2!e@@ITU*nhP!36xO}s&kWcjP?ROHTGOS7~=Uj7O7LGm;AsHo{g(Rg^Y!D z;WuccO9~`Q0)-xqLxH%DnQJ*mC{pu5Qp<&)yOVyCfg#g93WAf}jkp-!boN5D5qvE*BQ-Xg|A>*8J4}hXGvbqBBjtz` zm&yt!rqxQP3^o03K`*9}h=_}TW(Dpbi@oDzbc#0_;4a_c$Zrfa+( zOOT1ziH%x^QBcaplPA0)*LTj&yX@&MrHcXZque1FRnA3dhANKJtc9tHx4Rc+lh4R% z#l?FSPr-E-Y{rmdAA$6YePq9eTRx3iind^5wcDqf*6;}ZWT8`*WM><7zJUYrW|eFm zU-Q_Bp0z#anu|AXLj`ice{ui-QO5XJ!L0;q3gM2k?7Ne$A8xW}J zV2B4SNc9~jT#2q&IzoW5y-;@W5#9~*-A2bNr{bC*T|A?HTlGbw>j+4f2`Om2wMm^S zVYkuRem?ApieawVa@cP{T1p2K5oBxdF_O8X8ROBkQ6dZeetCaux#%^_)yK+nRmYtT zcs&BNyzus;BlqFmRrc~Pu1ZQK7$NSxe3zKbn6T6{{>_NvkTv_}Q)2(s18TI!Ij&&X zll1*N4(49o z3Iu^+6;~f*>6n~A3{_54YKZ{MZf0zwPbYSZD9Z;wOVt^=fXoZ3e0vfpvb4g_)NY0t zY1S0G4TW}(Prv|t=H$pGFrh_BI=r#I#FW@;^}4T(lJ6G^l8SxXLA+9#O7DBr4?c_q z>?w$cSP<^S{`+UZg8aNki=rR4m=(5iYOQEAHBWcEKogD+1r2*44GohEXvJgBechDVp-Ef5 zDo1ula3X6FG-Utcq*N!Go z7QaXWR0N`;ZE=W8n#bRoUP_vWcu6bY8TeL0ndTfvY}OQ}w$QI>;o>+?zx z#2%0~EbjQ{V*3N54i1m~^LY%MsCD`f4FN>LfkmvlH=8RGn>7r&j(IlLl}X+z$u90L7un#CA|BD+*4BH115y zIsS*xSX&T`vd_V!Y*TP+AE~j`x!!b<6lohAFa$mCLDO=ch;{Um>I`SvJ`25UHt!p_ zN}p0(=3i#m{T+s`uKSq8mRd9`F88d_ zn}!8cbJOiY<=f{XPww=m(qxK8`q>5aoDd{m+mbad;|1Eaz(ZRX-OL6~&FU~$6N8nZ zLu&8fGyyVD7^y^ApLPH9A{n#XMM`prfP6&$ zZ)Z&XN+w;`t`OEiW4S}Qs5b}~+)3e0eY7qT4p~DT-U!Cu@`JdyIQiZUU2>(F17w*u zT#RNIWzp*{ooWpQ8bPLK^;N8Oha#@mDMGxiT3`()T+wO2!qO`)dj6il2UWOD9&U&nPWZ!6oV}VTca|@#q^Z0F9lK0a&1g%?^ zX{Th`OmwVlcViV-TL){inf6tftMtX0^lI%_J3O;AtJ`$-m9(zmw6nfZeB$B?araZc z`kEX`Wm#i`Zya7@qpbUxRI~yd)h(vJRc8kfc0PT?(>0k#qN@h*Uq+G58T1cQM0|l7 z!q=u$4+MXc@PJt%Vh!dJLVDV6=`iBknEW9oaHe;%dtNwYV#bSs_~+;bW-+s!got9Y zaLg?xN;x=(TwKXRw{sa{RHJGmAZ9uMQc#Ve@Mki z*zR#jawtdbQ=-vQU@8O-7qThQEH@BsYirTn0~tk|op+YXa*q^@EN@oaHGP=o`?n^H zSb@~lSv^&iC=%7;Px{;WoPF&8o-6~=DA)!or)3=K;(6R(ZYe6PC?*yV--1AT=s~A2 zC4Rtkr1Hqj_?E78?~sfg`hIIF>8`vx)wN8oJ}ac1U{fI%H=Ab@^yD^cQ^nQ`iUG$$ z9O%Qk);mi^W>vuo=d2(jB!Rov*WvV+7H{4A&0Q*KYCN~G-CuGV0}?#zTZgurzOo_k z`mT|~Wv(~hBu}bBoLhi|lAW|I(>uDCx7b)V%KOK_Dy#`g*yw$?i#>6rts5Ml z1IH1GlF^qdp(wX!X5m6e{?~piVT_u*#AE;C5?MxSZG2_qXj$I1uVNs>J;M5s zs_6&3H3SQA>0;XKC_uF2dS~rAVMDic$i|vD!G8PISc!hfv1V%XN=Se0O>`hl=`B5| z6b`-mp-m!6ID)xf!qh6YFd z`ARf7$xSYt4V%;xL9O+zkrLtd0nw zMk8-{5+uztl=y*P$c9_|D~0+JLVQ~+z8=UQr)%EFWIgk2=KApHpV}LJ17FYkZzrl3 zL8h?%KFePxJ=P1zXqo;W3uTW-br(wZWo6(sAi}P+XT8L=wz_Duz6-`okRtL$amyC{ zT74kmtXk64_j_v-1FP6M{9vD|kyBGy&~b9_5SJ!f(t!T!T0K4AKrDVz<24L_&mLx* zpDuuEJkN>deC}3x1SK1PHFO*U5uy+vm|La(nm(@TCuJ4%%~=-<#DwR4HhYeEAsxL!E^GaiJ-WYsGNO2o`fUU(Tv@b#D!4^n`D8k%UuOGo4v-29i&>hnCP+gYk0Qhkd z`tWqjgEUD+9>vz(uZt@27;S`{Ms?$oPum!-@1uN!K28#c59sSQd?zK-9I#B&qOuC3 za1~1D6d%f2-;9a@4g&fHqr=2d*z=#+?1S+mTR|Bg)}XvD;RFuz`(e~b7cWUr>`^hE zUoF;K&=*xtpsn3T%jhtha2NdV8(JVBkod=SW>uIaKBQ5~rYFmUQ=Asnh>?^88nN^5 z6fQr%?lc))FLYI$n5<>b)tym8z6)>=bQyMEyNht|Zy-DNT1RWBT_?VJJQzai>4SZwnb>n!M-QeHv(?@@X23{PnIl(MHQ%OP9}iB>T%70x?5bAz zy9&Gc>}(iyr5As+He$1v6bc z1uXNbPLSs8%CCQ+=(rowF(DxA&jmqVytLCMM5}F2*8kJ}t#xV6=U0Z=svG_#uSzS>=9+QuQ)^)sF!ZI}H*ZDrK_i zoLAKLzAUvQLkT|*op(s0Waq0Y`Yr?n89w{?V#w{>Hy|J$e0<@tUR1C5u=T%lCXLSO ze=+PyqG+Hr#%LEfsCC*$@(up=Nstp}Z5gjM>Gh)WG{_^O^eCh&%6zVKmegEc83uZU zm^xkW5n5e$ih5NqrX~zF{5J6I-4*RG7dD3F$fK_KuvRr7BGRxsTpl>ZtH2PwwAgq$ zEH!__%E8#<1=hhZG|Z%tRMlrxdk_iz-7r(QHoQP~10XS6C728*X7&x8PIAqUDdM`R zs#@@$9~zV^f3M(@rS@4RMa?z2D_UHS8e8$W$>S!)~*O2^m~&0gNp zQ*FyJTqahZV`7!Y7JoNWjN-3zrW35P+k^X~!jX1k>FaCQ0geC!L?F9T;$~iqXQ#ddqDP9#Qu#G7NfgPHI6onR zyPbBM>>}N(QzCD*EEO~=>myhk`HffO=}T+Io1;ZEb8LQ#?E1%`Ut#_TPBO6x#Q?QB zMVWdQ{pLW`YslHK@QVV^B7y@Dclb}M&;#?>wF;wGjsZJCqPaUxx!~aj#=mgC^(~Xq z+%(J#*>%dSdw-t=y4FE(vsq&BvG7bL_7T3&A9Z!aV{H&$PE4MOcV`}V(}RB_x( z|DiUX{vvqMc}fgLbFrL^f^hb$kNy4cSQRqa$msE0LW^^LclJBi%bk01htB*7N_S)ah zcn-^@ILc9Khl-B$v#sq}Ek9??(tMDDJ}26_laSwKU3sAqG{(CEI;&rhel-L8{D z&wAV;tyRHWB#18ft(!kbS>%Fo-7GEupQswBR=L#=h?@lrp2HXO?q2fUT6SeG_+0(? zY+Zv+=C_!ZtlL{$7RtU}MGpC#lf6A!<+8PP91PDNQMha$)9HpvUVbUkcYw@D_1D=4i9&Vg94 zgHHjglD}=t_YM-W{tJrArQ0K=R#t`zyi*K%<6hW7(D#4Go^J7D9rj;{meP*Mj+dP( z2sp`_EELq7yL}RlCKh5de@HO~E9>*w`@QY`Bt+cCQV7V|(^a6_L^HF|VX+a#w*~UA z7kwG``E+o8nVdXz>`1TEMNKz))RC%{vy_v-jASl^9q-A9w6V+*7u_ZzAAE7AuVL8( z=o3=E%!Zp=Pt-BarONwZ&=cxxw_OKag~+D*rcQ@p20xglt`&nNZK$zRPKxios%t3f z_K0MoNRqwQXkr>s$q|L1G)QS}oOqLl{$k3iK0f+BXc_;z2(IxZTTcPq<56&62vzn| zATycp7g?BXdn!Bsw|mLm5UW=NLn%GR5SApgkR)Q^0oY!g_ENgmT%I+pM-wrWy?vAa z*NoR2Zmn;C+9>Fo-6#C7AY4dl8noSL`fPf;<(fx!@ko;`YV6}7mHA`fd1}lndBcbe zZHG+*cdro#L5GU3Bzl5KIxBNMv>>Mph~}f&O_~eB zh!7P!eJX3)wES`4ltaVgg5F5BnuGVH`5xx*O<{n@IF^jhy1zx`k4~fpnTj>Wnl9t} zxSO;CV_l6W+{A?E5oIh~9Y*{K z5~4fMXq<7=r|l06*5YG3hi|Gf6^>)A$t9VZWXkmEUKtY8?@OG-e4~h-ucIZhsI;C0 zU(6=tNy#&E4P^A%P1y>rzkE#eh{AudlpzaXhRv|`xN1(sK1p5Q^K#vXFSV@tL-jm zm;`rWB9X~e>G{fAoOM}Xq`^#C1NQA>fSY1On}*pda(76nhImv$8~0x!RbrXn1LipG zA@l-bv6B%rA~Wb#OgX=X)AR!_1Ptyk?vyC_CiGM=j6cE&m2UwreCi`Uj#D^nfr@vh z_0Myjir*E_Chha78t_ya(hvR$Bgn{?Q2@a1E~R7u8q|fv%%qN7KJ*P=Kw60Sp$2K_ zY#6QAc(H+MtLGftOv<Ngp;W} zxalfJy^~er;dcFf_%jR+YIp%SSru%@DJS0~2Zw&TwircEoT!80V+0ap3e;ZD*5Z@1 zz8dujG?pW@Yi|x{_(ygjnMSPFIT>MsoAg(Wb{wKciSP^?lz-t@D;csomxo12YS(vw%pVUP|JQvwb z2ti^gl9jvTmNs}#rpeeM#|`T2U|Js@s$;Q5ruLh6Y1h=`1EoCNxC?SsCJD&|^jTV^{VUu<_ zHyEyNZo-T1FJkRGcjP}G{^y#IwD0-?vse(UfCr)Af-b=fIU}Sr+Ke<8%UWmVlL)Nx z2;Wtkrj2wRVs})Nh?bt zal(ODoDJE{alr+;m*tvH7PXMH0w70xadE0<)=;&REeJl)n{*sx)pg+s zN{dW<%^S<}!S&MlPhq5Wl|)#Eq;ql}EyMwsMIsX*)!K$pUQ!VRZ?5E&z{Jp( z@)})UC{#coKkRMalbiC$#?&No&(77`4G4=%(h|o7_DpWr)Qmcka)PA@3VUil=Xl%G z{MWHJn=u@-pbFg#U{7H))#ZQcq`dOcS(z-{82l?9foa#QA#^+`+M9LeSv&l7cNvleFqC7@aph_!&>P>=WA&Po4y-o! z6|EI5Y*@;mjt1lH##rNbNgioYMckt_gYUY=vE932_1^a>9WRU4vpy=hR^cbG=JQAs z-c5%KShG1EQ5NYsggq|$h;EACDVVc2&Z!Q4+XSYLzmZnFz5aqzayO`p{^eoU7}hmY z5Bj9J2@vQ3?h|~rHXnBIBqMWpUHQP}eYn9c(cB8Z=!}l-h$;os);R2sIH3;nc#Q__ z#_vSlls#p@s@JEg)OW!MJ6kH@GJJcY)T0um`Z36_S8C#Ij^LSEBvyR5j=pke@jA;m z^z2f3@1U@T8#WX;$KU}e31!cBIUY4KmVAA#vqkrw!_X32YT|m&9P)nzH>t{bERPch z)0jYy?7myz!o$yVBO6amUN0v*@%j%a87OCXxl}u%6Q4)=q`MsgjjrC}nq^yhhmw?z zj9{78j|UF{kRp$!AZ^iB<&8X2TgJGRWd8jBg?opApx!IXvacHJ+2EhdI#73Omk38J zeu^`)HzJ?R>mcAM87Ga54IEOS(RAX$b+Z6S} zMmKiL-qmQ7_-9ri5T7&Kvv*Bi(1q3~0%RtOPVE4UY2kdz_aFh{#)WWa$jMNYLG*{*9;zX*9uz&z712eXy(;+^ z@@9xEL7;ziaY~=Z&VIAdL{50*AN5l}t(v1HY)eQ(+6NM=M3boA`;A!w^1+JmHjvf|INH)rg?VUUzM9QZ#;F_(8E(@9}@lp<*`{6wVGlimqOxI640_@V?e7P z0(`XpDX|Igwu=*W<5GY(w4{nQIwD@uBc&|?DOf)@yiK5<(?o0u+&EEX+RSjRC4`Lq zww$J#sT+YtI`8f+7KQcic=pFgmpGJaFXv)g-)`LqhcbZ3Bu%4bCV7&=OTX3hv=`o7 z3`*VjY=B4JIO8x$bsslUHtgLW6@kpGd;qfdBf@uXn9g)vm|qpt*A%)8*H;n?lr~?LnUP8(>*W`R6_ggdCf*L2{DF=_$HIlLsDOp8>wP zRgk{m#F%UOHeC~(Oj-b_D50$ULZSNGLe;O>8)Ua3YX0-1U3~n&y6YN*qZ64g2n!42 z?J6d>?WM0#=?};ZLKvq|<~s1NUIRJshR$h&wXN**)}={OK3(iVDv6M!iZ$D`Y7z0! zKNlS+8ug3~peiOZmuCG23ReFZ?Fuk2qAB|G(0UY?zOE7NUvr4f@3~TG1sam3L)ZCC zgYE=FG=tK)eypGXc!VUZ7_dP@;T$t?&8yrzlB2u}!U9Vii~AGJ2x|BA@|kn2t52Ce zj-HDoeDVs>=a+R_W2KYR_10-px$D zj!$4?yp`BquI(_jA$gi+H!6!$i3hM(;|)zjY!39@?&R}jqRSk$v0{S~_b0)0;%CRg z?CI>A$%gQSlyGYIv_+geEzKURmJ7_YkqA4w>(Yj6R^$X;W8gFlba>BWf|60+Mj98;)#*wI~5bIio(XlYgU=Ba^Uxn~t8SUStz}XJZ=|F(D8z}CIjx5E z$tdn%w4iZzH{TWXXv>j|5p{vgB%tcb%z`()FAfpULg-pWK9A?53dv^OH)hLrQJ4s3 zQ8`Gn>tVWWSgADZEb`PtfAFl~aE4XGA%nM~&0Ocmv|TUD(o64)FNPSvEFw_P?uE}7 z6Ae)b@x_^%JaFv$q4KTX&-#>y>kwie<)Q>x#Q>yysxt_~p@DQwQqw_fpjU|BK6qiS zG|)sj7{x2tm9RvlpZ|2Cl)xA>O`4&UcuU{yayZ?*+VH3xCw&x&oKk%5xN7Tk?>%35 z>gjckB>1M(K`Cq?5c25rb2ziTjc=IV`^JRGxNHf{sRF8u%g0iW=!4{z+s(i_ELV*% zS>wkIn&8%UYPqE3bDKX1N&yAp#&6L1hux)+9)Sq0&VQ>shkWdosS_yf0K_3R6KMgP ziHw&udmo*<0nKAk1z8=6tf2fjl9|QEq#N1tLjX8@4pDZ{y~CJPE{iIzYw0O6uE>JoqfJY)Eb~+n+6n z3KXcFqkB*b$*w&A{h8kW)YE<^5j=PKSMYv$Sz$n>a?9X;^BPp%7k;zCXDM5t>JsXR z8l_-@fZ+i}?*#5k3=@y-lfp5HCQXcjw*^2vwk2u~bh9Rz6)@W=9aM%MQ05k&qMCG> z>brHW~RA{BFDmI7;qM-5P`ok!mkwAFk-XC0f$P`dq1J}v0lhdMKv4MhRTVBy(e&ocQn@0F{ z1NbAlVK={1&MYw&>nlN;354xZ7{W3BVaLgP>0887qW_zhL0QIV2Uxz$jN&`>&m?!| z10K&KS42-9&0s-J-^jJ(c&On4W(3F}(KWfoS!upm=$vMYcO@s8y02u(ZhET0bY69J zhV3^luSM<*UmZ9V$SLjKHsNw6gPPLv!)gPS*BL3B&?jRArN0-}0RH3@uI*e=Q?I2i zFi73g^o0d!bZQZ+Vk+ABlgDnc$c)zF0Y&5wxpEznK4nxjW#^!@KqA68tA?z2>UhUL%&@SE7P78 zc6Y3x<4eyNjghih@Oy;T)gT!Sv^BX^Z9&{JcUc=^ukI>YQ*~P*b5U?YysKIrhne$ISZ$L&~^^7zj7(#C2rZgdYR>4?9;oM-|#R_a|d8Yoc5C^ zH*3S_KVSVdS}*5_v*ot4F_b?eDIeDa_?06K4Y7c=RGfJ^%qHTleOWjx_-AC_-;%Iq z_{fr{a_imj8#ZRbbwEiqOkm$nDSpZih{5{JNVSZM{NB5VG=e|edoRyK$Vx2wdS1Y* zqhd!s%-H|8J_c6PUFPB9SO5T-#N`$qp87*tBGSrY;TGQ{g&b{nG3AK@ZH_(=h^)K^4@i41SC*FUkKS zrB*hJWCv(zOnFi9pnaT_%B%Qak)k?a$ZDT`ha?}zM=$=@cdjZ*AT-r`e$%3zrU zvPd4vk{6mgJWy5FpNz+*yx)pNfZ;Oc4(g|^Ixni;cOrU%mimSnCUyqtM!z9@IL-YfXi$Dj>pE0phLMg!iCE~)F>>zE@mB{-) zQO&zraPPd~nOF7b-U@*k8vt-o>OnMzQ#2i@R*24JeeA^uOrU`%mg0V{OEtN@tKJSM z+3nWfOME{QD#+LR*^C(ZMH5~U@@aQ8KQ#Pn?|jSTSHVwV+ydwsi~1uxQzD$BtNZ|} z=%Yl#A%eDD$ZQjatvDAT%54g?u(UproXs}f&Lg?a{WN@?f`i>y?IXD|XyQ1f=$u{R zah2T@yao=?GN9gMv+(ldh3aG39%wVg zokvI)Nh)_W8N^m-(2M76?>k8<20o%UStNCJdH9456h67=vWQC6<@E6eM23@UKkaf( zDh|jlfobN@o9?|FBv6tvpK<)9u09&vd)tf;My~9b8I)Cc!%Lh{C`y6SXKqWm!W1yq z)37dTL)O1u7SCijC&)z>Vz#gV03=lO zjbjFj+esv2ANsc`EbE6Dwt^0bDqBBSc`q6I4v9>XK!`4ZW!7`Wa`YE(4pZv|Z}u5} zea_eCru^;cIsI?w5#WU8Cr>Hy8^Q)Y6%mp|9QUnj=th{#nsc}lV&8{dLM>Y9Qgndd zHLy{IaCoYbea|AYxqzFNWGQz$_nEO1jf=-fKr4-ryeKvDzk{*Kp}sDD1NU$0ddUoJ zv@P)dXq}#m#zGMV5R$1&EZ9c|f|w}2!A$kZSuS=I`_8SrsI!;hVXnd{AH|KOK(pqT zn-qifcA96yhp~2x+KPZ5Hv{Vpcvv8-wXoZo)QQ1Di^2RZJg1ItBel%1ed(vYqb7MFcRSf57X^~ygI8F+93g$ zI;}t$05Ay_1p6y=sl+P9#h$3 z`TNqnD_2V9ah>-KL)IQyX^fXjJMcPxo;5e3efAhsW>Y;h-q#JCXW zvlg7AG>?%<1Fn0w$Pyo?-u2jSL7OUWGBqG$Utt1uK+k4Q;HzD>XpI&S6h)!h*CeW|e z2+2E{*7F%$HvzdnkK2mdi2@n<5z4asT)uid#0o^vW*$L&8zB%}B0?uL)0XyEY z#P6``-mLVdnT-xNP=q|mm41@Jje!;1TO0Iwzo)Pouci#CspTp+@_%^Vao*=P$}(Tk z%=Hze7B?&3Cj```imdh*wxxbBV?8KQ)#S!<6ke-zo-sq?xWbh#UZCYf4@+LN$N3|D zlE(hp@yEN=ke7r6@3cy`2!Rf!%$-xIBFjRxeVJyW_@)77Xl>} zq^0LHrTXakLH({yY{oeDrc9xyoS7nL360DrD>Ku%w_WvxLR5Ge8B+8>Er`Y+p*Fd} zyxrQ?DRx9rgmHnHnBXd&~LrB4S&QiwkTNHO3t4g&rc<3{>uhD5znU5p*4Kn_kIe9$3N{<*e-nhoB1x z6R1jOBJ<8c<#EY1SIaO%>__@(YRY=7L8%Oc`lt?*1q4$b7u9dTZz9e)?|{A-<5O^qnDnt$z%u+$yrrtuhPX| z)RoX~;H?gPnLJbX%jg^hsA&hc9+lNvLnBMfdSrT+P3z!@oC7~z3F*z5$2~w@q>^xw z?}z(pKkk|3Vk3xfI}0lXCN?+(Qmj2TynF%3dRG8nNCz>?LRUzGTzPUkO;i#x4cVk8^ zAwDq%RnFx!H|j01c47vuz!*vKRt0>b*B&$huFknQ8k~!pz6thyt2yX&tjW7#T)TUR z4AXxQbXpCb!};;jS$jj45({$|x3Hqoa$iL~LQj}5-pM;Eay!XRj1iO?DDjf}_A=rZ z@*kSp8>HN~7t%rc*Fc7y((5jlmeD;}ewvYAy*5zEdNzb|sO%F2cIhxOD%e zqwZKOMsbz>!ac*2aV9NMY-9k&*ws=2{F1XHXtx*i#G9#VedvJH$=Qwuvi1*t0rhcQ z;cAdZCjBAkXMLQ4T>!$m8 zF#hF$FXEVB&&ulhxT-Id<{)gFS-^OA@Sz_`o(va=1hdX?Aq*xXy^ysmy*A#NJP>lb zbX*5bu+k}r8}sbo@&8C}cAdo9d^f~x`_gN(Rhf)Ymsjdj>UF|f5$ozMNWrRuWbmlX z4hVGz&kE{T6l-}hEzrgfh8teQT-p6=f|OA2Vq_mk56(Z2GqfY$aUr}&A^*rqnp?}zJmWY9wf!9HWO;z#SB z%rz_}JYTwEx1h>0EaBlAr|SY*^ur%0D~fs+9!b8G;5RFgHVa9au}}9&#K%3xO-iDb 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 ataN1=&RFm5^`kQrL-pl!(Fgwk00020id6Ri literal 0 HcmV?d00001 diff --git a/module/hooks/ready.js b/module/hooks/ready.js index e38edfeb..078866e4 100644 --- a/module/hooks/ready.js +++ b/module/hooks/ready.js @@ -1,4 +1,4 @@ -/* global game, Hooks */ +/* global game, Hooks, isNewerVersion */ import { CoC7Tooltips } from '../apps/tooltips.js' // import { CoC7WelcomeMessage } from '../apps/welcome-message.js' @@ -11,5 +11,13 @@ export function listen () { // await CoC7WelcomeMessage.create() } game.CoC7Tooltips = new CoC7Tooltips() + + const instructionsVersion = game.settings.get('CoC7', 'showInstructions') + if (isNewerVersion(game.system.data.version, instructionsVersion ?? '0')) { + ;( + await game.packs.get('CoC7.system-doc').getDocument('wZtTHpGV3atKV2oD') + ).sheet.render(true) + // game.settings.set('CoC7', 'showInstructions', game.system.data.version) // Don't turn off while testing + } }) } diff --git a/module/scripts/register-settings.js b/module/scripts/register-settings.js index 549e3b33..37e173e6 100644 --- a/module/scripts/register-settings.js +++ b/module/scripts/register-settings.js @@ -451,7 +451,7 @@ export function registerSettings () { /** * Other settings */ - game.settings.register('CoC7', 'hiddendevmenu', { + game.settings.register('CoC7', 'hiddendevmenu', { name: 'Hidden dev menu', hint: 'Use at your own risk', scope: 'world', @@ -501,6 +501,13 @@ export function registerSettings () { type: Boolean, default: true }) + game.settings.register('CoC7', 'showInstructions', { + name: 'Show changelog/instructions', + scope: 'world', + config: false, + type: String, + default: '0' + }) /** Set an initiative formula for the system */ CONFIG.Combat.initiative = { formula: '@characteristics.dex.value', diff --git a/packs/system-doc.db b/packs/system-doc.db index 425cec13..bc9193ab 100644 --- a/packs/system-doc.db +++ b/packs/system-doc.db @@ -1,19 +1,3 @@ -{"name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}},"_id":"POxSHclKlwaHTQqU"} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

     

    \n

     

    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

     

    \n

     

    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

     

    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

     

    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

     

    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

     

    \n

    ddd

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"_id":"POxSHclKlwaHTQqU","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"$$deleted":true,"_id":"POxSHclKlwaHTQqU"} -{"name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}},"_id":"B0v6VqSQc52PsRPm"} -{"_id":"B0v6VqSQc52PsRPm","name":"Chases","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet os divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list wher you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the particpant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a particpant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have benn added to character and NPC sheets :

    \n

    \n

    Those icons will give additional informations.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Draging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrice chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Particpant list

    \n

    \n

    Here you can have the list of particpant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the particpant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the particpant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are inital locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape. 
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of laction between the slowest prey and the fastest chaser.
    8. \n
    9. This is the strating location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location sleect it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the particpant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be revmoved.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin inidicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase  track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazrd.
    8. \n
    \n

    Obstalce resolutin flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interract to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Particpant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your particpant bonuns. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movment controls. You can move backward or forward. You can assit an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n

     

    \n

     

    ","folder":null,"sort":0,"permission":{"default":0,"fiK9kI7E1ThE0aAT":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"_id":"VdOeGcxsu3jsVm3F","name":"Chases [en]","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet is divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list where you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the participant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a participant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have been added to character and NPC sheets :

    \n

    \n

    Those icons will give additional information.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Dragging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrix chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Participant list

    \n

    \n

    Here you can have the list of participant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the participant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the participant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are initial locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape.
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of locations between the slowest prey and the fastest chaser.
    8. \n
    9. This is the starting location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location select it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the participant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be removed.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin indicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazard.
    8. \n
    \n

    Obstacle resolution flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interact to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Participant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your participant bonus. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movement controls. You can move backward or forward. You can assist an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    ","folder":null,"sort":0,"permission":{"default":0,"f2tegjkWyWhBBgnj":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} +{"name":"Creating your first investigator [en]","content":"

    Initial item setup

    \n

    The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required.

    \n

     

    \n

    Skill

    \n

    Click on the  Compendium Packs tab then under the Item heading open up the Skills Item (CoC7). Here you will find the skills shown on the characters sheets available from Chaosium's website.

    \n
      \n
    • No adjustment - Can not be assigned personal skill points.
    • \n
    • No XP gain - You do not mark this skill for improvement on a success.
    • \n
    • Specialization - This skill is part of a group like Pilot or Flighting.
    • \n
    • Uncommon - This skill is uncommon and can be automatically hidden on the character sheet.
    • \n
    • Pushed - This skill can be pushed.
    • \n
    • Fighting - Automatically set Specialization, Combat, and the specialization name to Fighting.
    • \n
    • Firearms - Automatically set Specialization, Combat, and the specialization name to Firearms.
    • \n
    \n

    You can create a new Item Compendium and copy the skills you require into it allowing you to edit them. You can also create new skills by creating new Skill Items (Click on the  Items Directory tab then Create Item give this a name e.g. Gardening and set the Type to Skill).

    \n

    Setup

    \n

    Once you have set up your skills next create up a Setup, here is an example from the Items Examples compendium @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

    \n

    Setups allow to you standardise what skills, items, biography sections, and characteristics the investigators start with.

    \n

    Click on the  Items Directory tab then Create Item give this a name e.g. New Investigator Setup and set the Type to Setup

    \n

    On the Description tab to set the description click the  button to get an editor.

    \n

    On the Details tab click the   on the Biography Sections to add any sections you require from the Create a Backstory step of investigator creation. Click on the  Compendium Packs tab then under the Item heading open up the Items Examples Item (CoC7) and drag the @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Punch} onto the setup.

    \n

    On the Characteristics tab you can customise how investigator characteristics are rolled / bought

    \n

    On the Skills tab you can drag the skills the investigator will have.

    \n

    All actor and item sheets have a  tab which can be used by the Keepers to store notes, only users that are set to GM can see this tab

    \n

    Occupation

    \n

    Occupations allow you set how many the occupation points, credit rating range, and skills the investigator starts with. Here is an example from the Items Examples compendium @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

    \n

    Click on the  Items Directory tab then Create Item give this a name e.g. Driver and set the Type to Occupation

    \n

    On the Description tab to set the description click the  button to get an editor.

    \n

    On the Details tab you can set the Occupation Points calculation and Minimum/Maximum Credit Rating

    \n

    On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select.

    \n

     

    \n

    Creating your first investigator

    \n

    Character

    \n

    To complete your character you need to have an active scene which can be created in the  Scenes Directory.

    \n

    Click on the  Actors Directory tab then Create Item give this a name e.g. New Investigator and set the Type to Character.

    \n

    You can drag your setup created above on to the character for the initial setup or drag this example instead @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

    \n

    Next drag your occupation created above on to the character or drag this example instead @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

    \n

    On the left hand menu bar select  Keeper's tools then select  Character creation mode.

    \n

    On the character sheet select the Development tab. The first dot indicates this is an occupation skill, the first column of numbers is the base value, next if where you assign personal points, third is for occupation points, the fourth is for experience gained during the investigator improvement phase, the final column is the total skill percent.

    \n

    You can see how many personal and occupation points you have spent so far, once you have spent all your points you need to toggle off  Character creation mode to allow characters to see their HP, MP, Sanity, and luck

    ","folder":null,"sort":0,"permission":{"default":0,"f2tegjkWyWhBBgnj":3},"flags":{"core":{"sourceId":"JournalEntry.hJS3X11e8X1jwX9b"}},"_id":"nVYLlqVzmUV5dXAW"} +{"_id":"wZtTHpGV3atKV2oD","name":"Call of Cthulhu 7th Edition (Unofficial) [en]","content":"
    \n

    System documentation v0.7.12

    \n

    This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT.

    \n

    You will need one of the following to play the game

    \n
      \n
    • Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules
    • \n
    \n

    The system automates most of the regular tasks and rules involved with running a game.

    \n

     

    \n

    This documentation can be reopened under   Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en]

    \n

     

    \n

    Recent changes

    \n

    For a full list of changes checkout the changelog on GitHub

    \n

     

    \n
      \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
    • \n
    • The Dhole's House JSON actor importer
    • \n
    \n

     

    \n

    Overview sections below

    \n
      \n
    • Actor overview
    • \n
    • Items overview
    • \n
    • Settings overview
    • \n
    • Scene menu overview
    • \n
    \n

     

    \n

    How to use the system

    \n
      \n
    • @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator}
    • \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
    • \n
    \n

     

    \n

    Actor overview

    \n
      \n
    • Character - A complete character, usually an investigator. @Compendium[CoC7.examples.JuI2aWDSEuQNKeUI]{Example Character}
    • \n
    • Container - An inventory container. @Compendium[CoC7.examples.r7bDSY4OYKxQYEas]{Example Container}
    • \n
    • Creature - A more simple character, suitable for creatures. @Compendium[CoC7.examples.XE2vjLG03wGfnYLw]{Example Creature}
    • \n
    • NPC - A more simple character, suitable for NPCs. @Compendium[CoC7.examples.4kSvDc4n13oFx8RG]{Example NPC}
    • \n
    \n

     

    \n

    Items overview

    \n
      \n
    • Archetype - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. @Compendium[CoC7.items.lu04TIRrg9P3vRqY]{Example Archetype}
    • \n
    • Book - An arcane tome that can hold spells and character improvements.
    • \n
    • Item - A piece of equipment.
    • \n
    • Occupation - A set of skills and other stats that implement a CoC occupation. @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Example Occupation}
    • \n
    • Setup - A set of default configurations for character, creature, or NPC creation. @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{Example Setup}
    • \n
    • Skill - A skill with a base percentage and some tags. @Compendium[CoC7.skills.UOuN0gESXPp2HXwH]{Example Skill}
    • \n
    • Spell - A magic spell.
    • \n
    • Status - An phobia or mania condition. @Compendium[CoC7.items.DVdvEDizPZPux1pK]{Example Mania}
    • \n
    • Talent -A special power for Pulp Cthulhu. These do not trigger automation in the system. @Compendium[CoC7.items.yqvwz769ZeJplOW7]{Example Talent}
    • \n
    • Weapon - An item with weapon statistics (this includes unarmed attacks). @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Example Weapon}
    • \n
    \n

     

    \n

    Settings overview

    \n

    Click on the  Game Settings tab then under the Game Settings heading click on Configure Settings.

    \n

    Click on  System Settings

    \n
      \n
    • Variant/Optional Rules - Here you can turn on individual Pulp Cthulhu rules and other optional rules
    • \n
    • Initiative Settings - Additional settings for optional initiative rule
    • \n
    • Roll Settings - Default options for rolls
    • \n
    • Chat Cards Settings - Configure chat messages
    • \n
    • Scene Settings - Scene Settings
    • \n
    • Game Artwork Settings - This allows you to set a custom pause icon and message
    • \n
    • Sheet Settings - This allows you to change character sheet settings and optional CSS
    • \n
    • Weapon Settings - Weapon Settings
    • \n
    • Developer And Debug Settings - These settings can break your world when new updates are released so only use them on test world
    • \n
    • Roll Table Settings - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums
    • \n
    \n

     

    \n

    Call of Cthulhu Scene Menu

    \n

    To access this menu you will need to have an active scene which can be created in the  Scenes Directory.

    \n
      \n
    • Keeper's tools - Here you can toggle character creation mode, character development phase, actor importer, toggle automatic XP gain on a success, and start a rest
    • \n
    • Roll ! - Create a roll in chat
    • \n
    • Create link - Create a roll link for players to click
    • \n
    \n
    ","img":null,"folder":null,"sort":0,"permission":{"default":0,"OWtJ6HxEEsDD4EKR":3,"f2tegjkWyWhBBgnj":3},"flags":{"core":{"sourceId":"JournalEntry.A8tkfI4PPUTYRNK0"}}} diff --git a/styles/interface/compendium.less b/styles/interface/compendium.less index dfd0c598..1341256f 100644 --- a/styles/interface/compendium.less +++ b/styles/interface/compendium.less @@ -7,3 +7,6 @@ line-height: 32px; display: block; } +div.coc7overview li { + margin: 0.3rem; +} From 89f4e291b3ac74acaa7469b45261d000d5a0d902 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Fri, 5 Aug 2022 10:35:27 +0100 Subject: [PATCH 684/726] npm run format npm run lint --- lang/it.json | 6 ++-- module/actors/sheets/base.js | 41 ++++++++++++------------- module/apps/canvas.js | 6 ++-- module/apps/link-creation-dialog.js | 9 +++--- module/apps/link.js | 14 ++++++--- module/apps/parser.js | 38 +++++++++++------------ module/check.js | 15 +++++---- module/coc7.js | 10 +++--- module/dice.js | 13 +++++--- module/items/sheets/skill.js | 4 +-- module/items/skill/data.js | 46 +++++++++++++--------------- styles/dev.less | 10 +++--- styles/sheets/form-applications.less | 12 ++++---- 13 files changed, 115 insertions(+), 109 deletions(-) diff --git a/lang/it.json b/lang/it.json index 4efd35af..16a5f142 100644 --- a/lang/it.json +++ b/lang/it.json @@ -426,7 +426,7 @@ "CoC7.AnySpecName": "Generico", "CoC7.BoutOfMadnessName": "Attacco di follia", "CoC7.InsanityName": "Follia", - + "CoC7.NewSkillName": "nuova abilità", "CoC7.AddSkill": "Aggiungi abilità", "CoC7.CleanSkillList": "Svuota la lista delle abilità", @@ -592,7 +592,7 @@ "CoC7.MythosGain": "Guadagno per i Miti", "CoC7.YouGainedCthulhuMythos": "La tua mente trema davanti alla manifestazione ultraterrena (+{value}% Miti di Cthulhu)", "CoC7.CardResolved": "Scheda risolta", - + "CoC7.InsertLocation": "Inserisci luogo", "CoC7.RemoveLocation": "Rimuovi luogo", "CoC7.LocationNotEmpty": "Non puoi rimuovere un luogo con un personaggio", @@ -707,7 +707,7 @@ "CoC7.Chase.PreysMax": "Prede Max: {value}", "CoC7.Chase.ChasersMin": "Inseguitori Min: {value}", "CoC7.Chase.ChasersMax": "Inseguitori Max: {value}", - + "CoC7.SpellCastingTime": "Tempo di lancio", "CoC7.SpellCastingCost": "Costo di lancio", "CoC7.CallSpell": "Richiamare", diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 672f895c..f64436b3 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -1,4 +1,4 @@ -/* global $, ActorSheet, ChatMessage, CONST, Dialog, FormData, game, getProperty, Hooks, mergeObject, Roll, TextEditor, ui */ +/* global $, ActorSheet, ChatMessage, CONST, Dialog, FormData, game, getProperty, Hooks, Item, mergeObject, Roll, TextEditor, ui */ import { RollDialog } from '../../apps/roll-dialog.js' import { CoC7ChatMessage } from '../../apps/coc7-chat-message.js' @@ -866,7 +866,7 @@ export class CoC7ActorSheet extends ActorSheet { */ html.find('.test-trigger').click(async event => { if (!game.settings.get('CoC7', 'hiddendevmenu')) return null - const item = await Item.create({ + await Item.create({ name: '__CoC7InternalItem__', type: 'item' }) @@ -922,9 +922,8 @@ export class CoC7ActorSheet extends ActorSheet { typeof game.CoC7Tooltips.ToolTipHover !== 'undefined' && game.CoC7Tooltips.ToolTipHover !== null ) { - const isCombat = game.CoC7Tooltips.ToolTipHover.classList?.contains( - 'combat' - ) + const isCombat = + game.CoC7Tooltips.ToolTipHover.classList?.contains('combat') const item = game.CoC7Tooltips.ToolTipHover.closest('.item') if (typeof item !== 'undefined') { const skillId = item.dataset.skillId @@ -946,8 +945,8 @@ export class CoC7ActorSheet extends ActorSheet { game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '' }) } @@ -986,8 +985,8 @@ export class CoC7ActorSheet extends ActorSheet { game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '' }) } @@ -1029,8 +1028,8 @@ export class CoC7ActorSheet extends ActorSheet { game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '' }) } @@ -1056,8 +1055,8 @@ export class CoC7ActorSheet extends ActorSheet { (game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '') }) } @@ -1263,11 +1262,11 @@ export class CoC7ActorSheet extends ActorSheet { if (data.linkType === 'coc7-link') { if (data.type === 'effect') { const link = await CoC7Link.fromData(data) - if( link.data.effect){ - this.actor.createEmbeddedDocuments( 'ActiveEffect', [link.data.effect]) + if (link.data.effect) { + this.actor.createEmbeddedDocuments('ActiveEffect', [link.data.effect]) } } - } + } await super._onDrop(event) } @@ -1908,9 +1907,8 @@ export class CoC7ActorSheet extends ActorSheet { value: event.currentTarget.value }) ) - formData[event.currentTarget.name] = game.i18n.format( - 'CoC7.ErrorInvalid' - ) + formData[event.currentTarget.name] = + game.i18n.format('CoC7.ErrorInvalid') } } } @@ -1930,9 +1928,8 @@ export class CoC7ActorSheet extends ActorSheet { value: event.currentTarget.value }) ) - formData[event.currentTarget.name] = game.i18n.format( - 'CoC7.ErrorInvalid' - ) + formData[event.currentTarget.name] = + game.i18n.format('CoC7.ErrorInvalid') } } } diff --git a/module/apps/canvas.js b/module/apps/canvas.js index 5e387133..bdc80538 100644 --- a/module/apps/canvas.js +++ b/module/apps/canvas.js @@ -43,8 +43,10 @@ export class CoC7Canvas { if (!dropTargetTokens.length) { // Apply to everyone ? or only players ? or nobody } else { - for( const t of dropTargetTokens){ - await t.actor.createEmbeddedDocuments( 'ActiveEffect', [link.data.effect]) + for (const t of dropTargetTokens) { + await t.actor.createEmbeddedDocuments('ActiveEffect', [ + link.data.effect + ]) } } } else { diff --git a/module/apps/link-creation-dialog.js b/module/apps/link-creation-dialog.js index 5e74e5d8..2e725157 100644 --- a/module/apps/link-creation-dialog.js +++ b/module/apps/link-creation-dialog.js @@ -1,4 +1,4 @@ -/* global canvas, diffObject, expandObject, FormApplication, game, mergeObject, ui */ +/* global canvas, CONST,diffObject, expandObject, FormApplication, FormDataExtended, foundry, game, mergeObject, ui */ import { CoCActor } from '../actors/actor.js' import { chatHelper } from '../chat/helper.js' import { CoC7Check } from '../check.js' @@ -164,7 +164,7 @@ export class CoC7LinkCreationDialog extends FormApplication { super.activateListeners(html) - //Handling effects + // Handling effects html.find('.effect-control').click(this._onEffectControl.bind(this)) } @@ -197,10 +197,11 @@ export class CoC7LinkCreationDialog extends FormApplication { /** @inheritdoc */ _getSubmitData (updateData = {}) { const fd = new FormDataExtended(this.form, { editors: this.editors }) - let data = foundry.utils.expandObject(fd.toObject()) + const data = foundry.utils.expandObject(fd.toObject()) if (updateData) foundry.utils.mergeObject(data, updateData) - if (data.effect) + if (data.effect) { data.effect.changes = Array.from(Object.values(data.effect.changes || {})) + } return data } diff --git a/module/apps/link.js b/module/apps/link.js index 579719b8..ed4372bd 100644 --- a/module/apps/link.js +++ b/module/apps/link.js @@ -1,4 +1,4 @@ -/* global duplicate, game, mergeObject */ +/* global duplicate, foundry, game, mergeObject */ import { chatHelper } from '../chat/helper.js' import { CoCActor } from '../actors/actor.js' @@ -216,7 +216,10 @@ export class CoC7Link { // Effect if (this.is.effect || x.object) { - if( x.object && (typeof x.object === 'string' || x.object instanceof String)){ + if ( + x.object && + (typeof x.object === 'string' || x.object instanceof String) + ) { this._linkData.effect = JSON.parse(x.object) } else this._linkData.effect = foundry.utils.deepClone(x.object) if (!this._linkData.effect.changes) this._linkData.effect.changes = [] @@ -448,7 +451,7 @@ export class CoC7Link { } case CoC7Link.LINK_TYPE.EFFECT: { - let effectData = foundry.utils.deepClone(this._linkData.effect) + const effectData = foundry.utils.deepClone(this._linkData.effect) if (!this.effectIsTemp) delete effectData.duration if (effectData.changes.length === 0) delete effectData.changes if (!effectData.disabled) delete effectData.disabled @@ -456,9 +459,10 @@ export class CoC7Link { let link = `@coc7.effect[${JSON.stringify(effectData)}]` if ( this._linkData.hasLabel && - typeof this._linkData.label != 'undefined' - ) + typeof this._linkData.label !== 'undefined' + ) { link += `{${this._linkData.label}}` + } return link } diff --git a/module/apps/parser.js b/module/apps/parser.js index 8535f2bd..dd3c9127 100644 --- a/module/apps/parser.js +++ b/module/apps/parser.js @@ -64,16 +64,14 @@ export class CoC7Parser { if (game.settings.get('core', 'rollMode') === 'blindroll') { data.blind = true } - const link = CoC7Parser.createCoC7Link(data) - if (link) { - editor.insertContent(link) - } + const link = CoC7Parser.createCoC7Link(data) + if (link) { + editor.insertContent(link) + } } else { const link = await CoC7Link.fromData(data) editor.insertContent(link.link) } - - } else if (isCtrlKey(event)) { event.stopPropagation() @@ -287,10 +285,6 @@ export class CoC7Parser { } data.displayName = a.dataset.displayName ? a.innerText : null event.originalEvent.dataTransfer.setData('text/plain', JSON.stringify(data)) - const pouet = JSON.parse( - event.originalEvent.dataTransfer.getData('text/plain') - ) - const prout = 45 } static _createLink (match, tag, type, options, name) { @@ -312,7 +306,7 @@ export class CoC7Parser { } const matches = options.matchAll(/[^,]+/gi) - if ('effect' == type) { + if (type === 'effect') { data.effect = JSON.parse(options) data.dataset.object = options } else { @@ -350,8 +344,9 @@ export class CoC7Parser { data.dataset.type?.toLowerCase() ) ) { - humanName = CoC7Utilities.getCharacteristicNames(data.dataset.name) - ?.label + humanName = CoC7Utilities.getCharacteristicNames( + data.dataset.name + )?.label } title = game.i18n.format( `CoC7.LinkCheck${!data.dataset.difficulty ? '' : 'Diff'}${ @@ -392,6 +387,7 @@ export class CoC7Parser { break case 'effect': title = data.effect.label + break default: break } @@ -409,13 +405,15 @@ export class CoC7Parser { a.draggable = true data.icon = data.icon ?? data.effect?.icon ?? 'fas fa-dice' // check if it's an image or an icon - if (data.icon.includes('\\') || data.icon.includes('.')) + if (data.icon.includes('\\') || data.icon.includes('.')) { data.img = data.icon + } if (data.blind) a.innerHTML += '' - if (data.img) + if (data.img) { a.innerHTML += `` - else + } else { a.innerHTML += `` + } a.innerHTML += `${data.name}` return a @@ -492,9 +490,11 @@ export class CoC7Parser { return token.actor.weaponCheck(options, event.shiftKey) } - case 'effect': { - await token.actor.createEmbeddedDocuments( 'ActiveEffect', [link.data.effect]) - } + case 'effect': + await token.actor.createEmbeddedDocuments('ActiveEffect', [ + link.data.effect + ]) + break default: } diff --git a/module/check.js b/module/check.js index 3969c943..6b1a9e9a 100644 --- a/module/check.js +++ b/module/check.js @@ -108,9 +108,8 @@ export class CoC7Check { // if (!this.actor || !this.actor.id) return undefined if (!this._rawValue) { if (this.characteristic) { - this.rawValue = this.actor.data.data.characteristics[ - this.characteristic - ].value + this.rawValue = + this.actor.data.data.characteristics[this.characteristic].value } if (this.skill) this.rawValue = this.skill.value if (this.attribute) { @@ -873,9 +872,8 @@ export class CoC7Check { } else { if (this.characteristic) { this.isCharactiristic = true - this.rawValue = this.actor.data.data.characteristics[ - this.characteristic - ].value + this.rawValue = + this.actor.data.data.characteristics[this.characteristic].value } if (this.skill) { @@ -1763,8 +1761,9 @@ export class CoC7Check { a.classList.add(...this.cssClassList) a.title = this.tooltipHeader a.dataset.roll = escape(this.JSONRollString) // TODO!IMPORTANT!!! - a.innerHTML = ` ${this - .modifiedResult || '??'}` + a.innerHTML = ` ${ + this.modifiedResult || '??' + }` return a } diff --git a/module/coc7.js b/module/coc7.js index cf9558ab..142f91e6 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -1,4 +1,4 @@ -/* global $, Combat, CONFIG, CONST, game, Hooks, isNewerVersion, tinyMCE */ +/* global $, Combat, CONFIG, CONST, game, Hooks, isNewerVersion, ItemDirectory, tinyMCE */ import { CoC7NPCSheet } from './actors/sheets/npc-sheet.js' import { CoC7CreatureSheet } from './actors/sheets/creature-sheet.js' import { CoC7CharacterSheet } from './actors/sheets/character.js' @@ -408,14 +408,14 @@ Hooks.on('ready', async () => { game.settings.get('CoC7', 'boutOfMadnessSummaryTable') === 'none' ? null : game.tables.get( - game.settings.get('CoC7', 'boutOfMadnessSummaryTable') - ), + game.settings.get('CoC7', 'boutOfMadnessSummaryTable') + ), boutOfMadness_RealTime: game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') === 'none' ? null : game.tables.get( - game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') - ) + game.settings.get('CoC7', 'boutOfMadnessRealTimeTable') + ) // maniasIndex: ge.settings.get('CoC7', 'boutOfMadnessPhobiasIndex'), // phobiasIndex: game.settings.get('CoC7', 'boutOfMadnessManiasIndex'), // phobias: ('none' == game.settings.get('CoC7', 'samplePhobiasTable'))?null:game.tables.get(game.settings.get('CoC7', 'samplePhobiasTable')), diff --git a/module/dice.js b/module/dice.js index 8df87000..36887dec 100644 --- a/module/dice.js +++ b/module/dice.js @@ -11,12 +11,17 @@ export class CoC7Dice { } } let roll - if (game.CoC7.dev.dice.alwaysCrit && game.settings.get('CoC7', 'hiddendevmenu')) { + if ( + game.CoC7.dev.dice.alwaysCrit && + game.settings.get('CoC7', 'hiddendevmenu') + ) { roll = Roll.fromData(CoC7Dice.crit01) - } else if (game.CoC7.dev.dice.alwaysFumble && game.settings.get('CoC7', 'hiddendevmenu')) { + } else if ( + game.CoC7.dev.dice.alwaysFumble && + game.settings.get('CoC7', 'hiddendevmenu') + ) { roll = Roll.fromData(CoC7Dice.fumble99) - } - else{ + } else { roll = await new Roll( '1dt' + (alternativeDice !== '' diff --git a/module/items/sheets/skill.js b/module/items/sheets/skill.js index 9023b577..8b54c2b7 100644 --- a/module/items/sheets/skill.js +++ b/module/items/sheets/skill.js @@ -109,8 +109,8 @@ export class CoC7SkillSheet extends ItemSheet { async _onClickToggle (event) { event.preventDefault() - const propertyId = event.currentTarget.closest('.toggle-switch').dataset - .property + const propertyId = + event.currentTarget.closest('.toggle-switch').dataset.property await this.item.toggleProperty( propertyId, event.metaKey || diff --git a/module/items/skill/data.js b/module/items/skill/data.js index 39b87a07..ce8b40b5 100644 --- a/module/items/skill/data.js +++ b/module/items/skill/data.js @@ -1,25 +1,22 @@ +/* global CONST, foundry */ import { CoC7Item } from '../item.js' export class CoC7Skill extends CoC7Item { async applyModifier (change) { - return - - const changes = this.data.data.changes - ? foundry.utils.duplicate(this.data.data.changes) - : [] - - const index = changes.findIndex(c => c.effect._id == change.effect.id) - - if (-1 === index) { - changes.push(change) - await this.update({ 'data.changes': changes }) - } else { - //Compare if there's a change in the efect data - if (!JSON.stringify(change) === JSON.stringify(changes[index])) { - changes[index] = change - await this.update({ 'data.changes': changes }) - } - } + // const changes = this.data.data.changes + // ? foundry.utils.duplicate(this.data.data.changes) + // : [] + // const index = changes.findIndex(c => c.effect._id == change.effect.id) + // if (-1 === index) { + // changes.push(change) + // await this.update({ 'data.changes': changes }) + // } else { + // //Compare if there's a change in the efect data + // if (!JSON.stringify(change) === JSON.stringify(changes[index])) { + // changes[index] = change + // await this.update({ 'data.changes': changes }) + // } + // } } get hasActiveEffects () { @@ -44,8 +41,8 @@ export class CoC7Skill extends CoC7Item { changes.sort((a, b) => a.priority - b.priority) changes = changes.filter( e => - e.key.toLowerCase() == effectKeyShort || - e.key.toLowerCase() == effectKeyFull + e.key.toLowerCase() === effectKeyShort || + e.key.toLowerCase() === effectKeyFull ) return changes } @@ -70,17 +67,18 @@ export class CoC7Skill extends CoC7Item { updated = modifier break case modes.UPGRADE: - if (modifer > updated) updated = modifier + if (modifier > updated) updated = modifier break case modes.DOWNGRADE: - if (modifer < updated) updated = modifier + if (modifier < updated) updated = modifier break } } } - if (!isNaN(updated) && updated != value) { + if (!isNaN(updated) && updated !== value) { if (updated < 0) updated = 0 return updated - } return value + } + return value } } diff --git a/styles/dev.less b/styles/dev.less index 1a12d782..075cc5e6 100644 --- a/styles/dev.less +++ b/styles/dev.less @@ -1,6 +1,6 @@ .floating-debug { - position: absolute; - left: -40px; - color: darkred; - font-size: 2rem; -} \ No newline at end of file + position: absolute; + left: -40px; + color: darkred; + font-size: 2rem; +} diff --git a/styles/sheets/form-applications.less b/styles/sheets/form-applications.less index 199de823..d12f4a65 100644 --- a/styles/sheets/form-applications.less +++ b/styles/sheets/form-applications.less @@ -1,7 +1,7 @@ -#link-creation{ - .effect-options{ - .tab[data-tab]{ - min-height: 10.5rem; - } +#link-creation { + .effect-options { + .tab[data-tab] { + min-height: 10.5rem; } -} \ No newline at end of file + } +} From 5f77a60342411fb4ef13c09d7d746a9657696b0f Mon Sep 17 00:00:00 2001 From: Stefano1975t <97825580+Stefano1975t@users.noreply.github.com> Date: Sat, 6 Aug 2022 22:20:14 +0200 Subject: [PATCH 685/726] Update it.json --- lang/it.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lang/it.json b/lang/it.json index 16a5f142..5200e7d6 100644 --- a/lang/it.json +++ b/lang/it.json @@ -692,7 +692,9 @@ "CoC7.ErrorTokenNotOnScene": "La Pedina non appartiene alla scena di questo luogo", "CoC7.AddParticipant": "Aggiungi Partecipante", "CoC7.Remove": "Rimuovi", + "CoC7.Delete": "Cancella", "CoC7.Edit": "Modifica", + "CoC7.Create": "Crea", "CoC7.MakeActive": "Rendi Attivo", "CoC7.SelectNewSkill": "Seleziona l'abilità", "CoC7.AskDamageRoll": "Chiedi il tiro per il danno", @@ -891,6 +893,9 @@ "CoC7.Cancel": "Cancella", "CoC7.Add": "Aggiungi", "CoC7.Update": "Aggiorna", + "CoC7.Enable": "Attiva", + "CoC7.Disable": "Disattiva", + "CoC7.Duration": "Durata", "CoC7.ActorImporter": "Importa Personaggio", "CoC7.ActorImporterSummary": "Importa un PNG o una Creatura dalla descrizione e dalle statistiche. Basta incollare il testo corrispondente", @@ -1128,4 +1133,6 @@ "CoC7.getTheExample": "Copia Esempio", "CoC7.Copied": "Copiato il testo di esempio negli Appunti" + + "CoC7.EffectNew": "Nuovo effetto" } From 117f817d90a785d18f244e1337ed221e95fa59e1 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 7 Aug 2022 10:26:07 +0100 Subject: [PATCH 686/726] Missing comma in JSON file --- lang/it.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lang/it.json b/lang/it.json index 5200e7d6..7ad9298b 100644 --- a/lang/it.json +++ b/lang/it.json @@ -1132,7 +1132,7 @@ "SETTINGS.ChaseShowTokenMovementHint": "Mostra movimento sulla griglia quando una pedina viene mossa nel luogo successivo.", "CoC7.getTheExample": "Copia Esempio", - "CoC7.Copied": "Copiato il testo di esempio negli Appunti" - + "CoC7.Copied": "Copiato il testo di esempio negli Appunti", + "CoC7.EffectNew": "Nuovo effetto" } From 012571befada0804c79b7ddca515f0f429d3fb12 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 7 Aug 2022 10:37:13 +0100 Subject: [PATCH 687/726] Add it.json and ko.json to list of files to be validated --- .github/workflows/validate-json.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-json.yml b/.github/workflows/validate-json.yml index 70fb9158..3282caf0 100644 --- a/.github/workflows/validate-json.yml +++ b/.github/workflows/validate-json.yml @@ -14,4 +14,4 @@ jobs: uses: docker://orrosenblatt/validate-json-action:latest env: INPUT_SCHEMA: ./lang/en.json - INPUT_JSONS: ./lang/cn.json,./lang/cs.json,./lang/de.json,./lang/en.json,./lang/es.json,./lang/fr.json,./lang/ja.json,./lang/pl.json,./lang/pt-BR.json,./lang/sv.json,./lang/zh-TW.json + INPUT_JSONS: ./lang/cn.json,./lang/cs.json,./lang/de.json,./lang/es.json,./lang/fr.json,./lang/it.json,./lang/ja.json,./lang/ko.json,./lang/pl.json,./lang/pt-BR.json,./lang/sv.json,./lang/zh-TW.json From b608cc91dab0f0520eb6e961a22ab0b331f33792 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 7 Aug 2022 09:41:28 +0000 Subject: [PATCH 688/726] Updated translations list --- .github/TRANSLATIONS.md | 400 ++++++++++++++++++++-------------------- 1 file changed, 201 insertions(+), 199 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index b5f34991..d5864eb3 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,207 +2,209 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! +The **it** translation is currently up to date + The following translations have been abandoned **cn**, **cs**, **de**, **es**, [are you able to help?](./ABANDONED.md) -| Key | fr | it | ja | ko | pl | pt-BR | sv | zh-TW | -| :------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **191** | **6** | **193** | **192** | **193** | **191** | **191** | **191** | -| [CoC7.ABarrier](#coc7abarrier) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AHazard](#coc7ahazard) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActionCost](#coc7actioncost) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActionCostOnFail](#coc7actioncostonfail) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Actions](#coc7actions) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorDataLinked](#coc7actordatalinked) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorDataNotLinked](#coc7actordatanotlinked) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorImported](#coc7actorimported) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorIsTokenHint](#coc7actoristokenhint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Add](#coc7add) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddActorToChase](#coc7addactortochase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddBonusDie](#coc7addbonusdie) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddParticipant](#coc7addparticipant) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AdjustedMovement](#coc7adjustedmovement) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AlreadyEncountered](#coc7alreadyencountered) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ArmorIgnored](#coc7armorignored) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AskDamageRoll](#coc7askdamageroll) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AskIntentions](#coc7askintentions) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AskRoll](#coc7askroll) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Assist](#coc7assist) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AttemptBreakDown](#coc7attemptbreakdown) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AttemptNegotiateObstacle](#coc7attemptnegotiateobstacle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Barrier](#coc7barrier) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BeingCautious](#coc7beingcautious) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BeingVeryCautious](#coc7beingverycautious) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BreakDown](#coc7breakdown) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Breakable](#coc7breakable) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Cautious](#coc7cautious) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CautiousApproach](#coc7cautiousapproach) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.AdjustedMovementShort](#coc7chaseadjustedmovementshort) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.ChasersMax](#coc7chasechasersmax) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.ChasersMin](#coc7chasechasersmin) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.CheckName](#coc7chasecheckname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.InitiativeShort](#coc7chaseinitiativeshort) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.PreysMax](#coc7chasepreysmax) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.PreysMin](#coc7chasepreysmin) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ChaseSetup](#coc7chasesetup) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckFailed](#coc7checkfailed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckName](#coc7checkname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckPassed](#coc7checkpassed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CleanSkillList](#coc7cleanskilllist) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CleanSkillListHint](#coc7cleanskilllisthint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ClearAllConditions](#coc7clearallconditions) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmCut2Chase](#coc7confirmcut2chase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmCut2ChaseHint](#coc7confirmcut2chasehint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmNextChaseRound](#coc7confirmnextchaseround) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmNextChaseRoundHint](#coc7confirmnextchaseroundhint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmResetChase](#coc7confirmresetchase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmResetChaseHint](#coc7confirmresetchasehint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmRestartChase](#coc7confirmrestartchase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmRestartChaseHint](#coc7confirmrestartchasehint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConsumeBonusDice](#coc7consumebonusdice) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Create](#coc7create) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CutToTheChase](#coc7cuttothechase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Damage](#coc7damage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DamageDealTo](#coc7damagedealto) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DamageDealt](#coc7damagedealt) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DamageOnFail](#coc7damageonfail) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DecreaseMovementAction](#coc7decreasemovementaction) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DefinitelyInsane](#coc7definitelyinsane) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Delete](#coc7delete) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseImportingName](#coc7dholehouseimportingname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Disable](#coc7disable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DoesNotMeetMinimumReqToBeAdded](#coc7doesnotmeetminimumreqtobeadded) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DontMoveToLocation](#coc7dontmovetolocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DragOnCanvas](#coc7dragoncanvas) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Duration](#coc7duration) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Edit](#coc7edit) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.EffectNew](#coc7effectnew) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Enable](#coc7enable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorBeneficiaryAtMaxBonus](#coc7errorbeneficiaryatmaxbonus) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorEmptyLocationsList](#coc7erroremptylocationslist) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorNoTokensSelected](#coc7errornotokensselected) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorParticipantAtMaxBonus](#coc7errorparticipantatmaxbonus) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorTokenNotOnScene](#coc7errortokennotonscene) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FINISH](#coc7finish) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FacingObstacle](#coc7facingobstacle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FileUploadError](#coc7fileuploaderror) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.GotLucky](#coc7gotlucky) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Hazard](#coc7hazard) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.IncludeEscapees](#coc7includeescapees) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.IncludeLatecomers](#coc7includelatecomers) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.IncreaseMovementAction](#coc7increasemovementaction) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Initialize](#coc7initialize) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Initiative](#coc7initiative) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.InsertLocation](#coc7insertlocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LocationCoordinate](#coc7locationcoordinate) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LocationInit](#coc7locationinit) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LocationNotEmpty](#coc7locationnotempty) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Locations](#coc7locations) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LuckNotEnough](#coc7lucknotenough) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MakeActive](#coc7makeactive) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MaxPossibleSanLoss](#coc7maxpossiblesanloss) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorActor](#coc7migrateerroractor) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorItem](#coc7migrateerroritem) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorScene](#coc7migrateerrorscene) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorTable](#coc7migrateerrortable) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MoveBackward](#coc7movebackward) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MoveForward](#coc7moveforward) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MoveToLocation](#coc7movetolocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MovementAction](#coc7movementaction) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NeedMin2Participants](#coc7needmin2participants) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NeedRecalculate](#coc7needrecalculate) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NeedToRecalculate](#coc7needtorecalculate) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Negotiate](#coc7negotiate) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NextRound](#coc7nextround) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoDamageDealt](#coc7nodamagedealt) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoValidCheck](#coc7novalidcheck) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoValidSkill](#coc7novalidskill) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NotAllHaveSpeedRoll](#coc7notallhavespeedroll) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NothingToRoll](#coc7nothingtoroll) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Obstacle](#coc7obstacle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleDamage](#coc7obstacledamage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleFail](#coc7obstaclefail) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleFumble](#coc7obstaclefumble) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleHasHitPoint](#coc7obstaclehashitpoint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleName](#coc7obstaclename) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstaclePassed](#coc7obstaclepassed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.OpenObstacleResolutionCard](#coc7openobstacleresolutioncard) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.OverrideCalc](#coc7overridecalc) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantAlreadyProcessed](#coc7participantalreadyprocessed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantDataMissing](#coc7participantdatamissing) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantDropHint](#coc7participantdrophint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantNotEnoughMovement](#coc7participantnotenoughmovement) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantNotFound](#coc7participantnotfound) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantUuidNotFound](#coc7participantuuidnotfound) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantsList](#coc7participantslist) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PenaltyDice](#coc7penaltydice) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PickDirectory](#coc7pickdirectory) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PlayerMovesToLocation](#coc7playermovestolocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Polish](#coc7polish) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ReflectObstacleChanges](#coc7reflectobstaclechanges) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Remove](#coc7remove) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RemoveBonusDie](#coc7removebonusdie) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RemoveLocation](#coc7removelocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RemoveObstacle](#coc7removeobstacle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Reset](#coc7reset) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Restart](#coc7restart) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Sane](#coc7sane) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SelectNewSkill](#coc7selectnewskill) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SomethingInTheWay](#coc7somethingintheway) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SpeedCheck](#coc7speedcheck) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.StartingIndex](#coc7startingindex) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.StartingRange](#coc7startingrange) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TooFast](#coc7toofast) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TooSlow](#coc7tooslow) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TryToBreak](#coc7trytobreak) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TryToGetPastBarriers](#coc7trytogetpastbarriers) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TryToNegotiateHazard](#coc7trytonegotiatehazard) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnarmedWeaponName](#coc7unarmedweaponname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Update](#coc7update) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.VehicleChase](#coc7vehiclechase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.WaitForPlayerInput](#coc7waitforplayerinput) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.WeaponSkillMain](#coc7weaponskillmain) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.YouLostTime](#coc7youlosttime) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.YouTakeNoDamage](#coc7youtakenodamage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.YouTakeSomeDamage](#coc7youtakesomedamage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleChaseSettings](#settingstitlechasesettings) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| Key | fr | ja | ko | pl | pt-BR | sv | zh-TW | +| :------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **191** | **193** | **192** | **193** | **191** | **191** | **191** | +| [CoC7.ABarrier](#coc7abarrier) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AHazard](#coc7ahazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActionCost](#coc7actioncost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActionCostOnFail](#coc7actioncostonfail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Actions](#coc7actions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorDataLinked](#coc7actordatalinked) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorDataNotLinked](#coc7actordatanotlinked) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorImported](#coc7actorimported) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorIsTokenHint](#coc7actoristokenhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Add](#coc7add) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddActorToChase](#coc7addactortochase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddBonusDie](#coc7addbonusdie) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddParticipant](#coc7addparticipant) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AdjustedMovement](#coc7adjustedmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AlreadyEncountered](#coc7alreadyencountered) | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ArmorIgnored](#coc7armorignored) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AskDamageRoll](#coc7askdamageroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AskIntentions](#coc7askintentions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AskRoll](#coc7askroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Assist](#coc7assist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AttemptBreakDown](#coc7attemptbreakdown) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AttemptNegotiateObstacle](#coc7attemptnegotiateobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Barrier](#coc7barrier) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BeingCautious](#coc7beingcautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BeingVeryCautious](#coc7beingverycautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BreakDown](#coc7breakdown) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Breakable](#coc7breakable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Cautious](#coc7cautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CautiousApproach](#coc7cautiousapproach) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.AdjustedMovementShort](#coc7chaseadjustedmovementshort) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.ChasersMax](#coc7chasechasersmax) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.ChasersMin](#coc7chasechasersmin) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.CheckName](#coc7chasecheckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.InitiativeShort](#coc7chaseinitiativeshort) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.PreysMax](#coc7chasepreysmax) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.PreysMin](#coc7chasepreysmin) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ChaseSetup](#coc7chasesetup) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckFailed](#coc7checkfailed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckName](#coc7checkname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckPassed](#coc7checkpassed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CleanSkillList](#coc7cleanskilllist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CleanSkillListHint](#coc7cleanskilllisthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ClearAllConditions](#coc7clearallconditions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmCut2Chase](#coc7confirmcut2chase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmCut2ChaseHint](#coc7confirmcut2chasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmNextChaseRound](#coc7confirmnextchaseround) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmNextChaseRoundHint](#coc7confirmnextchaseroundhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmResetChase](#coc7confirmresetchase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmResetChaseHint](#coc7confirmresetchasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmRestartChase](#coc7confirmrestartchase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmRestartChaseHint](#coc7confirmrestartchasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConsumeBonusDice](#coc7consumebonusdice) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Create](#coc7create) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CutToTheChase](#coc7cuttothechase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Damage](#coc7damage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DamageDealTo](#coc7damagedealto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DamageDealt](#coc7damagedealt) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DamageOnFail](#coc7damageonfail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DecreaseMovementAction](#coc7decreasemovementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DefinitelyInsane](#coc7definitelyinsane) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Delete](#coc7delete) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseImportingName](#coc7dholehouseimportingname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Disable](#coc7disable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DoesNotMeetMinimumReqToBeAdded](#coc7doesnotmeetminimumreqtobeadded) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DontMoveToLocation](#coc7dontmovetolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DragOnCanvas](#coc7dragoncanvas) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Duration](#coc7duration) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Edit](#coc7edit) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.EffectNew](#coc7effectnew) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Enable](#coc7enable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorBeneficiaryAtMaxBonus](#coc7errorbeneficiaryatmaxbonus) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorEmptyLocationsList](#coc7erroremptylocationslist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorNoTokensSelected](#coc7errornotokensselected) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorParticipantAtMaxBonus](#coc7errorparticipantatmaxbonus) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorTokenNotOnScene](#coc7errortokennotonscene) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.FINISH](#coc7finish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.FacingObstacle](#coc7facingobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.FileUploadError](#coc7fileuploaderror) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.GotLucky](#coc7gotlucky) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Hazard](#coc7hazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.IncludeEscapees](#coc7includeescapees) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.IncludeLatecomers](#coc7includelatecomers) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.IncreaseMovementAction](#coc7increasemovementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Initialize](#coc7initialize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Initiative](#coc7initiative) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.InsertLocation](#coc7insertlocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LocationCoordinate](#coc7locationcoordinate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LocationInit](#coc7locationinit) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LocationNotEmpty](#coc7locationnotempty) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Locations](#coc7locations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LuckNotEnough](#coc7lucknotenough) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MakeActive](#coc7makeactive) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MaxPossibleSanLoss](#coc7maxpossiblesanloss) | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorActor](#coc7migrateerroractor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorItem](#coc7migrateerroritem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorScene](#coc7migrateerrorscene) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorTable](#coc7migrateerrortable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MoveBackward](#coc7movebackward) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MoveForward](#coc7moveforward) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MoveToLocation](#coc7movetolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MovementAction](#coc7movementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NeedMin2Participants](#coc7needmin2participants) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NeedRecalculate](#coc7needrecalculate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NeedToRecalculate](#coc7needtorecalculate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Negotiate](#coc7negotiate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NextRound](#coc7nextround) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoDamageDealt](#coc7nodamagedealt) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoValidCheck](#coc7novalidcheck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoValidSkill](#coc7novalidskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NotAllHaveSpeedRoll](#coc7notallhavespeedroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NothingToRoll](#coc7nothingtoroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Obstacle](#coc7obstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleDamage](#coc7obstacledamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleFail](#coc7obstaclefail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleFumble](#coc7obstaclefumble) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleHasHitPoint](#coc7obstaclehashitpoint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleName](#coc7obstaclename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstaclePassed](#coc7obstaclepassed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.OpenObstacleResolutionCard](#coc7openobstacleresolutioncard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.OverrideCalc](#coc7overridecalc) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantAlreadyProcessed](#coc7participantalreadyprocessed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantDataMissing](#coc7participantdatamissing) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantDropHint](#coc7participantdrophint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantNotEnoughMovement](#coc7participantnotenoughmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantNotFound](#coc7participantnotfound) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantUuidNotFound](#coc7participantuuidnotfound) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantsList](#coc7participantslist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PenaltyDice](#coc7penaltydice) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PickDirectory](#coc7pickdirectory) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PlayerMovesToLocation](#coc7playermovestolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Polish](#coc7polish) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ReflectObstacleChanges](#coc7reflectobstaclechanges) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Remove](#coc7remove) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RemoveBonusDie](#coc7removebonusdie) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RemoveLocation](#coc7removelocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RemoveObstacle](#coc7removeobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Reset](#coc7reset) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Restart](#coc7restart) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Sane](#coc7sane) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SelectNewSkill](#coc7selectnewskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SomethingInTheWay](#coc7somethingintheway) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpeedCheck](#coc7speedcheck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.StartingIndex](#coc7startingindex) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.StartingRange](#coc7startingrange) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TooFast](#coc7toofast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TooSlow](#coc7tooslow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TryToBreak](#coc7trytobreak) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TryToGetPastBarriers](#coc7trytogetpastbarriers) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TryToNegotiateHazard](#coc7trytonegotiatehazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UnarmedWeaponName](#coc7unarmedweaponname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Update](#coc7update) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.VehicleChase](#coc7vehiclechase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.WaitForPlayerInput](#coc7waitforplayerinput) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.WeaponSkillMain](#coc7weaponskillmain) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.YouLostTime](#coc7youlosttime) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.YouTakeNoDamage](#coc7youtakenodamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.YouTakeSomeDamage](#coc7youtakesomedamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleChaseSettings](#settingstitlechasesettings) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ##### CoC7.ABarrier From 3c3a86af858765352fabf688c05968ba41170d60 Mon Sep 17 00:00:00 2001 From: HavlockV Date: Sun, 7 Aug 2022 15:14:43 +0300 Subject: [PATCH 689/726] prepare data override --- module/actors/actor.js | 5 +++ module/actors/sheets/base.js | 68 +++++++++++++++++++++--------------- module/items/item.js | 1 + 3 files changed, 46 insertions(+), 28 deletions(-) diff --git a/module/actors/actor.js b/module/actors/actor.js index 173389bf..14078f14 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -58,6 +58,11 @@ export class CoCActor extends Actor { // } // + /** @override */ + prepareDerivedData(){ + super.prepareDerivedData() + } + /** @override */ static async create (data, options = {}) { data.token = data.token || {} diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 672f895c..e6f9ba6c 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -226,36 +226,39 @@ export class CoC7ActorSheet extends ActorSheet { if (item.type === 'skill') { if (item.data.properties.special) { if (item.data.properties.fighting) { - if ( - item.data.specialization !== - game.i18n.localize('CoC7.FightingSpecializationName') - ) { - const itemToUpdate = this.actor.items.get(item._id) - await itemToUpdate.update({ - 'data.specialization': game.i18n.localize( - 'CoC7.FightingSpecializationName' - ) - }) + // if ( + // item.data.specialization !== + // game.i18n.localize('CoC7.FightingSpecializationName') + // ) { + // ui.notifications.info('Setting fichting spec name') + // Not necessary to cmmit the changes in DB + // const itemToUpdate = this.actor.items.get(item._id) + // await itemToUpdate.update({ + // 'data.specialization': game.i18n.localize( + // 'CoC7.FightingSpecializationName' + // ) + // }) item.data.specialization = game.i18n.localize( 'CoC7.FightingSpecializationName' ) // TODO : Client with different language = recursive call when opening the same sheet. - } + // } } if (item.data.properties.firearm) { - if ( - item.data.specialization !== - game.i18n.localize('CoC7.FirearmSpecializationName') - ) { - const itemToUpdate = this.actor.items.get(item._id) - await itemToUpdate.update({ - 'data.specialization': game.i18n.localize( - 'CoC7.FirearmSpecializationName' - ) - }) + // if ( + // item.data.specialization !== + // game.i18n.localize('CoC7.FirearmSpecializationName') + // ) { + // const itemToUpdate = this.actor.items.get(item._id) + // ui.notifications.info('Setting firearms spec name') + // await itemToUpdate.update({ + // 'data.specialization': game.i18n.localize( + // 'CoC7.FirearmSpecializationName' + // ) + // }) item.data.specialization = game.i18n.localize( 'CoC7.FirearmSpecializationName' ) - } + // } } } @@ -292,22 +295,29 @@ export class CoC7ActorSheet extends ActorSheet { if (value) { item.data.value = value const itemToUpdate = this.actor.items.get(item._id) + console.info(`[COC7] (Actor:${this.name}) Evaluating skill ${item.name}:${item.data.value} to ${value}`) await itemToUpdate.update({ 'data.value': value }) } } + const skill = this.actor.items.get(item._id) + item.data.base = skill.value // ACTIVE_EFFECT necessary to apply effects + item.data.value = skill.value } else { const skill = this.actor.items.get(item._id) item.data.base = await skill.asyncBase() if (item.data.value) { + // This should be part of migration or done at init ! + // Was done when skill value was changed to base + adjustement const value = item.data.value const exp = item.data.adjustments?.experience ? parseInt(item.data.adjustments.experience) : 0 let updatedExp = exp + parseInt(item.data.value) - skill.value if (updatedExp <= 0) updatedExp = null + console.info(`[COC7] Updating skill ${skill.name} experience. Experience missing: ${updatedExp}`) await this.actor.updateEmbeddedDocuments('Item', [ { _id: item._id, @@ -317,8 +327,8 @@ export class CoC7ActorSheet extends ActorSheet { ]) if (!item.data.adjustments) item.data.adjustments = {} item.data.adjustments.experience = updatedExp - item.data.value = value - } else item.data.value = skill.value + item.data.value = skill.value // ACTIVE_EFFECT necessary to apply effects + } else item.data.value = skill.value // ACTIVE_EFFECT necessary to apply effects } } @@ -403,8 +413,7 @@ export class CoC7ActorSheet extends ActorSheet { // si il n'existe plus il faut le retrouver ou passer skillset a false. if (data.combatSkills[weapon.data.skill.main.id]) { const skill = this.actor.items.get(weapon.data.skill.main.id) - weapon.data.skill.main.name = - data.combatSkills[weapon.data.skill.main.id].name + weapon.data.skill.main.name = skill.data.data.skillName weapon.data.skill.main.value = skill.value } else { weapon.skillSet = false @@ -415,8 +424,7 @@ export class CoC7ActorSheet extends ActorSheet { const skill = this.actor.items.get( weapon.data.skill.alternativ.id ) - weapon.data.skill.alternativ.name = - data.combatSkills[weapon.data.skill.alternativ.id].name + weapon.data.skill.alternativ.name = skill.data.data.skillName weapon.data.skill.alternativ.value = skill.value } } @@ -486,6 +494,10 @@ export class CoC7ActorSheet extends ActorSheet { data.data.attribs.build.value = this.actor.build if (typeof this.actor.compendium === 'undefined' && this.actor.isOwner) { + ui.notifications.info('changr spec name 4') + // ACTIVE_EFFECT should be applied here + // This whole part needs to be re-evaluated + // Seeting this shouldn't be necessary this.actor.update( { 'data.attribs.mov.value': this.actor.mov }, { render: false } diff --git a/module/items/item.js b/module/items/item.js index 65a3871a..3f8de085 100644 --- a/module/items/item.js +++ b/module/items/item.js @@ -615,6 +615,7 @@ export class CoC7Item extends Item { async asyncBase () { const e = this._base if (e[1]) { + console.info( `[COC7] (${this.parent?.name}) Evaluating skill ${this.name}:${this.data.data.base} to ${e[0]}`) await this.update({ 'data.base': e[0] }) } return e[0] From 39d599ac0e547a34e6de6b2a2ada2fc0d1a5f91e Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 7 Aug 2022 22:42:47 +0100 Subject: [PATCH 690/726] Replace new_chase.webp with a shorter version Create manual md pages and compendium entries --- .../workflows/update-translations-page.yml | 2 +- assets/manual/chases/new_chase.webp | Bin 15492 -> 11160 bytes docs/en/chases.md | 89 ++++++++++ docs/en/first_investigator.md | 47 ++++++ docs/en/manual.md | 79 +++++++++ generate-manuals.js | 85 ++++++++++ module/manual/en/chases.md | 152 ++++++++++++++++++ module/manual/en/first_investigator.md | 69 ++++++++ module/manual/en/manual.md | 95 +++++++++++ package.json | 1 + packs/system-doc.db | 6 +- 11 files changed, 621 insertions(+), 4 deletions(-) create mode 100644 docs/en/chases.md create mode 100644 docs/en/first_investigator.md create mode 100644 docs/en/manual.md create mode 100644 generate-manuals.js create mode 100644 module/manual/en/chases.md create mode 100644 module/manual/en/first_investigator.md create mode 100644 module/manual/en/manual.md diff --git a/.github/workflows/update-translations-page.yml b/.github/workflows/update-translations-page.yml index 52f0b3e3..5212b050 100644 --- a/.github/workflows/update-translations-page.yml +++ b/.github/workflows/update-translations-page.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [14.x] + node-version: [16.x] steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} diff --git a/assets/manual/chases/new_chase.webp b/assets/manual/chases/new_chase.webp index e2b38bbe1eb79e2bdab4520807c630ee41662427..4b18ad530e60d9715e10fda434b8ba0cb26a16f1 100644 GIT binary patch literal 11160 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 z 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 + +To modify a location select it by clicking on it. This will display the location details on the header part of the sheet +![](../../assets/manual/chases/setting_locations_1.webp) + +1. This will add a participant. If the chase is started the participant will be on that location. If the chase isn't started the participant will be added on the init track2. This will remove the location. A location has to be empty to be removed3. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin indicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location4. Add a new location5. Active location + +# Setting up obstacles +You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties +![](../../assets/manual/chases/setting_locations_2.webp) + +1. Toggle this to add damage to a barrier2. Barrier's hit points3. Movement action cost in case of failure4. Check used to pass the location. When it's red the active actor does not have the associated check + +# Cut to the chase +When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start +![](../../assets/manual/chases/cut_to_the_chase_1.webp) + +1. Initiative track. The active participant is circled in orange2. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated3. A barrier4. A hazard +# Obstacle resolution flow + +![](../../assets/manual/chases/cut_to_the_chase_2.webp) + +1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interact to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow +Here is a shorten flow example: + +![](../../assets/manual/chases/obstalce_flow_1.webp) +![](../../assets/manual/chases/obstalce_flow_2.webp) +![](../../assets/manual/chases/obstalce_flow_3.webp) +![](../../assets/manual/chases/obstalce_flow_4.webp) + +Once the flow is complete all changes are send to the chase +![](../../assets/manual/chases/cut_to_the_chase_3.webp) + +This round is finished. All actor have spent their movement action. You can click Next round to proceed +# Participant controls +![](../../assets/manual/chases/participant_controls.webp) + +You can modify or move a participant by using the controls button on his card +1. Those 3 icons will allow to delete, modify and activate a participant2. Movement action. A yellow is available, grey is consumed, red is a deficit3. This will control your participant bonus. He can draw a gun or be awarded bonus dices4. Movement action controls. Here you can increase or decrease movement actions5. Movement controls. You can move backward or forward. You can assist an ally (consume an action and give a bonus die) or take a cautious approach \ No newline at end of file diff --git a/docs/en/first_investigator.md b/docs/en/first_investigator.md new file mode 100644 index 00000000..10f6cf64 --- /dev/null +++ b/docs/en/first_investigator.md @@ -0,0 +1,47 @@ +# Initial item setup + +The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required + +# Skill + +Click on the Compendium Packs tab then under the Item heading open up the Skills Item (CoC7). Here you will find the skills shown on the characters sheets available from Chaosium's website +- _No adjustment_ - Can not be assigned personal skill points- _No XP gain_ - You do not mark this skill for improvement on a success- _Specialization_ - This skill is part of a group like Pilot or Flighting- _Uncommon_ - This skill is uncommon and can be automatically hidden on the character sheet- _Pushed_ - This skill can be pushed- _Fighting_ - Automatically set Specialization, Combat, and the specialization name to Fighting- _Firearms_ - Automatically set Specialization, Combat, and the specialization name to Firearms +You can create a new Item Compendium and copy the skills you require into it allowing you to edit them. You can also create new skills by creating new Skill Items (Click on the Items Directory tab then Create Item give this a name e.g. Gardening and set the Type to Skill) +## Setup + +Once you have set up your skills next create up a Setup, here is an example from the Items Examples compendium + +Setups allow to you standardise what skills, items, biography sections, and characteristics the investigators start with +Click on the Items Directory tab then Create Item give this a name e.g. New Investigator Setup and set the Type to Setup + +On the Description tab to set the description click the button to get an editor +On the Details tab click the on the Biography Sections to add any sections you require from the Create a Backstory step of investigator creation. Click on the Compendium Packs tab then under the Item heading open up the Items Examples Item (CoC7) and drag the onto the setup +On the Characteristics tab you can customise how investigator characteristics are rolled / bought + +On the Skills tab you can drag the skills the investigator will have +All actor and item sheets have a tab which can be used by the Keepers to store notes, only users that are set to GM can see this tab + +## Occupation + +Occupations allow you set how many the occupation points, credit rating range, and skills the investigator starts with. Here is an example from the Items Examples compendium + +Click on the Items Directory tab then Create Item give this a name e.g. Driver and set the Type to Occupation + +On the Description tab to set the description click the button to get an editor +On the Details tab you can set the Occupation Points calculation and Minimum/Maximum Credit Rating + +On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select + +# Creating your first investigator + +## Character + +To complete your character you need to have an active scene which can be created in the Scenes Directory +Click on the Actors Directory tab then Create Item give this a name e.g. New Investigator and set the Type to Character +You can drag your setup created above on to the character for the initial setup or drag this example instead + +Next drag your occupation created above on to the character or drag this example instead + +On the left hand menu bar select Keeper's tools then select Character creation mode +On the character sheet select the Development tab. The first dot indicates this is an occupation skill, the first column of numbers is the base value, next if where you assign personal points, third is for occupation points, the fourth is for experience gained during the investigator improvement phase, the final column is the total skill percent +You can see how many personal and occupation points you have spent so far, once you have spent all your points you need to toggle off Character creation mode to allow characters to see their HP, MP, Sanity, and luck diff --git a/docs/en/manual.md b/docs/en/manual.md new file mode 100644 index 00000000..e3cccc2c --- /dev/null +++ b/docs/en/manual.md @@ -0,0 +1,79 @@ +# System documentation v0.7.12 + +This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT +You will need one of the following to play the game + +- Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook +- Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set +- Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules + +The system automates most of the regular tasks and rules involved with running a game + +This documentation can be reopened under Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en] + + +# Recent changes + +For a full list of changes checkout the [changelog](https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT/blob/develop/.github/CHANGELOG.md) on GitHub + + +- [Chases](chases.md) +- The Dhole's House JSON actor importer + + +# Overview sections below + +- Actor overview +- Items overview +- Settings overview +- Scene menu overview + + +# How to use the system + +- [Creating your first investigator](first_investigator.md) +- [Chases](chases.md) + + +# Actor overview + +- _Character_ - A complete character, usually an investigator. +- _Container_ - An inventory container. +- _Creature_ - A more simple character, suitable for creatures. +- _NPC_ - A more simple character, suitable for NPCs. + + +# Items overview + +- _Archetype_ - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. +- _Book_ - An arcane tome that can hold spells and character improvements- _Item_ - A piece of equipment- _Occupation_ - A set of skills and other stats that implement a CoC occupation. +- _Setup_ - A set of default configurations for character, creature, or NPC creation. +- _Skill_ - A skill with a base percentage and some tags. +- _Spell_ - A magic spell- _Status_ - An phobia or mania condition. +- _Talent_ -A special power for Pulp Cthulhu. These do not trigger automation in the system. +- _Weapon_ - An item with weapon statistics (this includes unarmed attacks). + + +# Settings overview + +Click on the Game Settings tab then under the Game Settings heading click on Configure Settings +Click on System Settings + +- _Variant/Optional Rules_ - Here you can turn on individual Pulp Cthulhu rules and other optional rules +- _Initiative Settings_ - Additional settings for optional initiative rule +- _Roll Settings_ - Default options for rolls +- _Chat Cards Settings_ - Configure chat messages +- _Scene Settings_ - Scene Settings +- _Game Artwork Settings_ - This allows you to set a custom pause icon and message +- _Sheet Settings_ - This allows you to change character sheet settings and optional CSS +- _Weapon Settings_ - Weapon Settings +- _Developer And Debug Settings_ - These settings can break your world when new updates are released so only use them on test world +- _Roll Table Settings_ - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums + + +# Call of Cthulhu Scene Menu + +To access this menu you will need to have an active scene which can be created in the Scenes Directory +- _Keeper's tools_ - Here you can toggle character creation mode, character development phase, actor importer, toggle automatic XP gain on a success, and start a rest +- _Roll !_ - Create a roll in chat +- _Create link_ - Create a roll link for players to click diff --git a/generate-manuals.js b/generate-manuals.js new file mode 100644 index 00000000..a166dd33 --- /dev/null +++ b/generate-manuals.js @@ -0,0 +1,85 @@ +import { Remarkable } from 'remarkable' +import * as fs from 'fs' +import write from './node_modules/write/index.js' + +const sources = { + wZtTHpGV3atKV2oD: { + en: { + name: 'Call of Cthulhu 7th Edition (Unofficial) [en]', + file: 'manual.md' + } + }, + nVYLlqVzmUV5dXAW: { + en: { + name: 'Creating your first investigator [en]', + file: 'first_investigator.md' + } + }, + VdOeGcxsu3jsVm3F: { + en: { + name: 'Chases [en]', + file: 'chases.md' + } + } +} + +const dbFile = [] + +for (const id in sources) { + for (const lang in sources[id]) { + try { + const md = new Remarkable() + const input = fs.readFileSync( + './module/manual/' + lang + '/' + sources[id][lang].file, + 'utf8' + ) + + const source = md.render(input) + + const html = source + .replace(/

    \.<\/p>/g, '

     

    ') + .replace( + /\[(fas fa-[^\]]+|game-icon game-icon-[^\]]+)\]/g, + ' ' + ) + .replace(/src="..\/..\/assets\//g, 'src="systems/CoC7/assets/') + .replace(/\n\s*/g, '\n') + + const dbEntry = { + _id: id, + name: sources[id][lang].name, + content: '
    \n' + html + '\n
    ' + } + + dbFile.push(JSON.stringify(dbEntry)) + + let mdFile = input + .replace(/\.\n/g, '') + .replace(/\[(fas fa-[^\]]+|game-icon game-icon-[^\]]+)\]/g, '') + + const compendiumLinks = mdFile.matchAll( + /@Compendium\[(?[^\]]+)\.(?[^\\.]+)\]{(?[^}]+)}/g + ) + for (const link of compendiumLinks) { + if (link.groups.pack !== 'CoC7.system-doc') { + mdFile = mdFile.replace(link[0], '') + } else { + mdFile = mdFile.replace( + link[0], + '[' + + link.groups.name + + '](' + + sources[link.groups.id][lang].file + + ')' + ) + } + } + + write('./docs/' + lang + '/' + sources[id][lang].file, mdFile) + } catch (e) { + console.log('EXCEPTION:', e) + } + } +} + +write('./packs/system-doc.db', dbFile.join('\n')) diff --git a/module/manual/en/chases.md b/module/manual/en/chases.md new file mode 100644 index 00000000..c4b2bb8c --- /dev/null +++ b/module/manual/en/chases.md @@ -0,0 +1,152 @@ +# Creating a new chase + +To create a chase create a new item of type chase. + +Only the keeper should have access to that item. + +A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard). + +A hazard will always be crossed but failing the check will slow you down. + +A barrier will stop you until you successfully pass or destroy it. + +![](../../assets/manual/chases/new_chase.webp) + +The chase sheet is divided in 3 parts. + +- A header where you will see information about current location once a chase is started. +- A chase setup tab. This will allows you to create and follow the chase. +- A participant list where you can setup your participant. This tab will not work after the chase started. + +# Adding a participant. + +To add a participant click on the plus sign on the participant list or drag an actor or a token. + +Note that it is not mandatory to have a actor associated with a participant. This will allows for fast setup or to add someone on the fly to the chase. + +To be able to add a token to the chase a few control have been added to character and NPC sheets: + +![](../../assets/manual/chases/new_controls.webp) + +Those icons will give additional information. + +1. Indicate that this actor is a synthetic actor (instance of an actor) +2. Indicate that actor's data are not linked. Each instance of that actor has his own properties. +3. Indicate that this actor has an associated token. **You can drag and drop this onto a chase location or on the participant list**. +4. Indicate that actor's data are linked to an actor in the actors directory. + +Dragging a token to the participant list or to a location will activate the importer window. + +![](../../assets/manual/chases/new_participant.webp) + +Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrix chase, dreamlands chase...) + +1. Clicking this will change the participant side from prey to chaser. +2. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed. + +# Participant list + +![](../../assets/manual/chases/participant_list.webp) + +Here you can have the list of participant to the chase. + +1. Will trigger a chase roll. This will create a roll card if the participant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card. +2. This will clear the speed roll if any, or delete the participant. + +![](../../assets/manual/chases/participant_list_2.webp) + +1. Roll card waiting to get resolved in the chat. +2. Speed check rolled. You can click this to get the details. +3. To reset the speed check. + +![](../../assets/manual/chases/roll_card.webp) + +# Chase setup + +![](../../assets/manual/chases/chase_init.webp) + +To setup a chase enter the initial numbers of locations and click initialize. + +![](../../assets/manual/chases/chase_initialized.webp) + +The chase is initialized, you can adjust some options. Locations in white are initial locations and can not be modified. + +1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations. +2. Selecting this will include in the chase participants who would have otherwise been able to escape. +3. Selecting this will include in the chase participants who would have been excluded for being too slow. +4. This is the number of locations between the slowest prey and the fastest chaser. +5. This is the starting location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start. +6. This will animate token when they move to a new location. + +# Setting up locations + +During setup or during chase you can select a location to modify it. + +Starting (white) locations can not be modified during setup.

    + +To modify a location select it by clicking on it. This will display the location details on the header part of the sheet. + +![](../../assets/manual/chases/setting_locations_1.webp) + +1. This will add a participant. If the chase is started the participant will be on that location. If the chase isn't started the participant will be added on the init track. +2. This will remove the location. A location has to be empty to be removed. +3. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin indicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location. +4. Add a new location. +5. Active location. + +. + +# Setting up obstacles. + +You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties. + +![](../../assets/manual/chases/setting_locations_2.webp) + +1. Toggle this to add damage to a barrier. +2. Barrier's hit points. +3. Movement action cost in case of failure. +4. Check used to pass the location. When it's red the active actor does not have the associated check. + +. + +# Cut to the chase. + +When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start. + +![](../../assets/manual/chases/cut_to_the_chase_1.webp) + +1. Initiative track. The active participant is circled in orange. +2. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated. +3. A barrier. +4. A hazard. + +# Obstacle resolution flow + +![](../../assets/manual/chases/cut_to_the_chase_2.webp) + +1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interact to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow. + +Here is a shorten flow example: + +![](../../assets/manual/chases/obstalce_flow_1.webp) +![](../../assets/manual/chases/obstalce_flow_2.webp) +![](../../assets/manual/chases/obstalce_flow_3.webp) +![](../../assets/manual/chases/obstalce_flow_4.webp) + +Once the flow is complete all changes are send to the chase. + +![](../../assets/manual/chases/cut_to_the_chase_3.webp) + +This round is finished. All actor have spent their movement action. You can click Next round to proceed. + +# Participant controls. + +![](../../assets/manual/chases/participant_controls.webp) + +You can modify or move a participant by using the controls button on his card. + +1. Those 3 icons will allow to delete, modify and activate a participant. +2. Movement action. A yellow is available, grey is consumed, red is a deficit. +3. This will control your participant bonus. He can draw a gun or be awarded bonus dices. +4. Movement action controls. Here you can increase or decrease movement actions. +5. Movement controls. You can move backward or forward. You can assist an ally (consume an action and give a bonus die) or take a cautious approach. diff --git a/module/manual/en/first_investigator.md b/module/manual/en/first_investigator.md new file mode 100644 index 00000000..76593fa4 --- /dev/null +++ b/module/manual/en/first_investigator.md @@ -0,0 +1,69 @@ +# Initial item setup + +The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required. + +. + +# Skill + +Click on the [fas fa-atlas]Compendium Packs tab then under the Item heading open up the Skills Item (CoC7). Here you will find the skills shown on the characters sheets available from Chaosium's website. + +- _No adjustment_ - Can not be assigned personal skill points. +- _No XP gain_ - You do not mark this skill for improvement on a success. +- _Specialization_ - This skill is part of a group like Pilot or Flighting. +- _Uncommon_ - This skill is uncommon and can be automatically hidden on the character sheet. +- _Pushed_ - This skill can be pushed. +- _Fighting_ - Automatically set Specialization, Combat, and the specialization name to Fighting. +- _Firearms_ - Automatically set Specialization, Combat, and the specialization name to Firearms. + +You can create a new Item Compendium and copy the skills you require into it allowing you to edit them. You can also create new skills by creating new Skill Items (Click on the [fas fa-suitcase]Items Directory tab then Create Item give this a name e.g. Gardening and set the Type to Skill). + +## Setup + +Once you have set up your skills next create up a Setup, here is an example from the Items Examples compendium @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example} + +Setups allow to you standardise what skills, items, biography sections, and characteristics the investigators start with. + +Click on the [fas fa-suitcas]Items Directory tab then Create Item give this a name e.g. New Investigator Setup and set the Type to Setup + +On the Description tab to set the description click the [fas fa-edit]button to get an editor. + +On the Details tab click the [fas fa-plus] on the Biography Sections to add any sections you require from the Create a Backstory step of investigator creation. Click on the [fas fa-atlas]Compendium Packs tab then under the Item heading open up the Items Examples Item (CoC7) and drag the @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Punch} onto the setup. + +On the Characteristics tab you can customise how investigator characteristics are rolled / bought + +On the Skills tab you can drag the skills the investigator will have. + +All actor and item sheets have a [game-icon game-icon-tentacles-skull]tab which can be used by the Keepers to store notes, only users that are set to GM can see this tab + +## Occupation + +Occupations allow you set how many the occupation points, credit rating range, and skills the investigator starts with. Here is an example from the Items Examples compendium @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example} + +Click on the [fas fa-suitcase]Items Directory tab then Create Item give this a name e.g. Driver and set the Type to Occupation + +On the Description tab to set the description click the [fas fa-edit]button to get an editor. + +On the Details tab you can set the Occupation Points calculation and Minimum/Maximum Credit Rating + +On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select. + +. + +# Creating your first investigator + +## Character + +To complete your character you need to have an active scene which can be created in the [fas fa-map]Scenes Directory. + +Click on the [fas fa-users]Actors Directory tab then Create Item give this a name e.g. New Investigator and set the Type to Character. + +You can drag your setup created above on to the character for the initial setup or drag this example instead @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example} + +Next drag your occupation created above on to the character or drag this example instead @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example} + +On the left hand menu bar select [game-icon game-icon-tentacle-strike]Keeper's tools then select [fas fa-user-edit]Character creation mode. + +On the character sheet select the Development tab. The first dot indicates this is an occupation skill, the first column of numbers is the base value, next if where you assign personal points, third is for occupation points, the fourth is for experience gained during the investigator improvement phase, the final column is the total skill percent. + +You can see how many personal and occupation points you have spent so far, once you have spent all your points you need to toggle off [fas fa-user-edit]Character creation mode to allow characters to see their HP, MP, Sanity, and luck diff --git a/module/manual/en/manual.md b/module/manual/en/manual.md new file mode 100644 index 00000000..24b9bd8d --- /dev/null +++ b/module/manual/en/manual.md @@ -0,0 +1,95 @@ +# System documentation v0.7.12 + +This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT. + +You will need one of the following to play the game + +- Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook +- Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set +- Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules + +The system automates most of the regular tasks and rules involved with running a game. + +. + +This documentation can be reopened under [fas fa-atlas] Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en] + +. + +# Recent changes + +For a full list of changes checkout the [changelog](https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT/blob/develop/.github/CHANGELOG.md) on GitHub + +. + +- @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases} +- The Dhole's House JSON actor importer + +. + +# Overview sections below + +- Actor overview +- Items overview +- Settings overview +- Scene menu overview + +. + +# How to use the system + +- @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator} +- @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases} + +. + +# Actor overview + +- _Character_ - A complete character, usually an investigator. @Compendium[CoC7.examples.JuI2aWDSEuQNKeUI]{Example Character} +- _Container_ - An inventory container. @Compendium[CoC7.examples.r7bDSY4OYKxQYEas]{Example Container} +- _Creature_ - A more simple character, suitable for creatures. @Compendium[CoC7.examples.XE2vjLG03wGfnYLw]{Example Creature} +- _NPC_ - A more simple character, suitable for NPCs. @Compendium[CoC7.examples.4kSvDc4n13oFx8RG]{Example NPC} + +. + +# Items overview + +- _Archetype_ - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. @Compendium[CoC7.items.lu04TIRrg9P3vRqY]{Example Archetype} +- _Book_ - An arcane tome that can hold spells and character improvements. +- _Item_ - A piece of equipment. +- _Occupation_ - A set of skills and other stats that implement a CoC occupation. @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Example Occupation} +- _Setup_ - A set of default configurations for character, creature, or NPC creation. @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{Example Setup} +- _Skill_ - A skill with a base percentage and some tags. @Compendium[CoC7.skills.UOuN0gESXPp2HXwH]{Example Skill} +- _Spell_ - A magic spell. +- _Status_ - An phobia or mania condition. @Compendium[CoC7.items.DVdvEDizPZPux1pK]{Example Mania} +- _Talent_ -A special power for Pulp Cthulhu. These do not trigger automation in the system. @Compendium[CoC7.items.yqvwz769ZeJplOW7]{Example Talent} +- _Weapon_ - An item with weapon statistics (this includes unarmed attacks). @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Example Weapon} + +. + +# Settings overview + +Click on the [fas fa-cogs]Game Settings tab then under the Game Settings heading click on Configure Settings. + +Click on [fas fa-cogs]System Settings + +- _Variant/Optional Rules_ - Here you can turn on individual Pulp Cthulhu rules and other optional rules +- _Initiative Settings_ - Additional settings for optional initiative rule +- _Roll Settings_ - Default options for rolls +- _Chat Cards Settings_ - Configure chat messages +- _Scene Settings_ - Scene Settings +- _Game Artwork Settings_ - This allows you to set a custom pause icon and message +- _Sheet Settings_ - This allows you to change character sheet settings and optional CSS +- _Weapon Settings_ - Weapon Settings +- _Developer And Debug Settings_ - These settings can break your world when new updates are released so only use them on test world +- _Roll Table Settings_ - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums + +. + +# Call of Cthulhu Scene Menu + +To access this menu you will need to have an active scene which can be created in the [fas fa-map]Scenes Directory. + +- _Keeper's tools_ - Here you can toggle character creation mode, character development phase, actor importer, toggle automatic XP gain on a success, and start a rest +- _Roll !_ - Create a roll in chat +- _Create link_ - Create a roll link for players to click diff --git a/package.json b/package.json index 34def7ac..084af24c 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "less": "^4.1.1", "less-loader": "^10.0.1", "mini-css-extract-plugin": "^2.2.0", + "remarkable": "^2.0.1", "standard": "^16.0.3", "terser-webpack-plugin": "^5.1.4", "thread-loader": "^3.0.4", diff --git a/packs/system-doc.db b/packs/system-doc.db index bc9193ab..ed2e9cef 100644 --- a/packs/system-doc.db +++ b/packs/system-doc.db @@ -1,3 +1,3 @@ -{"_id":"VdOeGcxsu3jsVm3F","name":"Chases [en]","content":"

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \n

    The chase sheet is divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list where you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the participant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a participant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have been added to character and NPC sheets :

    \n

    \n

    Those icons will give additional information.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Dragging a token to the participant list or to a location will activate the importer window.

    \n

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrix chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Participant list

    \n

    \n

    Here you can have the list of participant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the participant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the participant.
    4. \n
    \n

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \n

    Chase setup

    \n

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \n

    The chase is initialized, you can adjust some options. Locations in white are initial locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape.
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of locations between the slowest prey and the fastest chaser.
    8. \n
    9. This is the starting location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.

    \n

    To modify a location select it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \n
      \n
    1. This will add a participant. If the chase is started the participant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be removed.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin indicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazard.
    8. \n
    \n

    Obstacle resolution flow

    \n

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interact to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example :

    \n

    \n

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Participant controls.

    \n

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your participant bonus. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movement controls. You can move backward or forward. You can assist an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    ","folder":null,"sort":0,"permission":{"default":0,"f2tegjkWyWhBBgnj":3},"flags":{"core":{"sourceId":"JournalEntry.iUQwB5WExK6sq9in"}}} -{"name":"Creating your first investigator [en]","content":"

    Initial item setup

    \n

    The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required.

    \n

     

    \n

    Skill

    \n

    Click on the  Compendium Packs tab then under the Item heading open up the Skills Item (CoC7). Here you will find the skills shown on the characters sheets available from Chaosium's website.

    \n
      \n
    • No adjustment - Can not be assigned personal skill points.
    • \n
    • No XP gain - You do not mark this skill for improvement on a success.
    • \n
    • Specialization - This skill is part of a group like Pilot or Flighting.
    • \n
    • Uncommon - This skill is uncommon and can be automatically hidden on the character sheet.
    • \n
    • Pushed - This skill can be pushed.
    • \n
    • Fighting - Automatically set Specialization, Combat, and the specialization name to Fighting.
    • \n
    • Firearms - Automatically set Specialization, Combat, and the specialization name to Firearms.
    • \n
    \n

    You can create a new Item Compendium and copy the skills you require into it allowing you to edit them. You can also create new skills by creating new Skill Items (Click on the  Items Directory tab then Create Item give this a name e.g. Gardening and set the Type to Skill).

    \n

    Setup

    \n

    Once you have set up your skills next create up a Setup, here is an example from the Items Examples compendium @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

    \n

    Setups allow to you standardise what skills, items, biography sections, and characteristics the investigators start with.

    \n

    Click on the  Items Directory tab then Create Item give this a name e.g. New Investigator Setup and set the Type to Setup

    \n

    On the Description tab to set the description click the  button to get an editor.

    \n

    On the Details tab click the   on the Biography Sections to add any sections you require from the Create a Backstory step of investigator creation. Click on the  Compendium Packs tab then under the Item heading open up the Items Examples Item (CoC7) and drag the @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Punch} onto the setup.

    \n

    On the Characteristics tab you can customise how investigator characteristics are rolled / bought

    \n

    On the Skills tab you can drag the skills the investigator will have.

    \n

    All actor and item sheets have a  tab which can be used by the Keepers to store notes, only users that are set to GM can see this tab

    \n

    Occupation

    \n

    Occupations allow you set how many the occupation points, credit rating range, and skills the investigator starts with. Here is an example from the Items Examples compendium @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

    \n

    Click on the  Items Directory tab then Create Item give this a name e.g. Driver and set the Type to Occupation

    \n

    On the Description tab to set the description click the  button to get an editor.

    \n

    On the Details tab you can set the Occupation Points calculation and Minimum/Maximum Credit Rating

    \n

    On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select.

    \n

     

    \n

    Creating your first investigator

    \n

    Character

    \n

    To complete your character you need to have an active scene which can be created in the  Scenes Directory.

    \n

    Click on the  Actors Directory tab then Create Item give this a name e.g. New Investigator and set the Type to Character.

    \n

    You can drag your setup created above on to the character for the initial setup or drag this example instead @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

    \n

    Next drag your occupation created above on to the character or drag this example instead @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

    \n

    On the left hand menu bar select  Keeper's tools then select  Character creation mode.

    \n

    On the character sheet select the Development tab. The first dot indicates this is an occupation skill, the first column of numbers is the base value, next if where you assign personal points, third is for occupation points, the fourth is for experience gained during the investigator improvement phase, the final column is the total skill percent.

    \n

    You can see how many personal and occupation points you have spent so far, once you have spent all your points you need to toggle off  Character creation mode to allow characters to see their HP, MP, Sanity, and luck

    ","folder":null,"sort":0,"permission":{"default":0,"f2tegjkWyWhBBgnj":3},"flags":{"core":{"sourceId":"JournalEntry.hJS3X11e8X1jwX9b"}},"_id":"nVYLlqVzmUV5dXAW"} -{"_id":"wZtTHpGV3atKV2oD","name":"Call of Cthulhu 7th Edition (Unofficial) [en]","content":"
    \n

    System documentation v0.7.12

    \n

    This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT.

    \n

    You will need one of the following to play the game

    \n
      \n
    • Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules
    • \n
    \n

    The system automates most of the regular tasks and rules involved with running a game.

    \n

     

    \n

    This documentation can be reopened under   Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en]

    \n

     

    \n

    Recent changes

    \n

    For a full list of changes checkout the changelog on GitHub

    \n

     

    \n
      \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
    • \n
    • The Dhole's House JSON actor importer
    • \n
    \n

     

    \n

    Overview sections below

    \n
      \n
    • Actor overview
    • \n
    • Items overview
    • \n
    • Settings overview
    • \n
    • Scene menu overview
    • \n
    \n

     

    \n

    How to use the system

    \n
      \n
    • @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator}
    • \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
    • \n
    \n

     

    \n

    Actor overview

    \n
      \n
    • Character - A complete character, usually an investigator. @Compendium[CoC7.examples.JuI2aWDSEuQNKeUI]{Example Character}
    • \n
    • Container - An inventory container. @Compendium[CoC7.examples.r7bDSY4OYKxQYEas]{Example Container}
    • \n
    • Creature - A more simple character, suitable for creatures. @Compendium[CoC7.examples.XE2vjLG03wGfnYLw]{Example Creature}
    • \n
    • NPC - A more simple character, suitable for NPCs. @Compendium[CoC7.examples.4kSvDc4n13oFx8RG]{Example NPC}
    • \n
    \n

     

    \n

    Items overview

    \n
      \n
    • Archetype - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. @Compendium[CoC7.items.lu04TIRrg9P3vRqY]{Example Archetype}
    • \n
    • Book - An arcane tome that can hold spells and character improvements.
    • \n
    • Item - A piece of equipment.
    • \n
    • Occupation - A set of skills and other stats that implement a CoC occupation. @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Example Occupation}
    • \n
    • Setup - A set of default configurations for character, creature, or NPC creation. @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{Example Setup}
    • \n
    • Skill - A skill with a base percentage and some tags. @Compendium[CoC7.skills.UOuN0gESXPp2HXwH]{Example Skill}
    • \n
    • Spell - A magic spell.
    • \n
    • Status - An phobia or mania condition. @Compendium[CoC7.items.DVdvEDizPZPux1pK]{Example Mania}
    • \n
    • Talent -A special power for Pulp Cthulhu. These do not trigger automation in the system. @Compendium[CoC7.items.yqvwz769ZeJplOW7]{Example Talent}
    • \n
    • Weapon - An item with weapon statistics (this includes unarmed attacks). @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Example Weapon}
    • \n
    \n

     

    \n

    Settings overview

    \n

    Click on the  Game Settings tab then under the Game Settings heading click on Configure Settings.

    \n

    Click on  System Settings

    \n
      \n
    • Variant/Optional Rules - Here you can turn on individual Pulp Cthulhu rules and other optional rules
    • \n
    • Initiative Settings - Additional settings for optional initiative rule
    • \n
    • Roll Settings - Default options for rolls
    • \n
    • Chat Cards Settings - Configure chat messages
    • \n
    • Scene Settings - Scene Settings
    • \n
    • Game Artwork Settings - This allows you to set a custom pause icon and message
    • \n
    • Sheet Settings - This allows you to change character sheet settings and optional CSS
    • \n
    • Weapon Settings - Weapon Settings
    • \n
    • Developer And Debug Settings - These settings can break your world when new updates are released so only use them on test world
    • \n
    • Roll Table Settings - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums
    • \n
    \n

     

    \n

    Call of Cthulhu Scene Menu

    \n

    To access this menu you will need to have an active scene which can be created in the  Scenes Directory.

    \n
      \n
    • Keeper's tools - Here you can toggle character creation mode, character development phase, actor importer, toggle automatic XP gain on a success, and start a rest
    • \n
    • Roll ! - Create a roll in chat
    • \n
    • Create link - Create a roll link for players to click
    • \n
    \n
    ","img":null,"folder":null,"sort":0,"permission":{"default":0,"OWtJ6HxEEsDD4EKR":3,"f2tegjkWyWhBBgnj":3},"flags":{"core":{"sourceId":"JournalEntry.A8tkfI4PPUTYRNK0"}}} +{"_id":"wZtTHpGV3atKV2oD","name":"Call of Cthulhu 7th Edition (Unofficial) [en]","content":"
    \n

    System documentation v0.7.12

    \n

    This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT.

    \n

    You will need one of the following to play the game

    \n
      \n
    • Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules
    • \n
    \n

    The system automates most of the regular tasks and rules involved with running a game.

    \n

     

    \n

    This documentation can be reopened under   Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en]

    \n

     

    \n

    Recent changes

    \n

    For a full list of changes checkout the changelog on GitHub

    \n

     

    \n
      \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
    • \n
    • The Dhole's House JSON actor importer
    • \n
    \n

     

    \n

    Overview sections below

    \n
      \n
    • Actor overview
    • \n
    • Items overview
    • \n
    • Settings overview
    • \n
    • Scene menu overview
    • \n
    \n

     

    \n

    How to use the system

    \n
      \n
    • @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator}
    • \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
    • \n
    \n

     

    \n

    Actor overview

    \n
      \n
    • Character - A complete character, usually an investigator. @Compendium[CoC7.examples.JuI2aWDSEuQNKeUI]{Example Character}
    • \n
    • Container - An inventory container. @Compendium[CoC7.examples.r7bDSY4OYKxQYEas]{Example Container}
    • \n
    • Creature - A more simple character, suitable for creatures. @Compendium[CoC7.examples.XE2vjLG03wGfnYLw]{Example Creature}
    • \n
    • NPC - A more simple character, suitable for NPCs. @Compendium[CoC7.examples.4kSvDc4n13oFx8RG]{Example NPC}
    • \n
    \n

     

    \n

    Items overview

    \n
      \n
    • Archetype - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. @Compendium[CoC7.items.lu04TIRrg9P3vRqY]{Example Archetype}
    • \n
    • Book - An arcane tome that can hold spells and character improvements.
    • \n
    • Item - A piece of equipment.
    • \n
    • Occupation - A set of skills and other stats that implement a CoC occupation. @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Example Occupation}
    • \n
    • Setup - A set of default configurations for character, creature, or NPC creation. @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{Example Setup}
    • \n
    • Skill - A skill with a base percentage and some tags. @Compendium[CoC7.skills.UOuN0gESXPp2HXwH]{Example Skill}
    • \n
    • Spell - A magic spell.
    • \n
    • Status - An phobia or mania condition. @Compendium[CoC7.items.DVdvEDizPZPux1pK]{Example Mania}
    • \n
    • Talent -A special power for Pulp Cthulhu. These do not trigger automation in the system. @Compendium[CoC7.items.yqvwz769ZeJplOW7]{Example Talent}
    • \n
    • Weapon - An item with weapon statistics (this includes unarmed attacks). @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Example Weapon}
    • \n
    \n

     

    \n

    Settings overview

    \n

    Click on the  Game Settings tab then under the Game Settings heading click on Configure Settings.

    \n

    Click on  System Settings

    \n
      \n
    • Variant/Optional Rules - Here you can turn on individual Pulp Cthulhu rules and other optional rules
    • \n
    • Initiative Settings - Additional settings for optional initiative rule
    • \n
    • Roll Settings - Default options for rolls
    • \n
    • Chat Cards Settings - Configure chat messages
    • \n
    • Scene Settings - Scene Settings
    • \n
    • Game Artwork Settings - This allows you to set a custom pause icon and message
    • \n
    • Sheet Settings - This allows you to change character sheet settings and optional CSS
    • \n
    • Weapon Settings - Weapon Settings
    • \n
    • Developer And Debug Settings - These settings can break your world when new updates are released so only use them on test world
    • \n
    • Roll Table Settings - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums
    • \n
    \n

     

    \n

    Call of Cthulhu Scene Menu

    \n

    To access this menu you will need to have an active scene which can be created in the  Scenes Directory.

    \n
      \n
    • Keeper's tools - Here you can toggle character creation mode, character development phase, actor importer, toggle automatic XP gain on a success, and start a rest
    • \n
    • Roll ! - Create a roll in chat
    • \n
    • Create link - Create a roll link for players to click
    • \n
    \n\n
    "} +{"_id":"nVYLlqVzmUV5dXAW","name":"Creating your first investigator [en]","content":"
    \n

    Initial item setup

    \n

    The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required.

    \n

     

    \n

    Skill

    \n

    Click on the  Compendium Packs tab then under the Item heading open up the Skills Item (CoC7). Here you will find the skills shown on the characters sheets available from Chaosium's website.

    \n
      \n
    • No adjustment - Can not be assigned personal skill points.
    • \n
    • No XP gain - You do not mark this skill for improvement on a success.
    • \n
    • Specialization - This skill is part of a group like Pilot or Flighting.
    • \n
    • Uncommon - This skill is uncommon and can be automatically hidden on the character sheet.
    • \n
    • Pushed - This skill can be pushed.
    • \n
    • Fighting - Automatically set Specialization, Combat, and the specialization name to Fighting.
    • \n
    • Firearms - Automatically set Specialization, Combat, and the specialization name to Firearms.
    • \n
    \n

    You can create a new Item Compendium and copy the skills you require into it allowing you to edit them. You can also create new skills by creating new Skill Items (Click on the  Items Directory tab then Create Item give this a name e.g. Gardening and set the Type to Skill).

    \n

    Setup

    \n

    Once you have set up your skills next create up a Setup, here is an example from the Items Examples compendium @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

    \n

    Setups allow to you standardise what skills, items, biography sections, and characteristics the investigators start with.

    \n

    Click on the  Items Directory tab then Create Item give this a name e.g. New Investigator Setup and set the Type to Setup

    \n

    On the Description tab to set the description click the  button to get an editor.

    \n

    On the Details tab click the   on the Biography Sections to add any sections you require from the Create a Backstory step of investigator creation. Click on the  Compendium Packs tab then under the Item heading open up the Items Examples Item (CoC7) and drag the @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Punch} onto the setup.

    \n

    On the Characteristics tab you can customise how investigator characteristics are rolled / bought

    \n

    On the Skills tab you can drag the skills the investigator will have.

    \n

    All actor and item sheets have a  tab which can be used by the Keepers to store notes, only users that are set to GM can see this tab

    \n

    Occupation

    \n

    Occupations allow you set how many the occupation points, credit rating range, and skills the investigator starts with. Here is an example from the Items Examples compendium @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

    \n

    Click on the  Items Directory tab then Create Item give this a name e.g. Driver and set the Type to Occupation

    \n

    On the Description tab to set the description click the  button to get an editor.

    \n

    On the Details tab you can set the Occupation Points calculation and Minimum/Maximum Credit Rating

    \n

    On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select.

    \n

     

    \n

    Creating your first investigator

    \n

    Character

    \n

    To complete your character you need to have an active scene which can be created in the  Scenes Directory.

    \n

    Click on the  Actors Directory tab then Create Item give this a name e.g. New Investigator and set the Type to Character.

    \n

    You can drag your setup created above on to the character for the initial setup or drag this example instead @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

    \n

    Next drag your occupation created above on to the character or drag this example instead @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

    \n

    On the left hand menu bar select  Keeper's tools then select  Character creation mode.

    \n

    On the character sheet select the Development tab. The first dot indicates this is an occupation skill, the first column of numbers is the base value, next if where you assign personal points, third is for occupation points, the fourth is for experience gained during the investigator improvement phase, the final column is the total skill percent.

    \n

    You can see how many personal and occupation points you have spent so far, once you have spent all your points you need to toggle off  Character creation mode to allow characters to see their HP, MP, Sanity, and luck

    \n\n
    "} +{"_id":"VdOeGcxsu3jsVm3F","name":"Chases [en]","content":"
    \n

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \"\"

    \n

    The chase sheet is divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list where you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the participant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a participant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have been added to character and NPC sheets:

    \n

    \"\"

    \n

    Those icons will give additional information.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Dragging a token to the participant list or to a location will activate the importer window.

    \n

    \"\"

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrix chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Participant list

    \n

    \"\"

    \n

    Here you can have the list of participant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the participant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the participant.
    4. \n
    \n

    \"\"

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \"\"

    \n

    Chase setup

    \n

    \"\"

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \"\"

    \n

    The chase is initialized, you can adjust some options. Locations in white are initial locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape.
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of locations between the slowest prey and the fastest chaser.
    8. \n
    9. This is the starting location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.</p>

    \n

    To modify a location select it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \"\"

    \n
      \n
    1. This will add a participant. If the chase is started the participant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be removed.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin indicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \"\"

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \"\"

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazard.
    8. \n
    \n

    Obstacle resolution flow

    \n

    \"\"

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interact to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example:

    \n

    \"\"\n\"\"\n\"\"\n\"\"

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \"\"

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Participant controls.

    \n

    \"\"

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your participant bonus. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movement controls. You can move backward or forward. You can assist an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n\n
    "} \ No newline at end of file From c88709516d255c184bdfaba175033217016fa87b Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sun, 7 Aug 2022 22:48:20 +0100 Subject: [PATCH 691/726] Manual text fixes --- docs/en/chases.md | 131 +++++++++++++++++++++++++--------- docs/en/first_investigator.md | 48 +++++++++---- docs/en/manual.md | 19 +++-- generate-manuals.js | 2 +- 4 files changed, 144 insertions(+), 56 deletions(-) diff --git a/docs/en/chases.md b/docs/en/chases.md index 296d80cd..45f715a4 100644 --- a/docs/en/chases.md +++ b/docs/en/chases.md @@ -1,76 +1,129 @@ # Creating a new chase -To create a chase create a new item of type chase -Only the keeper should have access to that item -A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard) -A hazard will always be crossed but failing the check will slow you down -A barrier will stop you until you successfully pass or destroy it +To create a chase create a new item of type chase. + +Only the keeper should have access to that item. + +A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard). + +A hazard will always be crossed but failing the check will slow you down. + +A barrier will stop you until you successfully pass or destroy it. + ![](../../assets/manual/chases/new_chase.webp) -The chase sheet is divided in 3 parts -- A header where you will see information about current location once a chase is started- A chase setup tab. This will allows you to create and follow the chase- A participant list where you can setup your participant. This tab will not work after the chase started -# Adding a participant -To add a participant click on the plus sign on the participant list or drag an actor or a token -Note that it is not mandatory to have a actor associated with a participant. This will allows for fast setup or to add someone on the fly to the chase +The chase sheet is divided in 3 parts. + +- A header where you will see information about current location once a chase is started. +- A chase setup tab. This will allows you to create and follow the chase. +- A participant list where you can setup your participant. This tab will not work after the chase started. + +# Adding a participant. + +To add a participant click on the plus sign on the participant list or drag an actor or a token. + +Note that it is not mandatory to have a actor associated with a participant. This will allows for fast setup or to add someone on the fly to the chase. + To be able to add a token to the chase a few control have been added to character and NPC sheets: ![](../../assets/manual/chases/new_controls.webp) -Those icons will give additional information +Those icons will give additional information. + 1. Indicate that this actor is a synthetic actor (instance of an actor) -2. Indicate that actor's data are not linked. Each instance of that actor has his own properties3. Indicate that this actor has an associated token. **You can drag and drop this onto a chase location or on the participant list**4. Indicate that actor's data are linked to an actor in the actors directory -Dragging a token to the participant list or to a location will activate the importer window +2. Indicate that actor's data are not linked. Each instance of that actor has his own properties. +3. Indicate that this actor has an associated token. **You can drag and drop this onto a chase location or on the participant list**. +4. Indicate that actor's data are linked to an actor in the actors directory. + +Dragging a token to the participant list or to a location will activate the importer window. + ![](../../assets/manual/chases/new_participant.webp) Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrix chase, dreamlands chase...) -1. Clicking this will change the participant side from prey to chaser2. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed +1. Clicking this will change the participant side from prey to chaser. +2. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed. + # Participant list ![](../../assets/manual/chases/participant_list.webp) -Here you can have the list of participant to the chase -1. Will trigger a chase roll. This will create a roll card if the participant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card2. This will clear the speed roll if any, or delete the participant +Here you can have the list of participant to the chase. + +1. Will trigger a chase roll. This will create a roll card if the participant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card. +2. This will clear the speed roll if any, or delete the participant. + ![](../../assets/manual/chases/participant_list_2.webp) -1. Roll card waiting to get resolved in the chat2. Speed check rolled. You can click this to get the details3. To reset the speed check +1. Roll card waiting to get resolved in the chat. +2. Speed check rolled. You can click this to get the details. +3. To reset the speed check. + ![](../../assets/manual/chases/roll_card.webp) # Chase setup ![](../../assets/manual/chases/chase_init.webp) -To setup a chase enter the initial numbers of locations and click initialize +To setup a chase enter the initial numbers of locations and click initialize. + ![](../../assets/manual/chases/chase_initialized.webp) -The chase is initialized, you can adjust some options. Locations in white are initial locations and can not be modified -1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations2. Selecting this will include in the chase participants who would have otherwise been able to escape3. Selecting this will include in the chase participants who would have been excluded for being too slow4. This is the number of locations between the slowest prey and the fastest chaser5. This is the starting location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start6. This will animate token when they move to a new location +The chase is initialized, you can adjust some options. Locations in white are initial locations and can not be modified. + +1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations. +2. Selecting this will include in the chase participants who would have otherwise been able to escape. +3. Selecting this will include in the chase participants who would have been excluded for being too slow. +4. This is the number of locations between the slowest prey and the fastest chaser. +5. This is the starting location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start. +6. This will animate token when they move to a new location. + # Setting up locations -During setup or during chase you can select a location to modify it +During setup or during chase you can select a location to modify it. + Starting (white) locations can not be modified during setup.

    -To modify a location select it by clicking on it. This will display the location details on the header part of the sheet +To modify a location select it by clicking on it. This will display the location details on the header part of the sheet. + ![](../../assets/manual/chases/setting_locations_1.webp) -1. This will add a participant. If the chase is started the participant will be on that location. If the chase isn't started the participant will be added on the init track2. This will remove the location. A location has to be empty to be removed3. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin indicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location4. Add a new location5. Active location +1. This will add a participant. If the chase is started the participant will be on that location. If the chase isn't started the participant will be added on the init track. +2. This will remove the location. A location has to be empty to be removed. +3. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin indicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location. +4. Add a new location. +5. Active location. + + +# Setting up obstacles. + +You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties. -# Setting up obstacles -You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties ![](../../assets/manual/chases/setting_locations_2.webp) -1. Toggle this to add damage to a barrier2. Barrier's hit points3. Movement action cost in case of failure4. Check used to pass the location. When it's red the active actor does not have the associated check +1. Toggle this to add damage to a barrier. +2. Barrier's hit points. +3. Movement action cost in case of failure. +4. Check used to pass the location. When it's red the active actor does not have the associated check. + + +# Cut to the chase. + +When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start. -# Cut to the chase -When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start ![](../../assets/manual/chases/cut_to_the_chase_1.webp) -1. Initiative track. The active participant is circled in orange2. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated3. A barrier4. A hazard +1. Initiative track. The active participant is circled in orange. +2. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated. +3. A barrier. +4. A hazard. + # Obstacle resolution flow ![](../../assets/manual/chases/cut_to_the_chase_2.webp) -1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interact to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow +1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interact to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow. + Here is a shorten flow example: ![](../../assets/manual/chases/obstalce_flow_1.webp) @@ -78,12 +131,20 @@ Here is a shorten flow example: ![](../../assets/manual/chases/obstalce_flow_3.webp) ![](../../assets/manual/chases/obstalce_flow_4.webp) -Once the flow is complete all changes are send to the chase +Once the flow is complete all changes are send to the chase. + ![](../../assets/manual/chases/cut_to_the_chase_3.webp) -This round is finished. All actor have spent their movement action. You can click Next round to proceed -# Participant controls +This round is finished. All actor have spent their movement action. You can click Next round to proceed. + +# Participant controls. + ![](../../assets/manual/chases/participant_controls.webp) -You can modify or move a participant by using the controls button on his card -1. Those 3 icons will allow to delete, modify and activate a participant2. Movement action. A yellow is available, grey is consumed, red is a deficit3. This will control your participant bonus. He can draw a gun or be awarded bonus dices4. Movement action controls. Here you can increase or decrease movement actions5. Movement controls. You can move backward or forward. You can assist an ally (consume an action and give a bonus die) or take a cautious approach \ No newline at end of file +You can modify or move a participant by using the controls button on his card. + +1. Those 3 icons will allow to delete, modify and activate a participant. +2. Movement action. A yellow is available, grey is consumed, red is a deficit. +3. This will control your participant bonus. He can draw a gun or be awarded bonus dices. +4. Movement action controls. Here you can increase or decrease movement actions. +5. Movement controls. You can move backward or forward. You can assist an ally (consume an action and give a bonus die) or take a cautious approach. diff --git a/docs/en/first_investigator.md b/docs/en/first_investigator.md index 10f6cf64..7254b9ba 100644 --- a/docs/en/first_investigator.md +++ b/docs/en/first_investigator.md @@ -1,24 +1,38 @@ # Initial item setup -The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required +The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required. + # Skill -Click on the Compendium Packs tab then under the Item heading open up the Skills Item (CoC7). Here you will find the skills shown on the characters sheets available from Chaosium's website -- _No adjustment_ - Can not be assigned personal skill points- _No XP gain_ - You do not mark this skill for improvement on a success- _Specialization_ - This skill is part of a group like Pilot or Flighting- _Uncommon_ - This skill is uncommon and can be automatically hidden on the character sheet- _Pushed_ - This skill can be pushed- _Fighting_ - Automatically set Specialization, Combat, and the specialization name to Fighting- _Firearms_ - Automatically set Specialization, Combat, and the specialization name to Firearms -You can create a new Item Compendium and copy the skills you require into it allowing you to edit them. You can also create new skills by creating new Skill Items (Click on the Items Directory tab then Create Item give this a name e.g. Gardening and set the Type to Skill) +Click on the Compendium Packs tab then under the Item heading open up the Skills Item (CoC7). Here you will find the skills shown on the characters sheets available from Chaosium's website. + +- _No adjustment_ - Can not be assigned personal skill points. +- _No XP gain_ - You do not mark this skill for improvement on a success. +- _Specialization_ - This skill is part of a group like Pilot or Flighting. +- _Uncommon_ - This skill is uncommon and can be automatically hidden on the character sheet. +- _Pushed_ - This skill can be pushed. +- _Fighting_ - Automatically set Specialization, Combat, and the specialization name to Fighting. +- _Firearms_ - Automatically set Specialization, Combat, and the specialization name to Firearms. + +You can create a new Item Compendium and copy the skills you require into it allowing you to edit them. You can also create new skills by creating new Skill Items (Click on the Items Directory tab then Create Item give this a name e.g. Gardening and set the Type to Skill). + ## Setup Once you have set up your skills next create up a Setup, here is an example from the Items Examples compendium -Setups allow to you standardise what skills, items, biography sections, and characteristics the investigators start with +Setups allow to you standardise what skills, items, biography sections, and characteristics the investigators start with. + Click on the Items Directory tab then Create Item give this a name e.g. New Investigator Setup and set the Type to Setup -On the Description tab to set the description click the button to get an editor -On the Details tab click the on the Biography Sections to add any sections you require from the Create a Backstory step of investigator creation. Click on the Compendium Packs tab then under the Item heading open up the Items Examples Item (CoC7) and drag the onto the setup +On the Description tab to set the description click the button to get an editor. + +On the Details tab click the on the Biography Sections to add any sections you require from the Create a Backstory step of investigator creation. Click on the Compendium Packs tab then under the Item heading open up the Items Examples Item (CoC7) and drag the onto the setup. + On the Characteristics tab you can customise how investigator characteristics are rolled / bought -On the Skills tab you can drag the skills the investigator will have +On the Skills tab you can drag the skills the investigator will have. + All actor and item sheets have a tab which can be used by the Keepers to store notes, only users that are set to GM can see this tab ## Occupation @@ -27,21 +41,27 @@ Occupations allow you set how many the occupation points, credit rating range, a Click on the Items Directory tab then Create Item give this a name e.g. Driver and set the Type to Occupation -On the Description tab to set the description click the button to get an editor +On the Description tab to set the description click the button to get an editor. + On the Details tab you can set the Occupation Points calculation and Minimum/Maximum Credit Rating -On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select +On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select. + # Creating your first investigator ## Character -To complete your character you need to have an active scene which can be created in the Scenes Directory -Click on the Actors Directory tab then Create Item give this a name e.g. New Investigator and set the Type to Character +To complete your character you need to have an active scene which can be created in the Scenes Directory. + +Click on the Actors Directory tab then Create Item give this a name e.g. New Investigator and set the Type to Character. + You can drag your setup created above on to the character for the initial setup or drag this example instead Next drag your occupation created above on to the character or drag this example instead -On the left hand menu bar select Keeper's tools then select Character creation mode -On the character sheet select the Development tab. The first dot indicates this is an occupation skill, the first column of numbers is the base value, next if where you assign personal points, third is for occupation points, the fourth is for experience gained during the investigator improvement phase, the final column is the total skill percent +On the left hand menu bar select Keeper's tools then select Character creation mode. + +On the character sheet select the Development tab. The first dot indicates this is an occupation skill, the first column of numbers is the base value, next if where you assign personal points, third is for occupation points, the fourth is for experience gained during the investigator improvement phase, the final column is the total skill percent. + You can see how many personal and occupation points you have spent so far, once you have spent all your points you need to toggle off Character creation mode to allow characters to see their HP, MP, Sanity, and luck diff --git a/docs/en/manual.md b/docs/en/manual.md index e3cccc2c..4dda51d8 100644 --- a/docs/en/manual.md +++ b/docs/en/manual.md @@ -1,13 +1,15 @@ # System documentation v0.7.12 -This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT +This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT. + You will need one of the following to play the game - Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook - Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set - Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules -The system automates most of the regular tasks and rules involved with running a game +The system automates most of the regular tasks and rules involved with running a game. + This documentation can be reopened under Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en] @@ -46,17 +48,21 @@ For a full list of changes checkout the [changelog](https://github.com/Miskatoni # Items overview - _Archetype_ - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. -- _Book_ - An arcane tome that can hold spells and character improvements- _Item_ - A piece of equipment- _Occupation_ - A set of skills and other stats that implement a CoC occupation. +- _Book_ - An arcane tome that can hold spells and character improvements. +- _Item_ - A piece of equipment. +- _Occupation_ - A set of skills and other stats that implement a CoC occupation. - _Setup_ - A set of default configurations for character, creature, or NPC creation. - _Skill_ - A skill with a base percentage and some tags. -- _Spell_ - A magic spell- _Status_ - An phobia or mania condition. +- _Spell_ - A magic spell. +- _Status_ - An phobia or mania condition. - _Talent_ -A special power for Pulp Cthulhu. These do not trigger automation in the system. - _Weapon_ - An item with weapon statistics (this includes unarmed attacks). # Settings overview -Click on the Game Settings tab then under the Game Settings heading click on Configure Settings +Click on the Game Settings tab then under the Game Settings heading click on Configure Settings. + Click on System Settings - _Variant/Optional Rules_ - Here you can turn on individual Pulp Cthulhu rules and other optional rules @@ -73,7 +79,8 @@ Click on System Settings # Call of Cthulhu Scene Menu -To access this menu you will need to have an active scene which can be created in the Scenes Directory +To access this menu you will need to have an active scene which can be created in the Scenes Directory. + - _Keeper's tools_ - Here you can toggle character creation mode, character development phase, actor importer, toggle automatic XP gain on a success, and start a rest - _Roll !_ - Create a roll in chat - _Create link_ - Create a roll link for players to click diff --git a/generate-manuals.js b/generate-manuals.js index a166dd33..b061110d 100644 --- a/generate-manuals.js +++ b/generate-manuals.js @@ -54,7 +54,7 @@ for (const id in sources) { dbFile.push(JSON.stringify(dbEntry)) let mdFile = input - .replace(/\.\n/g, '') + .replace(/\n.\n/g, '\n') .replace(/\[(fas fa-[^\]]+|game-icon game-icon-[^\]]+)\]/g, '') const compendiumLinks = mdFile.matchAll( From eee9cb82f9ce7e9fc3c268fcdbbf840d3e413f83 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Tue, 9 Aug 2022 09:03:08 +0200 Subject: [PATCH 692/726] Prepare Data usage --- assets/icons/cultist.svg | 1 + assets/icons/floating-tentacles.svg | 1 + lang/en.json | 3 +- module/active-effect.js | 17 ++- module/actors/actor.js | 131 +++++++++++++------- module/actors/sheets/base.js | 126 +++++++++---------- module/actors/vehicle/data.js | 49 ++++++++ module/items/item.js | 57 +-------- module/items/skill/data.js | 125 ++++++++++++++----- module/scripts/configure-documents.js | 5 +- templates/actors/character-sheet-v2.html | 6 +- templates/actors/npc-sheet.html | 2 +- templates/actors/parts/actor-skills-v2.html | 4 +- templates/actors/parts/npc-skills.html | 2 +- 14 files changed, 327 insertions(+), 202 deletions(-) create mode 100644 assets/icons/cultist.svg create mode 100644 assets/icons/floating-tentacles.svg create mode 100644 module/actors/vehicle/data.js diff --git a/assets/icons/cultist.svg b/assets/icons/cultist.svg new file mode 100644 index 00000000..edc5f321 --- /dev/null +++ b/assets/icons/cultist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/floating-tentacles.svg b/assets/icons/floating-tentacles.svg new file mode 100644 index 00000000..132ca6a4 --- /dev/null +++ b/assets/icons/floating-tentacles.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lang/en.json b/lang/en.json index d9b89f76..e50d4ff9 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1134,5 +1134,6 @@ "CoC7.getTheExample": "Copy Example", "CoC7.Copied": "Copied the Example Text to Clipboard", - "CoC7.EffectNew": "New effect" + "CoC7.EffectNew": "New effect", + "CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value." } diff --git a/module/active-effect.js b/module/active-effect.js index 552d1364..1328ac85 100644 --- a/module/active-effect.js +++ b/module/active-effect.js @@ -8,9 +8,24 @@ export default class CoC7ActiveEffect extends ActiveEffect { // this.applyToSkill(actor, change) // return null // } - return super.apply(actor, change) + + if( !isNaN(Number(change.value))) change.value = Number(change.value) + const result = super.apply(actor, change) + + function parse(str) { + try { + return eval(str) + } catch (e) { + return NaN; + } + } + + const evaluated = parse(result) + if( isNaN( evaluated)) return result + return evaluated } + // async applyToSkill (actor, change) { // const [, skillName, key] = change.key.split('.') // const skill = actor.getSkillsByName(skillName) diff --git a/module/actors/actor.js b/module/actors/actor.js index 14078f14..a5a843e7 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -22,6 +22,33 @@ import { CoC7Utilities } from '../utilities.js' * Extend the base Actor class to implement additional logic specialized for CoC 7th. */ export class CoCActor extends Actor { + /** Create derived document classes for specific Item types */ + constructor (data, context) { + /** @see CONFIG.Actor.documentClasses in module/scripts/configure-documents */ + if (data.type in CONFIG.Actor.documentClasses && !context?.extended) { + /** + * When the constructor for the new class will call it's super(), + * the extended flag will be true, thus bypassing this whole process + * and resume default behavior + */ + return new CONFIG.Actor.documentClasses[data.type](data, { + ...{ extended: true }, + ...context + }) + } + // if (typeof data.img === 'undefined') { + // if (data.type === 'skill') { + // data.img = 'systems/CoC7/assets/icons/skills.svg' + // } else if (data.type === 'status') { + // data.img = 'icons/svg/aura.svg' + // } else if (data.type === 'weapon') { + // data.img = 'icons/svg/sword.svg' + // } + // } + /** Default behavior, just call super() and do all the default Item inits */ + super(data, context) + } + async initialize () { super.initialize() await this.creatureInit() // TODO : move this in CoCActor.create(data, options) @@ -58,8 +85,53 @@ export class CoCActor extends Actor { // } // - /** @override */ - prepareDerivedData(){ + /** + * @override + * Prepare data related to this Document itself, before any embedded Documents or derived data is computed. + * @memberof ClientDocumentMixin# + */ + prepareBaseData () { + this.data.data.skills = {} + for (const i of this.items) { + if (i.type === 'skill') { + this.data.data.skills[`${i.data.data.skillName}`] = { + value: i.rawValue + } + this.data.data.skills[`${i.id}`] = { value: i.rawValue } + } + } + + // return computed values or fixed values if not auto. + this.data.data.attribs.mov.value = this.mov + this.data.data.attribs.mov.rawValue = this.mov + this.data.data.attribs.db.value = this.db + this.data.data.attribs.db.rawValue = this.db + this.data.data.attribs.build.value = this.build + this.data.data.attribs.build.rawValue = this.build + + //For vehicle only : + this.data.data.attribs.build.current = this.hp + + super.prepareBaseData() + } + + /** + * @override + * Prepare all embedded Document instances which exist within this primary Document. + * @memberof ClientDocumentMixin# + * active effects are applied + */ + prepareEmbeddedDocuments () { + super.prepareEmbeddedDocuments() + } + + /** + * @override + * Apply transformations or derivations to the values of the source data object. + * Compute data fields whose values are not stored to the database. + * @memberof ClientDocumentMixin# + */ + prepareDerivedData () { super.prepareDerivedData() } @@ -78,8 +150,10 @@ export class CoCActor extends Actor { }, { overwrite: false } ) - } else if (data.type === 'vehicle') { - data.img = 'systems/CoC7/assets/icons/jeep.svg' + } else if (data.type === 'npc' ) { + data.img = 'systems/CoC7/assets/icons/cultist.svg' + } else if (data.type === 'creature' ) { + data.img = 'systems/CoC7/assets/icons/floating-tentacles.svg' } else if (data.type === 'container') { data.img = 'icons/svg/chest.svg' mergeObject(data.token, { @@ -856,10 +930,12 @@ export class CoCActor extends Actor { data.data.characteristics.list.luck.value = isNaN(this.luck) ? null : this.luck - data.data.characteristics.list.luck.label = - game.i18n.localize('CoC7.Luck') - data.data.characteristics.list.luck.shortName = - game.i18n.localize('CoC7.Luck') + data.data.characteristics.list.luck.label = game.i18n.localize( + 'CoC7.Luck' + ) + data.data.characteristics.list.luck.shortName = game.i18n.localize( + 'CoC7.Luck' + ) if (!data.data.characteristics.values) { data.data.characteristics.values = {} @@ -926,10 +1002,11 @@ export class CoCActor extends Actor { data.data.characteristics.values.pow updateData['data.attribs.san.oneFifthSanity'] = ' / ' + Math.floor(data.data.characteristics.values.pow / 5) - updateData['data.indefiniteInsanityLevel.max'] = - updateData['data.attribs.mp.value'] = - updateData['data.attribs.mp.max'] = - Math.floor(data.data.characteristics.values.pow / 5) + updateData['data.indefiniteInsanityLevel.max'] = updateData[ + 'data.attribs.mp.value' + ] = updateData['data.attribs.mp.max'] = Math.floor( + data.data.characteristics.values.pow / 5 + ) } await this.update(updateData) await this.update({ @@ -1455,28 +1532,10 @@ export class CoCActor extends Actor { } get hp () { - if (['vehicle'].includes(this.data.type)) { - if ( - this.data.data.attribs.build.current === null || - undefined === this.data.data.attribs.build.current || - this.data.data.attribs.build.current === '' - ) { - return this.build - } - if ( - this.data.data.attribs.build.current > - this.data.data.attribs.build.value - ) { - return this.build - } - const hp = parseInt(this.data.data.attribs.build.current) - return isNaN(hp) ? null : hp - } return parseInt(this.data.data.attribs.hp.value) } get hpMax () { - if (['vehicle'].includes(this.data.type)) return this.build if (this.data.data.attribs.hp.auto) { if ( this.data.data.characteristics.siz.value != null && @@ -1501,10 +1560,6 @@ export class CoCActor extends Actor { async setHp (value) { if (value < 0) value = 0 - if (['vehicle'].includes(this.data.type)) { - if (value > this.build) value = parseInt(this.build) - return await this.update({ 'data.attribs.build.current': value }) - } if (value > this.hpMax) value = parseInt(this.hpMax) return await this.update({ 'data.attribs.hp.value': value }) } @@ -1850,10 +1905,6 @@ export class CoCActor extends Actor { } get build () { - if (['vehicle'].includes(this.data.type)) { - const build = parseInt(this.data.data.attribs.build.value) - return isNaN(build) ? null : build - } if (!this.data.data.attribs) return null if (!this.data.data.attribs.build) return null if (this.data.data.attribs.build.value === 'auto') { @@ -1874,7 +1925,6 @@ export class CoCActor extends Actor { } get db () { - if (['vehicle'].includes(this.data.type)) return 0 if (!this.data.data.attribs) return null if (!this.data.data.attribs.db) return null if (this.data.data.attribs.db.value === 'auto') { @@ -1894,9 +1944,6 @@ export class CoCActor extends Actor { } get mov () { - if (['vehicle'].includes(this.data.type)) { - return this.data.data.attribs.mov.value - } if (!this.data.data.attribs) return null if (!this.data.data.attribs.mov) return null if (this.data.data.attribs.mov.value === 'auto') { diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index e6f9ba6c..0e74e502 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -226,39 +226,14 @@ export class CoC7ActorSheet extends ActorSheet { if (item.type === 'skill') { if (item.data.properties.special) { if (item.data.properties.fighting) { - // if ( - // item.data.specialization !== - // game.i18n.localize('CoC7.FightingSpecializationName') - // ) { - // ui.notifications.info('Setting fichting spec name') - // Not necessary to cmmit the changes in DB - // const itemToUpdate = this.actor.items.get(item._id) - // await itemToUpdate.update({ - // 'data.specialization': game.i18n.localize( - // 'CoC7.FightingSpecializationName' - // ) - // }) - item.data.specialization = game.i18n.localize( - 'CoC7.FightingSpecializationName' - ) // TODO : Client with different language = recursive call when opening the same sheet. - // } + item.data.specialization = game.i18n.localize( + 'CoC7.FightingSpecializationName' + ) } if (item.data.properties.firearm) { - // if ( - // item.data.specialization !== - // game.i18n.localize('CoC7.FirearmSpecializationName') - // ) { - // const itemToUpdate = this.actor.items.get(item._id) - // ui.notifications.info('Setting firearms spec name') - // await itemToUpdate.update({ - // 'data.specialization': game.i18n.localize( - // 'CoC7.FirearmSpecializationName' - // ) - // }) - item.data.specialization = game.i18n.localize( - 'CoC7.FirearmSpecializationName' - ) - // } + item.data.specialization = game.i18n.localize( + 'CoC7.FirearmSpecializationName' + ) } } @@ -295,14 +270,16 @@ export class CoC7ActorSheet extends ActorSheet { if (value) { item.data.value = value const itemToUpdate = this.actor.items.get(item._id) - console.info(`[COC7] (Actor:${this.name}) Evaluating skill ${item.name}:${item.data.value} to ${value}`) + console.info( + `[COC7] (Actor:${this.name}) Evaluating skill ${item.name}:${item.data.value} to ${value}` + ) await itemToUpdate.update({ 'data.value': value }) } } const skill = this.actor.items.get(item._id) - item.data.base = skill.value // ACTIVE_EFFECT necessary to apply effects + item.data.rawValue = skill.rawValue item.data.value = skill.value } else { const skill = this.actor.items.get(item._id) @@ -317,7 +294,9 @@ export class CoC7ActorSheet extends ActorSheet { : 0 let updatedExp = exp + parseInt(item.data.value) - skill.value if (updatedExp <= 0) updatedExp = null - console.info(`[COC7] Updating skill ${skill.name} experience. Experience missing: ${updatedExp}`) + console.info( + `[COC7] Updating skill ${skill.name} experience. Experience missing: ${updatedExp}` + ) await this.actor.updateEmbeddedDocuments('Item', [ { _id: item._id, @@ -327,8 +306,12 @@ export class CoC7ActorSheet extends ActorSheet { ]) if (!item.data.adjustments) item.data.adjustments = {} item.data.adjustments.experience = updatedExp + item.data.rawValue = skill.rawValue item.data.value = skill.value // ACTIVE_EFFECT necessary to apply effects - } else item.data.value = skill.value // ACTIVE_EFFECT necessary to apply effects + } else { + item.data.value = skill.value // ACTIVE_EFFECT necessary to apply effects + item.data.rawValue = skill.rawValue + } } } @@ -489,36 +472,37 @@ export class CoC7ActorSheet extends ActorSheet { data.data.attribs.build.auto = false } - data.data.attribs.mov.value = this.actor.mov // return computed values or fixed values if not auto. - data.data.attribs.db.value = this.actor.db - data.data.attribs.build.value = this.actor.build - - if (typeof this.actor.compendium === 'undefined' && this.actor.isOwner) { - ui.notifications.info('changr spec name 4') - // ACTIVE_EFFECT should be applied here - // This whole part needs to be re-evaluated - // Seeting this shouldn't be necessary - this.actor.update( - { 'data.attribs.mov.value': this.actor.mov }, - { render: false } - ) - this.actor.update( - { 'data.attribs.mov.max': this.actor.mov }, - { render: false } - ) - this.actor.update( - { 'data.attribs.db.value': this.actor.db }, - { render: false } - ) - this.actor.update( - { 'data.attribs.build.current': this.actor.build }, - { render: false } - ) - this.actor.update( - { 'data.attribs.build.value': this.actor.build }, - { render: false } - ) - } + // data.data.attribs.mov.value = this.actor.mov // return computed values or fixed values if not auto. + // data.data.attribs.db.value = this.actor.db + // data.data.attribs.build.value = this.actor.build + + // if (typeof this.actor.compendium === 'undefined' && this.actor.isOwner) { + // ui.notifications.info('changr spec name 4') + // // ACTIVE_EFFECT should be applied here + // // This whole part needs to be re-evaluated + // // Seeting this shouldn't be necessary + // this.actor.update( + // { 'data.attribs.mov.value': this.actor.mov }, + // { render: false } + // ) + // // mov.max never used + // // this.actor.update( + // // { 'data.attribs.mov.max': this.actor.mov }, + // // { render: false } + // // ) + // this.actor.update( + // { 'data.attribs.db.value': this.actor.db }, + // { render: false } + // ) + // this.actor.update( + // { 'data.attribs.build.current': this.actor.build }, + // { render: false } + // ) + // this.actor.update( + // { 'data.attribs.build.value': this.actor.build }, + // { render: false } + // ) + // } // if( data.data.attribs.hp.value < 0) data.data.attribs.hp.value = null; if (data.data.attribs.mp.value < 0) data.data.attribs.mp.value = null @@ -1275,11 +1259,11 @@ export class CoC7ActorSheet extends ActorSheet { if (data.linkType === 'coc7-link') { if (data.type === 'effect') { const link = await CoC7Link.fromData(data) - if( link.data.effect){ - this.actor.createEmbeddedDocuments( 'ActiveEffect', [link.data.effect]) + if (link.data.effect) { + this.actor.createEmbeddedDocuments('ActiveEffect', [link.data.effect]) } } - } + } await super._onDrop(event) } @@ -1800,6 +1784,12 @@ export class CoC7ActorSheet extends ActorSheet { async _updateObject (event, formData) { // ui.notifications.info('_updateObject'); // TODO: Replace with _getSubmitData(updateData={}) Cf. sheet.js(243) + const overrides = foundry.utils.flattenObject(this.actor.overrides); + const name = event.currentTarget.name + if(overrides[name]){ + ui.notifications.warn( game.i18n.format('CoC7.EffectAppliedCantOverride', {name: name})) + } + if (event.currentTarget) { if (event.currentTarget.classList) { if (event.currentTarget.classList.contains('skill-adjustment')) { diff --git a/module/actors/vehicle/data.js b/module/actors/vehicle/data.js new file mode 100644 index 00000000..e6ba65ca --- /dev/null +++ b/module/actors/vehicle/data.js @@ -0,0 +1,49 @@ +import { CoCActor } from '../actor.js' + +export class CoC7Vehicle extends CoCActor { + constructor (data, context) { + if( typeof data.img === 'undefined'){ + data.img = 'systems/CoC7/assets/icons/jeep.svg' + } + super(data, context) + } + + get build () { + const build = parseInt(this.data.data.attribs.build.value) + return isNaN(build) ? null : build + } + + get hp () { + if ( + this.data.data.attribs.build.current === null || + undefined === this.data.data.attribs.build.current || + this.data.data.attribs.build.current === '' + ) { + return this.build + } + if ( + this.data.data.attribs.build.current > this.data.data.attribs.build.value + ) { + return this.build + } + const hp = parseInt(this.data.data.attribs.build.current) + return isNaN(hp) ? null : hp + } + + get hpMax () { + return this.build + } + + async setHp (value) { + if (value > this.build) value = this.build + return await this.update({ 'data.attribs.build.current': value }) + } + + get db () { + return 0 + } + + get mov () { + return this.data.data.attribs.mov.value + } +} diff --git a/module/items/item.js b/module/items/item.js index 3f8de085..2f01e7e7 100644 --- a/module/items/item.js +++ b/module/items/item.js @@ -615,7 +615,9 @@ export class CoC7Item extends Item { async asyncBase () { const e = this._base if (e[1]) { - console.info( `[COC7] (${this.parent?.name}) Evaluating skill ${this.name}:${this.data.data.base} to ${e[0]}`) + console.info( + `[COC7] (${this.parent?.name}) Evaluating skill ${this.name}:${this.data.data.base} to ${e[0]}` + ) await this.update({ 'data.base': e[0] }) } return e[0] @@ -629,59 +631,6 @@ export class CoC7Item extends Item { return e[0] } - get value () { - if (this.type !== 'skill') return null - let value = 0 - if (this.actor.data.type === 'character') { - value = this.base - value += this.data.data.adjustments?.personal - ? parseInt(this.data.data.adjustments?.personal) - : 0 - value += this.data.data.adjustments?.occupation - ? parseInt(this.data.data.adjustments?.occupation) - : 0 - value += this.data.data.adjustments?.experience - ? parseInt(this.data.data.adjustments?.experience) - : 0 - if ( - game.settings.get('CoC7', 'pulpRuleArchetype') && - this.data.data.adjustments?.archetype - ) { - value += parseInt(this.data.data.adjustments?.archetype) - } - } else { - value = parseInt(this.data.data.value) - } - return !isNaN(value) ? value : null - } - - async updateValue (value) { - if (this.type !== 'skill') return null - if (this.actor.data.type === 'character') { - const delta = parseInt(value) - this.value - const exp = - (this.data.data.adjustments?.experience - ? parseInt(this.data.data.adjustments.experience) - : 0) + delta - await this.update({ - 'data.adjustments.experience': exp > 0 ? exp : 0 - }) - } else await this.update({ 'data.value': value }) - } - - async increaseExperience (x) { - if (this.type !== 'skill') return null - if (this.actor.data.type === 'character') { - const exp = - (this.data.data.adjustments?.experience - ? parseInt(this.data.data.adjustments.experience) - : 0) + parseInt(x) - await this.update({ - 'data.adjustments.experience': exp > 0 ? exp : 0 - }) - } - } - getBulletLeft () { if (this.type !== 'weapon') return null if (!this.data.data.ammo) { diff --git a/module/items/skill/data.js b/module/items/skill/data.js index 39b87a07..bc6dc294 100644 --- a/module/items/skill/data.js +++ b/module/items/skill/data.js @@ -52,35 +52,104 @@ export class CoC7Skill extends CoC7Item { return [] } - get value () { - const value = super.value - let updated = value - for (const change of this.activeEffects) { - const modifier = Number.fromString(change.value) - if (!isNaN(modifier)) { - const modes = CONST.ACTIVE_EFFECT_MODES - switch (change.mode) { - case modes.ADD: - updated += modifier - break - case modes.MULTIPLY: - updated = Math.round(updated * modifier) - break - case modes.OVERRIDE: - updated = modifier - break - case modes.UPGRADE: - if (modifer > updated) updated = modifier - break - case modes.DOWNGRADE: - if (modifer < updated) updated = modifier - break - } + /** + * This is the value of the skill score unaffected by active effects + */ + get rawValue () { + let value = 0 + if (this.actor.data.type === 'character') { + // For an actor with experience we need to calculate skill value + value = this.base + value += this.data.data.adjustments?.personal + ? parseInt(this.data.data.adjustments?.personal) + : 0 + value += this.data.data.adjustments?.occupation + ? parseInt(this.data.data.adjustments?.occupation) + : 0 + value += this.data.data.adjustments?.experience + ? parseInt(this.data.data.adjustments?.experience) + : 0 + if ( + game.settings.get('CoC7', 'pulpRuleArchetype') && + this.data.data.adjustments?.archetype + ) { + value += parseInt(this.data.data.adjustments?.archetype) } + } else { + // For all others actor we store the value directly + value = parseInt(this.data.data.value) + } + return !isNaN(value) ? value : null + } + + /** + * This is the skill's value after active effects have been applied + */ + get value () { + const value = this.parent?.data.data.skills?.[`${this.data.data.skillName}`] + ?.value + return value || this.rawValue + } + + async updateValue (value) { + if (this.actor.data.type === 'character') { + const delta = parseInt(value) - this.rawValue + const exp = + (this.data.data.adjustments?.experience + ? parseInt(this.data.data.adjustments.experience) + : 0) + delta + await this.update({ + 'data.adjustments.experience': exp > 0 ? exp : 0 + }) + } else await this.update({ 'data.value': value }) + } + + async increaseExperience (x) { + if (this.type !== 'skill') return null + if (this.actor.data.type === 'character') { + const exp = + (this.data.data.adjustments?.experience + ? parseInt(this.data.data.adjustments.experience) + : 0) + parseInt(x) + await this.update({ + 'data.adjustments.experience': exp > 0 ? exp : 0 + }) } - if (!isNaN(updated) && updated != value) { - if (updated < 0) updated = 0 - return updated - } return value } + + // get value () { + // let pValue + // if( this.parent){ + + // } + // const value = super.value + // let updated = value + // for (const change of this.activeEffects) { + // const modifier = Number.fromString(change.value) + // if (!isNaN(modifier)) { + // const modes = CONST.ACTIVE_EFFECT_MODES + // switch (change.mode) { + // case modes.ADD: + // updated += modifier + // break + // case modes.MULTIPLY: + // updated = Math.round(updated * modifier) + // break + // case modes.OVERRIDE: + // updated = modifier + // break + // case modes.UPGRADE: + // if (modifer > updated) updated = modifier + // break + // case modes.DOWNGRADE: + // if (modifer < updated) updated = modifier + // break + // } + // } + // } + // if (!isNaN(updated) && updated != value) { + // if (updated < 0) updated = 0 + // return updated + // } return value + // } } diff --git a/module/scripts/configure-documents.js b/module/scripts/configure-documents.js index 1b9b30a4..053a263f 100644 --- a/module/scripts/configure-documents.js +++ b/module/scripts/configure-documents.js @@ -7,11 +7,14 @@ import { CoC7Spell } from '../items/spell/data.js' import { CoC7Chase } from '../items/chase/data.js' import CoC7ActiveEffect from '../active-effect.js' import { CoC7Skill } from '../items/skill/data.js' +import { CoC7Vehicle } from '../actors/vehicle/data.js' export function configureDocuments () { CONFIG.ActiveEffect.documentClass = CoC7ActiveEffect CONFIG.Actor.documentClass = CoCActor - CONFIG.Actor.documentClasses = {} + CONFIG.Actor.documentClasses = { + vehicle: CoC7Vehicle + } CONFIG.Item.documentClass = CoC7Item CONFIG.Item.documentClasses = { book: CoC7Book, diff --git a/templates/actors/character-sheet-v2.html b/templates/actors/character-sheet-v2.html index 20331cd2..1cf63576 100644 --- a/templates/actors/character-sheet-v2.html +++ b/templates/actors/character-sheet-v2.html @@ -135,7 +135,7 @@

    {{localize 'CoC7.Mov'}}:

    {{#if data.attribs.mov.auto}} {{data.attribs.mov.value}} {{else}} - + {{/if}}
    @@ -147,7 +147,7 @@

    {{localize 'CoC7.Build'}}:

    {{#if data.attribs.build.auto}} {{data.attribs.build.value}} {{else}} - + {{/if}}
    @@ -158,7 +158,7 @@

    {{localize 'CoC7.DB'}}:

    {{#if data.attribs.db.auto}}
    {{data.attribs.db.value}}
    {{else}} -
    +
    {{/if}}
    diff --git a/templates/actors/npc-sheet.html b/templates/actors/npc-sheet.html index c0cef77c..cb0501d5 100644 --- a/templates/actors/npc-sheet.html +++ b/templates/actors/npc-sheet.html @@ -184,7 +184,7 @@ {{#if data.attribs.mov.auto}} {{data.attribs.mov.value}} {{else}} - + {{/if}} {{#unless data.flags.locked}} diff --git a/templates/actors/parts/actor-skills-v2.html b/templates/actors/parts/actor-skills-v2.html index fb8449a8..46461de0 100644 --- a/templates/actors/parts/actor-skills-v2.html +++ b/templates/actors/parts/actor-skills-v2.html @@ -35,7 +35,7 @@

    {{localize 'CoC7.EmptyCharacterSkillList'}}

    - +
    @@ -70,7 +70,7 @@

    {{localize 'CoC7.EmptyCharacterSkillList'}}

    - +
    diff --git a/templates/actors/parts/npc-skills.html b/templates/actors/parts/npc-skills.html index f9e5c5f5..4787b02d 100644 --- a/templates/actors/parts/npc-skills.html +++ b/templates/actors/parts/npc-skills.html @@ -10,7 +10,7 @@

    % {{else}} - +
    From c8feb681963315e1695de992b8089c3226a2a9bb Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Tue, 9 Aug 2022 09:51:00 +0200 Subject: [PATCH 693/726] Sheet backgroun null logic review --- module/actors/sheets/character.js | 170 ++++++++++++++++-------------- 1 file changed, 88 insertions(+), 82 deletions(-) diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index fedf16ea..f0c98017 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -29,11 +29,11 @@ export class CoC7CharacterSheet extends CoC7ActorSheet { await this.close() const options = this.summarized ? { - classes: ['coc7', 'actor', 'character', 'summarized'], - height: 200, - resizable: false, - width: 700 - } + classes: ['coc7', 'actor', 'character', 'summarized'], + height: 200, + resizable: false, + width: 700 + } : CoC7CharacterSheet.defaultOptions await this.render(true, options) } @@ -127,9 +127,8 @@ export class CoC7CharacterSheet extends CoC7ActorSheet { : '$' } - data.credit.spendingLevel = `${monetarySymbol}${ - this.actor.spendingLevel * factor - }` + data.credit.spendingLevel = `${monetarySymbol}${this.actor.spendingLevel * + factor}` data.credit.assets = `${monetarySymbol}${this.actor.assets * factor}` data.credit.cash = `${monetarySymbol}${this.actor.cash * factor}` } @@ -296,7 +295,9 @@ export class CoC7CharacterSheet extends CoC7ActorSheet { _onDeleteSanityLossReason (event) { event.preventDefault() - const offset = $(event.currentTarget).closest('.flexrow').data('offset') + const offset = $(event.currentTarget) + .closest('.flexrow') + .data('offset') const sanityLossEvents = this.actor.data.data.sanityLossEvents ?? [] sanityLossEvents.splice(offset, 1) sanityLossEvents.sort(function (left, right) { @@ -339,94 +340,99 @@ export class CoC7CharacterSheet extends CoC7ActorSheet { static renderSheet (sheet) { if (game.settings.get('CoC7', 'overrideSheetArtwork')) { if (game.settings.get('CoC7', 'artWorkSheetBackground')) { - sheet.element.css( - '--main-sheet-bg', - game.settings.get('CoC7', 'artWorkSheetBackground') - ) - // const borderImage = sheet.element.find('form').css('border-image'); - // sheet.element.find('form').css('border-image', ''); if ( - game.settings.get('CoC7', 'artWorkSheetBackgroundType') !== 'slice' + game.settings.get('CoC7', 'artWorkSheetBackground').toLowerCase() === + 'null' ) { - let styleSheet, cssRuleIndex - for (let i = 0; i < document.styleSheets.length; i++) { - if (document.styleSheets[i].href?.endsWith('coc7g.css')) { - styleSheet = document.styleSheets[i] - break + sheet.element.css( + '--main-sheet-bg', + "url( './assets/images/void.webp')" + ) + } else { + sheet.element.css( + '--main-sheet-bg', + game.settings.get('CoC7', 'artWorkSheetBackground') + ) + // const borderImage = sheet.element.find('form').css('border-image'); + // sheet.element.find('form').css('border-image', ''); + if ( + game.settings.get('CoC7', 'artWorkSheetBackgroundType') !== 'slice' + ) { + let styleSheet, cssRuleIndex + for (let i = 0; i < document.styleSheets.length; i++) { + if (document.styleSheets[i].href?.endsWith('coc7g.css')) { + styleSheet = document.styleSheets[i] + break + } } - } - if (styleSheet) { - for (let i = 0; i < styleSheet.rules.length; i++) { - if ( - styleSheet.rules[i].selectorText === '.sheetV2.character form' - ) { - cssRuleIndex = i - break + if (styleSheet) { + for (let i = 0; i < styleSheet.rules.length; i++) { + if ( + styleSheet.rules[i].selectorText === '.sheetV2.character form' + ) { + cssRuleIndex = i + break + } } } - } - if (cssRuleIndex) { - const CSSStyle = styleSheet.rules[cssRuleIndex].style - CSSStyle.removeProperty('border-image') - CSSStyle.setProperty( - 'background', - game.settings.get('CoC7', 'artWorkSheetBackground') - ) - switch (game.settings.get('CoC7', 'artWorkSheetBackgroundType')) { - case 'auto': - CSSStyle.setProperty('background-size', 'auto') - break - case 'contain': - CSSStyle.setProperty('background-size', 'contain') - break - case 'cover': - CSSStyle.setProperty('background-size', 'cover') - break - default: - CSSStyle.setProperty('background-size', 'auto') - break + if (cssRuleIndex) { + const CSSStyle = styleSheet.rules[cssRuleIndex].style + CSSStyle.removeProperty('border-image') + CSSStyle.setProperty( + 'background', + game.settings.get('CoC7', 'artWorkSheetBackground') + ) + switch (game.settings.get('CoC7', 'artWorkSheetBackgroundType')) { + case 'auto': + CSSStyle.setProperty('background-size', 'auto') + break + case 'contain': + CSSStyle.setProperty('background-size', 'contain') + break + case 'cover': + CSSStyle.setProperty('background-size', 'cover') + break + default: + CSSStyle.setProperty('background-size', 'auto') + break + } } } } - } else if ( - game.settings.get('CoC7', 'artWorkSheetBackground').toLowerCase() === - 'null' - ) { - sheet.element.css( - '--main-sheet-bg', - "url( './assets/images/void.webp')" - ) } if (game.settings.get('CoC7', 'artWorkOtherSheetBackground')) { - sheet.element.css( - '--other-sheet-bg', - game.settings.get('CoC7', 'artWorkOtherSheetBackground') - ) - } else if ( - game.settings - .get('CoC7', 'artWorkOtherSheetBackground') - .toLowerCase() === 'null' - ) { - sheet.element.css( - '--other-sheet-bg', - "url( './assets/images/void.webp')" - ) + if ( + game.settings + .get('CoC7', 'artWorkOtherSheetBackground') + .toLowerCase() === 'null' + ) { + sheet.element.css( + '--other-sheet-bg', + "url( './assets/images/void.webp')" + ) + } else + sheet.element.css( + '--other-sheet-bg', + game.settings.get('CoC7', 'artWorkOtherSheetBackground') + ) } if (game.settings.get('CoC7', 'artworkSheetImage')) { - sheet.element.css( - '--main-sheet-image', - game.settings.get('CoC7', 'artworkSheetImage') - ) - } else if ( - game.settings.get('CoC7', 'artworkSheetImage').toLowerCase() === 'null' - ) { - sheet.element.css( - '--main-sheet-image', - "url( './assets/images/void.webp')" - ) + if ( + game.settings.get('CoC7', 'artworkSheetImage').toLowerCase() === + 'null' + ) { + sheet.element.css( + '--main-sheet-image', + "url( './assets/images/void.webp')" + ) + } else + sheet.element.css( + '--main-sheet-image', + game.settings.get('CoC7', 'artworkSheetImage') + ) } if (game.settings.get('CoC7', 'artworkFrontColor')) { From 6fbf202d6f6129a79c9cee93ff3ddf24d749366c Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Tue, 9 Aug 2022 23:20:19 +0100 Subject: [PATCH 694/726] Add additional manual pages --- assets/manual/importer/actor.webp | Bin 0 -> 14998 bytes assets/manual/importer/importer.webp | Bin 0 -> 33696 bytes docs/en/actor_importer.md | 55 +++++++++++++++++++++++ docs/en/item_occupation.md | 29 ++++++++++++ docs/en/item_setup.md | 20 +++++++++ docs/en/manual.md | 65 +++++++++++++++++---------- generate-manuals.js | 24 ++++++++-- module/apps/actor-importer-dialog.js | 4 +- module/manual/en/actor_importer.md | 58 ++++++++++++++++++++++++ module/manual/en/item_occupation.md | 29 ++++++++++++ module/manual/en/item_setup.md | 20 +++++++++ module/manual/en/manual.md | 35 ++++++++++++--- packs/system-doc.db | 7 ++- 13 files changed, 311 insertions(+), 35 deletions(-) create mode 100644 assets/manual/importer/actor.webp create mode 100644 assets/manual/importer/importer.webp create mode 100644 docs/en/actor_importer.md create mode 100644 docs/en/item_occupation.md create mode 100644 docs/en/item_setup.md create mode 100644 module/manual/en/actor_importer.md create mode 100644 module/manual/en/item_occupation.md create mode 100644 module/manual/en/item_setup.md diff --git a/assets/manual/importer/actor.webp b/assets/manual/importer/actor.webp new file mode 100644 index 0000000000000000000000000000000000000000..2f84b1005b8cb489e5c8f161a129e0ee39ca9472 GIT binary patch literal 14998 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

    ) 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 aKYyc)T`HJS>jjMT5U@lP`8r()cmM$YNoO7a literal 0 HcmV?d00001 diff --git a/docs/en/actor_importer.md b/docs/en/actor_importer.md new file mode 100644 index 00000000..def193b7 --- /dev/null +++ b/docs/en/actor_importer.md @@ -0,0 +1,55 @@ +# Actor Importer + +You can use the actor importer to import serveral NPC/Creatures blocks from adventures and using the JSON exporter from [The Dholes House](https://www.dholeshouse.org/) + +To open the actor importer either open the Actor Directory and click Actor Importer at the bottom of the side bar or on an active scene then click Actor Importer + + +# Overview + +If this is your first time it is recommends you also read the following sections. + +- Non Playing Character (NPC) / Creature +- The Dhole's House Actor Importer JSON + + +# Non Playing Character (NPC) / Creature + +![](../../assets/manual/importer/importer.webp) + +1. Select NPC or Creature +2. Should the system convert the character block from an earlier edition to 7th +3. Select the languages of the character block +4. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched + + _Items_: From your item directory + + _World_: From your world compendiums + + _Modules_: From your module compendiums + + _System_: From the system compendiums provided with this system + +5. An example layout is given here you can copy this to your clipboard if you want to edit it or paste in the text from an adventure + +Click import will create an actor under the Actor directory will be created in the Imported characters folder any text that was not understood will be stored in Keeper notes + + +# The Dhole's House Actor Importer JSON + +![](../../assets/manual/importer/actor.webp) + +1. The Dhole's House Actor Importer JSON +2. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched + + _Items_: From your item directory + + _World_: From your world compendiums + + _Modules_: From your module compendiums + + _System_: From the system compendiums provided with this system + +Browse for your JSON file, once selected the name and image will be be shown, click import to create the actor under the Actor directory will be created in the Imported characters folder + +By default the image will be stored in a folder called dhole-image in your world, this can be changed by clicking on the Game Settings tab then under the Game Settings heading clicking on Configure Settings, click on System Settings. diff --git a/docs/en/item_occupation.md b/docs/en/item_occupation.md new file mode 100644 index 00000000..278eca59 --- /dev/null +++ b/docs/en/item_occupation.md @@ -0,0 +1,29 @@ +# Item Type: Occupation + +An _occupation_ helps to define the character background, think about it as the definition of the set of _occupational skills_ (the ones where the character can spend their occupation points) plus the definition of how to calculate the amount of available occupation points. Finally the _occupation_ also allows to define the minimum and the maximum _credit_ for a character with this _occupation_. + +Keep in mind that the set of _occupational skills_ doesn't need to be fixed, the system allows to configure the _occupation_ so when it's dragged to a Character sheet will give the option of selecting one or more skills from a closed list, or even add a pre defined number of skills to select from all the available ones. + +1. Go to the Items Directory tab +2. Click on Create Item + + 1. Give the set up a name e.g. _Librarian_ + 2. Set _Type_ to _Occupation_ + +3. On the _Description_ tab you can change the name, icon, name of the source book, and description +4. On the _Details_ tab you can control + + 1. Select the _Occupation Type_ + 2. Define the characteristics used to calculate the _occupation points_, you can check the characteristics you want and define the multiplier, for the ones with _Optional_ marked, the player will have to choose one at creation time. + + 1. For instance if an occupation uses _EDU * 2 + (STR or DEX) * 2_ You have to select _Education_ and put _2_ on the _Multiplier_ without marking _Optional_ and then for _Strength_ and _Dexterity_ you have to check both, check _Optional_ on both, and put _2_ on the Multiplier on both. + 2. Finally you will have to define the _Minimum_ and _Maximum_ value for the _Credit Rating_ skill for this occupation. + + 3. Names of biography sections (click on the `+` to add extra Biography sections), this can be replaced with a single block biography in settings + 4. Under items you can drag and drop default items and weapons + +5. On the _Skills_ you can drag and drop skills in to multiple sections, A typical occupation has 8 skills plus the _Credit Rating_ skill. + + 1. The _Common Skills_ includes the default occupation skills that can't be changed + 2. The _Optional skills groups_ section allows to add groups (you can create several of them) of skills for the player to choose from. Once you click on the `+` sign a group is created and you can define the _Number to chose from_ (number of skills to select) and create a pool of skills available for the selection by dragging them on the group. + 3. Finally the _Additional Skills_ allows you to enter a number of skills the player can choose from the rest of the available skills. diff --git a/docs/en/item_setup.md b/docs/en/item_setup.md new file mode 100644 index 00000000..8f531ba7 --- /dev/null +++ b/docs/en/item_setup.md @@ -0,0 +1,20 @@ +# Item Type: Setup + +Setups are predefined sets of skills and a way to generate the characteristics (this can be by rolling dices or assigning certain amount of points for example). + +1. Go to the Items Directory tab +2. Click on Create Item + + 1. Give the set up a name e.g. _1920's Setup_ + 2. Set _Type_ to _Setup_ + +3. On the _Description_ tab you can change the name, icon, name of the source book, and description +4. On the _Details_ tab you can control + + 1. Show / Hide the Characteristics tab with the Enable characteristics checkbox + 2. Which version of Call of Cthulhu this is for, this can be filtered in compendiums + 3. Names of biography sections (click on the `+` to add extra Biography sections), this can be replaced with a single block biography in settings + 4. Under items you can drag and drop default items and weapons + +5. On the _Characteristics_ tab you can set a points buy or roll characteristics and the formula +6. On the _Skills_ tab under common skill you can drag and drop default skills diff --git a/docs/en/manual.md b/docs/en/manual.md index 4dda51d8..545f95c2 100644 --- a/docs/en/manual.md +++ b/docs/en/manual.md @@ -10,54 +10,72 @@ You will need one of the following to play the game The system automates most of the regular tasks and rules involved with running a game. +Several parts of the actor sheets have pop up tooltips that trigger after two seconds, this delay can be changed in the settings -This documentation can be reopened under Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en] - +This documentation can be reopened under Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en] # Recent changes For a full list of changes checkout the [changelog](https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT/blob/develop/.github/CHANGELOG.md) on GitHub - - [Chases](chases.md) -- The Dhole's House JSON actor importer - +- [Actor importer](actor_importer.md) - added The Dhole's House JSON support # Overview sections below +If this is your first time it is recommends you also read the following sections. + - Actor overview - Items overview - Settings overview - Scene menu overview - +- [Creating your first investigator](first_investigator.md) # How to use the system -- [Creating your first investigator](first_investigator.md) -- [Chases](chases.md) - +- [Actor importer](actor_importer.md) +- Actor Type: Character +- Actor Type: Container +- Actor Type: Creature +- Actor Type: NPC +- Chat link creator +- Character creation mode +- Development phase +- Item Type: Archetype +- Item Type: Book +- [Item Type: Chases](chases.md) +- Item Type: Item +- [Item Type: Occupation](item_occupation.md) +- [Item Type: Setup](item_setup.md) +- Item Type: Skill +- Item Type: Spell +- Item Type: Status +- Item Type: Talent +- Item Type: Weapon +- Macros +- Rolls +- Start Rest +- XP Gain # Actor overview -- _Character_ - A complete character, usually an investigator. -- _Container_ - An inventory container. -- _Creature_ - A more simple character, suitable for creatures. -- _NPC_ - A more simple character, suitable for NPCs. - +- _Character_ - A complete character, usually an investigator. +- _Container_ - An inventory container. +- _Creature_ - A more simple character, suitable for creatures. +- _NPC_ - A more simple character, suitable for NPCs. # Items overview -- _Archetype_ - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. +- _Archetype_ - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. - _Book_ - An arcane tome that can hold spells and character improvements. - _Item_ - A piece of equipment. -- _Occupation_ - A set of skills and other stats that implement a CoC occupation. -- _Setup_ - A set of default configurations for character, creature, or NPC creation. -- _Skill_ - A skill with a base percentage and some tags. +- _Occupation_ - A set of skills and other stats that implement a CoC occupation. +- _Setup_ - A set of default configurations for character, creature, or NPC creation. +- _Skill_ - A skill with a base percentage and some tags. - _Spell_ - A magic spell. -- _Status_ - An phobia or mania condition. -- _Talent_ -A special power for Pulp Cthulhu. These do not trigger automation in the system. -- _Weapon_ - An item with weapon statistics (this includes unarmed attacks). - +- _Status_ - An phobia or mania condition. +- _Talent_ -A special power for Pulp Cthulhu. These do not trigger automation in the system. +- _Weapon_ - An item with weapon statistics (this includes unarmed attacks). # Settings overview @@ -73,10 +91,9 @@ Click on System Settings - _Game Artwork Settings_ - This allows you to set a custom pause icon and message - _Sheet Settings_ - This allows you to change character sheet settings and optional CSS - _Weapon Settings_ - Weapon Settings -- _Developer And Debug Settings_ - These settings can break your world when new updates are released so only use them on test world +- _Developer And Debug Settings_ - These settings can break your world when new updates are released so only use them on test worlds - _Roll Table Settings_ - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums - # Call of Cthulhu Scene Menu To access this menu you will need to have an active scene which can be created in the Scenes Directory. diff --git a/generate-manuals.js b/generate-manuals.js index b061110d..4f055b03 100644 --- a/generate-manuals.js +++ b/generate-manuals.js @@ -3,22 +3,40 @@ import * as fs from 'fs' import write from './node_modules/write/index.js' const sources = { + xV4Hxxmu6zjIMw9h: { + en: { + name: 'Actor Importer [en]', + file: 'actor_importer.md' + } + }, wZtTHpGV3atKV2oD: { en: { name: 'Call of Cthulhu 7th Edition (Unofficial) [en]', file: 'manual.md' } }, + VdOeGcxsu3jsVm3F: { + en: { + name: 'Chases [en]', + file: 'chases.md' + } + }, nVYLlqVzmUV5dXAW: { en: { name: 'Creating your first investigator [en]', file: 'first_investigator.md' } }, - VdOeGcxsu3jsVm3F: { + '7hFq9EqLviAxqMFz': { en: { - name: 'Chases [en]', - file: 'chases.md' + name: 'Item Type: Occupation [en]', + file: 'item_occupation.md' + } + }, + JU1GCWwc8at7gzJ4: { + en: { + name: 'Item Type: Setup [en]', + file: 'item_setup.md' } } } diff --git a/module/apps/actor-importer-dialog.js b/module/apps/actor-importer-dialog.js index 4f3577cd..87181cb5 100644 --- a/module/apps/actor-importer-dialog.js +++ b/module/apps/actor-importer-dialog.js @@ -42,7 +42,9 @@ export class CoC7ActorImporterDialog extends FormApplication { super.activateListeners(html) html.find('#dholehouse-character-preview').hide() - html.find('#coc-entity-type').change(this._onChangeSubmit.bind(this)) + html + .find('#coc-entity-type,#coc-entity-lang') + .change(this._onChangeSubmit.bind(this)) html .find('#dholehouse-json-file-picker') .change(this._onJSONFileSelected.bind(this)) diff --git a/module/manual/en/actor_importer.md b/module/manual/en/actor_importer.md new file mode 100644 index 00000000..6fc4463a --- /dev/null +++ b/module/manual/en/actor_importer.md @@ -0,0 +1,58 @@ +# Actor Importer + +You can use the actor importer to import serveral NPC/Creatures blocks from adventures and using the JSON exporter from [The Dholes House](https://www.dholeshouse.org/) + +To open the actor importer either open the [fas fa-users]Actor Directory and click Actor Importer at the bottom of the side bar or on an active scene [game-icon game-icon-tentacle-strike] then click [fas fa-user-plus]Actor Importer + +. + +# Overview + +If this is your first time it is recommends you also read the following sections. + +- Non Playing Character (NPC) / Creature +- The Dhole's House Actor Importer JSON + +. + +# Non Playing Character (NPC) / Creature + +![](../../assets/manual/importer/importer.webp) + +1. Select NPC or Creature +2. Should the system convert the character block from an earlier edition to 7th +3. Select the languages of the character block +4. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched + + _Items_: From your item directory + + _World_: From your world compendiums + + _Modules_: From your module compendiums + + _System_: From the system compendiums provided with this system + +5. An example layout is given here you can copy this to your clipboard if you want to edit it or paste in the text from an adventure + +Click import will create an actor under the [fas fa-users]Actor directory will be created in the Imported characters folder any text that was not understood will be stored in Keeper notes + +. + +# The Dhole's House Actor Importer JSON + +![](../../assets/manual/importer/actor.webp) + +1. The Dhole's House Actor Importer JSON +2. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched + + _Items_: From your item directory + + _World_: From your world compendiums + + _Modules_: From your module compendiums + + _System_: From the system compendiums provided with this system + +Browse for your JSON file, once selected the name and image will be be shown, click import to create the actor under the [fas fa-users]Actor directory will be created in the Imported characters folder + +By default the image will be stored in a folder called dhole-image in your world, this can be changed by clicking on the [fas fa-cogs]Game Settings tab then under the Game Settings heading clicking on [fas fa-cogs]Configure Settings, click on [fas fa-cogs]System Settings. diff --git a/module/manual/en/item_occupation.md b/module/manual/en/item_occupation.md new file mode 100644 index 00000000..dfcf626f --- /dev/null +++ b/module/manual/en/item_occupation.md @@ -0,0 +1,29 @@ +# Item Type: Occupation + +An _occupation_ helps to define the character background, think about it as the definition of the set of _occupational skills_ (the ones where the character can spend their occupation points) plus the definition of how to calculate the amount of available occupation points. Finally the _occupation_ also allows to define the minimum and the maximum _credit_ for a character with this _occupation_. + +Keep in mind that the set of _occupational skills_ doesn't need to be fixed, the system allows to configure the _occupation_ so when it's dragged to a Character sheet will give the option of selecting one or more skills from a closed list, or even add a pre defined number of skills to select from all the available ones. + +1. Go to the [fas fa-suitcas]Items Directory tab +2. Click on [fas fa-suitcase]Create Item + + 1. Give the set up a name e.g. _Librarian_ + 2. Set _Type_ to _Occupation_ + +3. On the _Description_ tab you can change the name, icon, name of the source book, and description +4. On the _Details_ tab you can control + + 1. Select the _Occupation Type_ + 2. Define the characteristics used to calculate the _occupation points_, you can check the characteristics you want and define the multiplier, for the ones with _Optional_ marked, the player will have to choose one at creation time. + + 1. For instance if an occupation uses _EDU * 2 + (STR or DEX) * 2_ You have to select _Education_ and put _2_ on the _Multiplier_ without marking _Optional_ and then for _Strength_ and _Dexterity_ you have to check both, check _Optional_ on both, and put _2_ on the Multiplier on both. + 2. Finally you will have to define the _Minimum_ and _Maximum_ value for the _Credit Rating_ skill for this occupation. + + 3. Names of biography sections (click on the `+` to add extra Biography sections), this can be replaced with a single block biography in settings + 4. Under items you can drag and drop default items and weapons + +5. On the _Skills_ you can drag and drop skills in to multiple sections, A typical occupation has 8 skills plus the _Credit Rating_ skill. + + 1. The _Common Skills_ includes the default occupation skills that can't be changed + 2. The _Optional skills groups_ section allows to add groups (you can create several of them) of skills for the player to choose from. Once you click on the `+` sign a group is created and you can define the _Number to chose from_ (number of skills to select) and create a pool of skills available for the selection by dragging them on the group. + 3. Finally the _Additional Skills_ allows you to enter a number of skills the player can choose from the rest of the available skills. diff --git a/module/manual/en/item_setup.md b/module/manual/en/item_setup.md new file mode 100644 index 00000000..46770862 --- /dev/null +++ b/module/manual/en/item_setup.md @@ -0,0 +1,20 @@ +# Item Type: Setup + +Setups are predefined sets of skills and a way to generate the characteristics (this can be by rolling dices or assigning certain amount of points for example). + +1. Go to the [fas fa-suitcas]Items Directory tab +2. Click on [fas fa-suitcase]Create Item + + 1. Give the set up a name e.g. _1920's Setup_ + 2. Set _Type_ to _Setup_ + +3. On the _Description_ tab you can change the name, icon, name of the source book, and description +4. On the _Details_ tab you can control + + 1. Show / Hide the Characteristics tab with the Enable characteristics checkbox + 2. Which version of Call of Cthulhu this is for, this can be filtered in compendiums + 3. Names of biography sections (click on the `+` to add extra Biography sections), this can be replaced with a single block biography in settings + 4. Under items you can drag and drop default items and weapons + +5. On the _Characteristics_ tab you can set a points buy or roll characteristics and the formula +6. On the _Skills_ tab under common skill you can drag and drop default skills diff --git a/module/manual/en/manual.md b/module/manual/en/manual.md index 24b9bd8d..f261aece 100644 --- a/module/manual/en/manual.md +++ b/module/manual/en/manual.md @@ -10,6 +10,7 @@ You will need one of the following to play the game The system automates most of the regular tasks and rules involved with running a game. +Several parts of the actor sheets have pop up tooltips that trigger after two seconds, this delay can be changed in the settings . This documentation can be reopened under [fas fa-atlas] Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en] @@ -23,23 +24,47 @@ For a full list of changes checkout the [changelog](https://github.com/Miskatoni . - @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases} -- The Dhole's House JSON actor importer +- @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer} - added The Dhole's House JSON support . # Overview sections below +If this is your first time it is recommends you also read the following sections. + - Actor overview - Items overview - Settings overview - Scene menu overview +- @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator} . # How to use the system -- @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator} -- @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases} +- @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer} +- Actor Type: Character +- Actor Type: Container +- Actor Type: Creature +- Actor Type: NPC +- Chat link creator +- Character creation mode +- Development phase +- Item Type: Archetype +- Item Type: Book +- @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Item Type: Chases} +- Item Type: Item +- @Compendium[CoC7.system-doc.7hFq9EqLviAxqMFz]{Item Type: Occupation} +- @Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Item Type: Setup} +- Item Type: Skill +- Item Type: Spell +- Item Type: Status +- Item Type: Talent +- Item Type: Weapon +- Macros +- Rolls +- Start Rest +- XP Gain . @@ -69,7 +94,7 @@ For a full list of changes checkout the [changelog](https://github.com/Miskatoni # Settings overview -Click on the [fas fa-cogs]Game Settings tab then under the Game Settings heading click on Configure Settings. +Click on the [fas fa-cogs]Game Settings tab then under the Game Settings heading click on [fas fa-cogs]Configure Settings. Click on [fas fa-cogs]System Settings @@ -81,7 +106,7 @@ Click on [fas fa-cogs]System Settings - _Game Artwork Settings_ - This allows you to set a custom pause icon and message - _Sheet Settings_ - This allows you to change character sheet settings and optional CSS - _Weapon Settings_ - Weapon Settings -- _Developer And Debug Settings_ - These settings can break your world when new updates are released so only use them on test world +- _Developer And Debug Settings_ - These settings can break your world when new updates are released so only use them on test worlds - _Roll Table Settings_ - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums . diff --git a/packs/system-doc.db b/packs/system-doc.db index ed2e9cef..b1f2c476 100644 --- a/packs/system-doc.db +++ b/packs/system-doc.db @@ -1,3 +1,6 @@ -{"_id":"wZtTHpGV3atKV2oD","name":"Call of Cthulhu 7th Edition (Unofficial) [en]","content":"

    \n

    System documentation v0.7.12

    \n

    This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT.

    \n

    You will need one of the following to play the game

    \n
      \n
    • Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules
    • \n
    \n

    The system automates most of the regular tasks and rules involved with running a game.

    \n

     

    \n

    This documentation can be reopened under   Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en]

    \n

     

    \n

    Recent changes

    \n

    For a full list of changes checkout the changelog on GitHub

    \n

     

    \n
      \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
    • \n
    • The Dhole's House JSON actor importer
    • \n
    \n

     

    \n

    Overview sections below

    \n
      \n
    • Actor overview
    • \n
    • Items overview
    • \n
    • Settings overview
    • \n
    • Scene menu overview
    • \n
    \n

     

    \n

    How to use the system

    \n
      \n
    • @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator}
    • \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
    • \n
    \n

     

    \n

    Actor overview

    \n
      \n
    • Character - A complete character, usually an investigator. @Compendium[CoC7.examples.JuI2aWDSEuQNKeUI]{Example Character}
    • \n
    • Container - An inventory container. @Compendium[CoC7.examples.r7bDSY4OYKxQYEas]{Example Container}
    • \n
    • Creature - A more simple character, suitable for creatures. @Compendium[CoC7.examples.XE2vjLG03wGfnYLw]{Example Creature}
    • \n
    • NPC - A more simple character, suitable for NPCs. @Compendium[CoC7.examples.4kSvDc4n13oFx8RG]{Example NPC}
    • \n
    \n

     

    \n

    Items overview

    \n
      \n
    • Archetype - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. @Compendium[CoC7.items.lu04TIRrg9P3vRqY]{Example Archetype}
    • \n
    • Book - An arcane tome that can hold spells and character improvements.
    • \n
    • Item - A piece of equipment.
    • \n
    • Occupation - A set of skills and other stats that implement a CoC occupation. @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Example Occupation}
    • \n
    • Setup - A set of default configurations for character, creature, or NPC creation. @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{Example Setup}
    • \n
    • Skill - A skill with a base percentage and some tags. @Compendium[CoC7.skills.UOuN0gESXPp2HXwH]{Example Skill}
    • \n
    • Spell - A magic spell.
    • \n
    • Status - An phobia or mania condition. @Compendium[CoC7.items.DVdvEDizPZPux1pK]{Example Mania}
    • \n
    • Talent -A special power for Pulp Cthulhu. These do not trigger automation in the system. @Compendium[CoC7.items.yqvwz769ZeJplOW7]{Example Talent}
    • \n
    • Weapon - An item with weapon statistics (this includes unarmed attacks). @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Example Weapon}
    • \n
    \n

     

    \n

    Settings overview

    \n

    Click on the  Game Settings tab then under the Game Settings heading click on Configure Settings.

    \n

    Click on  System Settings

    \n
      \n
    • Variant/Optional Rules - Here you can turn on individual Pulp Cthulhu rules and other optional rules
    • \n
    • Initiative Settings - Additional settings for optional initiative rule
    • \n
    • Roll Settings - Default options for rolls
    • \n
    • Chat Cards Settings - Configure chat messages
    • \n
    • Scene Settings - Scene Settings
    • \n
    • Game Artwork Settings - This allows you to set a custom pause icon and message
    • \n
    • Sheet Settings - This allows you to change character sheet settings and optional CSS
    • \n
    • Weapon Settings - Weapon Settings
    • \n
    • Developer And Debug Settings - These settings can break your world when new updates are released so only use them on test world
    • \n
    • Roll Table Settings - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums
    • \n
    \n

     

    \n

    Call of Cthulhu Scene Menu

    \n

    To access this menu you will need to have an active scene which can be created in the  Scenes Directory.

    \n
      \n
    • Keeper's tools - Here you can toggle character creation mode, character development phase, actor importer, toggle automatic XP gain on a success, and start a rest
    • \n
    • Roll ! - Create a roll in chat
    • \n
    • Create link - Create a roll link for players to click
    • \n
    \n\n
    "} +{"_id":"xV4Hxxmu6zjIMw9h","name":"Actor Importer [en]","content":"
    \n

    Actor Importer

    \n

    You can use the actor importer to import serveral NPC/Creatures blocks from adventures and using the JSON exporter from The Dholes House

    \n

    To open the actor importer either open the  Actor Directory and click Actor Importer at the bottom of the side bar or on an active scene   then click  Actor Importer

    \n

     

    \n

    Overview

    \n

    If this is your first time it is recommends you also read the following sections.

    \n
      \n
    • Non Playing Character (NPC) / Creature
    • \n
    • The Dhole's House Actor Importer JSON
    • \n
    \n

     

    \n

    Non Playing Character (NPC) / Creature

    \n

    \"\"

    \n
      \n
    1. Select NPC or Creature

    2. \n
    3. Should the system convert the character block from an earlier edition to 7th

    4. \n
    5. Select the languages of the character block

    6. \n
    7. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched

      \n

      Items: From your item directory

      \n

      World: From your world compendiums

      \n

      Modules: From your module compendiums

      \n

      System: From the system compendiums provided with this system

    8. \n
    9. An example layout is given here you can copy this to your clipboard if you want to edit it or paste in the text from an adventure

    10. \n
    \n

    Click import will create an actor under the  Actor directory will be created in the Imported characters folder any text that was not understood will be stored in Keeper notes

    \n

     

    \n

    The Dhole's House Actor Importer JSON

    \n

    \"\"

    \n
      \n
    1. The Dhole's House Actor Importer JSON

    2. \n
    3. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched

      \n

      Items: From your item directory

      \n

      World: From your world compendiums

      \n

      Modules: From your module compendiums

      \n

      System: From the system compendiums provided with this system

    4. \n
    \n

    Browse for your JSON file, once selected the name and image will be be shown, click import to create the actor under the  Actor directory will be created in the Imported characters folder

    \n

    By default the image will be stored in a folder called dhole-image in your world, this can be changed by clicking on the  Game Settings tab then under the Game Settings heading clicking on  Configure Settings, click on  System Settings.

    \n\n
    "} +{"_id":"wZtTHpGV3atKV2oD","name":"Call of Cthulhu 7th Edition (Unofficial) [en]","content":"
    \n

    System documentation v0.7.12

    \n

    This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT.

    \n

    You will need one of the following to play the game

    \n
      \n
    • Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules
    • \n
    \n

    The system automates most of the regular tasks and rules involved with running a game.

    \n

    Several parts of the actor sheets have pop up tooltips that trigger after two seconds, this delay can be changed in the settings\n.

    \n

    This documentation can be reopened under   Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en]

    \n

     

    \n

    Recent changes

    \n

    For a full list of changes checkout the changelog on GitHub

    \n

     

    \n
      \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
    • \n
    • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer} - added The Dhole's House JSON support
    • \n
    \n

     

    \n

    Overview sections below

    \n

    If this is your first time it is recommends you also read the following sections.

    \n
      \n
    • Actor overview
    • \n
    • Items overview
    • \n
    • Settings overview
    • \n
    • Scene menu overview
    • \n
    • @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator}
    • \n
    \n

     

    \n

    How to use the system

    \n
      \n
    • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer}
    • \n
    • Actor Type: Character
    • \n
    • Actor Type: Container
    • \n
    • Actor Type: Creature
    • \n
    • Actor Type: NPC
    • \n
    • Chat link creator
    • \n
    • Character creation mode
    • \n
    • Development phase
    • \n
    • Item Type: Archetype
    • \n
    • Item Type: Book
    • \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Item Type: Chases}
    • \n
    • Item Type: Item
    • \n
    • @Compendium[CoC7.system-doc.7hFq9EqLviAxqMFz]{Item Type: Occupation}
    • \n
    • @Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Item Type: Setup}
    • \n
    • Item Type: Skill
    • \n
    • Item Type: Spell
    • \n
    • Item Type: Status
    • \n
    • Item Type: Talent
    • \n
    • Item Type: Weapon
    • \n
    • Macros
    • \n
    • Rolls
    • \n
    • Start Rest
    • \n
    • XP Gain
    • \n
    \n

     

    \n

    Actor overview

    \n
      \n
    • Character - A complete character, usually an investigator. @Compendium[CoC7.examples.JuI2aWDSEuQNKeUI]{Example Character}
    • \n
    • Container - An inventory container. @Compendium[CoC7.examples.r7bDSY4OYKxQYEas]{Example Container}
    • \n
    • Creature - A more simple character, suitable for creatures. @Compendium[CoC7.examples.XE2vjLG03wGfnYLw]{Example Creature}
    • \n
    • NPC - A more simple character, suitable for NPCs. @Compendium[CoC7.examples.4kSvDc4n13oFx8RG]{Example NPC}
    • \n
    \n

     

    \n

    Items overview

    \n
      \n
    • Archetype - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. @Compendium[CoC7.items.lu04TIRrg9P3vRqY]{Example Archetype}
    • \n
    • Book - An arcane tome that can hold spells and character improvements.
    • \n
    • Item - A piece of equipment.
    • \n
    • Occupation - A set of skills and other stats that implement a CoC occupation. @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Example Occupation}
    • \n
    • Setup - A set of default configurations for character, creature, or NPC creation. @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{Example Setup}
    • \n
    • Skill - A skill with a base percentage and some tags. @Compendium[CoC7.skills.UOuN0gESXPp2HXwH]{Example Skill}
    • \n
    • Spell - A magic spell.
    • \n
    • Status - An phobia or mania condition. @Compendium[CoC7.items.DVdvEDizPZPux1pK]{Example Mania}
    • \n
    • Talent -A special power for Pulp Cthulhu. These do not trigger automation in the system. @Compendium[CoC7.items.yqvwz769ZeJplOW7]{Example Talent}
    • \n
    • Weapon - An item with weapon statistics (this includes unarmed attacks). @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Example Weapon}
    • \n
    \n

     

    \n

    Settings overview

    \n

    Click on the  Game Settings tab then under the Game Settings heading click on  Configure Settings.

    \n

    Click on  System Settings

    \n
      \n
    • Variant/Optional Rules - Here you can turn on individual Pulp Cthulhu rules and other optional rules
    • \n
    • Initiative Settings - Additional settings for optional initiative rule
    • \n
    • Roll Settings - Default options for rolls
    • \n
    • Chat Cards Settings - Configure chat messages
    • \n
    • Scene Settings - Scene Settings
    • \n
    • Game Artwork Settings - This allows you to set a custom pause icon and message
    • \n
    • Sheet Settings - This allows you to change character sheet settings and optional CSS
    • \n
    • Weapon Settings - Weapon Settings
    • \n
    • Developer And Debug Settings - These settings can break your world when new updates are released so only use them on test worlds
    • \n
    • Roll Table Settings - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums
    • \n
    \n

     

    \n

    Call of Cthulhu Scene Menu

    \n

    To access this menu you will need to have an active scene which can be created in the  Scenes Directory.

    \n
      \n
    • Keeper's tools - Here you can toggle character creation mode, character development phase, actor importer, toggle automatic XP gain on a success, and start a rest
    • \n
    • Roll ! - Create a roll in chat
    • \n
    • Create link - Create a roll link for players to click
    • \n
    \n\n
    "} +{"_id":"VdOeGcxsu3jsVm3F","name":"Chases [en]","content":"
    \n

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \"\"

    \n

    The chase sheet is divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list where you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the participant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a participant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have been added to character and NPC sheets:

    \n

    \"\"

    \n

    Those icons will give additional information.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Dragging a token to the participant list or to a location will activate the importer window.

    \n

    \"\"

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrix chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Participant list

    \n

    \"\"

    \n

    Here you can have the list of participant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the participant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the participant.
    4. \n
    \n

    \"\"

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \"\"

    \n

    Chase setup

    \n

    \"\"

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \"\"

    \n

    The chase is initialized, you can adjust some options. Locations in white are initial locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape.
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of locations between the slowest prey and the fastest chaser.
    8. \n
    9. This is the starting location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.</p>

    \n

    To modify a location select it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \"\"

    \n
      \n
    1. This will add a participant. If the chase is started the participant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be removed.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin indicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \"\"

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \"\"

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazard.
    8. \n
    \n

    Obstacle resolution flow

    \n

    \"\"

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interact to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example:

    \n

    \"\"\n\"\"\n\"\"\n\"\"

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \"\"

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Participant controls.

    \n

    \"\"

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your participant bonus. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movement controls. You can move backward or forward. You can assist an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n\n
    "} {"_id":"nVYLlqVzmUV5dXAW","name":"Creating your first investigator [en]","content":"
    \n

    Initial item setup

    \n

    The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required.

    \n

     

    \n

    Skill

    \n

    Click on the  Compendium Packs tab then under the Item heading open up the Skills Item (CoC7). Here you will find the skills shown on the characters sheets available from Chaosium's website.

    \n
      \n
    • No adjustment - Can not be assigned personal skill points.
    • \n
    • No XP gain - You do not mark this skill for improvement on a success.
    • \n
    • Specialization - This skill is part of a group like Pilot or Flighting.
    • \n
    • Uncommon - This skill is uncommon and can be automatically hidden on the character sheet.
    • \n
    • Pushed - This skill can be pushed.
    • \n
    • Fighting - Automatically set Specialization, Combat, and the specialization name to Fighting.
    • \n
    • Firearms - Automatically set Specialization, Combat, and the specialization name to Firearms.
    • \n
    \n

    You can create a new Item Compendium and copy the skills you require into it allowing you to edit them. You can also create new skills by creating new Skill Items (Click on the  Items Directory tab then Create Item give this a name e.g. Gardening and set the Type to Skill).

    \n

    Setup

    \n

    Once you have set up your skills next create up a Setup, here is an example from the Items Examples compendium @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

    \n

    Setups allow to you standardise what skills, items, biography sections, and characteristics the investigators start with.

    \n

    Click on the  Items Directory tab then Create Item give this a name e.g. New Investigator Setup and set the Type to Setup

    \n

    On the Description tab to set the description click the  button to get an editor.

    \n

    On the Details tab click the   on the Biography Sections to add any sections you require from the Create a Backstory step of investigator creation. Click on the  Compendium Packs tab then under the Item heading open up the Items Examples Item (CoC7) and drag the @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Punch} onto the setup.

    \n

    On the Characteristics tab you can customise how investigator characteristics are rolled / bought

    \n

    On the Skills tab you can drag the skills the investigator will have.

    \n

    All actor and item sheets have a  tab which can be used by the Keepers to store notes, only users that are set to GM can see this tab

    \n

    Occupation

    \n

    Occupations allow you set how many the occupation points, credit rating range, and skills the investigator starts with. Here is an example from the Items Examples compendium @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

    \n

    Click on the  Items Directory tab then Create Item give this a name e.g. Driver and set the Type to Occupation

    \n

    On the Description tab to set the description click the  button to get an editor.

    \n

    On the Details tab you can set the Occupation Points calculation and Minimum/Maximum Credit Rating

    \n

    On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select.

    \n

     

    \n

    Creating your first investigator

    \n

    Character

    \n

    To complete your character you need to have an active scene which can be created in the  Scenes Directory.

    \n

    Click on the  Actors Directory tab then Create Item give this a name e.g. New Investigator and set the Type to Character.

    \n

    You can drag your setup created above on to the character for the initial setup or drag this example instead @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

    \n

    Next drag your occupation created above on to the character or drag this example instead @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

    \n

    On the left hand menu bar select  Keeper's tools then select  Character creation mode.

    \n

    On the character sheet select the Development tab. The first dot indicates this is an occupation skill, the first column of numbers is the base value, next if where you assign personal points, third is for occupation points, the fourth is for experience gained during the investigator improvement phase, the final column is the total skill percent.

    \n

    You can see how many personal and occupation points you have spent so far, once you have spent all your points you need to toggle off  Character creation mode to allow characters to see their HP, MP, Sanity, and luck

    \n\n
    "} -{"_id":"VdOeGcxsu3jsVm3F","name":"Chases [en]","content":"
    \n

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \"\"

    \n

    The chase sheet is divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list where you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the participant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a participant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have been added to character and NPC sheets:

    \n

    \"\"

    \n

    Those icons will give additional information.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Dragging a token to the participant list or to a location will activate the importer window.

    \n

    \"\"

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrix chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Participant list

    \n

    \"\"

    \n

    Here you can have the list of participant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the participant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the participant.
    4. \n
    \n

    \"\"

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \"\"

    \n

    Chase setup

    \n

    \"\"

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \"\"

    \n

    The chase is initialized, you can adjust some options. Locations in white are initial locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape.
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of locations between the slowest prey and the fastest chaser.
    8. \n
    9. This is the starting location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.</p>

    \n

    To modify a location select it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \"\"

    \n
      \n
    1. This will add a participant. If the chase is started the participant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be removed.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin indicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \"\"

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \"\"

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazard.
    8. \n
    \n

    Obstacle resolution flow

    \n

    \"\"

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interact to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example:

    \n

    \"\"\n\"\"\n\"\"\n\"\"

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \"\"

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Participant controls.

    \n

    \"\"

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your participant bonus. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movement controls. You can move backward or forward. You can assist an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n\n
    "} \ No newline at end of file +{"_id":"7hFq9EqLviAxqMFz","name":"Item Type: Occupation [en]","content":"
    \n

    Item Type: Occupation

    \n

    An occupation helps to define the character background, think about it as the definition of the set of occupational skills (the ones where the character can spend their occupation points) plus the definition of how to calculate the amount of available occupation points. Finally the occupation also allows to define the minimum and the maximum credit for a character with this occupation.

    \n

    Keep in mind that the set of occupational skills doesn't need to be fixed, the system allows to configure the occupation so when it's dragged to a Character sheet will give the option of selecting one or more skills from a closed list, or even add a pre defined number of skills to select from all the available ones.

    \n
      \n
    1. Go to the  Items Directory tab

    2. \n
    3. Click on  Create Item

      \n
        \n
      1. Give the set up a name e.g. Librarian
      2. \n
      3. Set Type to Occupation
      4. \n
    4. \n
    5. On the Description tab you can change the name, icon, name of the source book, and description

    6. \n
    7. On the Details tab you can control

      \n
        \n
      1. Select the Occupation Type

      2. \n
      3. Define the characteristics used to calculate the occupation points, you can check the characteristics you want and define the multiplier, for the ones with Optional marked, the player will have to choose one at creation time.

        \n
          \n
        1. For instance if an occupation uses EDU * 2 + (STR or DEX) * 2 You have to select Education and put 2 on the Multiplier without marking Optional and then for Strength and Dexterity you have to check both, check Optional on both, and put 2 on the Multiplier on both.
        2. \n
        3. Finally you will have to define the Minimum and Maximum value for the Credit Rating skill for this occupation.
        4. \n
      4. \n
      5. Names of biography sections (click on the + to add extra Biography sections), this can be replaced with a single block biography in settings

      6. \n
      7. Under items you can drag and drop default items and weapons

      8. \n
    8. \n
    9. On the Skills you can drag and drop skills in to multiple sections, A typical occupation has 8 skills plus the Credit Rating skill.

      \n
        \n
      1. The Common Skills includes the default occupation skills that can't be changed
      2. \n
      3. The Optional skills groups section allows to add groups (you can create several of them) of skills for the player to choose from. Once you click on the + sign a group is created and you can define the Number to chose from (number of skills to select) and create a pool of skills available for the selection by dragging them on the group.
      4. \n
      5. Finally the Additional Skills allows you to enter a number of skills the player can choose from the rest of the available skills.
      6. \n
    10. \n
    \n\n
    "} +{"_id":"JU1GCWwc8at7gzJ4","name":"Item Type: Setup [en]","content":"
    \n

    Item Type: Setup

    \n

    Setups are predefined sets of skills and a way to generate the characteristics (this can be by rolling dices or assigning certain amount of points for example).

    \n
      \n
    1. Go to the  Items Directory tab

    2. \n
    3. Click on  Create Item

      \n
        \n
      1. Give the set up a name e.g. 1920's Setup
      2. \n
      3. Set Type to Setup
      4. \n
    4. \n
    5. On the Description tab you can change the name, icon, name of the source book, and description

    6. \n
    7. On the Details tab you can control

      \n
        \n
      1. Show / Hide the Characteristics tab with the Enable characteristics checkbox
      2. \n
      3. Which version of Call of Cthulhu this is for, this can be filtered in compendiums
      4. \n
      5. Names of biography sections (click on the + to add extra Biography sections), this can be replaced with a single block biography in settings
      6. \n
      7. Under items you can drag and drop default items and weapons
      8. \n
    8. \n
    9. On the Characteristics tab you can set a points buy or roll characteristics and the formula

    10. \n
    11. On the Skills tab under common skill you can drag and drop default skills

    12. \n
    \n\n
    "} \ No newline at end of file From 3f1291a66fa26959a627a27602f243e17202183c Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 10 Aug 2022 02:25:31 +0200 Subject: [PATCH 695/726] prepare derived data and apply effects --- module/active-effect.js | 112 ++++++++++++++++++----- module/actors/actor.js | 105 ++++++++++++++++++--- module/actors/sheets/base.js | 100 ++++++++++---------- module/actors/vehicle/data.js | 6 +- module/chat/sancheck.js | 4 +- module/items/skill/data.js | 34 +++---- styles/sheets/character.less | 3 + templates/actors/character-sheet-v2.html | 8 +- 8 files changed, 261 insertions(+), 111 deletions(-) diff --git a/module/active-effect.js b/module/active-effect.js index 1328ac85..043f367d 100644 --- a/module/active-effect.js +++ b/module/active-effect.js @@ -3,36 +3,90 @@ export default class CoC7ActiveEffect extends ActiveEffect { /** @inheritdoc */ apply (actor, change) { - // this access skills only localy : items._source.0.data.adjustments.experience - // if (change.key?.startsWith('skill')) { - // this.applyToSkill(actor, change) - // return null - // } - - if( !isNaN(Number(change.value))) change.value = Number(change.value) + if (!isNaN(Number(change.value))) change.value = Number(change.value) const result = super.apply(actor, change) - - function parse(str) { - try { - return eval(str) - } catch (e) { - return NaN; - } - } - const evaluated = parse(result) - if( isNaN( evaluated)) return result - return evaluated + if (isNaN(evaluated)) return result + return evaluated } + /* -------------------------------------------- */ + + /** + * @override + * Apply an ActiveEffect that uses a MULTIPLY application mode. + * Changes which MULTIPLY must be numeric to allow for multiplication. + * @param {Actor} actor The Actor to whom this effect should be applied + * @param {data.EffectChangeData} change The change data being applied + * @return {*} The resulting applied value + * @private + */ + _applyMultiply (actor, change) { + const { key, value } = change + const current = foundry.utils.getProperty(actor.data, key) + const n = Number.fromString(value) + + let update + + const strUpdate = `${current}*${String(value)}` + if (!isNaN(parse(strUpdate))) update = String(parse(strUpdate)) + else if (Roll.validate(strUpdate)) update = strUpdate + else if (typeof current !== 'number' || isNaN(n)) return null + else update = current * n + foundry.utils.setProperty(actor.data, key, update) + return update + } - // async applyToSkill (actor, change) { - // const [, skillName, key] = change.key.split('.') - // const skill = actor.getSkillsByName(skillName) - // if (skill) { - // await skill[0].applyModifier(change) - // } - // } + /* -------------------------------------------- */ + + /** + * @override + * Apply an ActiveEffect that uses an ADD application mode. + * The way that effects are added depends on the data type of the current value. + * + * If the current value is null, the change value is assigned directly. + * If the current type is a string, the change value is concatenated. + * If the current type is a number, the change value is cast to numeric and added. + * If the current type is an array, the change value is appended to the existing array if it matches in type. + * + * @param {Actor} actor The Actor to whom this effect should be applied + * @param {data.EffectChangeData} change The change data being applied + * @return {*} The resulting applied value + * @private + */ + _applyAdd (actor, change) { + const { key, value } = change + const current = foundry.utils.getProperty(actor.data, key) ?? null + const ct = foundry.utils.getType(current) + let update = null + + // Handle different types of the current data + switch (ct) { + case 'null': + update = value + break + case 'string': + { + const strUpdate = `${current}+${String(value)}` + .replace('++', '+') + .replace('+-', '-') + if (!isNaN(parse(strUpdate))) update = String(parse(strUpdate)) + else if (Roll.validate(strUpdate)) update = strUpdate + else update = current + String(value) + } + break + case 'number': + const n = Number.fromString(value) + if (!isNaN(n)) update = current + n + break + case 'Array': + const at = foundry.utils.getType(current[0]) + if (!current.length || foundry.utils.getType(value) === at) + update = current.concat([value]) + } + if (update !== null) foundry.utils.setProperty(actor.data, key, update) + return update + } /** * Manage Active Effect instances through the Actor Sheet via effect control buttons. @@ -170,3 +224,11 @@ export default class CoC7ActiveEffect extends ActiveEffect { return categories } } + +function parse (str) { + try { + return eval(str) + } catch (e) { + return NaN + } +} diff --git a/module/actors/actor.js b/module/actors/actor.js index a5a843e7..80585ce6 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -102,16 +102,39 @@ export class CoCActor extends Actor { } // return computed values or fixed values if not auto. - this.data.data.attribs.mov.value = this.mov this.data.data.attribs.mov.rawValue = this.mov - this.data.data.attribs.db.value = this.db this.data.data.attribs.db.rawValue = this.db - this.data.data.attribs.build.value = this.build this.data.data.attribs.build.rawValue = this.build //For vehicle only : this.data.data.attribs.build.current = this.hp + // if ( + // data.data.attribs.mp.value > data.data.attribs.mp.max || + // data.data.attribs.mp.max == null + // ) { + // data.data.attribs.mp.value = data.data.attribs.mp.max + // } + // if ( + // data.data.attribs.hp.value > data.data.attribs.hp.max || + // data.data.attribs.hp.max == null + // ) { + // data.data.attribs.hp.value = data.data.attribs.hp.max + // } + + // if ( + // data.data.attribs.hp.value == null && + // data.data.attribs.hp.max != null + // ) { + // data.data.attribs.hp.value = data.data.attribs.hp.max + // } + // if ( + // data.data.attribs.mp.value == null && + // data.data.attribs.mp.max != null + // ) { + // data.data.attribs.mp.value = data.data.attribs.mp.max + // } + super.prepareBaseData() } @@ -123,6 +146,50 @@ export class CoCActor extends Actor { */ prepareEmbeddedDocuments () { super.prepareEmbeddedDocuments() + //Set hpMax, mpMax, sanMax, mov, db, build. This is to allow calculation of derived value with modifed characteristics. + this.data.data.attribs.mov.value = this.mov + this.data.data.attribs.db.value = this.db + this.data.data.attribs.build.value = this.build + + this.data.data.attribs.hp.max = this.hpMax + if( this.hp === null) this.data.data.attribs.hp.value = this.hpMax + // if( this.hpMax && this.hpMax < this.hp) this.data.data.attribs.hp.value = this.hpMax + + this.data.data.attribs.mp.max = this.mpMax + if( this.mp === null) this.data.data.attribs.mp.value = this.mpMax + + this.data.data.attribs.san.max = this.sanMax + if( this.san === null) this.data.data.attribs.san.value = this.hpMax + + //Apply effects to those value. + const filterMatrix = [ + 'data.attribs.hp.max', + 'data.attribs.mp.max', + 'data.attribs.san.max', + 'data.attribs.mov.value', + 'data.attribs.db.value', + 'data.attribs.build.value' + ] + + const changes = this.effects.reduce((changes, e) => { + if (e.data.disabled || e.isSuppressed) return changes + return changes.concat( + e.data.changes.map(c => { + c = foundry.utils.duplicate(c) + c.effect = e + c.priority = c.priority ?? c.mode * 10 + return c + }) + ) + }, []) + changes.sort((a, b) => a.priority - b.priority) + + const selectChanges = changes.filter(e => filterMatrix.includes(e.key)) + + // Apply all changes + for (let change of selectChanges) { + change.effect.apply(this, change) + } } /** @@ -150,9 +217,9 @@ export class CoCActor extends Actor { }, { overwrite: false } ) - } else if (data.type === 'npc' ) { + } else if (data.type === 'npc') { data.img = 'systems/CoC7/assets/icons/cultist.svg' - } else if (data.type === 'creature' ) { + } else if (data.type === 'creature') { data.img = 'systems/CoC7/assets/icons/floating-tentacles.svg' } else if (data.type === 'container') { data.img = 'icons/svg/chest.svg' @@ -1560,8 +1627,11 @@ export class CoCActor extends Actor { async setHp (value) { if (value < 0) value = 0 - if (value > this.hpMax) value = parseInt(this.hpMax) + if (value > this.data.data.attribs.hp.max){ + value = parseInt(this.data.data.attribs.hp.max) + } return await this.update({ 'data.attribs.hp.value': value }) + } async addUniqueItems (skillList, flag = null) { @@ -1765,9 +1835,20 @@ export class CoCActor extends Actor { return parseInt(this.data.data.attribs.mp.value) } + get mpMax () { + if (this.data.data.attribs.mp.auto) { + // TODO if any is null set max back to null. + if (this.data.data.characteristics.pow.value != null) { + return Math.floor(this.data.data.characteristics.pow.value / 5) + } + return 0 + } + return parseInt(this.data.data.attribs.mp.max) + } + async setMp (value) { if (value < 0) value = 0 - if (value > parseInt(this.mpMax)) value = parseInt(this.mpMax) + if (value > parseInt(this.data.data.attribs.mp.max)) value = parseInt(this.data.data.attribs.mp.max) return await this.update({ 'data.attribs.mp.value': value }) } @@ -3179,7 +3260,7 @@ export class CoCActor extends Actor { const healthBefore = parseInt( event.originalEvent.currentTarget.defaultValue ) - const healthAfter = parseInt(event.originalEvent.currentTarget.value) + const healthAfter = parseInt(event.originalEvent.currentTarget.value) || this.data.data.attribs.hp.max let damageTaken // is healing if (healthAfter > healthBefore) return await this.setHp(healthAfter) @@ -3217,17 +3298,17 @@ export class CoCActor extends Actor { const netDamage = grossDamage - armorValue if (netDamage <= 0) return 0 await this.setHp(this.hp - netDamage) - if (netDamage >= this.hpMax) { + if (netDamage >= this.data.data.attribs.hp.max) { await this.setCondition(COC7.status.dead) } else { if (game.settings.get('CoC7', 'pulpRuleIgnoreMajorWounds')) { if (this.hp === 0) { - if (netDamage >= Math.ceil(this.hpMax / 2)) { + if (netDamage >= Math.ceil(this.data.data.attribs.hp.max / 2)) { this.setCondition(COC7.status.dying) } else { this.setCondition(COC7.status.unconscious) } - } else if (netDamage >= Math.ceil(this.hpMax / 2)) { + } else if (netDamage >= Math.ceil(this.data.data.attribs.hp.max / 2)) { const conCheck = new CoC7ConCheck( this.isToken ? this.tokenKey : this.id ) @@ -3235,7 +3316,7 @@ export class CoCActor extends Actor { } } else { let hasMajorWound = false - if (netDamage >= Math.ceil(this.hpMax / 2)) { + if (netDamage >= Math.ceil(this.data.data.attribs.hp.max / 2)) { await this.setCondition(COC7.status.criticalWounds) hasMajorWound = true } else { diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 0e74e502..9ab67c2c 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -508,54 +508,54 @@ export class CoC7ActorSheet extends ActorSheet { if (data.data.attribs.mp.value < 0) data.data.attribs.mp.value = null if (data.data.attribs.san.value < 0) data.data.attribs.san.value = null // data.data.attribs.san.fiftyOfCurrent = data.data.attribs.san.value >= 0 ? ' / '+Math.floor(data.data.attribs.san.value/5):''; - if (data.data.attribs.hp.auto) { - // TODO if any is null set max back to null. - if ( - data.data.characteristics.siz.value != null && - data.data.characteristics.con.value != null - ) { - data.data.attribs.hp.max = this.actor.hpMax - } - } + // if (data.data.attribs.hp.auto) { + // // TODO if any is null set max back to null. + // if ( + // data.data.characteristics.siz.value != null && + // data.data.characteristics.con.value != null + // ) { + // data.data.attribs.hp.max = this.actor.hpMax + // } + // } - if (data.data.attribs.mp.auto) { - // TODO if any is null set max back to null. - if (data.data.characteristics.pow.value != null) { - data.data.attribs.mp.max = Math.floor( - data.data.characteristics.pow.value / 5 - ) - } - } + // if (data.data.attribs.mp.auto) { + // // TODO if any is null set max back to null. + // if (data.data.characteristics.pow.value != null) { + // data.data.attribs.mp.max = Math.floor( + // data.data.characteristics.pow.value / 5 + // ) + // } + // } - if (data.data.attribs.san.auto) { - data.data.attribs.san.max = this.actor.sanMax - } + // if (data.data.attribs.san.auto) { + // data.data.attribs.san.max = this.actor.sanMax + // } - if ( - data.data.attribs.mp.value > data.data.attribs.mp.max || - data.data.attribs.mp.max == null - ) { - data.data.attribs.mp.value = data.data.attribs.mp.max - } - if ( - data.data.attribs.hp.value > data.data.attribs.hp.max || - data.data.attribs.hp.max == null - ) { - data.data.attribs.hp.value = data.data.attribs.hp.max - } + // if ( + // data.data.attribs.mp.value > data.data.attribs.mp.max || + // data.data.attribs.mp.max == null + // ) { + // data.data.attribs.mp.value = data.data.attribs.mp.max + // } + // if ( + // data.data.attribs.hp.value > data.data.attribs.hp.max || + // data.data.attribs.hp.max == null + // ) { + // data.data.attribs.hp.value = data.data.attribs.hp.max + // } - if ( - data.data.attribs.hp.value == null && - data.data.attribs.hp.max != null - ) { - data.data.attribs.hp.value = data.data.attribs.hp.max - } - if ( - data.data.attribs.mp.value == null && - data.data.attribs.mp.max != null - ) { - data.data.attribs.mp.value = data.data.attribs.mp.max - } + // if ( + // data.data.attribs.hp.value == null && + // data.data.attribs.hp.max != null + // ) { + // data.data.attribs.hp.value = data.data.attribs.hp.max + // } + // if ( + // data.data.attribs.mp.value == null && + // data.data.attribs.mp.max != null + // ) { + // data.data.attribs.mp.value = data.data.attribs.mp.max + // } if (!['vehicle'].includes(this.actor.data.type)) { if ( @@ -1357,7 +1357,7 @@ export class CoC7ActorSheet extends ActorSheet { } async _onWheel (event) { - let value = parseInt(event.currentTarget.value) + let value = parseInt(event.currentTarget.value) || null if (event.deltaY > 0) { value = value === 0 ? 0 : value - 1 } @@ -1784,10 +1784,12 @@ export class CoC7ActorSheet extends ActorSheet { async _updateObject (event, formData) { // ui.notifications.info('_updateObject'); // TODO: Replace with _getSubmitData(updateData={}) Cf. sheet.js(243) - const overrides = foundry.utils.flattenObject(this.actor.overrides); - const name = event.currentTarget.name - if(overrides[name]){ - ui.notifications.warn( game.i18n.format('CoC7.EffectAppliedCantOverride', {name: name})) + const overrides = foundry.utils.flattenObject(this.actor.overrides) + const name = event?.currentTarget?.name + if (name && overrides && overrides[name]) { + ui.notifications.warn( + game.i18n.format('CoC7.EffectAppliedCantOverride', { name: name }) + ) } if (event.currentTarget) { diff --git a/module/actors/vehicle/data.js b/module/actors/vehicle/data.js index e6ba65ca..c6088e3a 100644 --- a/module/actors/vehicle/data.js +++ b/module/actors/vehicle/data.js @@ -2,7 +2,7 @@ import { CoCActor } from '../actor.js' export class CoC7Vehicle extends CoCActor { constructor (data, context) { - if( typeof data.img === 'undefined'){ + if (typeof data.img === 'undefined') { data.img = 'systems/CoC7/assets/icons/jeep.svg' } super(data, context) @@ -46,4 +46,8 @@ export class CoC7Vehicle extends CoCActor { get mov () { return this.data.data.attribs.mov.value } + + get mpMax () { + return parseInt(this.data.data.attribs?.mp?.max) || 0 + } } diff --git a/module/chat/sancheck.js b/module/chat/sancheck.js index daa751cb..abfe2914 100644 --- a/module/chat/sancheck.js +++ b/module/chat/sancheck.js @@ -87,9 +87,7 @@ export class CoC7SanCheck { get isSanLossFormula () { if (this.sanLossFormula) { - if (this.sanLossFormula.match(Roll.diceRgx)) return true - // const rgx = RegExp( Die.rgx.dice); - // return rgx.test(this.sanLossFormula); + return Roll.validate(this.sanLossFormula) } return false } diff --git a/module/items/skill/data.js b/module/items/skill/data.js index bc6dc294..5bff0eef 100644 --- a/module/items/skill/data.js +++ b/module/items/skill/data.js @@ -1,26 +1,26 @@ import { CoC7Item } from '../item.js' export class CoC7Skill extends CoC7Item { - async applyModifier (change) { - return + // async applyModifier (change) { + // return - const changes = this.data.data.changes - ? foundry.utils.duplicate(this.data.data.changes) - : [] + // const changes = this.data.data.changes + // ? foundry.utils.duplicate(this.data.data.changes) + // : [] - const index = changes.findIndex(c => c.effect._id == change.effect.id) + // const index = changes.findIndex(c => c.effect._id == change.effect.id) - if (-1 === index) { - changes.push(change) - await this.update({ 'data.changes': changes }) - } else { - //Compare if there's a change in the efect data - if (!JSON.stringify(change) === JSON.stringify(changes[index])) { - changes[index] = change - await this.update({ 'data.changes': changes }) - } - } - } + // if (-1 === index) { + // changes.push(change) + // await this.update({ 'data.changes': changes }) + // } else { + // //Compare if there's a change in the efect data + // if (!JSON.stringify(change) === JSON.stringify(changes[index])) { + // changes[index] = change + // await this.update({ 'data.changes': changes }) + // } + // } + // } get hasActiveEffects () { return this.activeEffects.length > 0 diff --git a/styles/sheets/character.less b/styles/sheets/character.less index 081b97ec..371124f9 100644 --- a/styles/sheets/character.less +++ b/styles/sheets/character.less @@ -134,6 +134,9 @@ grid-template-columns: auto 2rem; align-items: center; justify-content: center; + &.flex { + display: flex; + } } .attribute-label { diff --git a/templates/actors/character-sheet-v2.html b/templates/actors/character-sheet-v2.html index 1cf63576..cf702c5c 100644 --- a/templates/actors/character-sheet-v2.html +++ b/templates/actors/character-sheet-v2.html @@ -102,25 +102,25 @@
    From ef7c6fd9a5310346daf011c81d053aaf57e76921 Mon Sep 17 00:00:00 2001 From: Stefano1975t <97825580+Stefano1975t@users.noreply.github.com> Date: Fri, 12 Aug 2022 10:56:56 +0200 Subject: [PATCH 706/726] Update it.json --- lang/it.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lang/it.json b/lang/it.json index 7ad9298b..827d4582 100644 --- a/lang/it.json +++ b/lang/it.json @@ -1134,5 +1134,6 @@ "CoC7.getTheExample": "Copia Esempio", "CoC7.Copied": "Copiato il testo di esempio negli Appunti", - "CoC7.EffectNew": "Nuovo effetto" + "CoC7.EffectNew": "Nuovo effetto", + "CoC7.EffectAppliedCantOverride": "Viene applicato un effetto attivo. Non puoi modificare [{name}]. Per modificare questo valore devi disattivare l'effetto corrispondente." } From 799bd6e88a5d9987fe9edd98ddf530538099a905 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Fri, 12 Aug 2022 15:36:45 +0000 Subject: [PATCH 707/726] Updated translations list --- .github/TRANSLATIONS.md | 402 ++++++++++++++++++++-------------------- 1 file changed, 202 insertions(+), 200 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index 0fe2c5d9..b5754f12 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,208 +2,210 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! +The **it** translation is currently up to date + The following translations have been abandoned **cn**, **cs**, **de**, **es**, [are you able to help?](./ABANDONED.md) -| Key | fr | it | ja | ko | pl | pt-BR | sv | zh-TW | -| :------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **192** | **1** | **194** | **193** | **194** | **192** | **192** | **192** | -| [CoC7.ABarrier](#coc7abarrier) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AHazard](#coc7ahazard) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActionCost](#coc7actioncost) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActionCostOnFail](#coc7actioncostonfail) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Actions](#coc7actions) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorDataLinked](#coc7actordatalinked) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorDataNotLinked](#coc7actordatanotlinked) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorImported](#coc7actorimported) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorIsTokenHint](#coc7actoristokenhint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Add](#coc7add) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddActorToChase](#coc7addactortochase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddBonusDie](#coc7addbonusdie) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddParticipant](#coc7addparticipant) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AdjustedMovement](#coc7adjustedmovement) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AlreadyEncountered](#coc7alreadyencountered) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ArmorIgnored](#coc7armorignored) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AskDamageRoll](#coc7askdamageroll) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AskIntentions](#coc7askintentions) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AskRoll](#coc7askroll) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Assist](#coc7assist) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AttemptBreakDown](#coc7attemptbreakdown) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AttemptNegotiateObstacle](#coc7attemptnegotiateobstacle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Barrier](#coc7barrier) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BeingCautious](#coc7beingcautious) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BeingVeryCautious](#coc7beingverycautious) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BreakDown](#coc7breakdown) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Breakable](#coc7breakable) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Cautious](#coc7cautious) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CautiousApproach](#coc7cautiousapproach) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.AdjustedMovementShort](#coc7chaseadjustedmovementshort) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.ChasersMax](#coc7chasechasersmax) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.ChasersMin](#coc7chasechasersmin) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.CheckName](#coc7chasecheckname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.InitiativeShort](#coc7chaseinitiativeshort) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.PreysMax](#coc7chasepreysmax) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.PreysMin](#coc7chasepreysmin) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ChaseSetup](#coc7chasesetup) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckFailed](#coc7checkfailed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckName](#coc7checkname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckPassed](#coc7checkpassed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CleanSkillList](#coc7cleanskilllist) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CleanSkillListHint](#coc7cleanskilllisthint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ClearAllConditions](#coc7clearallconditions) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmCut2Chase](#coc7confirmcut2chase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmCut2ChaseHint](#coc7confirmcut2chasehint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmNextChaseRound](#coc7confirmnextchaseround) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmNextChaseRoundHint](#coc7confirmnextchaseroundhint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmResetChase](#coc7confirmresetchase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmResetChaseHint](#coc7confirmresetchasehint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmRestartChase](#coc7confirmrestartchase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmRestartChaseHint](#coc7confirmrestartchasehint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConsumeBonusDice](#coc7consumebonusdice) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Create](#coc7create) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CutToTheChase](#coc7cuttothechase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Damage](#coc7damage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DamageDealTo](#coc7damagedealto) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DamageDealt](#coc7damagedealt) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DamageOnFail](#coc7damageonfail) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DecreaseMovementAction](#coc7decreasemovementaction) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DefinitelyInsane](#coc7definitelyinsane) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Delete](#coc7delete) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseImportingName](#coc7dholehouseimportingname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Disable](#coc7disable) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DoesNotMeetMinimumReqToBeAdded](#coc7doesnotmeetminimumreqtobeadded) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DontMoveToLocation](#coc7dontmovetolocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DragOnCanvas](#coc7dragoncanvas) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Duration](#coc7duration) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Edit](#coc7edit) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.EffectAppliedCantOverride](#coc7effectappliedcantoverride) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.EffectNew](#coc7effectnew) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Enable](#coc7enable) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorBeneficiaryAtMaxBonus](#coc7errorbeneficiaryatmaxbonus) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorEmptyLocationsList](#coc7erroremptylocationslist) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorNoTokensSelected](#coc7errornotokensselected) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorParticipantAtMaxBonus](#coc7errorparticipantatmaxbonus) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorTokenNotOnScene](#coc7errortokennotonscene) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FINISH](#coc7finish) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FacingObstacle](#coc7facingobstacle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FileUploadError](#coc7fileuploaderror) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.GotLucky](#coc7gotlucky) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Hazard](#coc7hazard) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.IncludeEscapees](#coc7includeescapees) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.IncludeLatecomers](#coc7includelatecomers) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.IncreaseMovementAction](#coc7increasemovementaction) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Initialize](#coc7initialize) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Initiative](#coc7initiative) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.InsertLocation](#coc7insertlocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LocationCoordinate](#coc7locationcoordinate) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LocationInit](#coc7locationinit) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LocationNotEmpty](#coc7locationnotempty) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Locations](#coc7locations) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LuckNotEnough](#coc7lucknotenough) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MakeActive](#coc7makeactive) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MaxPossibleSanLoss](#coc7maxpossiblesanloss) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorActor](#coc7migrateerroractor) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorItem](#coc7migrateerroritem) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorScene](#coc7migrateerrorscene) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorTable](#coc7migrateerrortable) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MoveBackward](#coc7movebackward) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MoveForward](#coc7moveforward) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MoveToLocation](#coc7movetolocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MovementAction](#coc7movementaction) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NeedMin2Participants](#coc7needmin2participants) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NeedRecalculate](#coc7needrecalculate) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NeedToRecalculate](#coc7needtorecalculate) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Negotiate](#coc7negotiate) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NextRound](#coc7nextround) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoDamageDealt](#coc7nodamagedealt) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoValidCheck](#coc7novalidcheck) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoValidSkill](#coc7novalidskill) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NotAllHaveSpeedRoll](#coc7notallhavespeedroll) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NothingToRoll](#coc7nothingtoroll) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Obstacle](#coc7obstacle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleDamage](#coc7obstacledamage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleFail](#coc7obstaclefail) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleFumble](#coc7obstaclefumble) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleHasHitPoint](#coc7obstaclehashitpoint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleName](#coc7obstaclename) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstaclePassed](#coc7obstaclepassed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.OpenObstacleResolutionCard](#coc7openobstacleresolutioncard) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.OverrideCalc](#coc7overridecalc) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantAlreadyProcessed](#coc7participantalreadyprocessed) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantDataMissing](#coc7participantdatamissing) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantDropHint](#coc7participantdrophint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantNotEnoughMovement](#coc7participantnotenoughmovement) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantNotFound](#coc7participantnotfound) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantUuidNotFound](#coc7participantuuidnotfound) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantsList](#coc7participantslist) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PenaltyDice](#coc7penaltydice) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PickDirectory](#coc7pickdirectory) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PlayerMovesToLocation](#coc7playermovestolocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Polish](#coc7polish) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ReflectObstacleChanges](#coc7reflectobstaclechanges) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Remove](#coc7remove) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RemoveBonusDie](#coc7removebonusdie) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RemoveLocation](#coc7removelocation) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RemoveObstacle](#coc7removeobstacle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Reset](#coc7reset) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Restart](#coc7restart) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Sane](#coc7sane) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SelectNewSkill](#coc7selectnewskill) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SomethingInTheWay](#coc7somethingintheway) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SpeedCheck](#coc7speedcheck) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.StartingIndex](#coc7startingindex) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.StartingRange](#coc7startingrange) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TooFast](#coc7toofast) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TooSlow](#coc7tooslow) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TryToBreak](#coc7trytobreak) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TryToGetPastBarriers](#coc7trytogetpastbarriers) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TryToNegotiateHazard](#coc7trytonegotiatehazard) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnarmedWeaponName](#coc7unarmedweaponname) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Update](#coc7update) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.VehicleChase](#coc7vehiclechase) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.WaitForPlayerInput](#coc7waitforplayerinput) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.WeaponSkillMain](#coc7weaponskillmain) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.YouLostTime](#coc7youlosttime) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.YouTakeNoDamage](#coc7youtakenodamage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.YouTakeSomeDamage](#coc7youtakesomedamage) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleChaseSettings](#settingstitlechasesettings) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| Key | fr | ja | ko | pl | pt-BR | sv | zh-TW | +| :------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **Remaining**: | **192** | **194** | **193** | **194** | **192** | **192** | **192** | +| [CoC7.ABarrier](#coc7abarrier) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AHazard](#coc7ahazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActionCost](#coc7actioncost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActionCostOnFail](#coc7actioncostonfail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Actions](#coc7actions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorDataLinked](#coc7actordatalinked) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorDataNotLinked](#coc7actordatanotlinked) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorImported](#coc7actorimported) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ActorIsTokenHint](#coc7actoristokenhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Add](#coc7add) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddActorToChase](#coc7addactortochase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddBonusDie](#coc7addbonusdie) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AddParticipant](#coc7addparticipant) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AdjustedMovement](#coc7adjustedmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AlreadyEncountered](#coc7alreadyencountered) | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ArmorIgnored](#coc7armorignored) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AskDamageRoll](#coc7askdamageroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AskIntentions](#coc7askintentions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AskRoll](#coc7askroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Assist](#coc7assist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AttemptBreakDown](#coc7attemptbreakdown) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.AttemptNegotiateObstacle](#coc7attemptnegotiateobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Barrier](#coc7barrier) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BeingCautious](#coc7beingcautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BeingVeryCautious](#coc7beingverycautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.BreakDown](#coc7breakdown) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Breakable](#coc7breakable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Cautious](#coc7cautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CautiousApproach](#coc7cautiousapproach) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.AdjustedMovementShort](#coc7chaseadjustedmovementshort) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.ChasersMax](#coc7chasechasersmax) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.ChasersMin](#coc7chasechasersmin) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.CheckName](#coc7chasecheckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.InitiativeShort](#coc7chaseinitiativeshort) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.PreysMax](#coc7chasepreysmax) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Chase.PreysMin](#coc7chasepreysmin) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ChaseSetup](#coc7chasesetup) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckFailed](#coc7checkfailed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckName](#coc7checkname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CheckPassed](#coc7checkpassed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CleanSkillList](#coc7cleanskilllist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CleanSkillListHint](#coc7cleanskilllisthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ClearAllConditions](#coc7clearallconditions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmCut2Chase](#coc7confirmcut2chase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmCut2ChaseHint](#coc7confirmcut2chasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmNextChaseRound](#coc7confirmnextchaseround) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmNextChaseRoundHint](#coc7confirmnextchaseroundhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmResetChase](#coc7confirmresetchase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmResetChaseHint](#coc7confirmresetchasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmRestartChase](#coc7confirmrestartchase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConfirmRestartChaseHint](#coc7confirmrestartchasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ConsumeBonusDice](#coc7consumebonusdice) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Create](#coc7create) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.CutToTheChase](#coc7cuttothechase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Damage](#coc7damage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DamageDealTo](#coc7damagedealto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DamageDealt](#coc7damagedealt) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DamageOnFail](#coc7damageonfail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DecreaseMovementAction](#coc7decreasemovementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DefinitelyInsane](#coc7definitelyinsane) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Delete](#coc7delete) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseImportingName](#coc7dholehouseimportingname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Disable](#coc7disable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DoesNotMeetMinimumReqToBeAdded](#coc7doesnotmeetminimumreqtobeadded) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DontMoveToLocation](#coc7dontmovetolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.DragOnCanvas](#coc7dragoncanvas) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Duration](#coc7duration) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Edit](#coc7edit) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.EffectAppliedCantOverride](#coc7effectappliedcantoverride) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.EffectNew](#coc7effectnew) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Enable](#coc7enable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorBeneficiaryAtMaxBonus](#coc7errorbeneficiaryatmaxbonus) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorEmptyLocationsList](#coc7erroremptylocationslist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorNoTokensSelected](#coc7errornotokensselected) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorParticipantAtMaxBonus](#coc7errorparticipantatmaxbonus) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorTokenNotOnScene](#coc7errortokennotonscene) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.FINISH](#coc7finish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.FacingObstacle](#coc7facingobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.FileUploadError](#coc7fileuploaderror) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.GotLucky](#coc7gotlucky) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Hazard](#coc7hazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.IncludeEscapees](#coc7includeescapees) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.IncludeLatecomers](#coc7includelatecomers) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.IncreaseMovementAction](#coc7increasemovementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Initialize](#coc7initialize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Initiative](#coc7initiative) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.InsertLocation](#coc7insertlocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LocationCoordinate](#coc7locationcoordinate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LocationInit](#coc7locationinit) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LocationNotEmpty](#coc7locationnotempty) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Locations](#coc7locations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.LuckNotEnough](#coc7lucknotenough) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MakeActive](#coc7makeactive) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MaxPossibleSanLoss](#coc7maxpossiblesanloss) | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorActor](#coc7migrateerroractor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorItem](#coc7migrateerroritem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorScene](#coc7migrateerrorscene) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Migrate.ErrorTable](#coc7migrateerrortable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MoveBackward](#coc7movebackward) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MoveForward](#coc7moveforward) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MoveToLocation](#coc7movetolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.MovementAction](#coc7movementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NeedMin2Participants](#coc7needmin2participants) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NeedRecalculate](#coc7needrecalculate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NeedToRecalculate](#coc7needtorecalculate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Negotiate](#coc7negotiate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NextRound](#coc7nextround) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoDamageDealt](#coc7nodamagedealt) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoValidCheck](#coc7novalidcheck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NoValidSkill](#coc7novalidskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NotAllHaveSpeedRoll](#coc7notallhavespeedroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.NothingToRoll](#coc7nothingtoroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Obstacle](#coc7obstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleDamage](#coc7obstacledamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleFail](#coc7obstaclefail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleFumble](#coc7obstaclefumble) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleHasHitPoint](#coc7obstaclehashitpoint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstacleName](#coc7obstaclename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ObstaclePassed](#coc7obstaclepassed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.OpenObstacleResolutionCard](#coc7openobstacleresolutioncard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.OverrideCalc](#coc7overridecalc) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantAlreadyProcessed](#coc7participantalreadyprocessed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantDataMissing](#coc7participantdatamissing) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantDropHint](#coc7participantdrophint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantNotEnoughMovement](#coc7participantnotenoughmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantNotFound](#coc7participantnotfound) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantUuidNotFound](#coc7participantuuidnotfound) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.ParticipantsList](#coc7participantslist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PenaltyDice](#coc7penaltydice) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PickDirectory](#coc7pickdirectory) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.PlayerMovesToLocation](#coc7playermovestolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Polish](#coc7polish) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | +| [CoC7.ReflectObstacleChanges](#coc7reflectobstaclechanges) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Remove](#coc7remove) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RemoveBonusDie](#coc7removebonusdie) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RemoveLocation](#coc7removelocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RemoveObstacle](#coc7removeobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Reset](#coc7reset) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Restart](#coc7restart) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Sane](#coc7sane) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SelectNewSkill](#coc7selectnewskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SomethingInTheWay](#coc7somethingintheway) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.SpeedCheck](#coc7speedcheck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.StartingIndex](#coc7startingindex) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.StartingRange](#coc7startingrange) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TooFast](#coc7toofast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TooSlow](#coc7tooslow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TryToBreak](#coc7trytobreak) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TryToGetPastBarriers](#coc7trytogetpastbarriers) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.TryToNegotiateHazard](#coc7trytonegotiatehazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UnarmedWeaponName](#coc7unarmedweaponname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.Update](#coc7update) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.VehicleChase](#coc7vehiclechase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.WaitForPlayerInput](#coc7waitforplayerinput) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.WeaponSkillMain](#coc7weaponskillmain) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.YouLostTime](#coc7youlosttime) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.YouTakeNoDamage](#coc7youtakenodamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.YouTakeSomeDamage](#coc7youtakesomedamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | +| [SETTINGS.TitleChaseSettings](#settingstitlechasesettings) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ##### CoC7.ABarrier From dfb9e028bebc5d6958eebc900b10b313d207e844 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 13 Aug 2022 06:14:04 +0100 Subject: [PATCH 708/726] Switch to Standard coding convention to match suggested vscode extension --- .github/ABANDONED.md | 8 +- .github/TRANSLATIONS.md | 1188 ++++++------------ docs/en/manual.md | 32 +- generate-translations.js | 4 +- module/active-effect.js | 13 +- module/actors/actor.js | 84 +- module/actors/sheets/base.js | 38 +- module/actors/sheets/character.js | 6 +- module/actors/sheets/container.js | 2 +- module/actors/vehicle/data.js | 4 +- module/apps/actor-importer.js | 8 +- module/apps/char-roll-dialog.js | 6 +- module/apps/char-selection-dialog.js | 2 +- module/apps/coc7-chat-message.js | 2 +- module/apps/dholehouse_importer.js | 4 +- module/apps/parser.js | 8 +- module/apps/point-selection-dialog.js | 2 +- module/apps/roll-dialog.js | 2 +- module/apps/skill-selection-dialog.js | 2 +- module/apps/skill-spec-select-dialog.js | 6 +- module/apps/skill-value-dialog.js | 4 +- module/chat.js | 8 +- module/chat/card-actor.js | 4 +- module/chat/cards/chase-obstacle.js | 4 +- module/chat/cards/combined-roll.js | 6 +- module/chat/cards/opposed-roll.js | 4 +- module/chat/cards/san-check.js | 4 +- module/chat/combat/melee-initiator.js | 8 +- module/chat/combat/melee-target.js | 10 +- module/chat/concheck.js | 2 +- module/chat/interactive-chat-card.js | 2 +- module/chat/rangecombat.js | 12 +- module/chat/sancheck.js | 8 +- module/check.js | 10 +- module/coc7.js | 6 +- module/common/chatcardlib/src/chatcardlib.js | 4 +- module/dice.js | 6 +- module/items/chase/data.js | 90 +- module/items/chase/sheet.js | 4 +- module/items/item.js | 6 +- module/items/skill/data.js | 2 +- module/scripts/game-rules.js | 2 +- module/updater.js | 2 +- module/utilities.js | 12 +- package.json | 41 +- webpack.config.js | 34 +- 46 files changed, 657 insertions(+), 1059 deletions(-) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index eb7ea747..b14b76de 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -10,8 +10,8 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry [es.json](#esjson) -## cn.json +## cn.json ``` "CoC7.ActorIsTokenHint": "Actor is a token", "CoC7.ActorDataLinked": "Actor data are linked", @@ -238,9 +238,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.EffectNew": "New effect", "CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value." ``` - ## cs.json - ``` "CoC7.Entities.Character": "Character", "CoC7.Entities.Container": "Container", @@ -652,9 +650,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.EffectNew": "New effect", "CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value." ``` - ## de.json - ``` "CoC7.ActorIsTokenHint": "Actor is a token", "CoC7.ActorDataLinked": "Actor data are linked", @@ -911,9 +907,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.EffectNew": "New effect", "CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value." ``` - ## es.json - ``` "CoC7.ActorIsTokenHint": "Actor is a token", "CoC7.ActorDataLinked": "Actor data are linked", diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index b5754f12..ad0a8515 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -6,991 +6,597 @@ The **it** translation is currently up to date The following translations have been abandoned **cn**, **cs**, **de**, **es**, [are you able to help?](./ABANDONED.md) -| Key | fr | ja | ko | pl | pt-BR | sv | zh-TW | -| :------------------------------------------------------------------------------------ | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **Remaining**: | **192** | **194** | **193** | **194** | **192** | **192** | **192** | -| [CoC7.ABarrier](#coc7abarrier) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AHazard](#coc7ahazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActionCost](#coc7actioncost) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActionCostOnFail](#coc7actioncostonfail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Actions](#coc7actions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorDataLinked](#coc7actordatalinked) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorDataNotLinked](#coc7actordatanotlinked) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorImported](#coc7actorimported) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ActorIsTokenHint](#coc7actoristokenhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Add](#coc7add) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddActorToChase](#coc7addactortochase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddBonusDie](#coc7addbonusdie) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AddParticipant](#coc7addparticipant) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AdjustedMovement](#coc7adjustedmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AlreadyEncountered](#coc7alreadyencountered) | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ArmorIgnored](#coc7armorignored) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AskDamageRoll](#coc7askdamageroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AskIntentions](#coc7askintentions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AskRoll](#coc7askroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Assist](#coc7assist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AttemptBreakDown](#coc7attemptbreakdown) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.AttemptNegotiateObstacle](#coc7attemptnegotiateobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Barrier](#coc7barrier) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BeingCautious](#coc7beingcautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BeingVeryCautious](#coc7beingverycautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.BreakDown](#coc7breakdown) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Breakable](#coc7breakable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Cautious](#coc7cautious) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CautiousApproach](#coc7cautiousapproach) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.AdjustedMovementShort](#coc7chaseadjustedmovementshort) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.ChasersMax](#coc7chasechasersmax) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.ChasersMin](#coc7chasechasersmin) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.CheckName](#coc7chasecheckname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.InitiativeShort](#coc7chaseinitiativeshort) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.PreysMax](#coc7chasepreysmax) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Chase.PreysMin](#coc7chasepreysmin) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ChaseSetup](#coc7chasesetup) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckFailed](#coc7checkfailed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckName](#coc7checkname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CheckPassed](#coc7checkpassed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CleanSkillList](#coc7cleanskilllist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CleanSkillListHint](#coc7cleanskilllisthint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ClearAllConditions](#coc7clearallconditions) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmCut2Chase](#coc7confirmcut2chase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmCut2ChaseHint](#coc7confirmcut2chasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmNextChaseRound](#coc7confirmnextchaseround) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmNextChaseRoundHint](#coc7confirmnextchaseroundhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmResetChase](#coc7confirmresetchase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmResetChaseHint](#coc7confirmresetchasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmRestartChase](#coc7confirmrestartchase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConfirmRestartChaseHint](#coc7confirmrestartchasehint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ConsumeBonusDice](#coc7consumebonusdice) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Create](#coc7create) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.CutToTheChase](#coc7cuttothechase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Damage](#coc7damage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DamageDealTo](#coc7damagedealto) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DamageDealt](#coc7damagedealt) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DamageOnFail](#coc7damageonfail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DecreaseMovementAction](#coc7decreasemovementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DefinitelyInsane](#coc7definitelyinsane) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Delete](#coc7delete) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseImportingName](#coc7dholehouseimportingname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Disable](#coc7disable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DoesNotMeetMinimumReqToBeAdded](#coc7doesnotmeetminimumreqtobeadded) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DontMoveToLocation](#coc7dontmovetolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.DragOnCanvas](#coc7dragoncanvas) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Duration](#coc7duration) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Edit](#coc7edit) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.EffectAppliedCantOverride](#coc7effectappliedcantoverride) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.EffectNew](#coc7effectnew) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Enable](#coc7enable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorBeneficiaryAtMaxBonus](#coc7errorbeneficiaryatmaxbonus) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorEmptyLocationsList](#coc7erroremptylocationslist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorNoTokensSelected](#coc7errornotokensselected) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorParticipantAtMaxBonus](#coc7errorparticipantatmaxbonus) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorTokenNotOnScene](#coc7errortokennotonscene) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FINISH](#coc7finish) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FacingObstacle](#coc7facingobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.FileUploadError](#coc7fileuploaderror) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.German](#coc7german) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.GotLucky](#coc7gotlucky) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Hazard](#coc7hazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.IncludeEscapees](#coc7includeescapees) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.IncludeLatecomers](#coc7includelatecomers) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.IncreaseMovementAction](#coc7increasemovementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Initialize](#coc7initialize) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Initiative](#coc7initiative) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.InsertLocation](#coc7insertlocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LocationCoordinate](#coc7locationcoordinate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LocationInit](#coc7locationinit) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LocationNotEmpty](#coc7locationnotempty) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Locations](#coc7locations) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.LuckNotEnough](#coc7lucknotenough) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MakeActive](#coc7makeactive) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MaxPossibleSanLoss](#coc7maxpossiblesanloss) | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorActor](#coc7migrateerroractor) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorItem](#coc7migrateerroritem) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorScene](#coc7migrateerrorscene) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Migrate.ErrorTable](#coc7migrateerrortable) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MoveBackward](#coc7movebackward) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MoveForward](#coc7moveforward) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MoveToLocation](#coc7movetolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.MovementAction](#coc7movementaction) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NeedMin2Participants](#coc7needmin2participants) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NeedRecalculate](#coc7needrecalculate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NeedToRecalculate](#coc7needtorecalculate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Negotiate](#coc7negotiate) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NextRound](#coc7nextround) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoDamageDealt](#coc7nodamagedealt) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoValidCheck](#coc7novalidcheck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NoValidSkill](#coc7novalidskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NotAllHaveSpeedRoll](#coc7notallhavespeedroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.NothingToRoll](#coc7nothingtoroll) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Obstacle](#coc7obstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleDamage](#coc7obstacledamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleFail](#coc7obstaclefail) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleFumble](#coc7obstaclefumble) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleHasHitPoint](#coc7obstaclehashitpoint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstacleName](#coc7obstaclename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ObstaclePassed](#coc7obstaclepassed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.OpenObstacleResolutionCard](#coc7openobstacleresolutioncard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.OverrideCalc](#coc7overridecalc) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantAlreadyProcessed](#coc7participantalreadyprocessed) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantDataMissing](#coc7participantdatamissing) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantDropHint](#coc7participantdrophint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantNotEnoughMovement](#coc7participantnotenoughmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantNotFound](#coc7participantnotfound) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantUuidNotFound](#coc7participantuuidnotfound) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.ParticipantsList](#coc7participantslist) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PenaltyDice](#coc7penaltydice) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PickDirectory](#coc7pickdirectory) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.PlayerMovesToLocation](#coc7playermovestolocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Polish](#coc7polish) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | -| [CoC7.ReflectObstacleChanges](#coc7reflectobstaclechanges) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Remove](#coc7remove) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RemoveBonusDie](#coc7removebonusdie) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RemoveLocation](#coc7removelocation) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RemoveObstacle](#coc7removeobstacle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Reset](#coc7reset) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Restart](#coc7restart) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Sane](#coc7sane) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SelectNewSkill](#coc7selectnewskill) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SomethingInTheWay](#coc7somethingintheway) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.SpeedCheck](#coc7speedcheck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.StartingIndex](#coc7startingindex) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.StartingRange](#coc7startingrange) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TooFast](#coc7toofast) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TooSlow](#coc7tooslow) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TryToBreak](#coc7trytobreak) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TryToGetPastBarriers](#coc7trytogetpastbarriers) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.TryToNegotiateHazard](#coc7trytonegotiatehazard) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UnarmedWeaponName](#coc7unarmedweaponname) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.Update](#coc7update) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.VehicleChase](#coc7vehiclechase) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.WaitForPlayerInput](#coc7waitforplayerinput) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.WeaponSkillMain](#coc7weaponskillmain) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.YouLostTime](#coc7youlosttime) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.YouTakeNoDamage](#coc7youtakenodamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.YouTakeSomeDamage](#coc7youtakesomedamage) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | -| [SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | -| [SETTINGS.TitleChaseSettings](#settingstitlechasesettings) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | - +|Key|fr|ja|ko|pl|pt-BR|sv|zh-TW| +|:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +|**Remaining**:|**192**|**194**|**193**|**194**|**192**|**192**|**192**| +|[CoC7.ABarrier](#coc7abarrier)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.AHazard](#coc7ahazard)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ActionCost](#coc7actioncost)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ActionCostOnFail](#coc7actioncostonfail)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Actions](#coc7actions)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ActorDataLinked](#coc7actordatalinked)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ActorDataNotLinked](#coc7actordatanotlinked)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ActorImported](#coc7actorimported)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ActorIsTokenHint](#coc7actoristokenhint)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Add](#coc7add)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.AddActorToChase](#coc7addactortochase)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.AddBonusDie](#coc7addbonusdie)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.AddParticipant](#coc7addparticipant)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.AdjustedMovement](#coc7adjustedmovement)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.AlreadyEncountered](#coc7alreadyencountered)|✅|❌|✅|✅|✅|✅|✅| +|[CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ArmorIgnored](#coc7armorignored)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.AskDamageRoll](#coc7askdamageroll)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.AskIntentions](#coc7askintentions)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.AskRoll](#coc7askroll)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Assist](#coc7assist)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.AttemptBreakDown](#coc7attemptbreakdown)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.AttemptNegotiateObstacle](#coc7attemptnegotiateobstacle)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Barrier](#coc7barrier)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.BeingCautious](#coc7beingcautious)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.BeingVeryCautious](#coc7beingverycautious)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.BreakDown](#coc7breakdown)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Breakable](#coc7breakable)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Cautious](#coc7cautious)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.CautiousApproach](#coc7cautiousapproach)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.AdjustedMovementShort](#coc7chaseadjustedmovementshort)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.ChasersMax](#coc7chasechasersmax)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.ChasersMin](#coc7chasechasersmin)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.CheckName](#coc7chasecheckname)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.InitiativeShort](#coc7chaseinitiativeshort)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.PreysMax](#coc7chasepreysmax)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.PreysMin](#coc7chasepreysmin)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ChaseSetup](#coc7chasesetup)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.CheckFailed](#coc7checkfailed)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.CheckName](#coc7checkname)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.CheckPassed](#coc7checkpassed)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.CleanSkillList](#coc7cleanskilllist)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.CleanSkillListHint](#coc7cleanskilllisthint)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ClearAllConditions](#coc7clearallconditions)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmCut2Chase](#coc7confirmcut2chase)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmCut2ChaseHint](#coc7confirmcut2chasehint)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmNextChaseRound](#coc7confirmnextchaseround)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmNextChaseRoundHint](#coc7confirmnextchaseroundhint)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmResetChase](#coc7confirmresetchase)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmResetChaseHint](#coc7confirmresetchasehint)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmRestartChase](#coc7confirmrestartchase)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmRestartChaseHint](#coc7confirmrestartchasehint)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ConsumeBonusDice](#coc7consumebonusdice)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Create](#coc7create)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.CutToTheChase](#coc7cuttothechase)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Damage](#coc7damage)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DamageDealTo](#coc7damagedealto)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DamageDealt](#coc7damagedealt)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DamageOnFail](#coc7damageonfail)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DecreaseMovementAction](#coc7decreasemovementaction)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DefinitelyInsane](#coc7definitelyinsane)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Delete](#coc7delete)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DholeHouseImportingName](#coc7dholehouseimportingname)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Disable](#coc7disable)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DoesNotMeetMinimumReqToBeAdded](#coc7doesnotmeetminimumreqtobeadded)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DontMoveToLocation](#coc7dontmovetolocation)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.DragOnCanvas](#coc7dragoncanvas)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Duration](#coc7duration)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Edit](#coc7edit)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.EffectAppliedCantOverride](#coc7effectappliedcantoverride)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.EffectNew](#coc7effectnew)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Enable](#coc7enable)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorBeneficiaryAtMaxBonus](#coc7errorbeneficiaryatmaxbonus)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorEmptyLocationsList](#coc7erroremptylocationslist)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorNoTokensSelected](#coc7errornotokensselected)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorParticipantAtMaxBonus](#coc7errorparticipantatmaxbonus)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorTokenNotOnScene](#coc7errortokennotonscene)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.FINISH](#coc7finish)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.FacingObstacle](#coc7facingobstacle)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.FileUploadError](#coc7fileuploaderror)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.German](#coc7german)|✅|✅|✅|❌|✅|✅|✅| +|[CoC7.GotLucky](#coc7gotlucky)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Hazard](#coc7hazard)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.IncludeEscapees](#coc7includeescapees)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.IncludeLatecomers](#coc7includelatecomers)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.IncreaseMovementAction](#coc7increasemovementaction)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Initialize](#coc7initialize)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Initiative](#coc7initiative)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.InsertLocation](#coc7insertlocation)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.LocationCoordinate](#coc7locationcoordinate)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.LocationInit](#coc7locationinit)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.LocationNotEmpty](#coc7locationnotempty)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Locations](#coc7locations)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.LuckNotEnough](#coc7lucknotenough)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.MakeActive](#coc7makeactive)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.MaxPossibleSanLoss](#coc7maxpossiblesanloss)|✅|❌|✅|✅|✅|✅|✅| +|[CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Migrate.ErrorActor](#coc7migrateerroractor)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Migrate.ErrorItem](#coc7migrateerroritem)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Migrate.ErrorScene](#coc7migrateerrorscene)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Migrate.ErrorTable](#coc7migrateerrortable)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.MoveBackward](#coc7movebackward)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.MoveForward](#coc7moveforward)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.MoveToLocation](#coc7movetolocation)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.MovementAction](#coc7movementaction)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.NeedMin2Participants](#coc7needmin2participants)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.NeedRecalculate](#coc7needrecalculate)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.NeedToRecalculate](#coc7needtorecalculate)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Negotiate](#coc7negotiate)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.NextRound](#coc7nextround)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.NoDamageDealt](#coc7nodamagedealt)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.NoValidCheck](#coc7novalidcheck)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.NoValidSkill](#coc7novalidskill)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.NotAllHaveSpeedRoll](#coc7notallhavespeedroll)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.NothingToRoll](#coc7nothingtoroll)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Obstacle](#coc7obstacle)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ObstacleDamage](#coc7obstacledamage)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ObstacleFail](#coc7obstaclefail)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ObstacleFumble](#coc7obstaclefumble)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ObstacleHasHitPoint](#coc7obstaclehashitpoint)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ObstacleName](#coc7obstaclename)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ObstaclePassed](#coc7obstaclepassed)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.OpenObstacleResolutionCard](#coc7openobstacleresolutioncard)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.OverrideCalc](#coc7overridecalc)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantAlreadyProcessed](#coc7participantalreadyprocessed)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantDataMissing](#coc7participantdatamissing)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantDropHint](#coc7participantdrophint)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantNotEnoughMovement](#coc7participantnotenoughmovement)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantNotFound](#coc7participantnotfound)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantUuidNotFound](#coc7participantuuidnotfound)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantsList](#coc7participantslist)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.PenaltyDice](#coc7penaltydice)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.PickDirectory](#coc7pickdirectory)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.PlayerMovesToLocation](#coc7playermovestolocation)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Polish](#coc7polish)|✅|✅|✅|❌|✅|✅|✅| +|[CoC7.ReflectObstacleChanges](#coc7reflectobstaclechanges)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Remove](#coc7remove)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.RemoveBonusDie](#coc7removebonusdie)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.RemoveLocation](#coc7removelocation)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.RemoveObstacle](#coc7removeobstacle)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Reset](#coc7reset)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Restart](#coc7restart)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Sane](#coc7sane)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.SelectNewSkill](#coc7selectnewskill)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.SomethingInTheWay](#coc7somethingintheway)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.SpeedCheck](#coc7speedcheck)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.StartingIndex](#coc7startingindex)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.StartingRange](#coc7startingrange)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.TooFast](#coc7toofast)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.TooSlow](#coc7tooslow)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.TryToBreak](#coc7trytobreak)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.TryToGetPastBarriers](#coc7trytogetpastbarriers)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.TryToNegotiateHazard](#coc7trytonegotiatehazard)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.UnarmedWeaponName](#coc7unarmedweaponname)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.Update](#coc7update)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.VehicleChase](#coc7vehiclechase)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.WaitForPlayerInput](#coc7waitforplayerinput)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.WeaponSkillMain](#coc7weaponskillmain)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.YouLostTime](#coc7youlosttime)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.YouTakeNoDamage](#coc7youtakenodamage)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.YouTakeSomeDamage](#coc7youtakesomedamage)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess)|❌|❌|❌|❌|❌|❌|❌| +|[CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle)|❌|❌|❌|❌|❌|❌|❌| +|[SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement)|❌|❌|❌|❌|❌|❌|❌| +|[SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint)|❌|❌|❌|❌|❌|❌|❌| +|[SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty)|✅|✅|❌|✅|✅|✅|✅| +|[SETTINGS.TitleChaseSettings](#settingstitlechasesettings)|❌|❌|❌|❌|❌|❌|❌| ##### CoC7.ABarrier - -` "CoC7.ABarrier": "a barrier",` - +``` "CoC7.ABarrier": "a barrier",``` ##### CoC7.AHazard - -` "CoC7.AHazard": "a hazard",` - +``` "CoC7.AHazard": "a hazard",``` ##### CoC7.ActionCost - -` "CoC7.ActionCost": "Action cost",` - +``` "CoC7.ActionCost": "Action cost",``` ##### CoC7.ActionCostOnFail - -` "CoC7.ActionCostOnFail": "Toggle action penalty on fail.",` - +``` "CoC7.ActionCostOnFail": "Toggle action penalty on fail.",``` ##### CoC7.Actions - -` "CoC7.Actions": "actions:",` - +``` "CoC7.Actions": "actions:",``` ##### CoC7.ActorDataLinked - -` "CoC7.ActorDataLinked": "Actor data are linked",` - +``` "CoC7.ActorDataLinked": "Actor data are linked",``` ##### CoC7.ActorDataNotLinked - -` "CoC7.ActorDataNotLinked": "Actor data are NOT linked",` - +``` "CoC7.ActorDataNotLinked": "Actor data are NOT linked",``` ##### CoC7.ActorImported - -` "CoC7.ActorImported": "New {actorType} imported: {actorName}",` - +``` "CoC7.ActorImported": "New {actorType} imported: {actorName}",``` ##### CoC7.ActorImporterUploadError - -` "CoC7.ActorImporterUploadError": "Import stopped, unable to write image",` - +``` "CoC7.ActorImporterUploadError": "Import stopped, unable to write image",``` ##### CoC7.ActorIsSyntheticActor - -` "CoC7.ActorIsSyntheticActor": "Actor is a synthetic actor (instance of an actor)",` - +``` "CoC7.ActorIsSyntheticActor": "Actor is a synthetic actor (instance of an actor)",``` ##### CoC7.ActorIsTokenHint - -` "CoC7.ActorIsTokenHint": "Actor is a token",` - +``` "CoC7.ActorIsTokenHint": "Actor is a token",``` ##### CoC7.Add - -` "CoC7.Add": "Add",` - +``` "CoC7.Add": "Add",``` ##### CoC7.AddActorToChase - -` "CoC7.AddActorToChase": "Add an actor to the chase",` - +``` "CoC7.AddActorToChase": "Add an actor to the chase",``` ##### CoC7.AddBonusDie - -` "CoC7.AddBonusDie": "Add bonus die",` - +``` "CoC7.AddBonusDie": "Add bonus die",``` ##### CoC7.AddParticipant - -` "CoC7.AddParticipant": "Add Participant",` - +``` "CoC7.AddParticipant": "Add Participant",``` ##### CoC7.AdjustedMovement - -` "CoC7.AdjustedMovement": "Adjusted movement",` - +``` "CoC7.AdjustedMovement": "Adjusted movement",``` ##### CoC7.AlreadyEncountered - -` "CoC7.AlreadyEncountered": "Already encountered",` - +``` "CoC7.AlreadyEncountered": "Already encountered",``` ##### CoC7.AlreadyEncounteredInformation - -` "CoC7.AlreadyEncounteredInformation": "Already encountered: {reason} lost {lost}/{max}",` - +``` "CoC7.AlreadyEncounteredInformation": "Already encountered: {reason} lost {lost}/{max}",``` ##### CoC7.ArmorIgnored - -` "CoC7.ArmorIgnored": "Armor Ignored",` - +``` "CoC7.ArmorIgnored": "Armor Ignored",``` ##### CoC7.AskDamageRoll - -` "CoC7.AskDamageRoll": "Ask damage roll",` - +``` "CoC7.AskDamageRoll": "Ask damage roll",``` ##### CoC7.AskIntentions - -` "CoC7.AskIntentions": "What are your intentions ?",` - +``` "CoC7.AskIntentions": "What are your intentions ?",``` ##### CoC7.AskRoll - -` "CoC7.AskRoll": "Roll {name} ({value}%)",` - +``` "CoC7.AskRoll": "Roll {name} ({value}%)",``` ##### CoC7.Assist - -` "CoC7.Assist": "Assist ally",` - +``` "CoC7.Assist": "Assist ally",``` ##### CoC7.AttemptBreakDown - -` "CoC7.AttemptBreakDown": "Attempt to break down !!",` - +``` "CoC7.AttemptBreakDown": "Attempt to break down !!",``` ##### CoC7.AttemptNegotiateObstacle - -` "CoC7.AttemptNegotiateObstacle": "Attempt to negotiate that obstacle",` - +``` "CoC7.AttemptNegotiateObstacle": "Attempt to negotiate that obstacle",``` ##### CoC7.Barrier - -` "CoC7.Barrier": "Barrier",` - +``` "CoC7.Barrier": "Barrier",``` ##### CoC7.BeingCautious - -` "CoC7.BeingCautious": "You elect to take a cautious approach.",` - +``` "CoC7.BeingCautious": "You elect to take a cautious approach.",``` ##### CoC7.BeingVeryCautious - -` "CoC7.BeingVeryCautious": "You are being very cautious.",` - +``` "CoC7.BeingVeryCautious": "You are being very cautious.",``` ##### CoC7.BonusDieAssailantReason - -` "CoC7.BonusDieAssailantReason": "Add 1 bonus die (assailant is prone, restrained...)",` - +``` "CoC7.BonusDieAssailantReason": "Add 1 bonus die (assailant is prone, restrained...)",``` ##### CoC7.BreakDown - -` "CoC7.BreakDown": "Break Down",` - +``` "CoC7.BreakDown": "Break Down",``` ##### CoC7.Breakable - -` "CoC7.Breakable": "Breakable",` - +``` "CoC7.Breakable": "Breakable",``` ##### CoC7.Cautious - -` "CoC7.Cautious": "Cautious",` - +``` "CoC7.Cautious": "Cautious",``` ##### CoC7.CautiousApproach - -` "CoC7.CautiousApproach": "Take cautious approach",` - +``` "CoC7.CautiousApproach": "Take cautious approach",``` ##### CoC7.Chase.AdjustedMovementShort - -` "CoC7.Chase.AdjustedMovementShort": "ADJ. MOV: {value}",` - +``` "CoC7.Chase.AdjustedMovementShort": "ADJ. MOV: {value}",``` ##### CoC7.Chase.ChasersMax - -` "CoC7.Chase.ChasersMax": "Chasers Max: {value}",` - +``` "CoC7.Chase.ChasersMax": "Chasers Max: {value}",``` ##### CoC7.Chase.ChasersMin - -` "CoC7.Chase.ChasersMin": "Chasers Min: {value}",` - +``` "CoC7.Chase.ChasersMin": "Chasers Min: {value}",``` ##### CoC7.Chase.CheckName - -` "CoC7.Chase.CheckName": "check name",` - +``` "CoC7.Chase.CheckName": "check name",``` ##### CoC7.Chase.InitiativeShort - -` "CoC7.Chase.InitiativeShort": "INIT: {value}",` - +``` "CoC7.Chase.InitiativeShort": "INIT: {value}",``` ##### CoC7.Chase.PreysMax - -` "CoC7.Chase.PreysMax": "Preys Max: {value}",` - +``` "CoC7.Chase.PreysMax": "Preys Max: {value}",``` ##### CoC7.Chase.PreysMin - -` "CoC7.Chase.PreysMin": "Preys Min: {value}",` - +``` "CoC7.Chase.PreysMin": "Preys Min: {value}",``` ##### CoC7.ChaseSetup - -` "CoC7.ChaseSetup": "Chase setup",` - +``` "CoC7.ChaseSetup": "Chase setup",``` ##### CoC7.CheckFailed - -` "CoC7.CheckFailed": "Check failed",` - +``` "CoC7.CheckFailed": "Check failed",``` ##### CoC7.CheckMemoryRepressed - -` "CoC7.CheckMemoryRepressed": "Memory repressed",` - +``` "CoC7.CheckMemoryRepressed": "Memory repressed",``` ##### CoC7.CheckName - -` "CoC7.CheckName": "Check",` - +``` "CoC7.CheckName": "Check",``` ##### CoC7.CheckPassed - -` "CoC7.CheckPassed": "Check passed",` - +``` "CoC7.CheckPassed": "Check passed",``` ##### CoC7.CleanSkillList - -` "CoC7.CleanSkillList": "Clean skill list",` - +``` "CoC7.CleanSkillList": "Clean skill list",``` ##### CoC7.CleanSkillListHint - -` "CoC7.CleanSkillListHint": "

    This will Clean your skill list by removing specialization from skill name.

    This will avoid to display skill as : 'specialization(specialization(skill))'

    ",` - +``` "CoC7.CleanSkillListHint": "

    This will Clean your skill list by removing specialization from skill name.

    This will avoid to display skill as : 'specialization(specialization(skill))'

    ",``` ##### CoC7.ClearAllConditions - -` "CoC7.ClearAllConditions": "Clear All Conditions",` - +``` "CoC7.ClearAllConditions": "Clear All Conditions",``` ##### CoC7.ConfirmCut2Chase - -` "CoC7.ConfirmCut2Chase": "Are you ready to cut to the chase ?",` - +``` "CoC7.ConfirmCut2Chase": "Are you ready to cut to the chase ?",``` ##### CoC7.ConfirmCut2ChaseHint - -` "CoC7.ConfirmCut2ChaseHint": "This will start the chase and the first chase round.",` - +``` "CoC7.ConfirmCut2ChaseHint": "This will start the chase and the first chase round.",``` ##### CoC7.ConfirmNextChaseRound - -` "CoC7.ConfirmNextChaseRound": "Proceed to next round ?",` - +``` "CoC7.ConfirmNextChaseRound": "Proceed to next round ?",``` ##### CoC7.ConfirmNextChaseRoundHint - -` "CoC7.ConfirmNextChaseRoundHint": "You still have action available on some actors. Are you sure you want to proceed ?",` - +``` "CoC7.ConfirmNextChaseRoundHint": "You still have action available on some actors. Are you sure you want to proceed ?",``` ##### CoC7.ConfirmResetChase - -` "CoC7.ConfirmResetChase": "Do you want to restet the chase ?",` - +``` "CoC7.ConfirmResetChase": "Do you want to restet the chase ?",``` ##### CoC7.ConfirmResetChaseHint - -` "CoC7.ConfirmResetChaseHint": "This will reset your chase.All positions and obstacles will be removed.",` - +``` "CoC7.ConfirmResetChaseHint": "This will reset your chase.All positions and obstacles will be removed.",``` ##### CoC7.ConfirmRestartChase - -` "CoC7.ConfirmRestartChase": "Do you want to restart the chase ?",` - +``` "CoC7.ConfirmRestartChase": "Do you want to restart the chase ?",``` ##### CoC7.ConfirmRestartChaseHint - -` "CoC7.ConfirmRestartChaseHint": "This will restart your chase.\nAll position will be reseted.\nActors that did not rool a speedcheck will have to roll.",` - +``` "CoC7.ConfirmRestartChaseHint": "This will restart your chase.\nAll position will be reseted.\nActors that did not rool a speedcheck will have to roll.",``` ##### CoC7.ConsumeBonusDice - -` "CoC7.ConsumeBonusDice": "Consume Bonus Dice",` - +``` "CoC7.ConsumeBonusDice": "Consume Bonus Dice",``` ##### CoC7.Create - -` "CoC7.Create": "Create",` - +``` "CoC7.Create": "Create",``` ##### CoC7.CutToTheChase - -` "CoC7.CutToTheChase": "Cut to the chase",` - +``` "CoC7.CutToTheChase": "Cut to the chase",``` ##### CoC7.Damage - -` "CoC7.Damage": "Damage",` - +``` "CoC7.Damage": "Damage",``` ##### CoC7.DamageDealTo - -` "CoC7.DamageDealTo": "Damage {name} {damage}HP",` - +``` "CoC7.DamageDealTo": "Damage {name} {damage}HP",``` ##### CoC7.DamageDealt - -` "CoC7.DamageDealt": "You deal {value} damage.",` - +``` "CoC7.DamageDealt": "You deal {value} damage.",``` ##### CoC7.DamageOnFail - -` "CoC7.DamageOnFail": "Toggle damage on fail.",` - +``` "CoC7.DamageOnFail": "Toggle damage on fail.",``` ##### CoC7.DecreaseMovementAction - -` "CoC7.DecreaseMovementAction": "Decrease movement action",` - +``` "CoC7.DecreaseMovementAction": "Decrease movement action",``` ##### CoC7.DefinitelyInsane - -` "CoC7.DefinitelyInsane": "Good for the asylum",` - +``` "CoC7.DefinitelyInsane": "Good for the asylum",``` ##### CoC7.Delete - -` "CoC7.Delete": "Delete",` - +``` "CoC7.Delete": "Delete",``` ##### CoC7.DholeHouseActorImporter - -` "CoC7.DholeHouseActorImporter": "The Dhole's House Actor Importer JSON",` - +``` "CoC7.DholeHouseActorImporter": "The Dhole's House Actor Importer JSON",``` ##### CoC7.DholeHouseActorImporterSource - -` "CoC7.DholeHouseActorImporterSource": "Imported from The Dhole's House Actor",` - +``` "CoC7.DholeHouseActorImporterSource": "Imported from The Dhole's House Actor",``` ##### CoC7.DholeHouseActorImporterSummary - -` "CoC7.DholeHouseActorImporterSummary": "Export your DholeHouse's character as JSON and upload it here.",` - +``` "CoC7.DholeHouseActorImporterSummary": "Export your DholeHouse's character as JSON and upload it here.",``` ##### CoC7.DholeHouseImportingName - -` "CoC7.DholeHouseImportingName": "About to import: ",` - +``` "CoC7.DholeHouseImportingName": "About to import: ",``` ##### CoC7.DholeHouseInvalidActor - -` "CoC7.DholeHouseInvalidActor": "The selected JSON doesn't seem to be a valid Dhole's House exported character",` - +``` "CoC7.DholeHouseInvalidActor": "The selected JSON doesn't seem to be a valid Dhole's House exported character",``` ##### CoC7.DholeHousePickYourJSONFile - -` "CoC7.DholeHousePickYourJSONFile": "Pick the JSON file exported from The Dhole's House",` - +``` "CoC7.DholeHousePickYourJSONFile": "Pick the JSON file exported from The Dhole's House",``` ##### CoC7.Disable - -` "CoC7.Disable": "Disable",` - +``` "CoC7.Disable": "Disable",``` ##### CoC7.DoesNotMeetMinimumReqToBeAdded - -` "CoC7.DoesNotMeetMinimumReqToBeAdded": "Can not add participant, need at least valid movement action",` - +``` "CoC7.DoesNotMeetMinimumReqToBeAdded": "Can not add participant, need at least valid movement action",``` ##### CoC7.DontMoveToLocation - -` "CoC7.DontMoveToLocation": "You're staying there !",` - +``` "CoC7.DontMoveToLocation": "You're staying there !",``` ##### CoC7.DragOnCanvas - -` "CoC7.DragOnCanvas": "Drag this on canvas to set the position of this location.",` - +``` "CoC7.DragOnCanvas": "Drag this on canvas to set the position of this location.",``` ##### CoC7.Duration - -` "CoC7.Duration": "Duration",` - +``` "CoC7.Duration": "Duration",``` ##### CoC7.Edit - -` "CoC7.Edit": "Edit",` - +``` "CoC7.Edit": "Edit",``` ##### CoC7.EffectAppliedCantOverride - -` "CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value.",` - +``` "CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value.",``` ##### CoC7.EffectNew - -` "CoC7.EffectNew": "New effect",` - +``` "CoC7.EffectNew": "New effect",``` ##### CoC7.Enable - -` "CoC7.Enable": "Enable",` - +``` "CoC7.Enable": "Enable",``` ##### CoC7.ErrorActorHasNoWeaponNamed - -` "CoC7.ErrorActorHasNoWeaponNamed": "Actor {actorName} has no weapon named {weaponName}",` - +``` "CoC7.ErrorActorHasNoWeaponNamed": "Actor {actorName} has no weapon named {weaponName}",``` ##### CoC7.ErrorActorHasTooManyWeaponsNamed - -`` "CoC7.ErrorActorHasTooManyWeaponsNamed": "`Actor {actorName} has more than one weapon named {weaponName}. The first found will be used`",`` - +``` "CoC7.ErrorActorHasTooManyWeaponsNamed": "`Actor {actorName} has more than one weapon named {weaponName}. The first found will be used`",``` ##### CoC7.ErrorBeneficiaryAtMaxBonus - -` "CoC7.ErrorBeneficiaryAtMaxBonus": "Beneficiary {name} already has max bonus dice",` - +``` "CoC7.ErrorBeneficiaryAtMaxBonus": "Beneficiary {name} already has max bonus dice",``` ##### CoC7.ErrorEmptyLocationsList - -` "CoC7.ErrorEmptyLocationsList": "Empty locations list",` - +``` "CoC7.ErrorEmptyLocationsList": "Empty locations list",``` ##### CoC7.ErrorEvaluatingDamage - -` "CoC7.ErrorEvaluatingDamage": "Error evaluating damage",` - +``` "CoC7.ErrorEvaluatingDamage": "Error evaluating damage",``` ##### CoC7.ErrorNoTokensSelected - -` "CoC7.ErrorNoTokensSelected": "No tokens selected",` - +``` "CoC7.ErrorNoTokensSelected": "No tokens selected",``` ##### CoC7.ErrorParticipantAtMaxBonus - -` "CoC7.ErrorParticipantAtMaxBonus": "{participantUuid} already has max bonus dice",` - +``` "CoC7.ErrorParticipantAtMaxBonus": "{participantUuid} already has max bonus dice",``` ##### CoC7.ErrorTokenNotOnScene - -` "CoC7.ErrorTokenNotOnScene": "Token does not belongs to this location's scene",` - +``` "CoC7.ErrorTokenNotOnScene": "Token does not belongs to this location's scene",``` ##### CoC7.ErrorUnableToParseArmorFormula - -` "CoC7.ErrorUnableToParseArmorFormula": "Unable to process armor value: {value}. Ignoring armor.",` - +``` "CoC7.ErrorUnableToParseArmorFormula": "Unable to process armor value: {value}. Ignoring armor.",``` ##### CoC7.ErrorUnableToParseFormula - -` "CoC7.ErrorUnableToParseFormula": "{value} is not a valid formula",` - +``` "CoC7.ErrorUnableToParseFormula": "{value} is not a valid formula",``` ##### CoC7.ErrorUnableToParseSkillFormula - -` "CoC7.ErrorUnableToParseSkillFormula": "Unable to parse formula: {value} for skill {name}",` - +``` "CoC7.ErrorUnableToParseSkillFormula": "Unable to parse formula: {value} for skill {name}",``` ##### CoC7.ErrorUnexpectedSkillsText - -` "CoC7.ErrorUnexpectedSkillsText": "Unexpected skills text, please raise a bug report with the text you are attempting to import",` - +``` "CoC7.ErrorUnexpectedSkillsText": "Unexpected skills text, please raise a bug report with the text you are attempting to import",``` ##### CoC7.ErrorUnexpectedWeaponText - -` "CoC7.ErrorUnexpectedWeaponText": "Unexpected weapons text, please raise a bug report with the text you are attempting to import",` - +``` "CoC7.ErrorUnexpectedWeaponText": "Unexpected weapons text, please raise a bug report with the text you are attempting to import",``` ##### CoC7.FINISH - -` "CoC7.FINISH": "--F-I-N-I-S-H--",` - +``` "CoC7.FINISH": "--F-I-N-I-S-H--",``` ##### CoC7.FacingObstacle - -` "CoC7.FacingObstacle": "You are facing {type}.",` - +``` "CoC7.FacingObstacle": "You are facing {type}.",``` ##### CoC7.FileUploadError - -` "CoC7.FileUploadError": "Unable to write image, file upload error",` - +``` "CoC7.FileUploadError": "Unable to write image, file upload error",``` ##### CoC7.German - -` "CoC7.German": "German",` - +``` "CoC7.German": "German",``` ##### CoC7.GotLucky - -` "CoC7.GotLucky": "You got lucky, this time...",` - +``` "CoC7.GotLucky": "You got lucky, this time...",``` ##### CoC7.Hazard - -` "CoC7.Hazard": "Hazard",` - +``` "CoC7.Hazard": "Hazard",``` ##### CoC7.IncludeEscapees - -` "CoC7.IncludeEscapees": "Let fastest fleeing actors participate.",` - +``` "CoC7.IncludeEscapees": "Let fastest fleeing actors participate.",``` ##### CoC7.IncludeLatecomers - -` "CoC7.IncludeLatecomers": "Let slow pursuer participate.",` - +``` "CoC7.IncludeLatecomers": "Let slow pursuer participate.",``` ##### CoC7.IncreaseMovementAction - -` "CoC7.IncreaseMovementAction": "Increase movement action",` - +``` "CoC7.IncreaseMovementAction": "Increase movement action",``` ##### CoC7.Initialize - -` "CoC7.Initialize": "Initialize",` - +``` "CoC7.Initialize": "Initialize",``` ##### CoC7.Initiative - -` "CoC7.Initiative": "Initiative",` - +``` "CoC7.Initiative": "Initiative",``` ##### CoC7.InsertLocation - -` "CoC7.InsertLocation": "Insert location",` - +``` "CoC7.InsertLocation": "Insert location",``` ##### CoC7.LocationCoordinate - -` "CoC7.LocationCoordinate": "Location set to : {x}, {y}.\nRight click to clear.\nDrag this on canvas to change the position.",` - +``` "CoC7.LocationCoordinate": "Location set to : {x}, {y}.\nRight click to clear.\nDrag this on canvas to change the position.",``` ##### CoC7.LocationInit - -` "CoC7.LocationInit": "You can't remove a starting location",` - +``` "CoC7.LocationInit": "You can't remove a starting location",``` ##### CoC7.LocationNotEmpty - -` "CoC7.LocationNotEmpty": "You can't remove a location with an actor",` - +``` "CoC7.LocationNotEmpty": "You can't remove a location with an actor",``` ##### CoC7.Locations - -` "CoC7.Locations": "Chase locations",` - +``` "CoC7.Locations": "Chase locations",``` ##### CoC7.LuckNotEnough - -` "CoC7.LuckNotEnough": "{name} didn't have enough luck to pass the check",` - +``` "CoC7.LuckNotEnough": "{name} didn't have enough luck to pass the check",``` ##### CoC7.MakeActive - -` "CoC7.MakeActive": "Make Active",` - +``` "CoC7.MakeActive": "Make Active",``` ##### CoC7.MaxPossibleSanLoss - -` "CoC7.MaxPossibleSanLoss": "Max Possible loss",` - +``` "CoC7.MaxPossibleSanLoss": "Max Possible loss",``` ##### CoC7.MessageRollingCharacteristic - -` "CoC7.MessageRollingCharacteristic": "Rolling characteristic {label}: {formula}",` - +``` "CoC7.MessageRollingCharacteristic": "Rolling characteristic {label}: {formula}",``` ##### CoC7.Migrate.ErrorActor - -` "CoC7.Migrate.ErrorActor": "Failed CoC7 system migration for Actor {name}: {message}",` - +``` "CoC7.Migrate.ErrorActor": "Failed CoC7 system migration for Actor {name}: {message}",``` ##### CoC7.Migrate.ErrorDocumentPack - -` "CoC7.Migrate.ErrorDocumentPack": "Failed CoC7 system migration for document {name} in pack {collection}: {message}",` - +``` "CoC7.Migrate.ErrorDocumentPack": "Failed CoC7 system migration for document {name} in pack {collection}: {message}",``` ##### CoC7.Migrate.ErrorItem - -` "CoC7.Migrate.ErrorItem": "Failed CoC7 system migration for Item {name}: {message}",` - +``` "CoC7.Migrate.ErrorItem": "Failed CoC7 system migration for Item {name}: {message}",``` ##### CoC7.Migrate.ErrorMacro - -` "CoC7.Migrate.ErrorMacro": "Failed CoC7 system migration for Macro {name}: {message}",` - +``` "CoC7.Migrate.ErrorMacro": "Failed CoC7 system migration for Macro {name}: {message}",``` ##### CoC7.Migrate.ErrorScene - -` "CoC7.Migrate.ErrorScene": "Failed CoC7 system migration for Scene {name}: {message}",` - +``` "CoC7.Migrate.ErrorScene": "Failed CoC7 system migration for Scene {name}: {message}",``` ##### CoC7.Migrate.ErrorTable - -` "CoC7.Migrate.ErrorTable": "Failed CoC7 system migration for Table {name}: {message}",` - +``` "CoC7.Migrate.ErrorTable": "Failed CoC7 system migration for Table {name}: {message}",``` ##### CoC7.MoveBackward - -` "CoC7.MoveBackward": "Go back",` - +``` "CoC7.MoveBackward": "Go back",``` ##### CoC7.MoveForward - -` "CoC7.MoveForward": "Move forward",` - +``` "CoC7.MoveForward": "Move forward",``` ##### CoC7.MoveToLocation - -` "CoC7.MoveToLocation": "You're moving to the next location.",` - +``` "CoC7.MoveToLocation": "You're moving to the next location.",``` ##### CoC7.MovementAction - -` "CoC7.MovementAction": "Movement action",` - +``` "CoC7.MovementAction": "Movement action",``` ##### CoC7.NeedMin2Participants - -` "CoC7.NeedMin2Participants": "You need to have a chaser and a prey to start a chase!",` - +``` "CoC7.NeedMin2Participants": "You need to have a chaser and a prey to start a chase!",``` ##### CoC7.NeedRecalculate - -` "CoC7.NeedRecalculate": "Recalculation needed",` - +``` "CoC7.NeedRecalculate": "Recalculation needed",``` ##### CoC7.NeedToRecalculate - -` "CoC7.NeedToRecalculate": "All participant will have their movement action recalculated",` - +``` "CoC7.NeedToRecalculate": "All participant will have their movement action recalculated",``` ##### CoC7.Negotiate - -` "CoC7.Negotiate": "Negotiate",` - +``` "CoC7.Negotiate": "Negotiate",``` ##### CoC7.NextRound - -` "CoC7.NextRound": "Next round",` - +``` "CoC7.NextRound": "Next round",``` ##### CoC7.NoDamageDealt - -` "CoC7.NoDamageDealt": "No damage dealt",` - +``` "CoC7.NoDamageDealt": "No damage dealt",``` ##### CoC7.NoValidCheck - -` "CoC7.NoValidCheck": "No valid check",` - +``` "CoC7.NoValidCheck": "No valid check",``` ##### CoC7.NoValidSkill - -` "CoC7.NoValidSkill": "Fake skill",` - +``` "CoC7.NoValidSkill": "Fake skill",``` ##### CoC7.NotAllHaveSpeedRoll - -` "CoC7.NotAllHaveSpeedRoll": "Some participants don't have a speed roll!",` - +``` "CoC7.NotAllHaveSpeedRoll": "Some participants don't have a speed roll!",``` ##### CoC7.NothingToRoll - -` "CoC7.NothingToRoll": "Nothing to roll!",` - +``` "CoC7.NothingToRoll": "Nothing to roll!",``` ##### CoC7.Obstacle - -` "CoC7.Obstacle": "Something in the way",` - +``` "CoC7.Obstacle": "Something in the way",``` ##### CoC7.ObstacleDamage - -` "CoC7.ObstacleDamage": "Obstacle damage",` - +``` "CoC7.ObstacleDamage": "Obstacle damage",``` ##### CoC7.ObstacleFail - -` "CoC7.ObstacleFail": "You fail.",` - +``` "CoC7.ObstacleFail": "You fail.",``` ##### CoC7.ObstacleFumble - -` "CoC7.ObstacleFumble": "You fail misarably !",` - +``` "CoC7.ObstacleFumble": "You fail misarably !",``` ##### CoC7.ObstacleHasHitPoint - -` "CoC7.ObstacleHasHitPoint": "Toggle location's hit points.",` - +``` "CoC7.ObstacleHasHitPoint": "Toggle location's hit points.",``` ##### CoC7.ObstacleName - -` "CoC7.ObstacleName": "Obstacle name:",` - +``` "CoC7.ObstacleName": "Obstacle name:",``` ##### CoC7.ObstaclePassed - -` "CoC7.ObstaclePassed": "You succeesfully found a way.",` - +``` "CoC7.ObstaclePassed": "You succeesfully found a way.",``` ##### CoC7.OpenObstacleResolutionCard - -` "CoC7.OpenObstacleResolutionCard": "Start obstacle resolution flow card.",` - +``` "CoC7.OpenObstacleResolutionCard": "Start obstacle resolution flow card.",``` ##### CoC7.OverrideCalc - -` "CoC7.OverrideCalc": "Override calculation",` - +``` "CoC7.OverrideCalc": "Override calculation",``` ##### CoC7.ParticipantAlreadyProcessed - -` "CoC7.ParticipantAlreadyProcessed": "Participant was already processed.",` - +``` "CoC7.ParticipantAlreadyProcessed": "Participant was already processed.",``` ##### CoC7.ParticipantDataMissing - -` "CoC7.ParticipantDataMissing": "Participant data missing",` - +``` "CoC7.ParticipantDataMissing": "Participant data missing",``` ##### CoC7.ParticipantDropHint - -` "CoC7.ParticipantDropHint": "You can drop and actor on this window or directly on a chase location.",` - +``` "CoC7.ParticipantDropHint": "You can drop and actor on this window or directly on a chase location.",``` ##### CoC7.ParticipantNotEnoughMovement - -` "CoC7.ParticipantNotEnoughMovement": "Particpant {assistantUuid} only has {actions} movement actions",` - +``` "CoC7.ParticipantNotEnoughMovement": "Particpant {assistantUuid} only has {actions} movement actions",``` ##### CoC7.ParticipantNotFound - -` "CoC7.ParticipantNotFound": "Cannot find participant",` - +``` "CoC7.ParticipantNotFound": "Cannot find participant",``` ##### CoC7.ParticipantUuidNotFound - -` "CoC7.ParticipantUuidNotFound": "Cannot find participant {participantUuid}",` - +``` "CoC7.ParticipantUuidNotFound": "Cannot find participant {participantUuid}",``` ##### CoC7.ParticipantsList - -` "CoC7.ParticipantsList": "Participants list",` - +``` "CoC7.ParticipantsList": "Participants list",``` ##### CoC7.PenaltyDice - -` "CoC7.PenaltyDice": "Penalty Dice",` - +``` "CoC7.PenaltyDice": "Penalty Dice",``` ##### CoC7.PenaltyDieSelfReason - -` "CoC7.PenaltyDieSelfReason": "Add 1 penalty die (for being prone, restrained...)",` - +``` "CoC7.PenaltyDieSelfReason": "Add 1 penalty die (for being prone, restrained...)",``` ##### CoC7.PickDirectory - -` "CoC7.PickDirectory": "Pick Directory",` - +``` "CoC7.PickDirectory": "Pick Directory",``` ##### CoC7.PlayerMovesToLocation - -` "CoC7.PlayerMovesToLocation": "PLayer is moving to the next location",` - +``` "CoC7.PlayerMovesToLocation": "PLayer is moving to the next location",``` ##### CoC7.Polish - -` "CoC7.Polish": "Polish",` - +``` "CoC7.Polish": "Polish",``` ##### CoC7.ReflectObstacleChanges - -` "CoC7.ReflectObstacleChanges": "Reflect changes to obstacle",` - +``` "CoC7.ReflectObstacleChanges": "Reflect changes to obstacle",``` ##### CoC7.Remove - -` "CoC7.Remove": "Remove",` - +``` "CoC7.Remove": "Remove",``` ##### CoC7.RemoveBonusDie - -` "CoC7.RemoveBonusDie": "Remove bonus die",` - +``` "CoC7.RemoveBonusDie": "Remove bonus die",``` ##### CoC7.RemoveLocation - -` "CoC7.RemoveLocation": "Remove location",` - +``` "CoC7.RemoveLocation": "Remove location",``` ##### CoC7.RemoveObstacle - -` "CoC7.RemoveObstacle": "Destroy Obstacle",` - +``` "CoC7.RemoveObstacle": "Destroy Obstacle",``` ##### CoC7.Reset - -` "CoC7.Reset": "Reset",` - +``` "CoC7.Reset": "Reset",``` ##### CoC7.Restart - -` "CoC7.Restart": "Restart",` - +``` "CoC7.Restart": "Restart",``` ##### CoC7.RollDifficultyCriticalTitle - -` "CoC7.RollDifficultyCriticalTitle": "Critical difficulty",` - +``` "CoC7.RollDifficultyCriticalTitle": "Critical difficulty",``` ##### CoC7.RollDifficultyExtremeTitle - -` "CoC7.RollDifficultyExtremeTitle": "Extreme difficulty",` - +``` "CoC7.RollDifficultyExtremeTitle": "Extreme difficulty",``` ##### CoC7.RollDifficultyHardTitle - -` "CoC7.RollDifficultyHardTitle": "Hard difficulty",` - +``` "CoC7.RollDifficultyHardTitle": "Hard difficulty",``` ##### CoC7.RollDifficultyRegularTitle - -` "CoC7.RollDifficultyRegularTitle": "Regular difficulty",` - +``` "CoC7.RollDifficultyRegularTitle": "Regular difficulty",``` ##### CoC7.Sane - -` "CoC7.Sane": "Sane",` - +``` "CoC7.Sane": "Sane",``` ##### CoC7.SelectNewSkill - -` "CoC7.SelectNewSkill": "Select skill",` - +``` "CoC7.SelectNewSkill": "Select skill",``` ##### CoC7.Settings.DholeUpload.Directory.Hint - -` "CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.",` - +``` "CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.",``` ##### CoC7.Settings.DholeUpload.Directory.Name - -` "CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory",` - +``` "CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory",``` ##### CoC7.SkillXpGainDisabled - -` "CoC7.SkillXpGainDisabled": "XP Gain disabled.",` - +``` "CoC7.SkillXpGainDisabled": "XP Gain disabled.",``` ##### CoC7.SomethingInTheWay - -` "CoC7.SomethingInTheWay": "There is something in the way",` - +``` "CoC7.SomethingInTheWay": "There is something in the way",``` ##### CoC7.SpeedCheck - -` "CoC7.SpeedCheck": "Speed check",` - +``` "CoC7.SpeedCheck": "Speed check",``` ##### CoC7.StartingIndex - -` "CoC7.StartingIndex": "Starting index of fleeing actors",` - +``` "CoC7.StartingIndex": "Starting index of fleeing actors",``` ##### CoC7.StartingRange - -` "CoC7.StartingRange": "Starting locations advance",` - +``` "CoC7.StartingRange": "Starting locations advance",``` ##### CoC7.TextFieldInvalidJSON - -` "CoC7.TextFieldInvalidJSON": "Unable to parse the JSON, please try again",` - +``` "CoC7.TextFieldInvalidJSON": "Unable to parse the JSON, please try again",``` ##### CoC7.TooFast - -` "CoC7.TooFast": "Too fast",` - +``` "CoC7.TooFast": "Too fast",``` ##### CoC7.TooSlow - -` "CoC7.TooSlow": "Too slow",` - +``` "CoC7.TooSlow": "Too slow",``` ##### CoC7.TryToBreak - -` "CoC7.TryToBreak": "You try to break down that barrier.",` - +``` "CoC7.TryToBreak": "You try to break down that barrier.",``` ##### CoC7.TryToGetPastBarriers - -` "CoC7.TryToGetPastBarriers": "You try to get past that barrier.",` - +``` "CoC7.TryToGetPastBarriers": "You try to get past that barrier.",``` ##### CoC7.TryToNegotiateHazard - -` "CoC7.TryToNegotiateHazard": "You try to negotiate that hazard.",` - +``` "CoC7.TryToNegotiateHazard": "You try to negotiate that hazard.",``` ##### CoC7.UnableToUploadDholeImage - -` "CoC7.UnableToUploadDholeImage": "You do not have permission to upload images, if you import the default avatar will be used.",` - +``` "CoC7.UnableToUploadDholeImage": "You do not have permission to upload images, if you import the default avatar will be used.",``` ##### CoC7.UnarmedWeaponName - -` "CoC7.UnarmedWeaponName": "Unarmed",` - +``` "CoC7.UnarmedWeaponName": "Unarmed",``` ##### CoC7.Update - -` "CoC7.Update": "Update",` - +``` "CoC7.Update": "Update",``` ##### CoC7.UpgradeSuccessWithLuck - -` "CoC7.UpgradeSuccessWithLuck": "Upgrade to {{difficultyName}} success for {{luckToSpend}} luck.",` - +``` "CoC7.UpgradeSuccessWithLuck": "Upgrade to {{difficultyName}} success for {{luckToSpend}} luck.",``` ##### CoC7.VehicleChase - -` "CoC7.VehicleChase": "Chase can include vehicle (NOT IMPLEMENTED)",` - +``` "CoC7.VehicleChase": "Chase can include vehicle (NOT IMPLEMENTED)",``` ##### CoC7.WaitForPlayerInput - -` "CoC7.WaitForPlayerInput": "Wait for player's input",` - +``` "CoC7.WaitForPlayerInput": "Wait for player's input",``` ##### CoC7.WeaponSkillMain - -` "CoC7.WeaponSkillMain": "Main skill",` - +``` "CoC7.WeaponSkillMain": "Main skill",``` ##### CoC7.YouLostTime - -` "CoC7.YouLostTime": "You lost time in your attempt.",` - +``` "CoC7.YouLostTime": "You lost time in your attempt.",``` ##### CoC7.YouTakeNoDamage - -` "CoC7.YouTakeNoDamage": "You did not suffer any injury.",` - +``` "CoC7.YouTakeNoDamage": "You did not suffer any injury.",``` ##### CoC7.YouTakeSomeDamage - -` "CoC7.YouTakeSomeDamage": "You take {amount} points of damage.",` - +``` "CoC7.YouTakeSomeDamage": "You take {amount} points of damage.",``` ##### CoC7.combatCard.automaticSuccess - -` "CoC7.combatCard.automaticSuccess": "Automatic Success",` - +``` "CoC7.combatCard.automaticSuccess": "Automatic Success",``` ##### CoC7.rangeCombatCard.SurprisedTargetTitle - -` "CoC7.rangeCombatCard.SurprisedTargetTitle": "1 bonus die for surprised target",` - +``` "CoC7.rangeCombatCard.SurprisedTargetTitle": "1 bonus die for surprised target",``` ##### SETTINGS.ChaseShowTokenMovement - -` "SETTINGS.ChaseShowTokenMovement": "Show token movement.",` - +``` "SETTINGS.ChaseShowTokenMovement": "Show token movement.",``` ##### SETTINGS.ChaseShowTokenMovementHint - -` "SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.",` - +``` "SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.",``` ##### SETTINGS.DefaultDifficulty - -` "SETTINGS.DefaultDifficulty": "Default check difficulty",` - +``` "SETTINGS.DefaultDifficulty": "Default check difficulty",``` ##### SETTINGS.TitleChaseSettings - -` "SETTINGS.TitleChaseSettings": "Chase Settings",` +``` "SETTINGS.TitleChaseSettings": "Chase Settings",``` diff --git a/docs/en/manual.md b/docs/en/manual.md index 545f95c2..8e420ed3 100644 --- a/docs/en/manual.md +++ b/docs/en/manual.md @@ -12,15 +12,18 @@ The system automates most of the regular tasks and rules involved with running a Several parts of the actor sheets have pop up tooltips that trigger after two seconds, this delay can be changed in the settings -This documentation can be reopened under Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en] +This documentation can be reopened under Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en] + # Recent changes For a full list of changes checkout the [changelog](https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT/blob/develop/.github/CHANGELOG.md) on GitHub + - [Chases](chases.md) - [Actor importer](actor_importer.md) - added The Dhole's House JSON support + # Overview sections below If this is your first time it is recommends you also read the following sections. @@ -31,6 +34,7 @@ If this is your first time it is recommends you also read the following sections - Scene menu overview - [Creating your first investigator](first_investigator.md) + # How to use the system - [Actor importer](actor_importer.md) @@ -57,25 +61,28 @@ If this is your first time it is recommends you also read the following sections - Start Rest - XP Gain + # Actor overview -- _Character_ - A complete character, usually an investigator. -- _Container_ - An inventory container. -- _Creature_ - A more simple character, suitable for creatures. -- _NPC_ - A more simple character, suitable for NPCs. +- _Character_ - A complete character, usually an investigator. +- _Container_ - An inventory container. +- _Creature_ - A more simple character, suitable for creatures. +- _NPC_ - A more simple character, suitable for NPCs. + # Items overview -- _Archetype_ - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. +- _Archetype_ - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. - _Book_ - An arcane tome that can hold spells and character improvements. - _Item_ - A piece of equipment. -- _Occupation_ - A set of skills and other stats that implement a CoC occupation. -- _Setup_ - A set of default configurations for character, creature, or NPC creation. -- _Skill_ - A skill with a base percentage and some tags. +- _Occupation_ - A set of skills and other stats that implement a CoC occupation. +- _Setup_ - A set of default configurations for character, creature, or NPC creation. +- _Skill_ - A skill with a base percentage and some tags. - _Spell_ - A magic spell. -- _Status_ - An phobia or mania condition. -- _Talent_ -A special power for Pulp Cthulhu. These do not trigger automation in the system. -- _Weapon_ - An item with weapon statistics (this includes unarmed attacks). +- _Status_ - An phobia or mania condition. +- _Talent_ -A special power for Pulp Cthulhu. These do not trigger automation in the system. +- _Weapon_ - An item with weapon statistics (this includes unarmed attacks). + # Settings overview @@ -94,6 +101,7 @@ Click on System Settings - _Developer And Debug Settings_ - These settings can break your world when new updates are released so only use them on test worlds - _Roll Table Settings_ - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums + # Call of Cthulhu Scene Menu To access this menu you will need to have an active scene which can be created in the Scenes Directory. diff --git a/generate-translations.js b/generate-translations.js index 40f40eba..007785f3 100644 --- a/generate-translations.js +++ b/generate-translations.js @@ -1,4 +1,4 @@ -import del from './node_modules/del/index.js' +import { deleteAsync } from 'del' import glob from './node_modules/glob/glob.js' import jsonfile from './node_modules/jsonfile/index.js' import write from './node_modules/write/index.js' @@ -149,6 +149,6 @@ glob('./lang/*.json', {}, async function (er, files) { }) write('./.github/ABANDONED.md', output) } else { - del('./.github/ABANDONED.md') + deleteAsync('./.github/ABANDONED.md') } }) diff --git a/module/active-effect.js b/module/active-effect.js index 043f367d..e26cfe46 100644 --- a/module/active-effect.js +++ b/module/active-effect.js @@ -1,4 +1,4 @@ -/* global ActiveEffect, game */ +/* global ActiveEffect, foundry, game, Roll */ export default class CoC7ActiveEffect extends ActiveEffect { /** @inheritdoc */ @@ -75,14 +75,15 @@ export default class CoC7ActiveEffect extends ActiveEffect { else update = current + String(value) } break - case 'number': + case 'number':{ const n = Number.fromString(value) if (!isNaN(n)) update = current + n + } break - case 'Array': + case 'Array':{ const at = foundry.utils.getType(current[0]) - if (!current.length || foundry.utils.getType(value) === at) - update = current.concat([value]) + if (!current.length || foundry.utils.getType(value) === at) { update = current.concat([value]) } + } } if (update !== null) foundry.utils.setProperty(actor.data, key, update) return update @@ -227,7 +228,7 @@ export default class CoC7ActiveEffect extends ActiveEffect { function parse (str) { try { - return eval(str) + return new Roll(str).evaluate({ async: false }).total } catch (e) { return NaN } diff --git a/module/actors/actor.js b/module/actors/actor.js index 6a1faa6d..455caa29 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -1,4 +1,4 @@ -/* global Actor, CONFIG, CONST, Dialog, Die, duplicate, game, getProperty, Hooks, mergeObject, Roll, TextEditor, Token, ui */ +/* global Actor, CONFIG, CONST, Dialog, Die, duplicate, foundry, game, getProperty, Hooks, mergeObject, Roll, TextEditor, Token, ui */ import { COC7 } from '../config.js' import { CoC7ChatMessage } from '../apps/coc7-chat-message.js' @@ -110,10 +110,14 @@ export class CoCActor extends Actor { if (typeof this.data.data.attribs.san.dailyLimit === 'undefined') { if (this.data.data.attribs.san.oneFifthSanity) { const s = this.data.data.attribs.san.oneFifthSanity.split('/') - if (s[1] && !isNaN(Number(s[1]))) + if (s[1] && !isNaN(Number(s[1]))) { this.data.data.attribs.san.dailyLimit = Number(s[1]) - else this.data.data.attribs.san.dailyLimit = 0 - } else this.data.data.attribs.san.dailyLimit = 0 + } else { + this.data.data.attribs.san.dailyLimit = 0 + } + } else { + this.data.data.attribs.san.dailyLimit = 0 + } } // return computed values or fixed values if not auto. @@ -171,7 +175,7 @@ export class CoCActor extends Actor { */ prepareDerivedData () { super.prepareDerivedData() - //Set hpMax, mpMax, sanMax, mov, db, build. This is to allow calculation of derived value with modifed characteristics. + // Set hpMax, mpMax, sanMax, mov, db, build. This is to allow calculation of derived value with modifed characteristics. this.data.data.attribs.mov.value = this.rawMov this.data.data.attribs.db.value = this.rawDb this.data.data.attribs.build.value = this.rawBuild @@ -185,15 +189,15 @@ export class CoCActor extends Actor { this.data.data.attribs.san.max = this.rawSanMax if (this.san === null) this.data.data.attribs.san.value = this.rawSanMax - //Apply effects to automaticaly calculated values. + // Apply effects to automaticaly calculated values. const filterMatrix = [] - if( this.data.data.attribs.hp.auto) filterMatrix.push( 'data.attribs.hp.max') - if( this.data.data.attribs.mp.auto) filterMatrix.push( 'data.attribs.mp.max') - if( this.data.data.attribs.san.auto) filterMatrix.push( 'data.attribs.san.max') - if( this.data.data.attribs.mov.auto) filterMatrix.push( 'data.attribs.mov.value') - if( this.data.data.attribs.db.auto) filterMatrix.push( 'data.attribs.db.value') - if( this.data.data.attribs.build.auto) filterMatrix.push( 'data.attribs.build.value') + if (this.data.data.attribs.hp.auto) filterMatrix.push('data.attribs.hp.max') + if (this.data.data.attribs.mp.auto) filterMatrix.push('data.attribs.mp.max') + if (this.data.data.attribs.san.auto) filterMatrix.push('data.attribs.san.max') + if (this.data.data.attribs.mov.auto) filterMatrix.push('data.attribs.mov.value') + if (this.data.data.attribs.db.auto) filterMatrix.push('data.attribs.db.value') + if (this.data.data.attribs.build.auto) filterMatrix.push('data.attribs.build.value') const changes = this.effects.reduce((changes, e) => { if (e.data.disabled || e.isSuppressed) return changes @@ -211,16 +215,13 @@ export class CoCActor extends Actor { const selectChanges = changes.filter(e => filterMatrix.includes(e.key)) // Apply all changes - for (let change of selectChanges) { + for (const change of selectChanges) { change.effect.apply(this, change) } - if (this.hpMax && this.hpMax < this.hp) - this.data.data.attribs.hp.value = this.hpMax - if (this.mpMax && this.mpMax < this.mp) - this.data.data.attribs.mp.value = this.mpMax - if (this.sanMax && this.sanMax < this.san) - this.data.data.attribs.san.value = this.sanMax + if (this.hpMax && this.hpMax < this.hp) { this.data.data.attribs.hp.value = this.hpMax } + if (this.mpMax && this.mpMax < this.mp) { this.data.data.attribs.mp.value = this.mpMax } + if (this.sanMax && this.sanMax < this.san) { this.data.data.attribs.san.value = this.sanMax } } /** @override */ @@ -344,7 +345,7 @@ export class CoCActor extends Actor { this.data.data.characteristics )) { characteristics[key] = { - key: key, + key, shortName: game.i18n.localize(value.short), label: game.i18n.localize(value.label), value: value.value, @@ -450,8 +451,8 @@ export class CoCActor extends Actor { if (!realTime) return result this.setCondition(COC7.status.tempoInsane, { - realTime: realTime, - duration: duration + realTime, + duration }) // const effect = this.effects.get( effectData._id); @@ -488,14 +489,14 @@ export class CoCActor extends Actor { name: skillName, type: 'skill', data: { - value: value, - skillName: skillName, + value, + skillName, specialization: '', properties: { special: false, - rarity: rarity, - push: push, - combat: combat + rarity, + push, + combat } } } @@ -682,7 +683,7 @@ export class CoCActor extends Actor { name: itemName, type: 'item', data: { - quantity: quantity + quantity } } const created = await this.createEmbeddedDocuments('Item', [data], { @@ -816,7 +817,7 @@ export class CoCActor extends Actor { ? duplicate(this.data.data.biography) : [] bio.push({ - title: title, + title, value: null }) await this.update({ 'data.biography': bio }) @@ -1494,7 +1495,7 @@ export class CoCActor extends Actor { game.system.template.Actor.templates.characteristics.characteristics )) { characteristics.push({ - key: key, + key, shortName: game.i18n.localize(value.short), label: game.i18n.localize(value.label) }) @@ -1515,7 +1516,7 @@ export class CoCActor extends Actor { key === charName.toLowerCase() ) { return { - key: key, + key, shortName: game.i18n.localize(value.short), label: game.i18n.localize(value.label), value: value.value @@ -1875,8 +1876,7 @@ export class CoCActor extends Actor { async setMp (value) { if (value < 0) value = 0 - if (value > parseInt(this.data.data.attribs.mp.max)) - value = parseInt(this.data.data.attribs.mp.max) + if (value > parseInt(this.data.data.attribs.mp.max)) { value = parseInt(this.data.data.attribs.mp.max) } return await this.update({ 'data.attribs.mp.value': value }) } @@ -1985,8 +1985,7 @@ export class CoCActor extends Actor { async setSan (value) { if (value < 0) value = 0 - if (value > this.data.data.attribs.san.max) - value = this.data.data.attribs.san.max + if (value > this.data.data.attribs.san.max) { value = this.data.data.attribs.san.max } const loss = parseInt(this.data.data.attribs.san.value) - value if (loss > 0) { @@ -2748,7 +2747,7 @@ export class CoCActor extends Actor { 'CoC7.SanGained', { results: `${augmentSANDie.values[0]} + ${augmentSANDie.values[1]}`, - sanGained: sanGained, + sanGained, skill: item.data.name, skillValue: skillValue + augmentDie.total } @@ -2811,11 +2810,11 @@ export class CoCActor extends Actor { message += '

    ' const speaker = { actor: this } await chatHelper.createMessage(skillsRolled ? title : '', message, { - speaker: speaker + speaker }) this.onlyRunOncePerSession = true } - return { failure: failure, success: success } + return { failure, success } } async developLuck (fastForward = false) { @@ -2861,7 +2860,7 @@ export class CoCActor extends Actor { if (!fastForward) { message += '

    ' const speaker = { actor: this } - await chatHelper.createMessage(title, message, { speaker: speaker }) + await chatHelper.createMessage(title, message, { speaker }) } } @@ -2898,7 +2897,7 @@ export class CoCActor extends Actor { }) } const speaker = { actor: this._id } - await chatHelper.createMessage(title, message, { speaker: speaker }) + await chatHelper.createMessage(title, message, { speaker }) await skill.unflagForDevelopement() } @@ -2974,7 +2973,7 @@ export class CoCActor extends Actor { custom.flags.CoC7.realTime = realTime custom.flags = { CoC7: { - realTime: realTime + realTime } } if (duration !== null && typeof duration !== 'undefined') { @@ -3304,8 +3303,7 @@ export class CoCActor extends Actor { async setHp (value) { if (value < 0) value = 0 - if (value > this.data.data.attribs.san.max) - value = this.data.data.attribs.san.max + if (value > this.data.data.attribs.san.max) { value = this.data.data.attribs.san.max } const healthBefore = this.hp let damageTaken // is healing diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 13dee913..284a5947 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -1,4 +1,4 @@ -/* global $, ActorSheet, ChatMessage, CONST, Dialog, FormData, game, getProperty, Hooks, Item, mergeObject, Roll, TextEditor, ui */ +/* global $, ActorSheet, ChatMessage, CONST, Dialog, FormData, foundry, game, getProperty, Hooks, Item, mergeObject, Roll, TextEditor, ui */ import { RollDialog } from '../../apps/roll-dialog.js' import { CoC7ChatMessage } from '../../apps/coc7-chat-message.js' @@ -288,7 +288,6 @@ export class CoC7ActorSheet extends ActorSheet { if (item.data.value) { // This should be part of migration or done at init ! // Was done when skill value was changed to base + adjustement - const value = item.data.value const exp = item.data.adjustments?.experience ? parseInt(item.data.adjustments.experience) : 0 @@ -934,8 +933,8 @@ export class CoC7ActorSheet extends ActorSheet { game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '' }) } @@ -974,8 +973,8 @@ export class CoC7ActorSheet extends ActorSheet { game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '' }) } @@ -1017,8 +1016,8 @@ export class CoC7ActorSheet extends ActorSheet { game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '' }) } @@ -1044,8 +1043,8 @@ export class CoC7ActorSheet extends ActorSheet { (game.settings.get('CoC7', 'stanbyGMRolls') && sheet.actor.hasPlayerOwner ? game.i18n.format('CoC7.ToolTipKeeperStandbySkill', { - name: sheet.actor.name - }) + name: sheet.actor.name + }) : '') }) } @@ -1149,7 +1148,7 @@ export class CoC7ActorSheet extends ActorSheet { message.actorTo = await new Promise(resolve => { const dlg = new Dialog({ title: game.i18n.localize('CoC7.MessageTitleSelectUserToGiveTo'), - content: content, + content, buttons: { confirm: { label: game.i18n.localize('CoC7.Validate'), @@ -1292,7 +1291,6 @@ export class CoC7ActorSheet extends ActorSheet { async _onResetCounter (event) { event.preventDefault() - const counter = event.currentTarget.dataset.counter await this.actor.resetDailySanity() } @@ -1646,7 +1644,7 @@ export class CoC7ActorSheet extends ActorSheet { const range = event.currentTarget.closest('.weapon-damage').dataset.range const damageChatCard = new DamageCard({ fastForward: event.shiftKey, - range: range + range }) damageChatCard.actorKey = this.actor.tokenKey damageChatCard.itemId = itemId @@ -1662,7 +1660,7 @@ export class CoC7ActorSheet extends ActorSheet { const data = { rollType: CoC7ChatMessage.ROLL_TYPE_SKILL, cardType: CoC7ChatMessage.CARD_TYPE_OPPOSED, - event: event, + event, actor: this.actor } if (event.currentTarget.classList.contains('characteristic-label')) { @@ -1689,7 +1687,7 @@ export class CoC7ActorSheet extends ActorSheet { CoC7ChatMessage.trigger({ rollType: CoC7ChatMessage.ROLL_TYPE_CHARACTERISTIC, cardType: CoC7ChatMessage.CARD_TYPE_NORMAL, - event: event, + event, actor: this.actor }) } @@ -1724,7 +1722,7 @@ export class CoC7ActorSheet extends ActorSheet { event.altKey && attrib === 'san' ? CoC7ChatMessage.CARD_TYPE_SAN_CHECK : CoC7ChatMessage.CARD_TYPE_NORMAL, - event: event, + event, actor: this.actor }) } @@ -1740,7 +1738,7 @@ export class CoC7ActorSheet extends ActorSheet { CoC7ChatMessage.trigger({ rollType: CoC7ChatMessage.ROLL_TYPE_SKILL, cardType: CoC7ChatMessage.CARD_TYPE_NORMAL, - event: event, + event, actor: this.actor }) } @@ -1777,7 +1775,7 @@ export class CoC7ActorSheet extends ActorSheet { const name = event?.currentTarget?.name if (name && overrides && overrides[name]) { ui.notifications.warn( - game.i18n.format('CoC7.EffectAppliedCantOverride', { name: name }) + game.i18n.format('CoC7.EffectAppliedCantOverride', { name }) ) } @@ -1831,14 +1829,14 @@ export class CoC7ActorSheet extends ActorSheet { if (event.currentTarget.classList.contains('attribute-value')) { // TODO : check why SAN only ? if (event.currentTarget.name === 'data.attribs.san.value') { - const value = await this.actor.setSan( + await this.actor.setSan( parseInt(event.currentTarget.value) ) this.render(true) return } if (event.currentTarget.name === 'data.attribs.hp.value') { - const value = await this.actor.setHp( + await this.actor.setHp( parseInt(event.currentTarget.value) ) this.render(true) diff --git a/module/actors/sheets/character.js b/module/actors/sheets/character.js index f57b861c..fad80a69 100644 --- a/module/actors/sheets/character.js +++ b/module/actors/sheets/character.js @@ -418,11 +418,12 @@ export class CoC7CharacterSheet extends CoC7ActorSheet { '--other-sheet-bg', "url( './assets/images/void.webp')" ) - } else + } else { sheet.element.css( '--other-sheet-bg', game.settings.get('CoC7', 'artWorkOtherSheetBackground') ) + } } if (game.settings.get('CoC7', 'artworkSheetImage')) { @@ -434,11 +435,12 @@ export class CoC7CharacterSheet extends CoC7ActorSheet { '--main-sheet-image', "url( './assets/images/void.webp')" ) - } else + } else { sheet.element.css( '--main-sheet-image', game.settings.get('CoC7', 'artworkSheetImage') ) + } } if (game.settings.get('CoC7', 'artworkFrontColor')) { diff --git a/module/actors/sheets/container.js b/module/actors/sheets/container.js index c9587a66..be94d91f 100644 --- a/module/actors/sheets/container.js +++ b/module/actors/sheets/container.js @@ -186,7 +186,7 @@ export class CoC7ContainerSheet extends ActorSheet { content = content + '

    ' await Dialog.prompt({ title: game.i18n.localize('CoC7.MessageTitleSelectUserToGiveTo'), - content: content, + content, callback: html => { const formData = new FormData(html[0].querySelector('#selectform')) for (const [name, value] of formData) { diff --git a/module/actors/vehicle/data.js b/module/actors/vehicle/data.js index 37d2e8df..06cc695c 100644 --- a/module/actors/vehicle/data.js +++ b/module/actors/vehicle/data.js @@ -50,7 +50,7 @@ export class CoC7Vehicle extends CoCActor { get rawDb () { return this.db } - + get db () { const db = parseInt(this.data.data.attribs.db?.value) return isNaN(db) ? null : db @@ -59,7 +59,7 @@ export class CoC7Vehicle extends CoCActor { get rawMov () { return this.mov } - + get mov () { const mov = parseInt(this.data.data.attribs.mov?.value) return isNaN(mov) ? null : mov diff --git a/module/apps/actor-importer.js b/module/apps/actor-importer.js index 4136b354..f1e1787f 100644 --- a/module/apps/actor-importer.js +++ b/module/apps/actor-importer.js @@ -173,7 +173,7 @@ export class CoC7ActorImporter { maxLoops-- text = text.trim() if ( - (dodge = this.check('weaponDodge', { saveKeys: false, text: text })) + (dodge = this.check('weaponDodge', { saveKeys: false, text })) ) { text = text.replace(dodge['-source'], '\n') if (typeof this.parsed.skills === 'undefined') { @@ -187,7 +187,7 @@ export class CoC7ActorImporter { } else if ( (weapon = this.check('weapon', { saveKeys: false, - text: text, + text, requiredGroup: lastPercent === false ? 'percentage' : false })) ) { @@ -262,7 +262,7 @@ export class CoC7ActorImporter { const damages = damage.split('/') const isShotgun = damages.length === 3 const data = { - name: name, + name, type: 'weapon', data: { skill: { @@ -327,7 +327,7 @@ export class CoC7ActorImporter { do { maxLoops-- text = text.trim() - skill = this.check('skill', { saveKeys: false, text: text }) + skill = this.check('skill', { saveKeys: false, text }) if (skill) { text = text.replace(skill['-source'], '\n') if (typeof this.parsed[key] === 'undefined') { diff --git a/module/apps/char-roll-dialog.js b/module/apps/char-roll-dialog.js index ec998441..f0a43caf 100644 --- a/module/apps/char-roll-dialog.js +++ b/module/apps/char-roll-dialog.js @@ -99,7 +99,7 @@ export class CharacRollDialog extends Dialog { roll.toMessage({ flavor: game.i18n.format('CoC7.MessageRollingCharacteristic', { label: this.data.data.characteristics.list[key].label, - formula: formula + formula }) }) input.value = roll.total @@ -230,8 +230,8 @@ export class CharacRollDialog extends Dialog { { title: data.title, content: html, - data: data, - rolled: rolled, + data, + rolled, buttons: {}, close: () => { if (data.validate) return resolve(true) diff --git a/module/apps/char-selection-dialog.js b/module/apps/char-selection-dialog.js index b9fcd78e..a7753cc5 100644 --- a/module/apps/char-selection-dialog.js +++ b/module/apps/char-selection-dialog.js @@ -25,7 +25,7 @@ export class CharacSelectDialog extends Dialog { { title: data.title, content: html, - data: data, + data, buttons: {}, close: () => { if (data.selected) return resolve(data.selected) diff --git a/module/apps/coc7-chat-message.js b/module/apps/coc7-chat-message.js index 47c29f6b..874d2b5f 100644 --- a/module/apps/coc7-chat-message.js +++ b/module/apps/coc7-chat-message.js @@ -411,7 +411,7 @@ export class CoC7ChatMessage { SanCheckCard.create( config.options.actor.actorKey, - { sanMin: sanMin, sanMax: sanMax, sanReason: sanReason }, + { sanMin, sanMax, sanReason }, { sanModifier: config.dialogOptions.modifier, sanDifficulty: config.dialogOptions.difficulty, diff --git a/module/apps/dholehouse_importer.js b/module/apps/dholehouse_importer.js index c56a7a66..3787f8c3 100644 --- a/module/apps/dholehouse_importer.js +++ b/module/apps/dholehouse_importer.js @@ -281,7 +281,7 @@ export class CoC7DholeHouseActorImporter { }, range: { normal: { - damage: damage + damage } }, ammo: weapon.ammo, @@ -289,7 +289,7 @@ export class CoC7DholeHouseActorImporter { properties: { melee: skill?.data.data.properties?.fighting ?? false, rngd: skill?.data.data.properties?.firearm ?? false, - addb: addb + addb } } } diff --git a/module/apps/parser.js b/module/apps/parser.js index dd3c9127..ab5fe156 100644 --- a/module/apps/parser.js +++ b/module/apps/parser.js @@ -302,7 +302,7 @@ export class CoC7Parser { dataset: { check: type }, icon: null, blind: false, - name: name + name } const matches = options.matchAll(/[^,]+/gi) @@ -353,7 +353,7 @@ export class CoC7Parser { !data.dataset.modifier ? '' : 'Modif' }`, { - difficulty: difficulty, + difficulty, modifier: data.dataset.modifier, name: humanName } @@ -366,7 +366,7 @@ export class CoC7Parser { !data.dataset.modifier ? '' : 'Modif' }`, { - difficulty: difficulty, + difficulty, modifier: data.dataset.modifier, sanMin: data.dataset.sanMin, sanMax: data.dataset.sanMax @@ -379,7 +379,7 @@ export class CoC7Parser { !data.dataset.modifier ? '' : 'Modif' }`, { - difficulty: difficulty, + difficulty, modifier: data.dataset.modifier, name: data.dataset.name } diff --git a/module/apps/point-selection-dialog.js b/module/apps/point-selection-dialog.js index 80575ef7..b647d17f 100644 --- a/module/apps/point-selection-dialog.js +++ b/module/apps/point-selection-dialog.js @@ -60,7 +60,7 @@ export class PointSelectDialog extends Dialog { { title: data.title, content: html, - data: data, + data, buttons: {}, close: () => { if (data.resolved) return resolve(data) diff --git a/module/apps/roll-dialog.js b/module/apps/roll-dialog.js index 55abd9d3..650c20c7 100644 --- a/module/apps/roll-dialog.js +++ b/module/apps/roll-dialog.js @@ -32,7 +32,7 @@ export class RollDialog { game.settings.get('CoC7', 'allowFlatThresholdModifier') && !options.disableFlatThresholdModifier, difficulty: CoC7Check.difficultyLevel, - unknownDifficultyDefault: unknownDifficultyDefault, + unknownDifficultyDefault, hideDifficulty: options.hideDifficulty ?? false, options } diff --git a/module/apps/skill-selection-dialog.js b/module/apps/skill-selection-dialog.js index 4b4d12a3..aa9ca6c9 100644 --- a/module/apps/skill-selection-dialog.js +++ b/module/apps/skill-selection-dialog.js @@ -35,7 +35,7 @@ export class SkillSelectDialog extends Dialog { { title: data.title, content: html, - data: data, + data, buttons: {}, close: () => { if (!data.added >= data.optionsCount) return resolve(false) diff --git a/module/apps/skill-spec-select-dialog.js b/module/apps/skill-spec-select-dialog.js index e3b70330..4cd49ca6 100644 --- a/module/apps/skill-spec-select-dialog.js +++ b/module/apps/skill-spec-select-dialog.js @@ -11,16 +11,16 @@ export class SkillSpecSelectDialog { 'systems/CoC7/templates/apps/skill-spec-select.html', { hasSkills: skills.length > 0, - skills: skills, + skills, base: baseValue, - name: name + name } ) return new Promise(resolve => { let formData = null const dlg = new Dialog({ title: name - ? game.i18n.format('CoC7.SkillSelectBase', { name: name }) + ? game.i18n.format('CoC7.SkillSelectBase', { name }) : game.i18n.format('CoC7.SkillSpecSelectTitle', { specialization: specializationName }), diff --git a/module/apps/skill-value-dialog.js b/module/apps/skill-value-dialog.js index b4bcdcd0..5211d33e 100644 --- a/module/apps/skill-value-dialog.js +++ b/module/apps/skill-value-dialog.js @@ -4,12 +4,12 @@ export class SkillValueDialog { static async create (name = null, baseValue = null) { const html = await renderTemplate( 'systems/CoC7/templates/apps/skill-value.html', - { base: baseValue, name: name } + { base: baseValue, name } ) return new Promise(resolve => { let formData = null const dlg = new Dialog({ - title: game.i18n.format('CoC7.SkillValue', { name: name }), + title: game.i18n.format('CoC7.SkillValue', { name }), content: html, buttons: { validate: { diff --git a/module/chat.js b/module/chat.js index dde015f4..7d4514f9 100644 --- a/module/chat.js +++ b/module/chat.js @@ -762,7 +762,7 @@ export class CoC7Chat { detailedResultPlaceHolder.innerText = game.i18n.format( 'CoC7.RollResult.LuckSpendText', { - luckAmount: luckAmount, + luckAmount, successLevel: game.i18n.localize('CoC7.RegularDifficulty') } ) @@ -773,7 +773,7 @@ export class CoC7Chat { detailedResultPlaceHolder.innerText = game.i18n.format( 'CoC7.RollResult.LuckSpendText', { - luckAmount: luckAmount, + luckAmount, successLevel: game.i18n.localize('CoC7.HardDifficulty') } ) @@ -784,7 +784,7 @@ export class CoC7Chat { detailedResultPlaceHolder.innerText = game.i18n.format( 'CoC7.RollResult.LuckSpendText', { - luckAmount: luckAmount, + luckAmount, successLevel: game.i18n.localize('CoC7.ExtremeDifficulty') } ) @@ -795,7 +795,7 @@ export class CoC7Chat { detailedResultPlaceHolder.innerText = game.i18n.format( 'CoC7.RollResult.LuckSpendText', { - luckAmount: luckAmount, + luckAmount, successLevel: game.i18n.localize('CoC7.CriticalDifficulty') } ) diff --git a/module/chat/card-actor.js b/module/chat/card-actor.js index 2e57573f..ded8a0fb 100644 --- a/module/chat/card-actor.js +++ b/module/chat/card-actor.js @@ -147,8 +147,8 @@ export class ChatCardActor { const chatData = { user: user.id, - speaker: speaker, - flavor: flavor, + speaker, + flavor, content: message } diff --git a/module/chat/cards/chase-obstacle.js b/module/chat/cards/chase-obstacle.js index 8e553284..dd9e144e 100644 --- a/module/chat/cards/chase-obstacle.js +++ b/module/chat/cards/chase-obstacle.js @@ -89,7 +89,7 @@ export class ChaseObstacleCard extends EnhancedChatCard { } data.strings.checkRollRequest = game.i18n.format('CoC7.AskRoll', { name: checkName, - value: value + value }) if (data.data.bonusDice !== 0) { if (data.data.bonusDice > 0) { @@ -966,7 +966,7 @@ export class ChaseObstacleCard extends EnhancedChatCard { old: this.obstacle[key], new: newObstacle[key], name: names[key], - key: key + key } if (validate) this.data.validation[key] = true } diff --git a/module/chat/cards/combined-roll.js b/module/chat/cards/combined-roll.js index 9e12f0a4..9d1ca112 100644 --- a/module/chat/cards/combined-roll.js +++ b/module/chat/cards/combined-roll.js @@ -151,14 +151,14 @@ export class CombinedCheckCard extends RollCard { } } - const roll = await CoC7Dice.combinedRoll({ pool: pool }) + const roll = await CoC7Dice.combinedRoll({ pool }) roll.initiator = game.user.id const data = { type: this.defaultConfig.type, action: 'assignRoll', fromGM: game.user.isGM, - roll: roll + roll } AudioHelper.play({ src: CONFIG.sounds.dice }, true) card.process(data) @@ -176,7 +176,7 @@ export class CombinedCheckCard extends RollCard { const data = { type: this.defaultConfig.type, action: 'updateRoll', - rank: rank, + rank, fromGM: game.user.isGM, roll: { initiator: game.user.id diff --git a/module/chat/cards/opposed-roll.js b/module/chat/cards/opposed-roll.js index a53ec297..628ec6e3 100644 --- a/module/chat/cards/opposed-roll.js +++ b/module/chat/cards/opposed-roll.js @@ -209,7 +209,7 @@ export class OpposedCheckCard extends RollCard { const data = { type: this.config.type, action: 'updateRoll', - rank: rank, + rank, fromGM: game.user.isGM } if (!game.user.isGM) data.roll = this.rolls[rank].JSONRollData @@ -285,7 +285,7 @@ export class OpposedCheckCard extends RollCard { const data = { type: this.defaultConfig.type, action: 'updateRoll', - rank: rank, + rank, fromGM: game.user.isGM } if (!game.user.isGM) data.roll = card.rolls[rank].JSONRollData diff --git a/module/chat/cards/san-check.js b/module/chat/cards/san-check.js index 043b4ed8..d8b9a6e7 100644 --- a/module/chat/cards/san-check.js +++ b/module/chat/cards/san-check.js @@ -449,10 +449,10 @@ export class SanCheckCard extends ChatCardActor { for (const t of targets) { if (t.actor.isToken) { SanCheckCard.create(t.actor.tokenKey, sanData, { - fastForward: fastForward + fastForward }) } else { - SanCheckCard.create(t.actor.id, sanData, { fastForward: fastForward }) + SanCheckCard.create(t.actor.id, sanData, { fastForward }) } } } else { diff --git a/module/chat/combat/melee-initiator.js b/module/chat/combat/melee-initiator.js index 409f2d9f..ec3add28 100644 --- a/module/chat/combat/melee-initiator.js +++ b/module/chat/combat/melee-initiator.js @@ -250,7 +250,7 @@ export class CoC7MeleeInitiator extends ChatCardActor { resulDetails.innerText = game.i18n.format( 'CoC7.RollResult.LuckSpendText', { - luckAmount: luckAmount, + luckAmount, successLevel: game.i18n.localize('CoC7.RegularDifficulty') } ) @@ -261,7 +261,7 @@ export class CoC7MeleeInitiator extends ChatCardActor { resulDetails.innerText = game.i18n.format( 'CoC7.RollResult.LuckSpendText', { - luckAmount: luckAmount, + luckAmount, successLevel: game.i18n.localize('CoC7.HardDifficulty') } ) @@ -273,7 +273,7 @@ export class CoC7MeleeInitiator extends ChatCardActor { resulDetails.innerText = game.i18n.format( 'CoC7.RollResult.LuckSpendText', { - luckAmount: luckAmount, + luckAmount, successLevel: game.i18n.localize('CoC7.ExtremeDifficulty') } ) @@ -285,7 +285,7 @@ export class CoC7MeleeInitiator extends ChatCardActor { resulDetails.innerText = game.i18n.format( 'CoC7.RollResult.LuckSpendText', { - luckAmount: luckAmount, + luckAmount, successLevel: game.i18n.localize('CoC7.CriticalDifficulty') } ) diff --git a/module/chat/combat/melee-target.js b/module/chat/combat/melee-target.js index 747f7705..d5215f78 100644 --- a/module/chat/combat/melee-target.js +++ b/module/chat/combat/melee-target.js @@ -196,7 +196,7 @@ export class CoC7MeleeTarget extends ChatCardActor { title: game.i18n.localize( 'CoC7.MessageTitleSelectSingleUserForTarget' ), - content: content, + content, callback: html => { const formData = new FormData( html[0].querySelector('#selectform') @@ -433,7 +433,7 @@ export class CoC7MeleeTarget extends ChatCardActor { resulDetails.innerText = game.i18n.format( 'CoC7.RollResult.LuckSpendText', { - luckAmount: luckAmount, + luckAmount, successLevel: game.i18n.localize('CoC7.RegularDifficulty') } ) @@ -444,7 +444,7 @@ export class CoC7MeleeTarget extends ChatCardActor { resulDetails.innerText = game.i18n.format( 'CoC7.RollResult.LuckSpendText', { - luckAmount: luckAmount, + luckAmount, successLevel: game.i18n.localize('CoC7.HardDifficulty') } ) @@ -455,7 +455,7 @@ export class CoC7MeleeTarget extends ChatCardActor { resulDetails.innerText = game.i18n.format( 'CoC7.RollResult.LuckSpendText', { - luckAmount: luckAmount, + luckAmount, successLevel: game.i18n.localize('CoC7.ExtremeDifficulty') } ) @@ -466,7 +466,7 @@ export class CoC7MeleeTarget extends ChatCardActor { resulDetails.innerText = game.i18n.format( 'CoC7.RollResult.LuckSpendText', { - luckAmount: luckAmount, + luckAmount, successLevel: game.i18n.localize('CoC7.CriticalDifficulty') } ) diff --git a/module/chat/concheck.js b/module/chat/concheck.js index f036bce4..a026cb49 100644 --- a/module/chat/concheck.js +++ b/module/chat/concheck.js @@ -113,7 +113,7 @@ export class CoC7ConCheck { const chatData = { user: user.id, - speaker: speaker, + speaker, flavor: this.flavor, content: htmlElement.outerHTML } diff --git a/module/chat/interactive-chat-card.js b/module/chat/interactive-chat-card.js index c9f438bc..f064b26e 100644 --- a/module/chat/interactive-chat-card.js +++ b/module/chat/interactive-chat-card.js @@ -119,7 +119,7 @@ export class InteractiveChatCard { const button = event.currentTarget // button.style.display = 'none' //Avoid multiple push const action = button.dataset.action - if (this[action]) this[action]({ event: event, update: true }) + if (this[action]) this[action]({ event, update: true }) } /** diff --git a/module/chat/rangecombat.js b/module/chat/rangecombat.js index 129a6788..84b7bc78 100644 --- a/module/chat/rangecombat.js +++ b/module/chat/rangecombat.js @@ -343,8 +343,8 @@ export class CoC7RangeInitiator { return { level: difficulty, name: difficultyName, - modifier: modifier, - damage: damage, + modifier, + damage, impossible: difficulty === CoC7Check.difficultyLevel.impossible } } @@ -785,14 +785,14 @@ export class CoC7RangeInitiator { this.damage.push({ targetKey: h.roll.targetKey, - targetName: targetName, + targetName, rolls: damageRolls, - total: total, - critical: critical, + total, + critical, dealt: false, resultString: game.i18n.format('CoC7.rangeCombatDamage', { name: targetName, - total: total + total }) }) } diff --git a/module/chat/sancheck.js b/module/chat/sancheck.js index abfe2914..08ed5af8 100644 --- a/module/chat/sancheck.js +++ b/module/chat/sancheck.js @@ -114,13 +114,13 @@ export class CoC7SanCheck { const speaker = chatHelper.getSpeakerFromKey(tokenKey) const title = game.i18n.format('CoC7.SANCheckTitle', { name: speaker.alias, - sanMin: sanMin, - sanMax: sanMax + sanMin, + sanMax }) chatHelper.createMessage( null, `@coc7.sanloss[sanMax:${sanMax},sanMin:${sanMin}]{${title}}`, - { speaker: speaker } + { speaker } ) } else ui.notifications.error('No target selected') } @@ -176,7 +176,7 @@ export class CoC7SanCheck { const chatData = { user: user.id, - speaker: speaker, + speaker, flavor: this.flavor, content: htmlElement.outerHTML } diff --git a/module/check.js b/module/check.js index 6b1a9e9a..011f1655 100644 --- a/module/check.js +++ b/module/check.js @@ -366,7 +366,7 @@ export class CoC7Check { `CoC7.LinkCheck${!difficulty ? '' : 'Diff'}${ !this._diceModifier ? '' : 'Modif' }`, - { difficulty: difficulty, modifier: modifier, name: this.name } + { difficulty, modifier, name: this.name } ) } @@ -484,7 +484,7 @@ export class CoC7Check { success: true, cssClass: this.isCritical ? 'critical' : 'success', hint: successHint, - icons: icons + icons } } else { const icons = [] @@ -499,7 +499,7 @@ export class CoC7Check { success: false, cssClass: this.isFumble ? 'fumble' : 'failure', hint: failureHint, - icons: icons + icons } } } @@ -653,7 +653,7 @@ export class CoC7Check { !this._diceModifier ? '' : 'Modif' }`, { - difficulty: difficulty, + difficulty, modifier: this._diceModifier, name: this.name } @@ -1593,7 +1593,7 @@ export class CoC7Check { const chatData = { user: user.id, - speaker: speaker, + speaker, flavor: this.flavor, content: html, flags: { diff --git a/module/coc7.js b/module/coc7.js index 142f91e6..015920ac 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -136,7 +136,7 @@ Hooks.once('init', async function () { check: CoC7Utilities.checkMacro }, cards: { - DamageCard: DamageCard + DamageCard }, dev: { dice: { @@ -248,8 +248,8 @@ Hooks.on('createActiveEffect', (data, options, userId) => { } data.parent.setCondition(COC7.status.tempoInsane, { forceValue: true, - realTime: realTime, - duration: duration + realTime, + duration }) } break diff --git a/module/common/chatcardlib/src/chatcardlib.js b/module/common/chatcardlib/src/chatcardlib.js index 2d819c7c..3ac5a18f 100644 --- a/module/common/chatcardlib/src/chatcardlib.js +++ b/module/common/chatcardlib/src/chatcardlib.js @@ -215,7 +215,7 @@ export class EnhancedChatCard { { // user: userId, user: game.user.id, - speaker: speaker, + speaker, flavor: game.i18n.localize(this.options.title), content: htmlCardElement.outerHTML }, @@ -511,7 +511,7 @@ export class EnhancedChatCard { if (!formUpdate) return // If the form was updated we still update the card } if (this[action]) { - actionUpdate = await this[action]({ event: event, updateCard: false }) + actionUpdate = await this[action]({ event, updateCard: false }) } if (formUpdate || actionUpdate) await this.updateChatCard() diff --git a/module/dice.js b/module/dice.js index 36887dec..39b83f04 100644 --- a/module/dice.js +++ b/module/dice.js @@ -42,7 +42,7 @@ export class CoC7Dice { results: [] }, total: 0, - roll: roll + roll } if (rollMode) result.rollMode = rollMode @@ -125,7 +125,7 @@ export class CoC7Dice { bonusDice: [] }, unit: 0, - roll: roll + roll } let baseSet = false for (const d of roll.dice) { @@ -158,7 +158,7 @@ export class CoC7Dice { results: [] }, total: 0, - roll: roll + roll } const modif = parseInt(key, 10) let modifier = modif diff --git a/module/items/chase/data.js b/module/items/chase/data.js index 5c62d95b..8777c9ca 100644 --- a/module/items/chase/data.js +++ b/module/items/chase/data.js @@ -195,7 +195,7 @@ export class CoC7Chase extends CoC7Item { const participantsData = this.cleanParticipantList(list) return await this.update( { 'data.participants': participantsData }, - { render: render } + { render } ) } @@ -210,7 +210,7 @@ export class CoC7Chase extends CoC7Item { foundry.utils.mergeObject(participants[participantIndex], update, { overwrite: true }) - await this.updateParticipants(participants, { render: render }) + await this.updateParticipants(participants, { render }) } cleanParticipantList (list) { @@ -267,7 +267,7 @@ export class CoC7Chase extends CoC7Item { if (assistant.currentMovementActions < 1) { ui.notifications.error( game.i18n.format('CoC7.ParticipantNotEnoughMovement', { - assistantUuid: assistantUuid, + assistantUuid, actions: assistant.currentMovementActions }) ) @@ -283,7 +283,7 @@ export class CoC7Chase extends CoC7Item { ) await this.update( { 'data.participants': participantsData }, - { render: render } + { render } ) } @@ -293,7 +293,7 @@ export class CoC7Chase extends CoC7Item { if (!participant) { ui.notifications.error( game.i18n.format('CoC7.ParticipantUuidNotFound', { - participantUuid: participantUuid + participantUuid }) ) return undefined @@ -312,7 +312,7 @@ export class CoC7Chase extends CoC7Item { ) await this.update( { 'data.participants': participantsData }, - { render: render } + { render } ) } @@ -325,7 +325,7 @@ export class CoC7Chase extends CoC7Item { if (!participant) { ui.notifications.error( game.i18n.format('CoC7.ParticipantUuidNotFound', { - participantUuid: participantUuid + participantUuid }) ) return undefined @@ -340,7 +340,7 @@ export class CoC7Chase extends CoC7Item { if (participant.hasMaxBonusDice) { ui.notifications.error( game.i18n.format('CoC7.ErrorParticipantAtMaxBonus', { - participantUuid: participantUuid + participantUuid }) ) return @@ -363,7 +363,7 @@ export class CoC7Chase extends CoC7Item { ) await this.update( { 'data.participants': participantsData }, - { render: render } + { render } ) } @@ -377,7 +377,7 @@ export class CoC7Chase extends CoC7Item { if (!participant) { ui.notifications.error( game.i18n.format('CoC7.ParticipantUuidNotFound', { - participantUuid: participantUuid + participantUuid }) ) return undefined @@ -397,7 +397,7 @@ export class CoC7Chase extends CoC7Item { ) await this.update( { 'data.participants': participantsData }, - { render: render } + { render } ) } @@ -409,10 +409,10 @@ export class CoC7Chase extends CoC7Item { } = {}) { const activeParticipant = this.nextActiveParticipant const options = { - scrollToLocation: scrollToLocation, - activateLocation: activateLocation, - render: render, - html: html + scrollToLocation, + activateLocation, + render, + html } if (!activeParticipant) return this.activateParticipant(undefined, options) return this.activateParticipant(activeParticipant.uuid, options) @@ -428,11 +428,11 @@ export class CoC7Chase extends CoC7Item { } = {} ) { const dataUpdate = this.getActivateParticipantUpdateData(participantUuid, { - scrollToLocation: scrollToLocation, + scrollToLocation, activeLocation: activateLocation, - html: html + html }) - await this.update(dataUpdate, { render: render }) + await this.update(dataUpdate, { render }) } getActivateParticipantUpdateData ( @@ -458,7 +458,7 @@ export class CoC7Chase extends CoC7Item { if (activateLocation) { locationsDataUpdate = this.getActivateLocationUpdateData( participantLocation.uuid, - { scrollToLocation: scrollToLocation, html: html } + { scrollToLocation, html } ) } else if (scrollToLocation) { locationsDataUpdate = {} @@ -466,12 +466,12 @@ export class CoC7Chase extends CoC7Item { this.chaseTrackCurrentScrollPosition locationsDataUpdate['data.scroll.chaseTrack.to'] = this.getChaseTrackLocationScrollPosition(participantLocation.uuid, { - html: html + html }) } } else { locationsDataUpdate = this.getActivateLocationUpdateData(undefined, { - scrollToLocation: scrollToLocation + scrollToLocation }) } @@ -489,8 +489,8 @@ export class CoC7Chase extends CoC7Item { ) { const card = new ChaseObstacleCard({ chaseUuid: this.uuid, - locationUuid: locationUuid, - moveParticipant: moveParticipant, + locationUuid, + moveParticipant, forward: locationUuid !== this.activeLocation.uuid }) card.toMessage() @@ -515,7 +515,7 @@ export class CoC7Chase extends CoC7Item { } }) await this.updateParticipants(participants, { render: false }) - this.activateNextParticipantTurn({ render: render }) + this.activateNextParticipantTurn({ render }) } /** @override */ @@ -769,7 +769,7 @@ export class CoC7Chase extends CoC7Item { const updatedList = this.cleanLocationsList(list) await this.update( { 'data.locations.list': updatedList }, - { render: render } + { render } ) } @@ -782,7 +782,7 @@ export class CoC7Chase extends CoC7Item { foundry.utils.mergeObject(locations[locationIndex], update, { overwrite: true }) - await this.updateLocationsList(locations, { render: render }) + await this.updateLocationsList(locations, { render }) } cleanLocationsList (list) { @@ -833,7 +833,7 @@ export class CoC7Chase extends CoC7Item { newLocation.init = locations[locationIndex].init newLocation.active = true locations.splice(newLocationIndex, 0, newLocation) - return await this.updateLocationsList(locations, { render: render }) + return await this.updateLocationsList(locations, { render }) } async removeLocation (uuid, { render = true } = {}) { @@ -848,7 +848,7 @@ export class CoC7Chase extends CoC7Item { if (index < 0) index = 0 locations[index].active = true } - return await this.updateLocationsList(locations, { render: render }) + return await this.updateLocationsList(locations, { render }) } async activateLocation ( @@ -856,9 +856,9 @@ export class CoC7Chase extends CoC7Item { { scrollToLocation = true, render = true } = {} ) { const updateData = this.getActivateLocationUpdateData(locationUuid, { - scrollToLocation: scrollToLocation + scrollToLocation }) - await this.update(updateData, { render: render }) + await this.update(updateData, { render }) } getClearActiveLocationUpdateData ({ @@ -887,7 +887,7 @@ export class CoC7Chase extends CoC7Item { ) { if (!locationUuid) { return this.getClearActiveLocationUpdateData({ - scrollToLocation: scrollToLocation + scrollToLocation }) } const updateData = {} @@ -904,7 +904,7 @@ export class CoC7Chase extends CoC7Item { updateData['data.scroll.chaseTrack.from'] = this.chaseTrackCurrentScrollPosition updateData['data.scroll.chaseTrack.to'] = - this.getChaseTrackLocationScrollPosition(locationUuid, { html: html }) + this.getChaseTrackLocationScrollPosition(locationUuid, { html }) // await this.setchaseTrackScroll({ // from: this.chaseTrackCurrentScrollPosition, // to: this.chaseTrackActiveLocationScrollPosition @@ -982,15 +982,15 @@ export class CoC7Chase extends CoC7Item { ) { const locations = foundry.utils.duplicate(this.data.data.locations.list) const locationIndex = locations.findIndex(l => locationUuid === l.uuid) - locations[locationIndex].coordinates = { x: x, y: y, scene: sceneId } + locations[locationIndex].coordinates = { x, y, scene: sceneId } - return await this.updateLocationsList(locations, { render: render }) + return await this.updateLocationsList(locations, { render }) } async clearActiveLocationCoordinates ({ render = true } = {}) { if (this.activeLocation) { return await this.clearLocationCoordinates(this.activeLocation.uuid, { - render: render + render }) } } @@ -1000,7 +1000,7 @@ export class CoC7Chase extends CoC7Item { const locationIndex = locations.findIndex(l => locationUuid === l.uuid) delete locations[locationIndex].coordinates - return await this.updateLocationsList(locations, { render: render }) + return await this.updateLocationsList(locations, { render }) } // get activeParticipantHaveActiveLocationSkill (){ @@ -1093,7 +1093,7 @@ export class CoC7Chase extends CoC7Item { } }) await this.updateParticipants(newParticipantsData, { render: false }) - await this.updateLocationsList(locationsData, { render: render }) + await this.updateLocationsList(locationsData, { render }) } }) } @@ -1171,7 +1171,7 @@ export class CoC7Chase extends CoC7Item { ) { locationsData[locationIndex].participants.push(participant.uuid) } - await this.updateLocationsList(locationsData, { render: render }) + await this.updateLocationsList(locationsData, { render }) } } @@ -1268,8 +1268,8 @@ export class CoC7Chase extends CoC7Item { if (activateParticipant) { await this.activateParticipant(participantUuid, { - scrollToLocation: scrollToLocation, - activateLocation: activateLocation, + scrollToLocation, + activateLocation, render: false }) modified = true @@ -1277,7 +1277,7 @@ export class CoC7Chase extends CoC7Item { if (activateLocation && !activateParticipant) { await this.activateLocation(locations[destinationIndex].uuid, { - scrollToLocation: scrollToLocation, + scrollToLocation, render: false }) modified = true @@ -1384,8 +1384,8 @@ export class CoC7Chase extends CoC7Item { update.push({ _id: particpantDocument.id, - x: x, - y: y + x, + y }) // destination.participants?.forEach( pUuid =>{ @@ -1414,7 +1414,7 @@ export class CoC7Chase extends CoC7Item { } } - await this.updateLocationsList(locations, { render: render }) + await this.updateLocationsList(locations, { render }) } // Handle scrolling @@ -1430,7 +1430,7 @@ export class CoC7Chase extends CoC7Item { 'data.scroll.chaseTrack.to': undefined === to ? this.chaseTrackCurrentScrollPosition : to }, - { render: render } + { render } ) } diff --git a/module/items/chase/sheet.js b/module/items/chase/sheet.js index c722477c..2fced861 100644 --- a/module/items/chase/sheet.js +++ b/module/items/chase/sheet.js @@ -416,7 +416,7 @@ export class CoC7ChaseSheet extends ItemSheet { } else { app.position.width = 45 * remSize } - return await app.item.activateNextParticipantTurn({ html: html }) // html is not rendered, element have size = 0 + return await app.item.activateNextParticipantTurn({ html }) // html is not rendered, element have size = 0 // if (end > 0) { // start = 0 // } else if (start > 0) { @@ -850,7 +850,7 @@ export class CoC7ChaseSheet extends ItemSheet { } else { CoC7ChaseParticipantImporter.create({ chaseUuid: this.item.uuid, - locationUuid: locationUuid, + locationUuid, dropData: data }) } diff --git a/module/items/item.js b/module/items/item.js index 2f01e7e7..ba77b3a1 100644 --- a/module/items/item.js +++ b/module/items/item.js @@ -265,7 +265,7 @@ export class CoC7Item extends Item { return { name: skillName, specialization: '', - skillName: skillName + skillName } } const specNameRegex = new RegExp( @@ -282,8 +282,8 @@ export class CoC7Item extends Item { } return { name: specialization + ' (' + skillName + ')', - specialization: specialization, - skillName: skillName + specialization, + skillName } } diff --git a/module/items/skill/data.js b/module/items/skill/data.js index 04b948e5..1840f374 100644 --- a/module/items/skill/data.js +++ b/module/items/skill/data.js @@ -1,4 +1,4 @@ -/* global CONST, foundry */ +/* global foundry, game */ import { CoC7Item } from '../item.js' export class CoC7Skill extends CoC7Item { diff --git a/module/scripts/game-rules.js b/module/scripts/game-rules.js index 25bb8562..7cec3672 100644 --- a/module/scripts/game-rules.js +++ b/module/scripts/game-rules.js @@ -107,7 +107,7 @@ function _setInitiativeOptions (rule) { } CONFIG.Combat.initiative = { formula: null, - decimals: decimals + decimals } } diff --git a/module/updater.js b/module/updater.js index 20eb186a..fc9242b1 100644 --- a/module/updater.js +++ b/module/updater.js @@ -949,7 +949,7 @@ export class Updater { effects[i] = mergeObject(effect, { flags: { core: { - statusId: statusId + statusId } } }) diff --git a/module/utilities.js b/module/utilities.js index c62d005e..88317eeb 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -76,9 +76,9 @@ export class CoC7Utilities { if (ask) { const dialogOptions = { - threshold: threshold, + threshold, modifier: diceModifier, - difficulty: difficulty, + difficulty, askValue: true } const usage = await RollDialog.create(dialogOptions) @@ -275,7 +275,7 @@ export class CoC7Utilities { } static async checkMacro (threshold = undefined, event = null) { - await CoC7Utilities.rollDice(event, { threshold: threshold }) + await CoC7Utilities.rollDice(event, { threshold }) } static async createMacro (bar, data, slot) { @@ -334,7 +334,7 @@ export class CoC7Utilities { name: item.name, type: 'script', img: item.img, - command: command + command }) } game.user.assignHotbarMacro(macro, slot) @@ -436,8 +436,6 @@ export class CoC7Utilities { const dailySanityLoss = actor.data.data.attribs.san.dailyLoss const hpValue = actor.data.data.attribs.hp.value const hpMax = actor.data.data.attribs.hp.max - const oneFifthSanity = - ' / ' + Math.floor(actor.data.data.attribs.san.value / 5) const mpValue = actor.data.data.attribs.mp.value const mpMax = actor.data.data.attribs.mp.max const pow = actor.data.data.characteristics.pow.value @@ -930,7 +928,7 @@ export class CoC7Utilities { return await CoC7Utilities.guessItem( type, match[1] + 'any' + match[2], - { combat: combat, source: source } + { combat, source } ) } } diff --git a/package.json b/package.json index 084af24c..e9f56568 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,7 @@ "description": "An unofficial implementation of Call of Cthulhu 7th Edition system for Foundry VTT.", "scripts": { "build": "webpack --mode production", - "format": "prettier-standard --format --changed", - "lint": "prettier-standard --lint --changed", + "format": "standard --fix", "watch": "webpack --mode development" }, "repository": { @@ -19,32 +18,26 @@ "url": "https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT/issues" }, "homepage": "https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT#readme", + "type": "module", "devDependencies": { - "@babel/core": "^7.16.7", - "@babel/eslint-parser": "^7.16.5", - "@babel/preset-react": "^7.16.7", - "@ksmithut/prettier-standard": "git+https://github.com/ksmithut/prettier-standard.git", - "copy-webpack-plugin": "^9.0.1", - "css-loader": "^6.2.0", - "css-minimizer-webpack-plugin": "^3.0.2", - "del": "^6.0.0", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-jest": "^25.3.4", - "glob": "^7.1.7", + "copy-webpack-plugin": "^11.0.0", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^4.0.0", + "del": "^7.0.0", "jsonfile": "^6.1.0", - "less": "^4.1.1", - "less-loader": "^10.0.1", - "mini-css-extract-plugin": "^2.2.0", + "less-loader": "^11.0.0", + "mini-css-extract-plugin": "^2.6.1", "remarkable": "^2.0.1", - "standard": "^16.0.3", - "terser-webpack-plugin": "^5.1.4", + "standard": "^17.0.0", "thread-loader": "^3.0.4", - "webpack": "^5.50.0", - "webpack-cli": "^4.8.0", - "webpackbar": "^5.0.0-3", + "webpack": "^5.74.0", + "webpack-cli": "^4.10.0", + "webpackbar": "^5.0.2", "write": "^2.0.0" }, - "type": "module", - "dependencies": {} + "standard": { + "ignore": [ + "/lib/socketlib/" + ] + } } diff --git a/webpack.config.js b/webpack.config.js index 2fb8a209..52e7cd18 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -42,25 +42,25 @@ function buildDestination () { const optimization = buildMode === 'production' ? { - minimize: true, - minimizer: [ - new TerserPlugin({ - terserOptions: { - mangle: false - } - }), - new CssMinimizerPlugin() - ], - splitChunks: { - chunks: 'all', - cacheGroups: { - default: { - name: 'main', - test: 'module/coc7.js' + minimize: true, + minimizer: [ + new TerserPlugin({ + terserOptions: { + mangle: false + } + }), + new CssMinimizerPlugin() + ], + splitChunks: { + chunks: 'all', + cacheGroups: { + default: { + name: 'main', + test: 'module/coc7.js' + } } } } - } : undefined /** @@ -102,7 +102,7 @@ const bundleScript = { } ] }, - optimization: optimization, + optimization, output: { clean: true, path: buildDestination(), From 4cb6e4a7bf86d7bb86fc6323f6a91e382a68a5c6 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Sat, 13 Aug 2022 14:12:55 +0200 Subject: [PATCH 709/726] Remove eval function from active effects --- module/active-effect.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/module/active-effect.js b/module/active-effect.js index e26cfe46..d96069f5 100644 --- a/module/active-effect.js +++ b/module/active-effect.js @@ -5,7 +5,7 @@ export default class CoC7ActiveEffect extends ActiveEffect { apply (actor, change) { if (!isNaN(Number(change.value))) change.value = Number(change.value) const result = super.apply(actor, change) - const evaluated = parse(result) + const evaluated = isNaN(result)?parse(result):result if (isNaN(evaluated)) return result return evaluated } @@ -227,6 +227,8 @@ export default class CoC7ActiveEffect extends ActiveEffect { } function parse (str) { + const regEx = /^[\+\-*/\(\)\d]+$/ + if( !regEx.exec(str)) return NaN try { return new Roll(str).evaluate({ async: false }).total } catch (e) { From 5ca5e95a5a8043128ff3caaa2899f01c2c75670d Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Sat, 13 Aug 2022 15:11:38 +0200 Subject: [PATCH 710/726] Doc update for links/links tool and effects doc generator updated accordingly --- docs/en/actor_importer.md | 3 ++ docs/en/chases.md | 2 + docs/en/effects.md | 2 +- docs/en/first_investigator.md | 2 + docs/en/link_creation_window.md | 6 +-- docs/en/links.md | 2 +- docs/en/manual.md | 15 +++++- generate-manuals.js | 18 +++++++ module/active-effect.js | 4 +- module/manual/en/effects.md | 59 ++++++++++++++++++++++ module/manual/en/link_creation_window.md | 51 +++++++++++++++++++ module/manual/en/links.md | 62 ++++++++++++++++++++++++ module/manual/en/manual.md | 6 ++- packs/system-doc.db | 5 +- 14 files changed, 227 insertions(+), 10 deletions(-) create mode 100644 module/manual/en/effects.md create mode 100644 module/manual/en/link_creation_window.md create mode 100644 module/manual/en/links.md diff --git a/docs/en/actor_importer.md b/docs/en/actor_importer.md index def193b7..bd35fda3 100644 --- a/docs/en/actor_importer.md +++ b/docs/en/actor_importer.md @@ -4,6 +4,7 @@ You can use the actor importer to import serveral NPC/Creatures blocks from adve To open the actor importer either open the Actor Directory and click Actor Importer at the bottom of the side bar or on an active scene then click Actor Importer +. # Overview @@ -12,6 +13,7 @@ If this is your first time it is recommends you also read the following sections - Non Playing Character (NPC) / Creature - The Dhole's House Actor Importer JSON +. # Non Playing Character (NPC) / Creature @@ -34,6 +36,7 @@ If this is your first time it is recommends you also read the following sections Click import will create an actor under the Actor directory will be created in the Imported characters folder any text that was not understood will be stored in Keeper notes +. # The Dhole's House Actor Importer JSON diff --git a/docs/en/chases.md b/docs/en/chases.md index 45f715a4..c4b2bb8c 100644 --- a/docs/en/chases.md +++ b/docs/en/chases.md @@ -94,6 +94,7 @@ To modify a location select it by clicking on it. This will display the location 4. Add a new location. 5. Active location. +. # Setting up obstacles. @@ -106,6 +107,7 @@ You can add obstacle after and before a location. You can pre-fill an obstacle w 3. Movement action cost in case of failure. 4. Check used to pass the location. When it's red the active actor does not have the associated check. +. # Cut to the chase. diff --git a/docs/en/effects.md b/docs/en/effects.md index 7d523b6a..bafa5141 100644 --- a/docs/en/effects.md +++ b/docs/en/effects.md @@ -2,7 +2,7 @@ The system allows for the creation of Active Effects. An active effect will modify an actor characteristic(s), attribute(s), skill(s). -Effects can be created as a [link](links.md) using the [link creation tool](link_creation_window.md) or directly in the character sheet by clicking the [game-icon game-icon-aura] button. +Effects can be created as a [links](links.md) using the [Link creation tool](link_creation_window.md) or directly in the character sheet by clicking the button. ## Effects tab diff --git a/docs/en/first_investigator.md b/docs/en/first_investigator.md index 7254b9ba..703e684f 100644 --- a/docs/en/first_investigator.md +++ b/docs/en/first_investigator.md @@ -2,6 +2,7 @@ The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required. +. # Skill @@ -47,6 +48,7 @@ On the Details tab you can set the Occupation Points calculation and Minimum/Max On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select. +. # Creating your first investigator diff --git a/docs/en/link_creation_window.md b/docs/en/link_creation_window.md index 5f09cdba..028c977b 100644 --- a/docs/en/link_creation_window.md +++ b/docs/en/link_creation_window.md @@ -1,12 +1,12 @@ # Link creation tool The system includes a tool to help you create links easily. -It's located on the left side bar. Click on the [fas fa-link] icon. +It's located on the left side bar. Click on the icon. This tools is available to GM only. ![Creation tool](../../assets/manual/links/links-creation-tool.jpg) -using this you can create [link](links.md) for skill check, san check, effects ... +using this you can create [links](links.md) for skill check, san check, effects ... alternatively you can open the tool by holding CTRL while clicking no an item or a skill. ## Main window @@ -31,7 +31,7 @@ If you do not supply a label and/or an icon, a default label and icon will be ad ## Effects window -Selecting effects will open an advance window where you can create links for [effects](effects.md). +Selecting effects will open an advance window where you can create links for [active effects](effects.md). Select the options the same way you will be doing for a regular effect. ## Using links diff --git a/docs/en/links.md b/docs/en/links.md index 5c9ac04e..ecbb044d 100644 --- a/docs/en/links.md +++ b/docs/en/links.md @@ -18,7 +18,7 @@ ## Writing links -- Links should be written using the link creation window. The link creation window is a tool for GM. It's located in the left side bar. +- Links should be written using the [Link creation tool](link_creation_window.md). The link creation window is a tool for GM. It's located in the left side bar. Links for chat messages and sheet editors (NPC, Journal entries...). Format of link is `@coc7.TYPE_OF_REQUEST[OPTIONS]{TEXT_TO_DISPLAY}` diff --git a/docs/en/manual.md b/docs/en/manual.md index 8e420ed3..e6798675 100644 --- a/docs/en/manual.md +++ b/docs/en/manual.md @@ -11,18 +11,24 @@ You will need one of the following to play the game The system automates most of the regular tasks and rules involved with running a game. Several parts of the actor sheets have pop up tooltips that trigger after two seconds, this delay can be changed in the settings +. This documentation can be reopened under Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en] +. # Recent changes For a full list of changes checkout the [changelog](https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT/blob/develop/.github/CHANGELOG.md) on GitHub +. - [Chases](chases.md) - [Actor importer](actor_importer.md) - added The Dhole's House JSON support +- [Active effects](effects.md) - implementation of active effects +- Active effects added to [links](links.md) and [Link creation tool](link_creation_window.md) +. # Overview sections below @@ -34,6 +40,7 @@ If this is your first time it is recommends you also read the following sections - Scene menu overview - [Creating your first investigator](first_investigator.md) +. # How to use the system @@ -42,7 +49,6 @@ If this is your first time it is recommends you also read the following sections - Actor Type: Container - Actor Type: Creature - Actor Type: NPC -- Chat link creator - Character creation mode - Development phase - Item Type: Archetype @@ -60,7 +66,11 @@ If this is your first time it is recommends you also read the following sections - Rolls - Start Rest - XP Gain +- [links](links.md) +- [Link creation tool](link_creation_window.md) +- [Active effects](effects.md) +. # Actor overview @@ -69,6 +79,7 @@ If this is your first time it is recommends you also read the following sections - _Creature_ - A more simple character, suitable for creatures. - _NPC_ - A more simple character, suitable for NPCs. +. # Items overview @@ -83,6 +94,7 @@ If this is your first time it is recommends you also read the following sections - _Talent_ -A special power for Pulp Cthulhu. These do not trigger automation in the system. - _Weapon_ - An item with weapon statistics (this includes unarmed attacks). +. # Settings overview @@ -101,6 +113,7 @@ Click on System Settings - _Developer And Debug Settings_ - These settings can break your world when new updates are released so only use them on test worlds - _Roll Table Settings_ - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums +. # Call of Cthulhu Scene Menu diff --git a/generate-manuals.js b/generate-manuals.js index 4f055b03..1bb85b29 100644 --- a/generate-manuals.js +++ b/generate-manuals.js @@ -3,6 +3,24 @@ import * as fs from 'fs' import write from './node_modules/write/index.js' const sources = { + fk040vqb4per5ju1: { + en: { + name: 'Links [en]', + file: 'links.md' + } + }, + emuu3wo0uul91029: { + en: { + name: 'Link creation tool [en]', + file: 'link_creation_window.md' + } + }, + rmtiwtbixojhyf5v: { + en: { + name: 'Active effects [en]', + file: 'effects.md' + } + }, xV4Hxxmu6zjIMw9h: { en: { name: 'Actor Importer [en]', diff --git a/module/active-effect.js b/module/active-effect.js index d96069f5..d8270f3a 100644 --- a/module/active-effect.js +++ b/module/active-effect.js @@ -5,7 +5,7 @@ export default class CoC7ActiveEffect extends ActiveEffect { apply (actor, change) { if (!isNaN(Number(change.value))) change.value = Number(change.value) const result = super.apply(actor, change) - const evaluated = isNaN(result)?parse(result):result + const evaluated = isNaN(result) ? parse(result) : result if (isNaN(evaluated)) return result return evaluated } @@ -228,7 +228,7 @@ export default class CoC7ActiveEffect extends ActiveEffect { function parse (str) { const regEx = /^[\+\-*/\(\)\d]+$/ - if( !regEx.exec(str)) return NaN + if (!regEx.exec(str)) return NaN try { return new Roll(str).evaluate({ async: false }).total } catch (e) { diff --git a/module/manual/en/effects.md b/module/manual/en/effects.md new file mode 100644 index 00000000..c05f4e1b --- /dev/null +++ b/module/manual/en/effects.md @@ -0,0 +1,59 @@ +# Effects + +The system allows for the creation of Active Effects. +An active effect will modify an actor characteristic(s), attribute(s), skill(s). +Effects can be created as a @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} using the @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool} or directly in the character sheet by clicking the [game-icon game-icon-aura] button. + +## Effects tab + +Effects will be display in the effect tabs on the character sheet. + +![effects tab](../../assets/manual/effects/effects-tab.jpg) + +Effect are broken down in 4 categories for PC : + +- Status: those are effects used and created by the system (Wounds status, prone, insane ...). Those effects do not include any changes. +- Temporary: those are effects with duration. +- Passive: those are permanent effects. +- Innactive: those are disabled effects. + +For NPC/Creatures you will only see 2 sections: active and inactive effects. +When an effect is not inactive, the correcponding changes will be applied to the actor. + +## Creating effects + +You can create effect by clicking the Add button. +This will bring the effect creation window. +This windows has 3 tabs + +### Details tab + +![Details tab](../../assets/manual/effects/details-tab.jpg) + +### Duration tab + +![Duration tab](../../assets/manual/effects/duration-tab.jpg) + +### Changes tab + +![Changes tab](../../assets/manual/effects/changes-tab.jpg) + +This last tab will includes all changes made to the character sheet. + +## Changes + +An effect includes a list of changes. Each change needs to be addressed with the corresponding data path. +The available changes are : + +- Characteristics: data.characteristics.\[charactetistic\].value + - available \[charactetistic\] are: str, con, siz, dex, app, int, pow, edu +- attributes: + - mov: data.attribs.mov.value + - build: data.attribs.build.value + - bonus damage: data.attribs.db.value + - armor: data.attribs.armor.value +- derived attributes. Only the maximum value of those attributes should be modifed. Those changes are applied after all other changes have been made. If that attibute is in auto mode, it will be recalculated with the previous characteristics changes before having it's value affected. + - max hit points: data.attribs.hp.max + - max sanity: data.attribs.san.max +- skills. Skills are identified by their name without specialization. Skill names are case sensitive ! + - data.skills.Handgun.value diff --git a/module/manual/en/link_creation_window.md b/module/manual/en/link_creation_window.md new file mode 100644 index 00000000..5c398643 --- /dev/null +++ b/module/manual/en/link_creation_window.md @@ -0,0 +1,51 @@ +# Link creation tool + +The system includes a tool to help you create links easily. +It's located on the left side bar. Click on the [fas fa-link] icon. +This tools is available to GM only. + +![Creation tool](../../assets/manual/links/links-creation-tool.jpg) + +using this you can create @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} for skill check, san check, effects ... +alternatively you can open the tool by holding CTRL while clicking no an item or a skill. + +## Main window + +Clicking on the tool icon will open a window : + +![Main window](../../assets/manual/links/main-window.jpg) + +You can there select options for you link. + +- "Compendium packs" and "Items directory" allows you to reference an objet from corresponding folder. +- "Modifiers" will allows you to add modifiers to your check. +- "blind" will force the roll mode to be blind. +- "Label" will allows you to change the display label. +- "Icon" will allows you to choose an icon for your link. Icons can be : + - A font awsome or a game-icons reference : "fas fa-ankh" or "game-icon game-icon-tentacle-strike". + - A link to an image in the system data or system core: "icons/magic/symbols/arrowhead-green.webp". + +If you do not supply a label and/or an icon, a default label and icon will be added. + +![default label](../../assets/manual/links/default-label.jpg) + +## Effects window + +Selecting effects will open an advance window where you can create links for @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{active effects}. +Select the options the same way you will be doing for a regular effect. + +## Using links + +- Once your link is created and valid it will appear in a white box in the middle of the window. + +![link created](../../assets/manual/links/effect-link-creation.jpg) + +- You are now ready to whisper it to your players, copy it in your clipboard so you can add it to your items or journal entries or send it to the chat. + +![link in the chat](../../assets/manual/links/link-effect-chat.jpg) + +- When a player clicks a link the corresponding action will be performed by his character. +- When a GM clicks a link the corresponding action will be performed by his selected tokens. +- A link drag/droped in journal entries, on a token etc... + +![link drop](../../assets/manual/links/effect-drop.jpg) diff --git a/module/manual/en/links.md b/module/manual/en/links.md new file mode 100644 index 00000000..ba7c05b2 --- /dev/null +++ b/module/manual/en/links.md @@ -0,0 +1,62 @@ +# Links + +- Links are a way for a GM to request for a roll (Characteristic, Attribute, Skill, SAN loss, Weapon). +- Links can contain an active effect. +- Links are created in the chat log. When you click a link it will trigger a check for your(s) controlled/impersonated character(s). +- Links can be included in any editor, mainly journal entries. +- Link can be created in 5 ways: + - By manually typing it (read details below). + - By CTRL+click on any sheet element (Characteristic, Attribute, skill, SAN loss). + - By dragging a sheet element (Characteristic, Attribute, skill (+CTRL)) on an editor (Journal entry) + - By CTRL + dragging an item (skill or weapon) from a compendium or an item directory on an editor. When a link is created that way and the used as a GM, if your controlled character doen't hold the weapon/skill you'll be prompted to create the corresponding item. + - By using the included compendium written by Lozalojo. +- Links can be dragged from chat log on an editor. +- When a link is created the difficulty/penalty selection windows will open. Hold SHIFT to bypass that comportment. +- When a link is created, the roll mode will be check. If the roll mode is set to 'blind GM roll' the link will be created as blind. +- When a link is created with a difficulty and a penalty, the difficulty/penalty windows will not pop. +- When a link is created without a difficulty or a penalty, the difficulty/penalty windows will pop. Holding SHIFT will fastforward the roll (regular/no penalty). + +## Writing links + +- Links should be written using the @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool}. The link creation window is a tool for GM. It's located in the left side bar. + +Links for chat messages and sheet editors (NPC, Journal entries...). +Format of link is `@coc7.TYPE_OF_REQUEST[OPTIONS]{TEXT_TO_DISPLAY}` + +- `TYPE_OF_REQUEST` : + - `sanloss`: trigger a san check, upon failure will propose to deduct the corresponding SAN. + - `check`: trigger a check depending on the options. + - `item`: trigger use of a weapon. Only items of type weapon can be triggered. +- `OPTIONS: []` = optional, default + - `sanloss`: + - `sanMax`: max SAN loss + - `sanMin`: min SAN loss + - `check`: + - `type`: type of check ( `characteristic`, `skill`, `attrib`). + - `name`: name of the skill/characteristic/attrib. + - [`blind`]: will force a blind check, if not present the check will depend on your selected roll mode. + - all: + - [`difficulty`]: `?` (blind), `0` (regular), `+` (hard), `++` (extreme), `+++` (critical). + - [`modifier`]: `-x` (x penalty dice), `+x` (x bonus dice), `0` (no modifier). + - [`icon`]: icon tu use ([font awesome](https://fontawesome.com/icons), `fas fa-dice`). +- `TEXT_TO_DISPLAY`: Name to display, this is optional. + +### Examples + +| Link | Result | +| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | +| `@coc7.sanloss[sanMax:1D6,sanMin:1,difficulty:++,modifier:-1]` | {Hard San Loss (-1) 1/1D6} | +| `@coc7.check[type:charac,name:STR,difficulty:+,modifier:-1]` | {Hard STR check(-1)} | +| `@coc7.check[type:attrib,name:lck,difficulty:+,modifier:-1]` | {Hard luck check(-1)} | +| `@coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,difficulty:+,modifier:-1]` | {Hard Anthropology check(-1)} (with icon) | +| `@coc7.sanloss[sanMax:1D6,sanMin:1]` | {San Loss (-1) 1/1D6} (without name, difficulty nor modifier) | +| `@coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,modifier:+1]` | {Anthropology check (+1)} (with icon, without name nor difficulty) | + +### Using links + +- You can drag/drop links from chat to sheets and between sheets. +- You can drar/drop a link directly on a token. +- You can drag/drop items and skills on a journal entry while holding CTRL, this will create the corresponding check with regular difficulty and 0 modifier. +- You can create link in the chat by clicking and holding CTRL from any sheet (PC/NPC/Creature) corresponding characteristic/luck/SAN/Competence/weapon/San loss. + - This will open the select penalty/difficulty dialogue. Clicking on the generated link will then trigger the check with all parameters. + - Holding Shift on top will not open the penalty/difficulty dialogue. Clicking on the generated link will open the penalty/difficulty dialogue then trigger the check. diff --git a/module/manual/en/manual.md b/module/manual/en/manual.md index f261aece..d8c9e5b8 100644 --- a/module/manual/en/manual.md +++ b/module/manual/en/manual.md @@ -25,6 +25,8 @@ For a full list of changes checkout the [changelog](https://github.com/Miskatoni - @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases} - @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer} - added The Dhole's House JSON support +- @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects} - implementation of active effects +- Active effects added to @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} and @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool} . @@ -47,7 +49,6 @@ If this is your first time it is recommends you also read the following sections - Actor Type: Container - Actor Type: Creature - Actor Type: NPC -- Chat link creator - Character creation mode - Development phase - Item Type: Archetype @@ -65,6 +66,9 @@ If this is your first time it is recommends you also read the following sections - Rolls - Start Rest - XP Gain +- @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} +- @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool} +- @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects} . diff --git a/packs/system-doc.db b/packs/system-doc.db index b1f2c476..c94dc6dc 100644 --- a/packs/system-doc.db +++ b/packs/system-doc.db @@ -1,5 +1,8 @@ +{"_id":"fk040vqb4per5ju1","name":"Links [en]","content":"
    \n

    Links

    \n
      \n
    • Links are a way for a GM to request for a roll (Characteristic, Attribute, Skill, SAN loss, Weapon).
    • \n
    • Links can contain an active effect.
    • \n
    • Links are created in the chat log. When you click a link it will trigger a check for your(s) controlled/impersonated character(s).
    • \n
    • Links can be included in any editor, mainly journal entries.
    • \n
    • Link can be created in 5 ways:\n
        \n
      • By manually typing it (read details below).
      • \n
      • By CTRL+click on any sheet element (Characteristic, Attribute, skill, SAN loss).
      • \n
      • By dragging a sheet element (Characteristic, Attribute, skill (+CTRL)) on an editor (Journal entry)
      • \n
      • By CTRL + dragging an item (skill or weapon) from a compendium or an item directory on an editor. When a link is created that way and the used as a GM, if your controlled character doen't hold the weapon/skill you'll be prompted to create the corresponding item.
      • \n
      • By using the included compendium written by Lozalojo.
      • \n
    • \n
    • Links can be dragged from chat log on an editor.
    • \n
    • When a link is created the difficulty/penalty selection windows will open. Hold SHIFT to bypass that comportment.
    • \n
    • When a link is created, the roll mode will be check. If the roll mode is set to 'blind GM roll' the link will be created as blind.
    • \n
    • When a link is created with a difficulty and a penalty, the difficulty/penalty windows will not pop.
    • \n
    • When a link is created without a difficulty or a penalty, the difficulty/penalty windows will pop. Holding SHIFT will fastforward the roll (regular/no penalty).
    • \n
    \n

    Writing links

    \n
      \n
    • Links should be written using the @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool}. The link creation window is a tool for GM. It's located in the left side bar.
    • \n
    \n

    Links for chat messages and sheet editors (NPC, Journal entries...).\nFormat of link is @coc7.TYPE_OF_REQUEST[OPTIONS]{TEXT_TO_DISPLAY}

    \n
    \n

    Examples

    \n\n\n\n\n\n\n\n\n\n\n\n\n
    LinkResult
    @coc7.sanloss[sanMax:1D6,sanMin:1,difficulty:++,modifier:-1]{Hard San Loss (-1) 1/1D6}
    @coc7.check[type:charac,name:STR,difficulty:+,modifier:-1]{Hard STR check(-1)}
    @coc7.check[type:attrib,name:lck,difficulty:+,modifier:-1]{Hard luck check(-1)}
    @coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,difficulty:+,modifier:-1]{Hard Anthropology check(-1)} (with icon)
    @coc7.sanloss[sanMax:1D6,sanMin:1]{San Loss (-1) 1/1D6} (without name, difficulty nor modifier)
    @coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,modifier:+1]{Anthropology check (+1)} (with icon, without name nor difficulty)
    \n

    Using links

    \n
      \n
    • You can drag/drop links from chat to sheets and between sheets.
    • \n
    • You can drar/drop a link directly on a token.
    • \n
    • You can drag/drop items and skills on a journal entry while holding CTRL, this will create the corresponding check with regular difficulty and 0 modifier.
    • \n
    • You can create link in the chat by clicking and holding CTRL from any sheet (PC/NPC/Creature) corresponding characteristic/luck/SAN/Competence/weapon/San loss.\n
        \n
      • This will open the select penalty/difficulty dialogue. Clicking on the generated link will then trigger the check with all parameters.
      • \n
      • Holding Shift on top will not open the penalty/difficulty dialogue. Clicking on the generated link will open the penalty/difficulty dialogue then trigger the check.
      • \n
    • \n
    \n\n
    "} +{"_id":"emuu3wo0uul91029","name":"Link creation tool [en]","content":"
    \n

    Link creation tool

    \n

    The system includes a tool to help you create links easily.\nIt's located on the left side bar. Click on the   icon.\nThis tools is available to GM only.

    \n

    \"Creation

    \n

    using this you can create @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} for skill check, san check, effects ...\nalternatively you can open the tool by holding CTRL while clicking no an item or a skill.

    \n

    Main window

    \n

    Clicking on the tool icon will open a window :

    \n

    \"Main

    \n

    You can there select options for you link.

    \n
      \n
    • "Compendium packs" and "Items directory" allows you to reference an objet from corresponding folder.
    • \n
    • "Modifiers" will allows you to add modifiers to your check.
    • \n
    • "blind" will force the roll mode to be blind.
    • \n
    • "Label" will allows you to change the display label.
    • \n
    • "Icon" will allows you to choose an icon for your link. Icons can be :\n
        \n
      • A font awsome or a game-icons reference : "fas fa-ankh" or "game-icon game-icon-tentacle-strike".
      • \n
      • A link to an image in the system data or system core: "icons/magic/symbols/arrowhead-green.webp".
      • \n
    • \n
    \n

    If you do not supply a label and/or an icon, a default label and icon will be added.

    \n

    \"default

    \n

    Effects window

    \n

    Selecting effects will open an advance window where you can create links for @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{active effects}.\nSelect the options the same way you will be doing for a regular effect.

    \n

    Using links

    \n
      \n
    • Once your link is created and valid it will appear in a white box in the middle of the window.
    • \n
    \n

    \"link

    \n
      \n
    • You are now ready to whisper it to your players, copy it in your clipboard so you can add it to your items or journal entries or send it to the chat.
    • \n
    \n

    \"link

    \n
      \n
    • When a player clicks a link the corresponding action will be performed by his character.
    • \n
    • When a GM clicks a link the corresponding action will be performed by his selected tokens.
    • \n
    • A link drag/droped in journal entries, on a token etc...
    • \n
    \n

    \"link

    \n\n
    "} +{"_id":"rmtiwtbixojhyf5v","name":"Active effects [en]","content":"
    \n

    Effects

    \n

    The system allows for the creation of Active Effects.\nAn active effect will modify an actor characteristic(s), attribute(s), skill(s).\nEffects can be created as a @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} using the @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool} or directly in the character sheet by clicking the   button.

    \n

    Effects tab

    \n

    Effects will be display in the effect tabs on the character sheet.

    \n

    \"effects

    \n

    Effect are broken down in 4 categories for PC :

    \n
      \n
    • Status: those are effects used and created by the system (Wounds status, prone, insane ...). Those effects do not include any changes.
    • \n
    • Temporary: those are effects with duration.
    • \n
    • Passive: those are permanent effects.
    • \n
    • Innactive: those are disabled effects.
    • \n
    \n

    For NPC/Creatures you will only see 2 sections: active and inactive effects.\nWhen an effect is not inactive, the correcponding changes will be applied to the actor.

    \n

    Creating effects

    \n

    You can create effect by clicking the Add button.\nThis will bring the effect creation window.\nThis windows has 3 tabs

    \n

    Details tab

    \n

    \"Details

    \n

    Duration tab

    \n

    \"Duration

    \n

    Changes tab

    \n

    \"Changes

    \n

    This last tab will includes all changes made to the character sheet.

    \n

    Changes

    \n

    An effect includes a list of changes. Each change needs to be addressed with the corresponding data path.\nThe available changes are :

    \n
      \n
    • Characteristics: data.characteristics.[charactetistic].value\n
        \n
      • available [charactetistic] are: str, con, siz, dex, app, int, pow, edu
      • \n
    • \n
    • attributes:\n
        \n
      • mov: data.attribs.mov.value
      • \n
      • build: data.attribs.build.value
      • \n
      • bonus damage: data.attribs.db.value
      • \n
      • armor: data.attribs.armor.value
      • \n
    • \n
    • derived attributes. Only the maximum value of those attributes should be modifed. Those changes are applied after all other changes have been made. If that attibute is in auto mode, it will be recalculated with the previous characteristics changes before having it's value affected.\n
        \n
      • max hit points: data.attribs.hp.max
      • \n
      • max sanity: data.attribs.san.max
      • \n
    • \n
    • skills. Skills are identified by their name without specialization. Skill names are case sensitive !\n
        \n
      • data.skills.Handgun.value
      • \n
    • \n
    \n\n
    "} {"_id":"xV4Hxxmu6zjIMw9h","name":"Actor Importer [en]","content":"
    \n

    Actor Importer

    \n

    You can use the actor importer to import serveral NPC/Creatures blocks from adventures and using the JSON exporter from The Dholes House

    \n

    To open the actor importer either open the  Actor Directory and click Actor Importer at the bottom of the side bar or on an active scene   then click  Actor Importer

    \n

     

    \n

    Overview

    \n

    If this is your first time it is recommends you also read the following sections.

    \n
      \n
    • Non Playing Character (NPC) / Creature
    • \n
    • The Dhole's House Actor Importer JSON
    • \n
    \n

     

    \n

    Non Playing Character (NPC) / Creature

    \n

    \"\"

    \n
      \n
    1. Select NPC or Creature

    2. \n
    3. Should the system convert the character block from an earlier edition to 7th

    4. \n
    5. Select the languages of the character block

    6. \n
    7. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched

      \n

      Items: From your item directory

      \n

      World: From your world compendiums

      \n

      Modules: From your module compendiums

      \n

      System: From the system compendiums provided with this system

    8. \n
    9. An example layout is given here you can copy this to your clipboard if you want to edit it or paste in the text from an adventure

    10. \n
    \n

    Click import will create an actor under the  Actor directory will be created in the Imported characters folder any text that was not understood will be stored in Keeper notes

    \n

     

    \n

    The Dhole's House Actor Importer JSON

    \n

    \"\"

    \n
      \n
    1. The Dhole's House Actor Importer JSON

    2. \n
    3. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched

      \n

      Items: From your item directory

      \n

      World: From your world compendiums

      \n

      Modules: From your module compendiums

      \n

      System: From the system compendiums provided with this system

    4. \n
    \n

    Browse for your JSON file, once selected the name and image will be be shown, click import to create the actor under the  Actor directory will be created in the Imported characters folder

    \n

    By default the image will be stored in a folder called dhole-image in your world, this can be changed by clicking on the  Game Settings tab then under the Game Settings heading clicking on  Configure Settings, click on  System Settings.

    \n\n
    "} -{"_id":"wZtTHpGV3atKV2oD","name":"Call of Cthulhu 7th Edition (Unofficial) [en]","content":"
    \n

    System documentation v0.7.12

    \n

    This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT.

    \n

    You will need one of the following to play the game

    \n
      \n
    • Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules
    • \n
    \n

    The system automates most of the regular tasks and rules involved with running a game.

    \n

    Several parts of the actor sheets have pop up tooltips that trigger after two seconds, this delay can be changed in the settings\n.

    \n

    This documentation can be reopened under   Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en]

    \n

     

    \n

    Recent changes

    \n

    For a full list of changes checkout the changelog on GitHub

    \n

     

    \n
      \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
    • \n
    • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer} - added The Dhole's House JSON support
    • \n
    \n

     

    \n

    Overview sections below

    \n

    If this is your first time it is recommends you also read the following sections.

    \n
      \n
    • Actor overview
    • \n
    • Items overview
    • \n
    • Settings overview
    • \n
    • Scene menu overview
    • \n
    • @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator}
    • \n
    \n

     

    \n

    How to use the system

    \n
      \n
    • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer}
    • \n
    • Actor Type: Character
    • \n
    • Actor Type: Container
    • \n
    • Actor Type: Creature
    • \n
    • Actor Type: NPC
    • \n
    • Chat link creator
    • \n
    • Character creation mode
    • \n
    • Development phase
    • \n
    • Item Type: Archetype
    • \n
    • Item Type: Book
    • \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Item Type: Chases}
    • \n
    • Item Type: Item
    • \n
    • @Compendium[CoC7.system-doc.7hFq9EqLviAxqMFz]{Item Type: Occupation}
    • \n
    • @Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Item Type: Setup}
    • \n
    • Item Type: Skill
    • \n
    • Item Type: Spell
    • \n
    • Item Type: Status
    • \n
    • Item Type: Talent
    • \n
    • Item Type: Weapon
    • \n
    • Macros
    • \n
    • Rolls
    • \n
    • Start Rest
    • \n
    • XP Gain
    • \n
    \n

     

    \n

    Actor overview

    \n
      \n
    • Character - A complete character, usually an investigator. @Compendium[CoC7.examples.JuI2aWDSEuQNKeUI]{Example Character}
    • \n
    • Container - An inventory container. @Compendium[CoC7.examples.r7bDSY4OYKxQYEas]{Example Container}
    • \n
    • Creature - A more simple character, suitable for creatures. @Compendium[CoC7.examples.XE2vjLG03wGfnYLw]{Example Creature}
    • \n
    • NPC - A more simple character, suitable for NPCs. @Compendium[CoC7.examples.4kSvDc4n13oFx8RG]{Example NPC}
    • \n
    \n

     

    \n

    Items overview

    \n
      \n
    • Archetype - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. @Compendium[CoC7.items.lu04TIRrg9P3vRqY]{Example Archetype}
    • \n
    • Book - An arcane tome that can hold spells and character improvements.
    • \n
    • Item - A piece of equipment.
    • \n
    • Occupation - A set of skills and other stats that implement a CoC occupation. @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Example Occupation}
    • \n
    • Setup - A set of default configurations for character, creature, or NPC creation. @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{Example Setup}
    • \n
    • Skill - A skill with a base percentage and some tags. @Compendium[CoC7.skills.UOuN0gESXPp2HXwH]{Example Skill}
    • \n
    • Spell - A magic spell.
    • \n
    • Status - An phobia or mania condition. @Compendium[CoC7.items.DVdvEDizPZPux1pK]{Example Mania}
    • \n
    • Talent -A special power for Pulp Cthulhu. These do not trigger automation in the system. @Compendium[CoC7.items.yqvwz769ZeJplOW7]{Example Talent}
    • \n
    • Weapon - An item with weapon statistics (this includes unarmed attacks). @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Example Weapon}
    • \n
    \n

     

    \n

    Settings overview

    \n

    Click on the  Game Settings tab then under the Game Settings heading click on  Configure Settings.

    \n

    Click on  System Settings

    \n
      \n
    • Variant/Optional Rules - Here you can turn on individual Pulp Cthulhu rules and other optional rules
    • \n
    • Initiative Settings - Additional settings for optional initiative rule
    • \n
    • Roll Settings - Default options for rolls
    • \n
    • Chat Cards Settings - Configure chat messages
    • \n
    • Scene Settings - Scene Settings
    • \n
    • Game Artwork Settings - This allows you to set a custom pause icon and message
    • \n
    • Sheet Settings - This allows you to change character sheet settings and optional CSS
    • \n
    • Weapon Settings - Weapon Settings
    • \n
    • Developer And Debug Settings - These settings can break your world when new updates are released so only use them on test worlds
    • \n
    • Roll Table Settings - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums
    • \n
    \n

     

    \n

    Call of Cthulhu Scene Menu

    \n

    To access this menu you will need to have an active scene which can be created in the  Scenes Directory.

    \n
      \n
    • Keeper's tools - Here you can toggle character creation mode, character development phase, actor importer, toggle automatic XP gain on a success, and start a rest
    • \n
    • Roll ! - Create a roll in chat
    • \n
    • Create link - Create a roll link for players to click
    • \n
    \n\n
    "} +{"_id":"wZtTHpGV3atKV2oD","name":"Call of Cthulhu 7th Edition (Unofficial) [en]","content":"
    \n

    System documentation v0.7.12

    \n

    This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT.

    \n

    You will need one of the following to play the game

    \n
      \n
    • Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set
    • \n
    • Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules
    • \n
    \n

    The system automates most of the regular tasks and rules involved with running a game.

    \n

    Several parts of the actor sheets have pop up tooltips that trigger after two seconds, this delay can be changed in the settings\n.

    \n

    This documentation can be reopened under   Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en]

    \n

     

    \n

    Recent changes

    \n

    For a full list of changes checkout the changelog on GitHub

    \n

     

    \n
      \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
    • \n
    • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer} - added The Dhole's House JSON support
    • \n
    • @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects} - implementation of active effects
    • \n
    • Active effects added to @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} and @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool}
    • \n
    \n

     

    \n

    Overview sections below

    \n

    If this is your first time it is recommends you also read the following sections.

    \n
      \n
    • Actor overview
    • \n
    • Items overview
    • \n
    • Settings overview
    • \n
    • Scene menu overview
    • \n
    • @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator}
    • \n
    \n

     

    \n

    How to use the system

    \n
      \n
    • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer}
    • \n
    • Actor Type: Character
    • \n
    • Actor Type: Container
    • \n
    • Actor Type: Creature
    • \n
    • Actor Type: NPC
    • \n
    • Character creation mode
    • \n
    • Development phase
    • \n
    • Item Type: Archetype
    • \n
    • Item Type: Book
    • \n
    • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Item Type: Chases}
    • \n
    • Item Type: Item
    • \n
    • @Compendium[CoC7.system-doc.7hFq9EqLviAxqMFz]{Item Type: Occupation}
    • \n
    • @Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Item Type: Setup}
    • \n
    • Item Type: Skill
    • \n
    • Item Type: Spell
    • \n
    • Item Type: Status
    • \n
    • Item Type: Talent
    • \n
    • Item Type: Weapon
    • \n
    • Macros
    • \n
    • Rolls
    • \n
    • Start Rest
    • \n
    • XP Gain
    • \n
    • @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links}
    • \n
    • @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool}
    • \n
    • @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects}
    • \n
    \n

     

    \n

    Actor overview

    \n
      \n
    • Character - A complete character, usually an investigator. @Compendium[CoC7.examples.JuI2aWDSEuQNKeUI]{Example Character}
    • \n
    • Container - An inventory container. @Compendium[CoC7.examples.r7bDSY4OYKxQYEas]{Example Container}
    • \n
    • Creature - A more simple character, suitable for creatures. @Compendium[CoC7.examples.XE2vjLG03wGfnYLw]{Example Creature}
    • \n
    • NPC - A more simple character, suitable for NPCs. @Compendium[CoC7.examples.4kSvDc4n13oFx8RG]{Example NPC}
    • \n
    \n

     

    \n

    Items overview

    \n
      \n
    • Archetype - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. @Compendium[CoC7.items.lu04TIRrg9P3vRqY]{Example Archetype}
    • \n
    • Book - An arcane tome that can hold spells and character improvements.
    • \n
    • Item - A piece of equipment.
    • \n
    • Occupation - A set of skills and other stats that implement a CoC occupation. @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Example Occupation}
    • \n
    • Setup - A set of default configurations for character, creature, or NPC creation. @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{Example Setup}
    • \n
    • Skill - A skill with a base percentage and some tags. @Compendium[CoC7.skills.UOuN0gESXPp2HXwH]{Example Skill}
    • \n
    • Spell - A magic spell.
    • \n
    • Status - An phobia or mania condition. @Compendium[CoC7.items.DVdvEDizPZPux1pK]{Example Mania}
    • \n
    • Talent -A special power for Pulp Cthulhu. These do not trigger automation in the system. @Compendium[CoC7.items.yqvwz769ZeJplOW7]{Example Talent}
    • \n
    • Weapon - An item with weapon statistics (this includes unarmed attacks). @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Example Weapon}
    • \n
    \n

     

    \n

    Settings overview

    \n

    Click on the  Game Settings tab then under the Game Settings heading click on  Configure Settings.

    \n

    Click on  System Settings

    \n
      \n
    • Variant/Optional Rules - Here you can turn on individual Pulp Cthulhu rules and other optional rules
    • \n
    • Initiative Settings - Additional settings for optional initiative rule
    • \n
    • Roll Settings - Default options for rolls
    • \n
    • Chat Cards Settings - Configure chat messages
    • \n
    • Scene Settings - Scene Settings
    • \n
    • Game Artwork Settings - This allows you to set a custom pause icon and message
    • \n
    • Sheet Settings - This allows you to change character sheet settings and optional CSS
    • \n
    • Weapon Settings - Weapon Settings
    • \n
    • Developer And Debug Settings - These settings can break your world when new updates are released so only use them on test worlds
    • \n
    • Roll Table Settings - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums
    • \n
    \n

     

    \n

    Call of Cthulhu Scene Menu

    \n

    To access this menu you will need to have an active scene which can be created in the  Scenes Directory.

    \n
      \n
    • Keeper's tools - Here you can toggle character creation mode, character development phase, actor importer, toggle automatic XP gain on a success, and start a rest
    • \n
    • Roll ! - Create a roll in chat
    • \n
    • Create link - Create a roll link for players to click
    • \n
    \n\n
    "} {"_id":"VdOeGcxsu3jsVm3F","name":"Chases [en]","content":"
    \n

    Creating a new chase

    \n

    To create a chase create a new item of type chase.

    \n

    Only the keeper should have access to that item.

    \n

    A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

    \n

    A hazard will always be crossed but failing the check will slow you down.

    \n

    A barrier will stop you until you successfully pass or destroy it.

    \n

    \"\"

    \n

    The chase sheet is divided in 3 parts.

    \n
      \n
    • A header where you will see information about current location once a chase is started.
    • \n
    • A chase setup tab. This will allows you to create and follow the chase.
    • \n
    • A participant list where you can setup your participant. This tab will not work after the chase started.
    • \n
    \n

    Adding a participant.

    \n

    To add a participant click on the plus sign on the participant list or drag an actor or a token.

    \n

    Note that it is not mandatory to have a actor associated with a participant. This will allows for fast setup or to add someone on the fly to the chase.

    \n

    To be able to add a token to the chase a few control have been added to character and NPC sheets:

    \n

    \"\"

    \n

    Those icons will give additional information.

    \n
      \n
    1. Indicate that this actor is a synthetic actor (instance of an actor)
    2. \n
    3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
    4. \n
    5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
    6. \n
    7. Indicate that actor's data are linked to an actor in the actors directory.
    8. \n
    \n

    Dragging a token to the participant list or to a location will activate the importer window.

    \n

    \"\"

    \n

    Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrix chase, dreamlands chase...)

    \n
      \n
    1. Clicking this will change the participant side from prey to chaser.
    2. \n
    3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
    4. \n
    \n

    Participant list

    \n

    \"\"

    \n

    Here you can have the list of participant to the chase.

    \n
      \n
    1. Will trigger a chase roll. This will create a roll card if the participant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
    2. \n
    3. This will clear the speed roll if any, or delete the participant.
    4. \n
    \n

    \"\"

    \n
      \n
    1. Roll card waiting to get resolved in the chat.
    2. \n
    3. Speed check rolled. You can click this to get the details.
    4. \n
    5. To reset the speed check.
    6. \n
    \n

    \"\"

    \n

    Chase setup

    \n

    \"\"

    \n

    To setup a chase enter the initial numbers of locations and click initialize.

    \n

    \"\"

    \n

    The chase is initialized, you can adjust some options. Locations in white are initial locations and can not be modified.

    \n
      \n
    1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
    2. \n
    3. Selecting this will include in the chase participants who would have otherwise been able to escape.
    4. \n
    5. Selecting this will include in the chase participants who would have been excluded for being too slow.
    6. \n
    7. This is the number of locations between the slowest prey and the fastest chaser.
    8. \n
    9. This is the starting location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
    10. \n
    11. This will animate token when they move to a new location.
    12. \n
    \n

    Setting up locations

    \n

    During setup or during chase you can select a location to modify it.

    \n

    Starting (white) locations can not be modified during setup.</p>

    \n

    To modify a location select it by clicking on it. This will display the location details on the header part of the sheet.

    \n

    \"\"

    \n
      \n
    1. This will add a participant. If the chase is started the participant will be on that location. If the chase isn't started the participant will be added on the init track.
    2. \n
    3. This will remove the location. A location has to be empty to be removed.
    4. \n
    5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin indicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
    6. \n
    7. Add a new location.
    8. \n
    9. Active location.
    10. \n
    \n

     

    \n

    Setting up obstacles.

    \n

    You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

    \n

    \"\"

    \n
      \n
    1. Toggle this to add damage to a barrier.
    2. \n
    3. Barrier's hit points.
    4. \n
    5. Movement action cost in case of failure.
    6. \n
    7. Check used to pass the location. When it's red the active actor does not have the associated check.
    8. \n
    \n

     

    \n

    Cut to the chase.

    \n

    When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

    \n

    \"\"

    \n
      \n
    1. Initiative track. The active participant is circled in orange.
    2. \n
    3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
    4. \n
    5. A barrier.
    6. \n
    7. A hazard.
    8. \n
    \n

    Obstacle resolution flow

    \n

    \"\"

    \n
      \n
    1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interact to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
    2. \n
    \n

    Here is a shorten flow example:

    \n

    \"\"\n\"\"\n\"\"\n\"\"

    \n

    Once the flow is complete all changes are send to the chase.

    \n

    \"\"

    \n

    This round is finished. All actor have spent their movement action. You can click Next round to proceed.

    \n

    Participant controls.

    \n

    \"\"

    \n

    You can modify or move a participant by using the controls button on his card.

    \n
      \n
    1. Those 3 icons will allow to delete, modify and activate a participant.
    2. \n
    3. Movement action. A yellow is available, grey is consumed, red is a deficit.
    4. \n
    5. This will control your participant bonus. He can draw a gun or be awarded bonus dices.
    6. \n
    7. Movement action controls. Here you can increase or decrease movement actions.
    8. \n
    9. Movement controls. You can move backward or forward. You can assist an ally (consume an action and give a bonus die) or take a cautious approach.
    10. \n
    \n\n
    "} {"_id":"nVYLlqVzmUV5dXAW","name":"Creating your first investigator [en]","content":"
    \n

    Initial item setup

    \n

    The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required.

    \n

     

    \n

    Skill

    \n

    Click on the  Compendium Packs tab then under the Item heading open up the Skills Item (CoC7). Here you will find the skills shown on the characters sheets available from Chaosium's website.

    \n
      \n
    • No adjustment - Can not be assigned personal skill points.
    • \n
    • No XP gain - You do not mark this skill for improvement on a success.
    • \n
    • Specialization - This skill is part of a group like Pilot or Flighting.
    • \n
    • Uncommon - This skill is uncommon and can be automatically hidden on the character sheet.
    • \n
    • Pushed - This skill can be pushed.
    • \n
    • Fighting - Automatically set Specialization, Combat, and the specialization name to Fighting.
    • \n
    • Firearms - Automatically set Specialization, Combat, and the specialization name to Firearms.
    • \n
    \n

    You can create a new Item Compendium and copy the skills you require into it allowing you to edit them. You can also create new skills by creating new Skill Items (Click on the  Items Directory tab then Create Item give this a name e.g. Gardening and set the Type to Skill).

    \n

    Setup

    \n

    Once you have set up your skills next create up a Setup, here is an example from the Items Examples compendium @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

    \n

    Setups allow to you standardise what skills, items, biography sections, and characteristics the investigators start with.

    \n

    Click on the  Items Directory tab then Create Item give this a name e.g. New Investigator Setup and set the Type to Setup

    \n

    On the Description tab to set the description click the  button to get an editor.

    \n

    On the Details tab click the   on the Biography Sections to add any sections you require from the Create a Backstory step of investigator creation. Click on the  Compendium Packs tab then under the Item heading open up the Items Examples Item (CoC7) and drag the @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Punch} onto the setup.

    \n

    On the Characteristics tab you can customise how investigator characteristics are rolled / bought

    \n

    On the Skills tab you can drag the skills the investigator will have.

    \n

    All actor and item sheets have a  tab which can be used by the Keepers to store notes, only users that are set to GM can see this tab

    \n

    Occupation

    \n

    Occupations allow you set how many the occupation points, credit rating range, and skills the investigator starts with. Here is an example from the Items Examples compendium @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

    \n

    Click on the  Items Directory tab then Create Item give this a name e.g. Driver and set the Type to Occupation

    \n

    On the Description tab to set the description click the  button to get an editor.

    \n

    On the Details tab you can set the Occupation Points calculation and Minimum/Maximum Credit Rating

    \n

    On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select.

    \n

     

    \n

    Creating your first investigator

    \n

    Character

    \n

    To complete your character you need to have an active scene which can be created in the  Scenes Directory.

    \n

    Click on the  Actors Directory tab then Create Item give this a name e.g. New Investigator and set the Type to Character.

    \n

    You can drag your setup created above on to the character for the initial setup or drag this example instead @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

    \n

    Next drag your occupation created above on to the character or drag this example instead @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

    \n

    On the left hand menu bar select  Keeper's tools then select  Character creation mode.

    \n

    On the character sheet select the Development tab. The first dot indicates this is an occupation skill, the first column of numbers is the base value, next if where you assign personal points, third is for occupation points, the fourth is for experience gained during the investigator improvement phase, the final column is the total skill percent.

    \n

    You can see how many personal and occupation points you have spent so far, once you have spent all your points you need to toggle off  Character creation mode to allow characters to see their HP, MP, Sanity, and luck

    \n\n
    "} {"_id":"7hFq9EqLviAxqMFz","name":"Item Type: Occupation [en]","content":"
    \n

    Item Type: Occupation

    \n

    An occupation helps to define the character background, think about it as the definition of the set of occupational skills (the ones where the character can spend their occupation points) plus the definition of how to calculate the amount of available occupation points. Finally the occupation also allows to define the minimum and the maximum credit for a character with this occupation.

    \n

    Keep in mind that the set of occupational skills doesn't need to be fixed, the system allows to configure the occupation so when it's dragged to a Character sheet will give the option of selecting one or more skills from a closed list, or even add a pre defined number of skills to select from all the available ones.

    \n
      \n
    1. Go to the  Items Directory tab

    2. \n
    3. Click on  Create Item

      \n
        \n
      1. Give the set up a name e.g. Librarian
      2. \n
      3. Set Type to Occupation
      4. \n
    4. \n
    5. On the Description tab you can change the name, icon, name of the source book, and description

    6. \n
    7. On the Details tab you can control

      \n
        \n
      1. Select the Occupation Type

      2. \n
      3. Define the characteristics used to calculate the occupation points, you can check the characteristics you want and define the multiplier, for the ones with Optional marked, the player will have to choose one at creation time.

        \n
          \n
        1. For instance if an occupation uses EDU * 2 + (STR or DEX) * 2 You have to select Education and put 2 on the Multiplier without marking Optional and then for Strength and Dexterity you have to check both, check Optional on both, and put 2 on the Multiplier on both.
        2. \n
        3. Finally you will have to define the Minimum and Maximum value for the Credit Rating skill for this occupation.
        4. \n
      4. \n
      5. Names of biography sections (click on the + to add extra Biography sections), this can be replaced with a single block biography in settings

      6. \n
      7. Under items you can drag and drop default items and weapons

      8. \n
    8. \n
    9. On the Skills you can drag and drop skills in to multiple sections, A typical occupation has 8 skills plus the Credit Rating skill.

      \n
        \n
      1. The Common Skills includes the default occupation skills that can't be changed
      2. \n
      3. The Optional skills groups section allows to add groups (you can create several of them) of skills for the player to choose from. Once you click on the + sign a group is created and you can define the Number to chose from (number of skills to select) and create a pool of skills available for the selection by dragging them on the group.
      4. \n
      5. Finally the Additional Skills allows you to enter a number of skills the player can choose from the rest of the available skills.
      6. \n
    10. \n
    \n\n
    "} From a7745d8fe5a556c908d4728ce9e257acf937abc6 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Sat, 13 Aug 2022 16:02:47 +0100 Subject: [PATCH 711/726] Convert manual jpegs to webp Prevent sanity limits being calculated for vehicles and containers When creating skills attempt to automatically set specialization Copy existing manual pages, perform basic tidy up Add formatting to prevent . being needed for manual spacing Change manual source structure to force each language to have unique ids --- assets/manual/effects/changes-tab.jpg | Bin 36310 -> 0 bytes assets/manual/effects/changes-tab.webp | Bin 0 -> 19826 bytes assets/manual/effects/details-tab.jpg | Bin 29618 -> 0 bytes assets/manual/effects/details-tab.webp | Bin 0 -> 16018 bytes assets/manual/effects/duration-tab.jpg | Bin 32613 -> 0 bytes assets/manual/effects/duration-tab.webp | Bin 0 -> 16742 bytes assets/manual/effects/effects-tab.jpg | Bin 63037 -> 0 bytes assets/manual/effects/effects-tab.webp | Bin 0 -> 38842 bytes assets/manual/links/default-label.jpg | Bin 5734 -> 0 bytes assets/manual/links/default-label.webp | Bin 0 -> 2444 bytes assets/manual/links/effect-drop.jpg | Bin 20122 -> 0 bytes assets/manual/links/effect-drop.webp | Bin 0 -> 11324 bytes assets/manual/links/effect-link-creation.jpg | Bin 59458 -> 0 bytes assets/manual/links/effect-link-creation.webp | Bin 0 -> 32146 bytes assets/manual/links/link-effect-chat.jpg | Bin 6182 -> 0 bytes assets/manual/links/link-effect-chat.webp | Bin 0 -> 2708 bytes assets/manual/links/links-creation-tool.jpg | Bin 12818 -> 0 bytes assets/manual/links/links-creation-tool.webp | Bin 0 -> 6492 bytes assets/manual/links/main-window.jpg | Bin 25537 -> 0 bytes assets/manual/links/main-window.webp | Bin 0 -> 12640 bytes docs/en/README.md | 139 +++++++++++- docs/en/actor_importer.md | 8 +- docs/en/character_creation.md | 145 ++++++++----- docs/en/chases.md | 8 +- docs/en/combat.md | 2 +- docs/en/commands_cheat_sheet.md | 4 +- docs/en/effects.md | 20 +- docs/en/first_investigator.md | 14 +- docs/en/item_archetype.md | 15 ++ docs/en/item_book.md | 3 + docs/en/item_skill.md | 19 ++ docs/en/items.md | 57 ++--- docs/en/link_creation_window.md | 20 +- docs/en/links.md | 4 +- docs/en/manual.md | 124 ----------- docs/en/sanity.md | 4 +- docs/en/users-guide.md | 74 ------- generate-manuals.js | 197 ++++++++++-------- module/active-effect.js | 6 +- module/actors/actor.js | 163 ++++++++------- module/items/skill/data.js | 49 +++++ module/manual/en/{manual.md => README.md} | 94 +++++---- module/manual/en/actor_importer.md | 8 +- module/manual/en/character_creation.md | 109 ++++++++++ module/manual/en/chases.md | 8 +- module/manual/en/combat.md | 41 ++++ module/manual/en/commands_cheat_sheet.md | 29 +++ module/manual/en/effects.md | 20 +- module/manual/en/first_investigator.md | 6 +- module/manual/en/item_archetype.md | 15 ++ module/manual/en/item_book.md | 3 + module/manual/en/item_occupation.md | 2 +- module/manual/en/item_setup.md | 2 +- module/manual/en/item_skill.md | 19 ++ module/manual/en/items.md | 29 +++ module/manual/en/link_creation_window.md | 20 +- module/manual/en/links.md | 18 +- module/manual/en/sanity.md | 11 + packs/examples.db | 2 +- packs/system-doc.db | 26 ++- styles/interface/compendium.less | 11 + 61 files changed, 931 insertions(+), 617 deletions(-) delete mode 100644 assets/manual/effects/changes-tab.jpg create mode 100644 assets/manual/effects/changes-tab.webp delete mode 100644 assets/manual/effects/details-tab.jpg create mode 100644 assets/manual/effects/details-tab.webp delete mode 100644 assets/manual/effects/duration-tab.jpg create mode 100644 assets/manual/effects/duration-tab.webp delete mode 100644 assets/manual/effects/effects-tab.jpg create mode 100644 assets/manual/effects/effects-tab.webp delete mode 100644 assets/manual/links/default-label.jpg create mode 100644 assets/manual/links/default-label.webp delete mode 100644 assets/manual/links/effect-drop.jpg create mode 100644 assets/manual/links/effect-drop.webp delete mode 100644 assets/manual/links/effect-link-creation.jpg create mode 100644 assets/manual/links/effect-link-creation.webp delete mode 100644 assets/manual/links/link-effect-chat.jpg create mode 100644 assets/manual/links/link-effect-chat.webp delete mode 100644 assets/manual/links/links-creation-tool.jpg create mode 100644 assets/manual/links/links-creation-tool.webp delete mode 100644 assets/manual/links/main-window.jpg create mode 100644 assets/manual/links/main-window.webp create mode 100644 docs/en/item_archetype.md create mode 100644 docs/en/item_book.md create mode 100644 docs/en/item_skill.md delete mode 100644 docs/en/manual.md delete mode 100644 docs/en/users-guide.md rename module/manual/en/{manual.md => README.md} (60%) create mode 100644 module/manual/en/character_creation.md create mode 100644 module/manual/en/combat.md create mode 100644 module/manual/en/commands_cheat_sheet.md create mode 100644 module/manual/en/item_archetype.md create mode 100644 module/manual/en/item_book.md create mode 100644 module/manual/en/item_skill.md create mode 100644 module/manual/en/items.md create mode 100644 module/manual/en/sanity.md diff --git a/assets/manual/effects/changes-tab.jpg b/assets/manual/effects/changes-tab.jpg deleted file mode 100644 index 331e901cd5f019f16d0d8fdcc8ac869f91b15597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36310 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 ZhC2Q&hO9hRV-)-vHj$@0nc`2+{{x!d06hQz diff --git a/assets/manual/effects/changes-tab.webp b/assets/manual/effects/changes-tab.webp new file mode 100644 index 0000000000000000000000000000000000000000..04dcbe04af15bc8bdbb7e0936c7c86f08e05fe20 GIT binary patch literal 19826 zcmV)RK(oJ6Nk&F$O#lE_MM6+kP&go7O#lFp7Xh6CDlh_F0X}Usl}Mx_q9!8}`oO>q ziD_-2x89%R!l(Z`*ehY(U4Abw%1`_8dh{S?O&z%KQ|y;az8^I=IUhlx3(feeTgTCs z;a}-~fIQxO>HN}q<-HSnWjwC)i@*DN5&EasPsZ=;KA`@G^xxY*zJAMpSpB#BoclNZ zKRZ89{I~lb@Lr^UDf=1tzwH0If8Ktg{mJ-8@hACzxPOpe$A6RmfBfP8<@84j{-*q= z`9Dx!T|R66C;PweKldM-|9$^G{u}qF+|ST|uYZ{S|NFQ8N9+Um=kt&AAKyQCf5U(O z|Nr=J{vQr+ynmc zEBTN0FZh4oKhpl&{O14n_mTUl?Fai?|NMS`Pv(QtU)FjZxEm*8bN&LoQ+wZn<>SMk zP~D1fZU7^UqsafU75ar$2U3QZ@fw)eXIcP189&%$pl%Ao6$r*N+hz)dR0(XzdoJG= zsqke=EwoUpzCiYA*4TgfGwy|o#gPx{S5&C9AbJVr7-KGaQElP{USx9W-gqBRX)$1~ zsj!DSzpodA2lMfF*C8Y#T{JG?$UiEw_$Ptlakg3x>HHaZd_+bmW}Laf^+#jVY|Cb! zW>#oU`EAnJ+>UYXzdf2&$q0tPgvKx2kca>_IC9NPmNi9@{ez|QvF33mgO^5{-}Sj4 z(wa)W)<_6(ga5kxac1GBXM0&_Opk?|YZjbHO#m2n=NP2NMO7a;4%Aq8w%ilJ7ry_N z=SgO1w%R|tVXW#M{|6>_Pa8eES7$2PF#KY*$i?y>bL6V)7f=j*B=!3qgPe9IF03=* zbFp&~=8S>w^kAV5LKgLjc6Nl2Qo1IrJ@MdiytG&IgiG;Jv+in{T}PUv3w+z<>}akr0)L9cb}m*JI%b8?u6c)O zg;0g5(2axnyjZ-We(uxncE3-yzm$Z-&%HbA-~my-`jXV&Eu@^xC@y!=Jdu1-WnNevf}*sTnz50uIC;Rj;YP3T1=z=DAd!*(adt#SNB{dAN_=i_{0{A*ix^loX$MUo2X;HQ zuNC^%J=Fx!%5D%A{g2p#rE_8yq=rq%e4l{;qm$PNeASoa>VzQnNG!EL0~nO_M+Yva zlF19<;GDB|$|bVADHdjxk|%i&rTf(3lcP7x0HBY;EE`>{GFAEL!+Mhi2Vq=7feL8u z&8;aBitfycMq4AbymUu9QY&z`M}rL;!+2jI&^#d1y0+@j+RarUS^CzEh&6ogcvY39Nc@CImv; z zg<}7%`47{^D>3aNWnUfL@N2P!$V74!b(6&>nN`m^{(ST3oW@^9Nn&Bl^ zN1E{Yy$tpMVm{u6aifm1dY;WnkfVQto1JUEOwgBVv7{jg6$^{NUOB>Y6&~r?xHyza zgzMH*v$lnR6@xSD${Z4r(@P@P$OH@OQBHREZD)4S+Th8#OykxxvP$-iq(&)o>j^E> z2fHK*#}jS}u{{42ZlFPUv0c~{cOOZT`C93Rj#_53i-EEEQ2->C?la~p;o zJ(gTFI^MVJS_1Ipho=<+e($|h24^u#!cc4(f}Oi-r7$zXzgMMUh!+Uk{*U18*F+s z4}@7C2k8NipcT6Q6oC3xffco=403uLf>gCmRfLSFHIH(yKls*`x@T=b-V9j*AX$;l z&S(^k8##b$_hBAnU8067x9vwXFVGveg8BknW5>(BMh&n40RH{I?Bk21@wWxyBQ>LC zlrjvb0J}BlLp;~NF;P3BORsNbZ<_pJ?s?cvteluEOORBdN|Tl@B*NiF>aqEB`u|QbD9bb|_Ho>56a*b>M(28Y^Z($ky$hRw1|B*zG&Ug~ z1`2K{7%8SLsw>icngVg_zXW?`A8X52*UK$My#uf{W?ZUQNv~!cB&uLW{MI)ve9NMI zPM9|V?}tXg$P4p(;SdGD!A=)_t~@VWFniKkN|dBnYuanD_6uFQr= zx{+3S&pE#r?E(JzC|F0AWOHkowqN*`bn)~Un&6tul?$_*vhIq0kdq$ii)xE-jlPuN zZ(mi+yoOcK`NmrYA3({M{1mV7e*4+8@&>wPbX=H|4)|F?M&O0~kbML;g zLfp?9P8`vv3mrJ_XK56AOGz*y%l}l!;jQk*2EM#Ep?W->H>%6Re&RCt2xGYUBdOV2H`6X%9S?BHyz0ATA7p_M)Yhg(q9B) z7Ola6a)eT+up~TaEa-Hk6Cr57vHJ^6XCF4S%L>ZYT?%~}*{Vh}7$cX-1-^|cI?LhihT$H05|-K2}&0Q z(mZ%Y$;--}sHYH+)$&Y-&a9tJ3Pjt1Qfb;Gwar{E+jbDGbqN&6WqW)FHlCk+>y_P#wA>+>iQdpa{E%X`vBE=*+XfC-2A zO7sg--YX=gz;k*{gR%Awn-xie4SsB`4`8S#7)fF5oyu^|jHcgGObE0d2K6SmjI+k0 zu4DS4$XE5Z-B-t^fYl^@rXYLHxvxMg@pBXh{$z~`fFH}Y5{c`|jZM|}EP^hWF>JLL zyx7TGFniKkNr51W;H`q`3-X{KFf?~`I}xOcP<3TbQm;lgFh&m?A1??kOVU*n+471t zvLq9g7`sQr8S7ktxmC#X`OxP{@`4-dw*{=TRAiVU17IaCb28Oc3ylrx;R`NFF6YUrUF|<{iV(38K z{38JlPkP)1lMXU)qE{cztXaWc^lg$mqA0!neqW;^E8H^)C1H_Fa|4qm874i`7S$qH0406Gkws1SA1F``-f6^PxE z9$Z%0Ef3@$#Nu>*_9}mY!$LLji1`v3C#arAzRb&=8=EV&O)z6GiMtFi0izNeID$2F z?5-{F+Wk_65Fo3bX}6{#<*Vhk@C(8N0=Fc>A~LZ2J_QxPKGR5C1SS3Uxh4i%d_@Aq zy}JMPI`?13IPp^F_Ah*arf1;Mup1|!{9X23X3VZrj{NUq7|(~%#%-DuYVD{+-h>5a z;>?)r>x|eHwlqJFf-9^=k}_kZp1n0|x|8vCJ$~Bq)b><`q^V73$KCznH{O_YsRlkm zkG7x(IBPNVSCvG$?0oe*M7$!lM-PNOk7z5}SPm3^Ye;O?Ce+|hSiyPnL(+~m`NKzz zKI^pD%19-$Q1BpUcq;QPWxYV0U|oaa@logrbrQYep*ef#ulsr z8ri&2H*%$5#hX*;_Y7X?)(ly-K97IDi8FI^gLQIbY}%hkzu&}}x%R!FlC`Ma%9Vo_ zZBL`$@8U`w6Y-Cc5BKpVZhfz4F=o{IJ(%^BWHekX);3k;7SUw5T&v10qRKKFE*5JW z9P+3VX6M@WgBER1qu=kM={H|nykR$TrC`OIQ_TM8QSbNhCT@MNXfb9`Ji>YP%t{Yi zHYCl@wr-?~3IF+RNMy{Wbj#mmba(j}{WpzYmxMhKY;-;9pzhu>7K4c{oAa}hKg*c3X=hVPLRsWDF zV7MR3!Tn#pIrPINYdH>fS9sZUcx_S+hYT$j`#JFUEZ7<2_QtdnZXeB?o*1*E4Ozku zr|sZJ?PWc4D2A8`LpXhdSzAT2@&J_lTGmGce?deT{VjR7rwPf=sAdv(cy-ls;k)Mz zklZqUlbNc@gXf~7OmSy8jmv)9BV2fQ@gt75qAzA6wNg59mV!I{P^vcGE*?z;fw-72 z=*80V#@gPx{ANnf!LgD*Vd}`PpBY*$n+;Nh&K(kSeNicVf=p}diR09PzPl?psFcOrlif!@JQEL$-YJ;#v_ZuM~=KF%6IGCRqh-^)_RjQ`lM z6CVwY`urG8zgRAw<{^;_3d;}4;5Q_3Hn>AtU}Jt7tv5b62ln^0abo3Unwfi-)@?)m z?mGZ$dCJ~E1(7ZOxWG+m%#|X3D>JVJb+P_JT+~a;7)3QjJwB_?Eb|xb!^gL)%WCR; zx_r4$khL1e^6wu!pio6uA}u8bce#>P7-+Uwk%{PsG!p~4sCxOp)V-DPAl`xPn&-t* zFPh9!UGk#7o#_Dj%Bkx+hj+U?^8j`vODzj|J_5wqSyTNdl1xa2qw##)!oO0bqG-6d z%IztT#xha5_WVfz*`KQo;i`x8v<+|KGfy4cpqLNnL_VaZu@{xfD>dh*8FkJHPw9FD z-v(!A(mvj9aC1ff*%`qD(lg*L6(Xa5({^#TVpxNp9pA~>kBi()RdeRoaWyIO+!vi0 zb`zNAct&l%*qFGvoma6Xli$%H(}5z$L8fVvSr+zzbL7CUUVKNjiF{a&6sz-Za+C>! zd(Rr{|I;@C4$M*tbEDvRaA|)Z6bcX(cxnZ(v&30J90#g9SE!uqUPXM73}$K3OX#G5 zfhpK8ak0xKk_D*v?(t@7TQ^R4hEC#ovyTU{fne%9-b8d}TL1cBfkmAsoI_=^Xv^=r z(z|Y!&`JxO9kN<~oT%+gIJj9)TB?3wP&*U0!#@?(JfsG_yF+dw>_d6zN42*ER~xVRJLE63@S zyv+M;8Z+pSb3Hc`Y>@sj{@RGYaDfXtWDxf}AcbM&lF0i?sV1n|bzc+}qw6iIGV!cE=S_T&w`@Ns>98WaQ9 zFCJ>)%(En8du;63NjdqonH3k=q}zM7B|^or;th<^Q%kRBQ6ml(6(&VFBm-pt=Oo!I z-RNE<+gCO(=+a{z&o85s9mh*cdT6c5qt+9}7a~%S=}sY#+2)nir?2CBRV+A$M4(b& zGzZ5a4i_8Op|!*4)@w#Q7t0aXmyOKt%YcrUNRH(d4K~#1VAEp=mQmO-IPep=6bNDa zB@H5MXGvCT7D4fPuBH*7h}l;?myniBo&&ZPvoK!+xw>rMoj3+7a)W3}c;EOjYT56? z^{_kjnXokxr!>IJu>QO36jld={i^3gZIyOu7phLkS)Mm+w#k>OlPAX2m*r^eTwz!j+0tih<_)PkczR=7 zWmjf2nCd>=O4J&x-J1N~cBZ>7^^hvMkC(8c8&j%(WtVW@(*=8!&CRTPqHKX0n>!JO zl^JeUAt1Cq)@U5yZv)~NTl{aD^1+z{D=x8{tq?Nu0meOX^Tu&rk|TvLB*8v5)=a%{@M@FKUdvmz{lR)tbnl!?Dg_MGwE((he*CB#3%vuK9 zUHqkj3y+~TAup9s3trq<(;wjK{Q9WUU=XqJy1_+$@w-j;lW!tG$G^(N4z|?KZ0>bc z%rYno@macU=RKHeFAnLGTCe0l(*jNO!2XqA9rBfKgU~3E;nQ|0saUAVqd!2OS=9cU zR&b2|oewoF`3JQ?H@YeJDw7sYTKz21`~1UwiQeM(ul8Hl{>E9JvMV9V-=^%{N;8WqJVrq#i$6*13MCpG z(TjxRhk4BKUaL=pxqhd<&H)N-Q|H?ML0td-(rtQ7#Hl2BQqbH${U!V}zjvdF3rO3% z4^v6QaV=xu^unfbF?06=DZpUd5L26=qqQe1c*A7C>X6=TDm*yUHvqwT-7_q;E630} zC|x+S>$b=A=t$~Oe{fVl__6)5cI958(jz#MwODsx( zkk!g3Hi7orp@MYmSbtyOw0h%N!rUYO=IELUOQM5Y;c z0-M!N?3|N7pv?C0cQJ12MIxY0j@Mo-eh0KWrg85e^SSMkZV{Ro;=|@qS%he&)|!-$ z!UPVeS0;?+OcEN#2EHeuuXqh$A_yqJUVQzMWu7(h3Ui;lOAYQWo94A~_p_(xo;IafJBJC%7P@DM2Xv+e+Xz)7^P{3|&t-z7jA{<; zTm0+!Dgf^5YPSv8XvXlYz#+|ROe5>S2?CLc*y2(>(y5dH(1%SgiR{H4rTlf_)dq&d zqS#_uIHRrIgCDKHZL&!v*OY4DXLI&kgdd8!swZw$3?Y^o2Vet_(|5}v>K|D3#Q~?T zZL$vsx7Mf%ijAQKghQqZQ^V^HrbiPV6}6oh#;e5aiblq!eAK?FY{rEXdjvpQ8DXIV z@U>bbLVZ%?k%GMBdOWaDsMbdt<7X8LyhDr3)mI|w{bfFq{xtt7X>a1m;1PFeqm=dJ zs&abu<1xMVtlW9)J8b>C_}JX zg^6Br?LXd4D!IzqZ&{rqW5uJ6_4ZC*@u;`sO!@VId8%@H)ZM8CgaE%29m}bTV=1j| zbjMJgTs?%*`K`hw#+>^4eKEbp%|bS4@+0(Q)ueYJ1grVc5VR4tcMiAD-st}nCt7Ro z@&?k6hNbVO*VO><$c4>23}g19!WgyqN|Sc%zkJgY@xU#r=dFBNHWyN1o&lFYevVl0 zQqEPekiQ7+Sm@&iHK0vj8zeZF}D$xDZ0U z4t$YC2H)tnWIs|&}J!8#m`>#?{{U;?zo8$*^*noly~q5-*^Ox(qUfS zDmY=Xt)I%2q;VE1q=LZq9mJ1MwKc3sSZC!gmR1L)`I~^w5M1w}hB-%MmbC`8$x0Hf*>-i(6$ys8uU`T~K)>Q%FbCA+00KZu;dzESyk$sZDpNAJ$cyxnE z@b)_veIH@3aK9|m)-u6&dAtnS9%M8sl@x?bkmxxlX7-BTTozxTm~PjmmT;apM*!D!8y8%zxA?DQF@b_b4j+sjRp zeX*0v%CEh7JgyZkFb*(h(ENmhsWIIlS!<)_pjD3(i;vh(EiFRPk|yDphF|72W=JN^ zicl}kqvx-JRor}qhvQzpKwkCE1AEEPE5#Xi&?~YyUTp>yCVRiT}HwiZ+<-4zCPvL2D`e}3kb_P^h z8z|2IxCumZ>5s9cn)r4W6@LRl2M`Rojx`8GsEvI*VB!*(c-yi?$SnAwqple+jl+4< z7Gp5D<(5D_W?5&z@4Z#Q|8?LFQIPUOcw@blZ;+~0{9^lW{Gx$ov(e+BREV$MSNHlY zQp7S&Hn5(})~DE49jt5c4Wf%|j=v`UO z!+Of}soyLVqksqhCSCou`qhvh%;)>#*~+A73eq=iH@H^VRHPaTi4ng*>%7J;vVBHm zcu}(t^U$aor|g17@poHwM-c5f<-K0I-HbheQ!feh>CEr*>MtOfk{eYpK!m;~6x(u% zFCQCLnJeEG=sestgL*Aa7N|T6s59SID+meNDNIOuojP(s-rhXN2df0z?rEu`nJU@w?Mv`F!DG>DX@1G_?_qNUAh~y$t>ag5Jln>2@fQ3%<9J zTESnQJY14AOQgLSzAK|frc}>_cy2uF?S1DNtR_0UWBNjT_L6>yx2$)MSlRiQ+{n+~ ztGJtGkPG~UIIpxk{S1dJ`-^k1@Y1E)g$7!RQ)Y2>5=iopF3OilJ^>tSn~8G~vu9cF z-|XG`gQ5U{4?;se{*|vtof8&kBv(#>CYmkxWIjS-@)~&#c{fAei`Ne+C_m$ziRuS& zy|zuc|LK`u3Hm*YP8REMJ%g}`D%U|;6%qV3aNZf5_#2&76EiPtKkrfYa#ZTz=a=tz zDMmdG_fxVqN4bbRh9Rt|j4xlvoHxq@4i3Q~$rwZe-w+yt-kyUwD0`a-TcZ<(JuuCnr@kv>9n%64DKopg>7G?Vl zo|ZrntN%R-Rv*>8YPTS^WxX*8;Frzg(mGcgVl zxBe{zGcN&k|90wnf(2^Ht41T|T4Kpl2wH;DNYfP-F<<>*1;Wl_|7|GcsWRC-PU5x9 zBxSt8nzU+dVkhXqs%2@zr_f4OD-dhg2CkZ&=6yh8Itz;>Kzh<>pZsSw038PqBZLPl z5$HtmDEL`Gb?L$o)FFwfJ#;OyI~OY*ky$#bV)QmMxe2Mq;ox{Z9EiilC-oU{G91_c znU2w8A=Bf>GjP&=HZ5`uju6H`D`tM_3S)bsKbmdQv^mg_RbL?F$T={_-20ROsCDL9 zZ5al35a7IKi4`Or+5h(He-Dh%>8dsx9?rC2Jr_HM?eR|%>0L&Bw8f_J`HA@WpPEiv z5*^I%obAV9OvX=MwmV{q0C>z!i4DLKst!RmCM10cNW&zNgI^#%bXhccOMI|SURs}D zNJD0A(J>H5?DrTY8|#lQ?$xdiWQ!#inhhI}-?$ej5JpQ20#Vk464mhWPsGWKBd>$r z|1i-It2>-uB|U4>OY%gIbc7J2FY$0Xlm9VOdvM=M0@2jmA%b!vEq2Xlvwf`_pE{YEEl@DC=nD1 zAT-9{?wRrAoh>+R4>5!XLpj;mw;*tM_z!%i$C1&TU@EaCBnPzkbOyVv24W7`zErd& zAz1_&;&`X3jCdGq&&rtI^Ra$*e~d2+`P=y^gw)!J@<#7fqrkM8`rRGQ(wr+?$*9p= z2{1M#fW20d?CxR)hY!CU<{T{W`dNzcuk*V)G=Pdf|69fNN0a*P1TpZv9+ zhkU*Or3|dTupAyutGxHEhOHkV}B;B99R4>_zAQ=sF#B_uIN3D*nhU4!a>+` z*ac0<3I_*n9Lh2yr6k-FLhl(|!EX#)Xz9KJU#hg3#xi{cH%TMPH8{oYw%vljEl}J@ zDUj7HD&5m^>#;t*mbQANG&EW}c_)wGzs7>kHZa6lm_0x@M(%j4ujJUJgx=y+PJ1zi zodSy*Fi0UaMMEgJEaCK^QN`n6FUOZ=xJX46Z9HQphDh@oF|^KH8ylN>x}MFa98(1$tcKJ>r?*%CpNHH$|)Hu{!= zdK)-}Q@>g#OX72iRyi?mW&O~0-LxlY?E9H^d~-u3G0pvL`>Z(DfC`bN_xeK!+eQcg zIRMFtvaAU*nDRnI`j?T@+>mM|Y2OY}#K157*mi0Y*&rHvPOK+S*hGyunY!PFYa$7% zg)WAElw6gzIz4HZ(_+p=R4Nt%D)!5nWzfWsdB=}ziy~_31cY@ zxdFY022Jsx4Wm8Au^~Z)(>{1#QX*gB)ldT9Yp63S?lOFfEIrGHqg!~-l#G841Y85L z>kOcte|OnNQ$*VDer=)2f5&)A9ehKnl$AFoYs+f5o%7_>K~1d~0QVFJ%bx8bR0C@& zIvO_EY9C>p)I|7skZ8@iy$W}5UKz(2lr4&iZT@Kan^E(IaS1jbOwYR=`D8A7i?zwD zbdO^lMzIFf7smYE+cf|q4mvQzoIhj(ZecselV{z*z$3ZkO;y3q0Wbr+-%5itTHX^} z0ANyVwW=?#XS<-OV|m0*EJh92Bu$k+QZ~9`y2+9FUqJOen4KdIxw&oYOobci_6_cwF8QXfj7GNHw~KT)N+KnUdC*f=j#|eeouh^l~5?%zhPH#>l^K6#L&&-Yi@Bn z>~4X>1#S^5HNQhOY(ev1e*;b?mrcwOY4)pdt6r+(x85N#wDBGM_xU}Co(@# z_>|O-(?0EmSKcBxJpoTd(MZfue4zB6!>w)R@XnpC!?uTjgK|9IVSZH9>~PAGdWL#P zbE&e_J2~eOjh{q&=T4&giweGrEnoQL<7FJ+g*r9fnu0W8AvdM5^VzsGAXJ14IncRT zkfsT*>8s9$E7WV{g+7{fi8Qy_v|*kMWBv|=+z*@7!`6(>%8|=+{8xyqqOa(%lGJK& zB|73U`fuT_!8*7Kul<^=B|a!$*wZ#$hEXJkK_3j)Bls<1{-wS1f_-&(-9iITkCxBe z%ZF(842l(%w#adh#)#V^JP?7a3@Jg`h4~HRcRv4~=Kx%{0nyQq#P|b^bUWez*8ei< z5Eh#s3E=*($rxveyizV)d|*bmj1=k#GT*&((qM)(-Hg4}zKrejmi8Z{T7#ny#w%LV zwuZ!%Xj1EBbEt> zP@eD+k~pS)^vC?MGlNqp`ZNab@MAu*@@e2#`jKK4Yh&kRnseYp&w$e$a^r}LH#HkY z8h5zg=+c}BxsxP?AM}6*8w7NVQ@BvG_Gm1O-#y8!>5<{~sG)W~<#i(1_c#e-U00}v zx9K)mCClQ!scFlvIfU&gy!I>gc02qV;7oFk!h zGr4Cvk?5x4(i?$pweD6g+<8j^Zdri5F}*>svB?$B37%!2Z9UH?Vc`z&raen|qpM$( zC!0&2ui~QM^kss%Xh)>idUB$SEo8I{z4h}fAdGF`fJvdVK&cQ6S55T_VL2pNw%vHq z3tqI6u(B>EmqmngKQND{l=0ES;iFytmo=9F9DHW%`I#q89wNF_>H>wdD=T{g(__K# zn9DFj;L8Q4UTd}1gx#z4y7UC8c9yCPAGDlr{z=>;RLV@+@I{Ra(8Uo{+sSSu6maz! z>svXd_ahV;5}FJ~992K0Qq@&_+vw2Lxo)zLjlYF(Vwar9acxUa!l8}%ZUc|CN=ypv zdRM1*dvuI12zW*2-AZ1tR17D}B{#V2R1u+a$(!YJ{CPYFg_CTN&Qs}=o3HndY2Fa= z&pe1{hce^8TXw~da<-GKsl=Oamx$4$pK8rOzeuhBX$QX@_Ou(Jk~a=qe-@m6z9w^T z6c>ob@QZ=PnS`}8#@`_7{$=tF2$x`#C@7m*sIEM_u!7g;!|>kv9V8>jXY>&{EmMZZ zZoJoe(c1aqayL5`w<(dK*ug*0xp_0u{ZLjVuVE9R$RcD|(FpNqJ-W2*9SU4&zAP*D zCE`t*>JJ?OiPIq|gG54(>dvmW@pGkR378kz_fR#3fp{a04zF9xhkiS_Kb|EN9-z_97W$wL<31R(;;sW10;!2k}J)3la!bM&1fdtqi2NJ!vPjRTpiVLl_7kWmxiJ44+e^x$0UQ zyGn1nX}8)*k!3o8r|YcS3ETmpk+R$A(8cVSxa8(%Vh4!+P7h4x*q5XC5cypRCHw6r z08v*mHM9Q#!-Y|qfl+p6)|h(>W{G_^P`&BHWAo8KOlqK&7;;STQd06)M<#y&9Muxy z10kTd{|K_DP&d+pHcl>pet?f$Lg|8rmaJxMH;cbCRHdX`8MXE;SPo4uJN4LJx&(jv z)&Y(Up~@-Q(%yjTj}0sbv8EhVtwrib%L`MmRi@QYci0_`Mn8!~`ex6l`? zd-F>1+o-b9QK3OoBdOFF!k>Dsa|Rp31${w|(;Y)#Q2=K+Wq561j_YmpJ>6MCdT(sU z_S!8dC}nD@_xW!=vIhlzVycLq_2j9Fhe2p8Gs0_ z>qR*CFJz@l=pGFgSH47?$tGKAbm$PRj%hFWU-1#=MUTXk03?T+9hiMPYj>T!{t=)r zaA{rF+SHnk8M%QFL$$&c{h`H{1@oP%3RUu#D_8_#NprC6nLhBWUK&ta+UVC}^M+~; z`iV$EYbbH8&%sg&R{FFCrlF;4jedw_8(Zv0*P=`ykG9bAG+V#Ex(4Xio&MKViNd4J z!6#`L7fUVB(MXWHI}eN+mLykw^I086)yTv;kiubcANqP@=Z&Z^J|yCWE)U5%rICV9 z!ef(l>I?52zHre@b{vO8GJ|MIdqbf}fhT2tuQG4pD))s%=h{uK_#FKs(p_Oikex)M zuE}mT4I*7GIm15fd03`G&dg;I=oqiA$(&FvUluZ*ke@c1&D16B3P6Jg=;0U7((g1@ z9&l6Be}HQR4JnRW<^lnj3MDGU(_UozInoaEqh!c2Qc?l(Rp0!PZy*P-*S#*K9pzwM zD#{EQOk`AB{AzCM0o^T&Vv7hdh0xW207EGHG|V%ISEYE*LC^dn_)=uAP8NYoWob7f zY5uo>EZ;IhcOQ|^{Iw*c5u?02sglh$8(kr30!{T6g^6pg!xvoJdkd%F)|?s9?Vp0aRbxg|7}v$sVIrfM7#4!MA=FSpNa+5L zpTYQXdF45b&$JR{2Y>`M<@f-#f8HeW+u?#c@TEgf@*B<|l`C2hQ{b#-6gxjb`b!go z!eg6bAt#%wz{5Z#l_+=vKeyBVVapr>wT|6k$NI&ulb&&2i@bj{)z89;aXZ`HgIq-M z8~;r_Q6B4!TmPBNL7_V+1u$i&Q`MxI$T>?9rXdO@QS9y8tE};@3*Rb#IEsaoH0$6w zXvY?9X(gmYIE$t&rhGEPFHHA*&@>%Bj3Cw!dAJ!JR!~cXt7ez;RVv`+$|2i!C%-g% z-%&HF{p&U2p)n=pjO4eG@pMfT)QgfG2n&jZtvB%sL_@g5`Od0DTmE;g0f`R_c9MWJ z2CujH!1rEL6X|tf9mH#3murhJ+3CSA&0o?F^nT&1ofyAD(~H*B40kMu;y3KA7yyN^5qR@+FRb41r8? zmAMVa>#8fOS_R*{IC(ZSnZe)3AC=y=8Oc`B3Q7IILjdGR70dVcY;}RF)n$DLC=91l zv|E#8VjdzS$+U#|)-qM<%5ZPdLLOFry2v$10si!Lke5c2Wf$k)ztlIV4!%S>adw{i zf665S-Xj=H4=n9kAtouz*bRRJGqacFqzAhGA~?-k1)F+Ll7)?on7}|-<;bEx8AJ#4 z%f0qEFL7>qZEo7k;TRJ$iC-|XF1*A$zDw|KVJM#4RJekpt<^w-+=+~cX)k2pe2cs$ z)F!JQ$k3iBJVtkdQU^?II`Dmwv&0XE=sj@Z=srBai!l!DU8TcI%Xb4#>k2j=FLKt) zl=p2;G~D|M;i=)Y_gd&&viq+&4)xFILasK-MN^mBQ2VB{5q*`Ms3ztAyGlL4v5F8$ zB#Z_^k_E^tY;r}VJ>7}nzGzx71>jA});M|eaV;G#UTt_-A1oS&GfU*%R}#yfxq%1} zu=i%25{y1Q{B>VkWz31k1v52eaLnzw9W}R|k zr?FlUPP2LvK_v0Vyq2P6*e?p17cSykVSln(NPx*3$h+G0$uz6SZpiG#l&k zU(J!`;TV_aVg6up!+V@+`kTV8NmXgQ%GX$ULd~n;p}eks z^3ep?|N7qS)_ndiW=cLTq|X$=$mgy7L?AM#!uW~fnBCY@Hs zM^v|6;>k%j>A``GZuOd(RR>l5DrizT3LNg?)9?Kw)A7a`T^cm!8h+H~!h@xr#vDdo zvO&u*Yh9FO#RmkZn-ST^K^g4*_>x8`Or>dtfY=Gj*XYYyctQc?tK$jC9FkN$2<$V$ ze?1mFhv9K*wAGJ7ib*+TXV_S>$4SI8k-CN3))4D@buXn;>{Dh>T@4leSCIOpud+R+ z8D#6?9!+xIN$X&%lm;iH`)xf87#WKOuGP*y(U3fYx9U2&fwSv>&Pq0h^^-Bu2D{^Y z)W7Z1ZJI=GTM~?aZzMsn{t3r!_~n@kSCc@1%I~b`!T^h45gN67eB=a+&1oH2d<_He zngunHP8M@NzYf+33614uW<)!z)E`;b8^C{t+;*Ki1@XYMFYUqH>pfirdxsmVCQKBL z%5&E?_Vvoxw7nz;t(*)Y#E+^iG4mSLRdI$k$x7AJy#XztBxlf-Ot!unN9xRO)m+I0 zdh;g{5?Gl`Gia1DAE|t6V2!@}QGbGs_?zIsBQWmNc=Ujsr{WP={qz(1B36GEls6lv zyGn@?288CjGaC~!WL*PDJ@DOcVU>g6DOTwRz#2L(h~oiAp; z)eNtEvcrSZLD8bIwq?w;3EB^1B4jRgS+Vmryi7maf=yz1R`%SS zCuVf~%X^eaSI>%{|MG-nQ6EO|9e8}`=oopT|9uY-uzxmnVnQfPp#gfO7ZZqM=9C#g z$DMMzHde4pUq67ArPvyU68FS>DJi;YuR6aj6d8l#!@qwe07fO3ODh+cTEgw zr!w;qwi!M1C`Bij*O~xZ!uJ~apNxzw8Y>Y6Vf6l;1#5@w<(wZhvJt67Mh!*H?z#Xl zz~6r^G!PB*LI2?tK_-eZ{KLrODCglyuPmj)|COGECKm+@Vm>N|@QG!`;K-RzVfVMh z1!Rqp_!e0a5U;w6pmWc)@GveNEr`d6VQe^u!Zrak&e93p?^m-|L7^4Op}ZyKm!@E2hif2 znu33x5#xsDToUW8dN8#{1>E~QC)VL^m1yJXuQh6$sqTbsXpTJ4@%ufy-{t9Pu7#P5 zI7b2SrN|j^vtIVgA}Hetbu)7kS@fd;pDET;5?OEH=I6zYnAy$3XUd?9x_2 ze(=4nC*qfqY{*}KzxnkJeMv_i*Va?um{S^wFT4`b_+#sFI5)p7Tqrcyey8{SrA;p7 zq7gwo3j8d>aq=flkV@?$&GcsyW2;y%IBe7h0ca%hx*!0d-twzuUsTV*wRj)CNlT?( z6_?kvLQPVlaB2BcRt=g~1m-gOtC{y?%iZ(;IET#gbnNFuvt0EiMqLJ@lz#_x+ubx6 z7O7JZf=~ip5=*#PGVqWH;{!0X5RJlXF-U7}8NV#hFV3fDmSx=5%bY;u&wo*{tMS(= z>M)aN#+d(qw#}OBD(!+1G<}z09_&W|4Oaf`V&MRLAmATspY>0D4GW&R2-DUvi{INP zFW)=HHtJY3@>w6C^ya6?&T#uM2ZTuX;s<_qO{h_ktxOp0$xKI#c`^``Rj@G)s5eRY zak`>&QLN=)1*Z9BtYY}1Gz7wnd39lXar3SYJ6Skq!zOX@I1 zJbYXHoAlF2S=VP)c|c*^fUq$xQ7*YGjjBop01s%`-hm<8Pu!)j3011zH4Tj%H0cyt zbxU3)8Byf|{(YkQCqh)xE)%+jtKFNwyV9Lqt~FtadV7hqono9rPRq`$vw%XTU?*^u z4Ds4P45{ zZ2dba-#-vX7X^W-p^CvufdskI#LQe#mF-J@^$_yw3rNna^lkl5q*Cmik)7xE8x#w# zEMK%5qSpR8_Wea7+^l!xdHJ!SCL73Hb_BO_D1DdDz<9HbZNjO1;0LTEBMzi zB~?+LkmMT>(Q^CcwB8zvBqKwPColfo1ovHFe0GjigF!nZvM!2jMx2 ztC)63cKdW^W~#BC>OaCQKkPs%glr%%hM_nK=YB{07y`Z^LFUb%`-s6hj@e2yCtxHe zIU`3ArQRBrrt6yQfoJs@;qS&I%QPfjUxJQf!z%)U__0Bc1bY<4Hv5qNH#jF>>@+cR zBXMBpcjR%UEesima$b;+gy9Q_r+q*4C|$VqrylJ+X8xJt@WFo#gTj%4$UgaM?e#~UN5 zj9e?gH_Ms4pqfgH60Z}73Hmv2O9cnJ)t>SpT?P%0JF+HE8&m(MxMcIrSI$qzTzeC` z(t8_Bhm2-b9z8wE0-jbnq6|R<2kxr+$^cyqy+#uL`!+1@8h*7e1&~D9tg-Km%>#PP z0^i-y{t!2Irlz_?uD}EliR?K~_DRr<6A1jbbEl9#{PlbaS0-lF$sa*(bTCLDFqVRa6tBud~BWb9?zCXa1#*A>{8 zcl!dQzpHbU!>n`f-uj+fdttpJH4HpXO6G3Z!q=X$937!WnKA~*DHy9NOx>gr@(9fS z;nQVvTZ-x95#y~d_`aM_-TA7>2CpUmr_F z$n;OmqqDC_(@=%Dy0bHk9y*bLSgV`UvFR6#{Z<;KjaE5;cD@?8h^PRdlCeK*9bc)y z?o{E$+bW>h3yGKFQ-r_VcP;SZ9NT`Sk1jk3D#+ZeWqfuwYDt-RMPgE%^X%iR+&%f=1-@!tYI3ZJmHc#cU)*i|JQ#si zM*Y`8J77YAs|PMBStqR#_wIv7O;&RhfSrNRJ z@X|nwor*gRScSK@lDkXQyn^?n*6Y{4q*KRnkDESz2q;Vy_-{h^s4Imf4t8f&=^B+~-XTgK(hwIQ zf&>tLx#6biL!obh0(vl`P_5Ko2)8gKRwS(Y?Wc4iiCh9C8t{|@NU4aD*2(-pCtgcP zg&?@!I__XOX0dskeCerYvnE~W*m<=AtIW@g>h#097P%*(z<}{qc_qirYuBqntmeBz d5%w*ff}L|Sds{7L9G6tKKlFlgZxitV0042toHhUe literal 0 HcmV?d00001 diff --git a/assets/manual/effects/details-tab.jpg b/assets/manual/effects/details-tab.jpg deleted file mode 100644 index 2d602183bdfaadd86e6f7cf22fefc504a8939cde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29618 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ⅅ_x`2v@xpiVD9{IkP);IO<=wB!bD^8K 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≫Hz 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 diff --git a/assets/manual/effects/duration-tab.webp b/assets/manual/effects/duration-tab.webp new file mode 100644 index 0000000000000000000000000000000000000000..7c05bb0770b6be7ca83a465366f297f72549902b GIT binary patch literal 16742 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%0A($Pm9ddBGwL#> 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 diff --git a/assets/manual/effects/effects-tab.webp b/assets/manual/effects/effects-tab.webp new file mode 100644 index 0000000000000000000000000000000000000000..3c9e8c3189e8632fcc96225b28c907d4bf887820 GIT binary patch literal 38842 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

      ?6UoH)2D-(6PYKo~y$SuNG8RqqNZ>_1qmtie` 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 literal 0 HcmV?d00001 diff --git a/assets/manual/links/default-label.jpg b/assets/manual/links/default-label.jpg deleted file mode 100644 index d8b9a66dc1cd4fd927a0d4810ed56d14350afba2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5734 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 diff --git a/assets/manual/links/default-label.webp b/assets/manual/links/default-label.webp new file mode 100644 index 0000000000000000000000000000000000000000..352acf0aeec1835ef1eaf570d5efc45b312aae48 GIT binary patch literal 2444 zcmV;733K*RNk&G52><|BMM6+kP&goX2><|4EC8JWDkcFs06uLrlSd>YBq1Ys4sd`C ziA|Xai*qszyE)lk0&q!WN_nAOi>F8ia~DOg#-Ba>TzX&HPn91aIpe(r`VILXX8ol5 z?9>a=zvr_8J$m{N`j5B2j^56C0rfl3_w;Y}9=89(@JMLRpdR|a&tfHB^cGndkH2A-x`pwg;YAx)e(#XJGHkP_ufrOg}_ zGF!|&r{LA}5rqA`*pjCxMq+-j*#q}*%-q0;kKHySv^ZMfZnqP%v3t8#OqosThyUiC z%wHd6A7W--=1O=4Ys|T94#n~?y*YIN0002~`y5ne&JfW}!58E~PVer~Hh5~_E4OSx zDCr&0P8RwtqZsHWA<_Hy`a8GaVt=hwDj8vKLhR7c1WUYn0RO*Rzw!D_FUS&nLCJW* z=#Nda_mg~maN)imdEw4RFO`=%j@}J-ZD_Ze<*&djC5fPx0$vG17@jeuC+?NLVEggX zES|9cv?=Pur#V}81(E6pjc2cv6o@^Qx374{U=pkc7oGml+bw707z)OY?10G5k-!R+ zkU+~zYe0!^?El39<6wqVI6$+Te_3_ad3Kh-dci&^Yh(b9;18pZh*J}stDQ`RVk45R zU%Ws=7IYzQ{uht2hNE@I@l~8E&Q!=r{#gz~ugPY-;~~m|z_kW`i;aSwz!G8d!~NMf z7gy9Qs6!ERnk^HSI*xa3WH^=kpX91l#gLv1jY3tBl-l_DLYR^sAp!fkIS@Rb7L1Zk3JfD$Shng#c|7 zud{0X-{j#4#M8RtOnG?ZFB%Mr?;?;ZOPl`pzOCRz4=|kpJo*;h&=cb8xCKs6hhzD>IZqq-XH9j83 zT)pHua=r_hI-Qh|BR%#@z2=`8TI6{UeqpD7K5(W=BcCWArDvajaGf_~Di9k0jSL=%H#pxER9*#?NH(dP#-IUq5T!q ziCWhI@ybuR!FIh78*v`2lTDd0ox)s3Krx>@(3kQd?MDy+_r*AV5A>5R5tH*<6RXJI zTZomNy`6yi)~9jWmT#da3A~2`A;DGfvTo3KSrS+f}aiU!0YvV#o}DWWbptgHNJ$(%QStTzFnH#PtJd0 z&e(;oa!j{3FWYUAKX0b^)^{q}%&BO32S9S<|5(Uszm@BXW%fAm0?W( zn9Bs(mXF(SmlR4++{naa_-9`t0dJH)`F8DgX_CAp@(s`5%7&CO>bPw$cB?)NHe6NC zzC~Sf!&9EDXa)5wf5t^XU(o}Z-qwr~%^ezRWx-#BW9MaUsn2QYWu{%T*Y zXtlV@M1KxYvGzX)UNK=VP+=cfttfHpK!pVfPJYv!!sk~G)2l8f93Jd z-SI3Hy-Ii@C(h%dyl!}sUFt4Tq-ut?w5tRvMTHQ$j2>c-<5W1zxB zg=7AW4**gz-1z!Yh#FToLN3B<4m4H(f14D{s6YOsoWym0JG`=r-=&EYg=oT6(pzMb z_W;ialT^nE zQ-3Jl$~S`AICVbzqpfk~@$JPZrhR*o@3vhC#$qa>qu|8H^QA=NXF<{hzxS3bVS%EKmCy=Af(Nbb)&G)yt zeZZ@ZI=n(v-N@+Iqd#8aEKRDhXT|}I)fyjbfsX#nB#qsn@?zp;kRow%LIlN~XKhmX zq234bTX3QbM-xrP5-Cb)?1(-lTGF5cmL08KGzf;fNc(WLiW@InMr=Ko@tsqQLS)K?~HDUP5 zBP1SRXhuT9`R38k*$s<^2}i9t2ux_myW&A;K}@dOOe@|*wcbb{k`dAQmCgHX$+~*= Kl>HMF;}8IL3d5xU literal 0 HcmV?d00001 diff --git a/assets/manual/links/effect-drop.jpg b/assets/manual/links/effect-drop.jpg deleted file mode 100644 index 899ef8c8dd5cee48b637183ce740b5001b32ab6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20122 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 diff --git a/assets/manual/links/effect-drop.webp b/assets/manual/links/effect-drop.webp new file mode 100644 index 0000000000000000000000000000000000000000..30e52cb2b4fb1eb59a636c54ebb4271b5efc4300 GIT binary patch literal 11324 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 diff --git a/assets/manual/links/effect-link-creation.webp b/assets/manual/links/effect-link-creation.webp new file mode 100644 index 0000000000000000000000000000000000000000..6b0c09d82ac4de00e50ba22761361bdf9e57cf04 GIT binary patch literal 32146 zcmX`RQf=uI3JjX8RQ*Uz@9BtvW%3foWi3{7zsYw+Wu^?j|8z0u%{7O zOjm#nFz`$q08r1_lKqrIn0jt{85fYkC%Rw2@!Oqgv1&uFefti)B}e|w-~6HkhWt+d zRDNT=C*B(5|0+Ha{uAs2L;-kzNiPzw6`%S*{q`OQo&;w;W4}GGA&&>z19Jf7zls-~ zPk>{A;~(O;+3)!`!w18*K%#*J0675o$MhTWI&wbISpud5y^Z$pV&+yma2H+wH0F1ud{WJl-O^eP6MYDLGaGS;VG_e1WyUD6+ z9J$^kB1~U}ff(u$A<#ueU8cl+9?lI&S#_5~qrcr>h<3G}^36O)vl4mGaNpwu&-JXX zjfl|!`;g$byO5I47EE?WB8+HF!Y_yiQm?JCi26tQqKimgX_IJpNdAcG&gU6>1Wojd zR}DqGP~(@6Od77~3owe)Y^s6HwqF?lNaG*8QTT;os6+r5Rak;A>WrDXsDcOn6p}SU zIyU}KiinX4@yvs$>!;>euAF|{<&vu*2?5GxTsn=Zi?q;%VBEFQT=toNp#ElO+qG-| zJZ{FuK--Q9G1J{Kt|&|=RaENbc9DQpd2xw*AL+G5Xy+p!8EAV-9Td`Hb$_yCZ>)c1 zvUte>wR`m`eA;n$+14XG;=9C*z})JUZ@CcC{BEvQ7=mc3YNBbl6noivY6_$RduHXE z^+}A1f}uW~DS~xPx2!E~B6Mfpja8M-g$r9MQcJUxp-IM1-fX_}!NgA#rLQinLy+w< zhRjU%t#AeWz)MwP*A89rY-7em#1@18dSbbk(D;1M4tWVD?6~^eA!~nu9F(rQFEqw} zf%q%&jFyV~8rsPjVdq+w(+;c>#u6crJxechb#Xu6%z1=sa&RCHBiKm}VLsdCfuJunY4!Hv%kUpAAa((f{uLF zCq4fC>bI--)k7sEY>}bSHDedB_!{I9Z-n6tU$!(QZ0;OC^ANglbSsUwO9cn72w zmDoa^I1xvLc+GppL|-rOM_~*MMp7s9riXA(+a7o=cJb3J!gn*>wN@~$=8m2e2f2v0 z$az)U@^lW#bGLzzT2{D?OF7PO3GTgyL7fB^ns~a{VtzEd{kX32jTtztjCE&%J~?hX~1r_FiM4y-2^Fa3|Oag$ddX-O;YoVWTM-z|An6!Nox7QVUY9UmHj z=pjj%svtC!n|J<@YF?0tru~yq%GqA8jMf;3M6U_rgx)NO66!!0j{ABlh%8pl)K`US#tssI4PxHqGwt zaoc-Z)|4SEbM3Hbr(z>j@(;0igu?)Z%}Oos(}k|oHrlA4R_n$sX52isqjtQH5(CX9 zC_EOk2q0FNck`2X=iPJTsF#9hi}`rwY-~&xP%~x7k2~Jff?qP~f2Hg{c7qM@BNxiC z2u5l3Y(AI1z08M}i<#7CBkoq>y&Dmt%E7hEkZ>ZkVYs;Ky#Bt{2|V0`mQAKT`J^ez zgaB5dESDC%It~Zi@8`G_NYZRYXr}HfNgB%KckW8hml)mC3Lb_jAN=yX@BH{k-m@NP zLtAd?%cy5IBE;1jLd>$d)JFY{K;qXB88M@(F|U+Mp(~I-sF_D^$!oN8@l&&+Nzu{< zdJK2aXF3W|VqNc}6S4T4DP+}yJqE#*)vE|L%x*OC6R&t+JZ>$EYE+5MDU{}lhx#e{iE zq%LtA*}@jB91#;1f9*?rOqxxZq*_p~i3HX`RU2$h_-idXLy#sWUuP&P(8S8lB1dY; zO*xJCW(2_&=FDZyy*?a9QV*^8K{>F0LiC)hSNM-^LcWUiUB#|kb{O_f++VSrjnen} zHWGxN8&H?Ba6+WhJTeqmdL$%kiRoP=lC4q`l+d+byIg_lJv;^w_Om~>zp$Vg0~Q0b z^*$z(6LT+?Rj+wvFvT(6ZBw49FmO!@w$TX20s0x&A-*! z3*_r&LF05$m{5nGEqylpBo)ykLLO?Usgm){9`4CI|Jv5qnWdW}mN(rT*9=*b(f4OF;2!@rcTK?+JW{q!_RzHxr9{QgQ*+w{Q!H ze8>w>O$)H`11&NrU^M4i12$9Ze($wM$1eZg8D*jiF=3fIiAO<%g7&|VWBK~VVCfyPo=+OUsK z`E<|Auq#s>rs{PUkzKIuYk#ju4o|b7!>+MLo%{2TluaT}VufdYV6R-LD4 zP-haQwJBsG4_LbSx`RR$UQE_DO?s(B{Bb=Egp?C!ptAKlzNV+e&Ht_^#5GEljb*;X zq~}deTy$V6!DIq4%Q+FpVg+5U0Jt=Y=;henBIGAVMhi7)96d?|G)yqd!tc^L@dvHB zfR0Eu25*0@hX4ezFyS+C;~x*hEx9r>YGrY~m3w}!)K<3x%zW<0Ch2cdWF(Q)kz+xm z&1Os#X1+l)g8%^eLJ{)3j%J5DJGU<&yJ>{jk@!_LN)VO?jud`QRsl&XwNgprBK&Y$ zZM@tAOgby_BbrfF>}mla659?{RiSQ`kFp^*wYC*Qx;i32)oY2KTA%~z9~9qZ&K9ra5qs)!I3(kIal z)$2yvrYCR4904d!8Wer`!veY$BhUDuKB@qr-7hKloDPX# zl%i4SAR!WCFW~wTN1?4RS$jqZ==a1mK9*+Jq3msr(VL$lu)nb;S~?*cvzlC1kyDq> z!a1BADkL2p0KO$GZFqB5&7O-v8<});j=xGgVKvjywW3eP(YE?_-;?@ zhlJ&n?ZotwBDgU|-3W;1B}_!mz!OLsKjw-Egi%E*Yd>JH!T;%_9#W}6s;Gs^FbMiQ z>|FQgiM#Qa0_RoXD0>)UiJuHx;{iQcE?0QH{?ssToSR03KTyn-N!Ssp5wKG!rus?_ zD=`aQy8stb%cwVU;fClHwUN?1u4wcrsGsomRdc}q^0$N#s^a1oC1WFOLvGY)OcRe)zg&H?60{;Us5hjF#i(7a1vsU;Lc}X$&}-Ie zPLYh&MV!Lpl+fw?zuPvFD=6K;a9__C-qvb(hOZ$3%KsY>S~9ZE(fv<`ps*q-)AfIY zd`@_{=_%sEfP6-Jn$R#1mFf@jp1;RPNBs>G=r_?<`=iG z+L-@`HK-mYOy~c)CZKAyB>-O>O85`hOv^)MbSFwennDNwkz?3vTNk5p(`a(>x{M!7 zXvpwD8y8G^+n#mDd3oIgmlG^k3|i`W)ioVFM@Bf=DXQzGv{${k5guw7{#|N=dBF@3 zYa!o5Gim>UH$L+8-|noUaFF}W>OhH3K{&^hCd=Wus+cbss0eVBz`Xj&Z3K}(9)vQ9 zwtkGc3JjbIN^XdXAq$eAW`BV*^(hQfOxe8JXsAumi6CQLvV8vARHGNSY2#G;-;|W5 zvY2Q%wg#N!Bz9wE1<8!&_8)7oL5g{!n2oxuHW~yW~A2 zl>K?;wIRmHE(D4wmMGnhU1yEe^v>+w&kx_!0{r^;44fEyvYxo|hk0La?XiFu+y~cB z0vSw86ixe|*ZAkrWuJL5%}A%;KW4pzRLGTi(Na>r`aUMzDz8vqw}#&dJHm`vnKwJ>trmVCMI;|n=y$Cjm_;!~4+T=q#5 zGjEIsK}e}_Q4|#>Vrpl_&vtimoc`O+QKC46InbjGcWOW%?t&s;W=jNAzX(*WeC8(6 z-aGDm4S3%E?0I4#W-nP20#q;k6{}ykPapm~%s~4OcWM5=Qt+vyL+o#AIiX|I>pY^{ zVAqIEifrcpCy?vvVC8M^@t@Rx$bPoF%ucqG3(u@{#nOe0yy3r2G-GJYWI5HF&UR%m zpK0Cy`L|4=0x5Kk4_f2~ZGdbm8RQ<6gaRTY1r1C@d>wyonN(FM!_Cx94zudDZ^dG@#MXXQW|OmN-hR)4zNli}oF9_Pk?m1JQ5hXfz%geyULid&NE z1h3S?Bn-2cy!HRruIRE1!F)84la6MlARBe=ry9UK{5Fhz2w?0Nux;~5Slr^3w7S7= z$NGzPgl8J(oWR^Gk-Wh3KUSfLuZ{IZs?=eM)o8+%svo#g+dAlCpLL4U#IK3)D?R~ZT}0pG@fj>h>fgmgw6Bnb+(gDfn`LBvitL!*HcIMVO(tBE9s*z zUCAF1sEd{qi?x+fDdfuJdn+1c+33qEY^TG=OMzpueU72gH@T>QIl=)WPh9K#)6@^q z23`{1ggcD$rJ$C>{mPQNkB3w8p*yT=#lxd~s&4uta2p>+S$V&}NC9pHMQCPS%Y+Rs zJx@7|Na8i%)Xi@8>lV&ZQ62X!?iu&Q3AOtERQ)I3@2fry!CjG`ozRJly$n1lT#e?; z8~w1G4ua3baW|B>zk?s=`o6Bgexs_5*O86dH2<;+lTdc^$E1F16UR}caKy!^_O9}- zetH^I^1+Jw;*Qrkr{vYvozZ!X``@CEY9kNH^e^3!EP}98GxbB(K_$uGZg(*>u9QEeczQ?p z1xrbm)uy_1cnwW~E$mk+Hy!dIteuApQdw?L0c4-!xQw~k<-ug{d`R(iIBpn2NB&Yi zgjS?wKF!G$A_5Dziv^JR&KJ9^QU7!##i>qEb%haH>-yp1y9V#}1%>nRRYIS10W_nI zTcN6QHtY7DB&5if^L0#YXK0Kt2x>2wIwXZnkDs{PXnnSrnv_fB* z#?=n-cd#!f7&uL6LiF}o{@87A6tcY<2D=*y@xZpzT{K(?;M@D>Fb!&WRDRH zc=__Hmgidj<$nmZVhz%J75{tLsMTF=n&?61??~4;iN6ZHs0rS_k!ar@Q&(;9zP2Lx z?W@;;nDk@Vrl=%S?rJIV7x1C2e+kW5TkSW=ai5dv5ASt|U^5h+gKYc4_=nI!I@oA_ zbD#RaLMi$cou8h6Jg6!s(&j)TOAsgxM+< z->*DL*g?!^0sY_ct%^a(3J-FGh;E1Gr^Q7W{k|5#0VXko4{sDwB7}lS;PS2!!uORm z?qI+eNsu_*6rvU?$(Zy)jH2c5UF{RIkCf}Ugv!k2dN{RhMUYQ}*MoGCAxn-Etu%OB z+4wmU{>8?|?zAp+W)N;7IT>qb9_6BjNpz7hUrQP0AD7k5kxgs+hi-4}s z+NcFu6FW561;Tp~UspILwWd;SvR>?4LSf>RH>ZOY)b9;q7s-Q^@r+ugY95DYu|O^) zd@}IaZiirv;lT<({y&T~RuP98OhNM>k^Axr!!+JaXX^PJG1bRCt4-*-x5+_Gj{z5Ous*a?sk&zb~>+^jYeEshQLY7uXoqs)w^D1 zul#kbKOtk(nG{#`Xm_lLI_mFN8nS-S@>-x+U72=WvU<0rQECX@BKDnoJ)RDgAm>dS zIRi-D&?;GqSKM(?qtTwKz?x$+6>OnfX8*Cw}{xOAW1um1x zo8t%?L_7JJuIRq#_Bc9A_;Y0%@cfvGLH|iaM%^#!mF;Rpr@YxRZ zz5>3L8n{{Wq93`@v37kNEpZHbnryO+_k-53xWw3XUR;b1p@-Ljcb(ZGry>lez6WdI zLmhgYy>zZKowCS|>;kzT3~_gyR@AU?0X-~aFPz$+*E|*+V(j(UZR)iPUxaV9ZZVC0 zzfWiF@U`^@ky{c+93La><$pnDCy8?jO`1OSOYU{D^buC%FF-_C z{pv?gT6QP)W(?1sEUbx>{3P!Zj1&=ubXsz|nkwG~b*T2Gt=lIG>_pJcR*?n^&#XQA zodN~xscyV%H3Vi$orLoFFIkLz)6qK{(ISxal3Cb%i|mH-FBjBGp1rmA$g$Weoh~^Fi5!_ zdi~77P~W_1R3gqxL5~I@`^*7Q`V=JhR)_aP*ifTfqs7vfSFTkrr|&43(hALpTKien z1g;*Dzq3xC2yc(IK%ZJ3N=sCilJ;7d5h7_SLcTvwe$S7UX3t1lSJUQa)1S|2Pi`#I zHQl1*8B*t?N-r^N8njR&Hp#)z|9Fdc>;j|y1pO+XzJZ|{m2~@!$x6{68)FMcfhWehODlJEqE8ZB(Dng170N%kLfI|#f{6gdcHROiRjst$IJ*3OYP~}X038{ z%V!TuX&>6DQJC@E)@!r4@awcD_zq<_xQP^sNRbcc>#BiE{d`|`y}QvV8A}x|fNm4` zooS(Ino2cIcQrs3=lA%^_*A%d?*2^7lHG)aC!;&J?PLjlMTkklx_-6S3bD}_*ry3h zmlU%YGKF4_DB!4Ur@+f4hhJnGo)x2CfA!GvT3vN}t4z=b1mP>WhG7vN>_ZbqkN1Dr zI%Dlx7tHRohYLXF5k+O4;#!#ih%&HWK_#g*(s{2r7-x*pHHqQXy9<>wUW&P>^{JCN z%2c~Ab=TDW6r!We@e*`kSd333;DXUBnOPEw48jiNg_DOJTq+#goQhZwzp&lk!_#ynhq;I_1 z@36$1gsNr~aZJw~Nl`i7TM_$yLYlCZ{?=_HInkQfT9nS>0gQY>-bqE%@W8QCT406p zB8LMA_1LxCLnajL{wdw0DXHc~41kf?^o5#$i_KX8cH*)k?+&5t4tL$*b|xV&VA#0> zX;-d6$|#+J#Nc?rr$ozBmhfr`DXAmwb$}^K7zS@FDDKtIEt+EEBwI>YDS3_=0m7>84YUAow;YbKJ{Vnv=7prR5BM_!>H)PDj+CJ2~;$L1Nt3 zYTZG_cyF?DP{I8xBt%J;iZ91`O)nzMhK!sX3`X(lrr>hI_#vRx$MUoAbiu)lwn*`8 zj!i^z+Itl6_9K>_j={GfTMjgbM2t?n=R4eq~+J}TcqmPXpX zz2BL~>)C>LHw0bTG=3`|+Rz|W5( z1MRG%HTT#U1_9n2WLuA9RcsBILAdWqFzp;Q`4HjHOASPZ#Sh_({K_NyQ(0!=4CLjP zr`P}nNJk9SWD1q%mW2l$HWhF6CxD^-Fo?pvDy}^GqJn&9{V{(}>#~?uIX~5Pk_{wu z0oXaih^#w#L93Ul6P75LXM+$V$1@r4kFqgG)hk7wl}wTnuo3a(tU=A8gOk5&$!Dnjf@MmH} z9afZr=OLP$qUyiGf+1TSjb0rd}x6&KaZ>m1Dn8{FGdt25C@j zd?0kZ{jRD8vOxB~T?7B^8Rw@OShv67NWoXOYi5A;OTvctmRVBl6eH#>D>J=sBp3{2 zDz36%yVYuqDT~Hoq@eutF}oy*BM1^0B1G~Q%PTJFe*1o{qlfj|===)ZEd$V@;XTrN zfkXFrciBp*Xe3!6+Z+VPkL7d&Aym$3(;|G3&#(&QXC$jjQZSVj$%338YThMNzkVZb zgN*Gl8?_+e5K!(S*ut&7V(Mg~+I}Pj1)Vx&am>q8-bWqA#>w4}=nm@TSOoDC9cG*{ zSn$12|JlXpZ9-OxkEni_Kv<{+I|~LQM@t1WJIL{it$MePSPW)+_EwLoH7e2zB8E0- z)Px#aDC$MNS__dJ-fex#b0*qEB zy?eck4xN^Fl>h_qqm@X)BU8M5U{)a0Qm$(g>9L5f(djp1L^gS$vog1Szh?2{b}oTJ5|MK*T{1VRPg0f- zTb;qpY|jqlG>7`*5}@0iWBY`@d9Kp}B@w>?F4q+kL)RevNu(VLd)6kppDtW8C3>?c zshL-uFZwR7(+E1=z?>ylA)7_03S7q7PvV{7f!wVW%@hyaN3(5^`5GtcK1B zz2XEgu8J+ez~XPNi~(`zaeA$+U&2?Vd@3p$kZnf)>cLf8WIr0LG-@ZgM_5b7pneLW zYkbxEfRlM~4(9Guu>b3OBQ8P{mAs8dPiWI5r|9QT^0TW-5kowP3xrw8<$D;^8ma60 zR`GVT`LMzq#(|YQ0XvyeZn!IotU$y<)6J!m9u<|d-|t}YHI&y_+ls!UQz&mT0wEE`15s-Z0m zwAY{Z_(Da48g~)-$;W7X9y6WR-F3u1Z6ip>N(TDM(-@#91c??^$UrY2{cRiB=tn{X zOG{8U#Hl#q9O*j4A%V%6nmW zUlJoq*o%MPvv9Ye%OFoGMhNBpiB`c!`Z|DCUb2Oad+RUa86VgBw(I6=KXOqcndo2O) zK5jIVQdX|WrBj;IhHPE<9^a}rT#67z94^r>{o#(ORKnWtarI}w*-8dF&8o9aQ|L_a zOXSqf6J4TrfGhr2tvhXx)=PY3p6_h|YGi;)w2fISknf-#9alsmt;qpij@@aAO4k1zr1E<_(K3A zpQ8w68iclSvPpmib&f_Pvh|^*jl-p+X`k3Knw)OeSt+yZ9++28S?hroL zl&{gpXE`7^I`v(Wg{=*qeCu*Ov`L!T^&&fWilR+&HHsGRT-~&lN=q#!bBj8GMUhq) z*jhsVTv<@fx!_P8eNv_y5+ND+ z$;gx`m7!^P{Yku8u-QT5B7F-Q%40Cm1Te zeC*;Fng8bGHf5FmVKbxH2=;T{5z8B$*v1*(pd9)B(@eKQRA2mw~?3&tu6d+yy?XG zk?FctJp6Z9zDYYWBj0}b=Z7b9<+X=XxvjO#WG+Jsqu1j_6-hf zYo-9NR=4QKp8Ifj7ZT^kQ9vqFsb^aJhEc?^}% z;IvnXjcHsZmU_^W?Z2B}w1{r`KNHSh@|ZuCf~{KDkN#@71cf6upPTVD|6q~LlsF7k9_oO&`=?p zd({L?NQ%UlKqR8grfeCv8{-+EOsSrdGGF;I8>|@4llj+W+Ff)P@`e7`_vlT zwsGmh*;^XRNZK6=Zsz}VLPBgbgp}zDaqEMFw{Ebs+$THW4ua5-BKPJSh2qWlpvHsh zK?+J+KIPz;R)W+{@mlQ2qgp4Y)1aX@f^m}8K;^*I3MJjf&;$938S_u6XdHX^lAVq; z%`u5+a*VwL8|*wmHR%nx7*+im)X-(uVA6v}zoaR2j<}P1gvBXMO-!e;=fq7Of1pAf zuPr#H0$4K2$!~DbFQ-M)3n9<7co5U1u^w7r2gV~X)DWH+kL zGc$&QxlLvIwXyiged%VMJ?Eni)FSl9EK*+)kMSLq2kA!iZL% zePI}ypT(LI!>5>~FeYOE!a|5(wk>5s4D*@-wDjt6Gp?BLU#R<}YB2-sAP>e{AL5#y zdZ*U+(i{mk0#q_X`}b$j?SBa&s=ab201{bdhWb-M)LmQg(nc%0N5`1NwoLhy)eVl8 zI(+MY;}N;9mPGWC`LLPLEnguGS!V6%gehWGKc522%v1~C#B4D34n6ftk%b=pI9;?P z;<;q8L8mkfwl~K;&gN}p2{5B&$zC|IaFOz~F!^h^1s#GCha`M?(7*bqW*TmijsJ40 zs_Qjhh{h4Un66`0J>o8=28juO4UkjADJTSb{oE=Hk8y zI_$RotB|6+&Rlf@7FV$;@i|5Df~uJs75$G(eQ&hrB#ahc9^MDKyg*#Zfz>Zaw()IS zNHcH8`o%jXt5#4g6C>U8Q3pB|VtdA#T#iFeG;@8J{F|P2mGFn-RnjKyEJfBGYN`mU z4PgKYVuj75`SZF+i{JD})plI%I1+zP%#7z_tD%0PVr-G#;fuk!L)c@(&xjF zc#mz3>gfa8HBOr#P#PLwvy2(GJCWtRcuvbZp-&uq!4>B&*yqnYYIGUa$YAwjy{V~| zn0?`Zmt974SW9p!H#~3c?PN?5P}m{a{u$)hN|l{xK>P;aZwUu|+#%0E6zQ3~d0}kr zH-C^KHLP~^Jx)K&!{pD&8Hmo%ERH?=lU7vnZTtZPA}qr03q4pyT&M$=0}F1Fg?bns zrisBbcYsJ#If^oF%pckm1A*3n+avmPFzyk@wPR*@HQcbsCxMmB}VVb_@Ih-3>SMU6m{QRx zNHgfp$4T5Zjl^uf4s$XSb_Qlh--64wjmC| zz}5VNTm}faXUDAb( zukU*(XZFinK9@1YHX)Q-Zb&-RDY_+Zkh-HM&WC%EvR3w;T?gi?eUaVzyjjEyG zf}5_n(9izCKEnD##9q;Rw4$UU=UMtDRXuVnD0}CMo7_;;o7iMABj$j$*I5msnr*0- z@ukSs>F*}$IyHhQJ^B;QA84;`>-iYptfg*z5jY5kA1o?E=kr8ci`o(@B-3C@v+cz3 z_H=VU@F@R*2nV;PzsSO{5$0jTn3rM+>zxM-$A|1IVtlH;?TXk&|{ zDc>#!9@dszOSOeNpisfa;b*K7Vs(p*^NfM^YhkW6ZGzyz%2>2{x{zDyD{Mtn-?#~) zr;s-Rit!YN#G2Boh{+Ri`p^v|ro+7fo zGSfPe9FD=s9&Ir0v*D6jkMQrwplv!~t%8SU9e;UlBZx_MzBh&fkWge;#$&r`kjLAJ zb3bRl*Fz`BQ(cOQ1XC|(A~vDe4XPw&shG?g=A1-^c4{Ec$ebYfs9zyZEs2x%%ML3# zhUUI@Zec&c23D)X>s$|K9~s+b1o>vODvK%bCT`8`G1!Vt%hAS2NRLdy@FN8+r!?^@ zUN(FSUoIausX^vx*nXsN!CZ{tung8&mRcs?DF9Na+!U@+uBR?bR=d-E=|KR<;Aj{i6?q9 zk(W?`L`conV<_}BOvpD%To7~{m5-M%b#^!=epc-`3hb7TwuYu>OqE!|kVs;E`f%uJ z!DA>jLLVX1zaAWMcp@t!m_YWi+1rYHt}W{ObJ5>E@~gxJ7=}5iFUlv1&VOZ6Ng9HGQFT z?SXxZ$@`Pvu8Au%@N%GY;$r z2i2F?%RC*o5+;!TVkRmO3BI3`e`538%7Baf9alal9k9w1cZ8=!1Q|66Swk_V)i@De z$GQs5FpMU6Uj8|dfO8i%yvRe}?NQOIZm%l}=)f{)hq5%6Mq@3;zBB1BdvdvFzn1BX z^)Qt3HuB!`$^dB)N)3}`Royy2Y3Lsni5C6{Y+yV-*_ zxW`L1X>WChj{Fg<;SZ;&Y?CU+ViTWjFYGNdJC_`Lp^wB+D#BeF0cQ zBe%JeH_X>C61TbY9Q^7bbaBIsveaJx1KuUwgOay{4p3lr+{lmked;$xc4GG(*qMR`o8EGz(lFrXs zxC|;R8F9IFH+xqN(Bk1h^R{CQU?zF6*I{IkYueY(`5`)686mn0$6V@NgjJ~*# zC09#__gqTrrptLecpxpX6?-Obuays75CWrb`%h0lCb_<8Fen}deI$#qn~ru#2L7df zraiSr)jn>?L&8-aP$0Y2`@m4QR~15OBes+ZJNzA&Vwdsp19HSlS%y^9DG+w3akMU+ z8vDG;_29yF*u`u)HzcypzbFX2?>F{#3~tvP0?9h=YS-}7lg6R|E%HwJ<|Hg)+2Am^ zM>n_mHOAJu09qJ;7Jc#DeI}+SbJl#jjE9=1jAbp^qXVluaS;t39z_LfNwfSAgv=Cm zZQkK(`PJ_5v)=C!C0Fq&W!X z+FHk&?}yY|#tZo<<;}2<&|oXS^qwTRhw22aj@Ok+x}16(Nx68bfjpDhtnT?!q#^Oq zU99>>>^w|$0FoDBpt`4-b8xWa*M5|oABrS}bC8=rHpUO%awt6;bRM-xzwMfNhQ(7{O;pIKk>=`@h5dM0n}>5!5;>CUY}=0-B%4lVXS|NL)NDEB@E zJ-rpFL^#@{`+NulilJwxB^3&cY`4W4%xYx}i-|qZ=n0(F1uQ>%l?|`~hLgyD^&F9+ zD1wxybnO{sg6-vRMu}rf!-1igX_3FyXt?VhBq?+EFOr*fPQwAJnf#f+*R@n^$nAsFiHa712AI5{=AQmk`nW5Zb`OLu;Ig|5qkj@R9Ab#iMYkA z)z+Wf+pVAXilT9u*zU8lo;|XJp|zJZrArV*vB+7pZ#gr27X%UV#%U;u(eY$JKU$-u z(#x56MmnANz5b_&4-gGvH6fflp~=Ot8lafPe*b-@YCDn%3Vf<<};)4R$!wJPn=FhiLHB z3EmTM$26i;q)277krT_&uH#jrdpf-L9!ZGhU>RB>pe_TRLAeqMzgdN!2 zpy=I`MQ3;A>r!NC|MD*}X{FLCJW!PU%a~M2-_w&{TM&~%{1%q`CBflzxirw)w*x7A zXXZA0F4;LYl7zQH9K}lUa_p9{xDG|QG&>#kdG?4FO|>fdJ$0CWen($-d6>sb|B+aa zRImvw1+wu{7x&bKOZ%b39=LF$=#z&khe z%Ij%`{tdd1iSKTDNrHYeGP{9yVd2fe{ea}cgt8F*t=3WCm4@*+b9Mri%WsO#VY3mW z!f?*#))v9m98rJ~ZhY;y2HUQmGt!|;l&%l+T_Kv9O+Vh6)hHwo{azn>>@erL$=fo` zLoA9=G+>VXGDKZn7E*P3ii}b5y2bpp^r94w+jmJNYt}9nF62>pOTqr{Xa0bdTSqbc zjmRAJ4P+LNL-sm+V(iLkC;V-S1kZ`)U((;(f-0J;8hezN*BLVQOJ(`%gTyPusQLvU<5CdsYGPjlS=iK&U3b_fIvmm?el1)g~ zaGeq*&EwaixpF?k414C}*mA;vZ$(7Xg|J#BItVRGKjung&-5`T)L)#$%D+G@e!^u& z?h&5{tfJ7;&9U!n?H93{GgE$+7lwD3+O%K+g&!1sO*tt=x=teTX3gDU?HSf6QFnT~ zg-j+3WLQ#+m`1QSC;84y*|c5c-oJkCkY9Vmjup=1)?dbJ{7ml36bV58;!_~;zN$rz zvy&RuBL$BS_a6rCC3lyN@+>l0wT8}_JtH^S8)3c#pf5MrpH8eP}snpk(J+bI0Dzmd2ae0;jj@GJ5 zx^8D=UN1KDy%X#67*O!Hz@DvlOPEgP6BvDLhIIKLF2FVmfeLVVOt1_HNP?P`*ad{y zP~CkM2`-*}|K7M$JeBZCZ_8ev;YWHB7!IvBwrb-_yNt0#ztd*YD~N80Z|{jaO*vD< zXu`McygbcpOAjfly88v9-yg#G_;~CDJG2#&Q)jB_yu(HSkCoJQQGs-rBHeb`5EbPJQdIj-^az0ubHRvy}Dx|)nu^EfI3Df|;`vU^fR z&RtLsLMd3MhAuo~2jS8!CT`zoO-)q_$eWcTBhu`sMOV=Yh`|ri(yO3G3-8Tr*$mbESyN>ipwe`fCHJ2vM zUVpR4=IYU-LXQl;2+5_TdtME3BWMNv~5Z@A&h<|b1E;M8TP!B0f-=SI{LAM)M zA!dX%PNp=lcNOXSr9rNwIm2qd%5Kg)S#%~#hb?Q6Twxm2d7e#J8d3TCY=ea-s8Qrf zJNf-e#RdhEJA%CW%!Q*>I@249)MxS-KuHaa^n9MT2M+}TPCXv|lop3XyH=U#v9Pna zcoTIX5Y{JSH5ALrYS7pKD>ie-MB0VrbU(G=cC3PRgyENUx5R?lW*H8HO_79)8<m@Am45k4{y3V&(BFIl)w*~T zB9|@$;~6u&P{uW}MMq`#1*e8~9s@1zIUoSmSoG>Q)S_}hl?`$^#rvH;Pso}yjdrwk zO;t5A)v}jc9|k& z!o<+x#ku9mq5#QggB{VxoVeM5i(y4DeQ(+qG8x_?uZ5K-sErm+%vMrJdl*MlSG7#OvIqv~P*qnRBQSuco4{dw$I(@5+n z)SrxBsTK8jpMmFf>zm7AFmX?}wz9vbqa$rMeSGb=n;D7;65%)?g(Fq*1_yhJ@xM}ILWpSYJ;zDkVHs}=tj2J(27vGb(}5q1$(X=?PzG_nx(L-=wg+S-TTug zglzkcS1;AWa+tUs0Y;y*x?$<&3ay;okhhU-`JTG9KWTs@+i%tmS$Wpl zAG<%Fl6EsY@$ZW?^&-TnoUrPs8(?3|{F`B16ps-uf2Ga%qxsX1L91D}yp4H#O`l_pbj zv|+I4{mCl<@U^p^x_*P7itK<(`N(`Wh4S%{FNM2JRcAUy4@d5(kp2vJ68-$p@jEIT`yJ6dmeGju~vBbJ8ImMSzXTI)xP?)7N}+MAd)Z>#^aJrjvs?ll%ixo<2n{qU!~6 zCvCwYd4O&%^#ihQ%O@NuFNtq6k#O~Jms zv)V%1&>-g7za4y2%hV(&8&_+YV5mMS1A=)dJFGuAa1llAW8Hj78UMdU)A&geOvVHh z=_Vy^T;m6PR7CvYwFH$>LgU%N^QEC6bXP{t<#^9WXAZqOox#DO>zMXNr+(r&&(3XgChlhI@+fgl8bsjyVnWd0f1TavuqD(68Th;fjg66;SP6J z1z&TS-i9Y5?fKXL5xM!6MGS7u(1x*=aAafBwcNcmp++GA4%?r|e>N$wWX$Lwi$Sa8 zcEe{f_F_Dl@|)nVuDhJg;^9J6RSjeQ%~tg8tPa#m0|RZpO8fEb8?W+fas6? ztGP=0XEEe~c*RSVODvt>0l{L0_dLR7WTI<5w1accD;C|t4y7NCsUFo+Ff3BE>(=!x zs|R`Hs~)&!hH{-jiDEPV0~$F`;i@_9KRVv!^#f+Fc7#{Ok!Cf^e{FYRO@9pl9vG?7tywBCR~d ze<7fF*06dm4L4OXs}e-c8YQ$C1|(+2?CT|QB5?br`Q9zbRNedQ_j=k_nEEK6c>TZ{ zKwqK00oiTtE3htu;T$GZNGrwE$5#jngQ_A0iOm@X5UhVR{?0#!%#x~eU;)*Sc>Sak zJ%u=)rFtapVsVO&7$c@g0#eO`Z|w?*(L1{ z|0^Z1OSL_AA3>rqOp*f%{NL{!ML+RM(JamkD#vdP&ePTb*<5k~mfpt6`ge-V_ ztLCJ;hhQXD3cw2UB0hcFy?W8EyxU5s1l;hnU|VZwT2et5BU`Lm(VuLwb#8wl2SVd% zJNc#WRq(umioZRL5Lq(Ii6m{hiSjX{Ro~<4 zBo)$7MhNNBphTkWJuXRxVlR{Z%({!Wb08d^yHFCK+43GY6Rltl3vGRwrZw9GUeLQ> zZV7w4AE50KXK!WTj`7>!fERHi)qm@zMh6?}w)8v&G040aH~u~%&yDY&|53Ip-<~U3(>oeYvV+CVXX57Y5hEVQf7fc4AnmpBxF5Q!<|Ku;(78H0c?R zDX69P1?Cz4I+)y~Eefj#IW2r_#5S^zB88R??2@S(B)3m;g!PFha~k332c7;U@t zz*3&JRgOp}V8XGntQ@e5ifG*V?a^w;xK?j~9eN-SXtKLV_G_Iki0o=WgyD?i@=|p& z7;07Wy?Y!#XtAf#P1etDEWPKbFI1;J{PS_3K7y0DhZ!Sw=Xr1!*jw|;XGX2oW#c^C zEdf@SY2D)%aht48tvW3*-$A0Q#xjW&S#YmsIT%K5use`1=bB+*v+=?7{E$sCqZ+f) z=3fC+U+{I*`n{f%?@wEvH%(i8NU8b_c=hvx?%Vdhxw;U?BO?Xl0OdUO;7xnwT#aod zWi@&HrW9~OWduIWB|a}DLWp?%3ja<7xo=d@^y@*e`{SyZr9@e&0P*6wG zGI8VPBIoufEFc2n-9uvPu!;o(^^kC;9&$?E^tw

      M)h=7?T(1#_pr4fni1~XKmIh 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 I!K45H0DuT_-T(jq literal 0 HcmV?d00001 diff --git a/assets/manual/links/link-effect-chat.jpg b/assets/manual/links/link-effect-chat.jpg deleted file mode 100644 index 8313b1caa89ffb3046d6b80e4b7727cdfa65a1e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6182 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 diff --git a/assets/manual/links/link-effect-chat.webp b/assets/manual/links/link-effect-chat.webp new file mode 100644 index 0000000000000000000000000000000000000000..fde4d1dff6b2eee1269fc7d155b00437d0e1eb4f GIT binary patch literal 2708 zcmV;F3TyRJNk&GD3IG6CMM6+kP&gof3IG65H2|FfDkK3?06uLplSiZ?q9G*Kop68+ ziDzw^2GhgqXm*1!d%B~g!ceD9gO`s? z?IEknZN_QDyhBLQrOj5qFz1#M@a6s*n$E9Duhxa6!kCFCq-d8%4XJX{T*0luKTHjJ zWp^|jyto#bPGaUtyCz3H*c-Ndy2{sD>yh>*h#H>9=Jy4Y2u}M{thdWc;JoOcU(A4U zRH0YG28YO46MCmbw}9K`OHG2>uZ|YaTT~FAo7O1SpvR)0e}Gh_uvqz z(+&`k87f%eHxuXZ7b(-2qJLWczFl{#qyWjLBCMLDmLKpmYZv5>kkRk~s{P+)33|4x ztL|f@8;-fF4jKRP^4M9l_;sOmH|US};FFH*N6cYs7Oy^gHQJhvq5Y=xK9XS6yIK0b zp+X@HlEai{8Flskq+zEfNXddGoEdUJ$sa~x5BS%GtKBrUN;QQp*>UbY5AXZq{~6Wb zVx&p8^_lvmi|8(-6>zS{_5JZaZ2myQurh()ThIcHH*(fS3w@03nWbNH zWT?2N#5>QQXC&`19Lty2mQ8ua?@tN$(y%W!W;MzPy^8y4ygi@V2B*b=($7}dzRC_* z(PrPf;Ej7;QvuZg#55Nr2>X5%~QI#Fpa3CXCiR zNqM?83MWi-%)J)qJI2z~kl(r1YK08W!EfdqkIG}&29-E)`F)5IRPXf7 z9z;<8-B#ys;pXu&NDoZvi=EiyU?IM6s)3UyX`QZq;FL)SR_dzC2Te2uq90|EHOQCx zp2V|Aq8rN5mPJe~St-$W+y6@LNwZR?4S;@3ju(38Q>3@>K2ej(#D(08-dkxQJY zRCgUD^sMHvyj&-UmU;wcC3XR@K+`x3n#@lm%PUaNFew$Bx=H%)tu9Io25Y2~85OPC zTFL4pHDQJEarl2Y2#y&wdR(UMRs{ogkL3(ul4|y{m zpmyu)6@7yX$D69k!~D~r;}=dUQvl!*HtTSk2AgRPqH%=&!(o3+o&A^@NvVGn(*2Qw zL28hzv6F=dXJWXRSbIuUaAG?WJF*1x>CD3PZIXDn(0$D%lct`KYLau)bo1nICxM#3 zTy3+BOtI(HiP1b?H}1jaR7R3pxH|$MUap}(vn%k4?|x_{btTI_N(k;YUqB0uQ(V%> zAKnCa;lK!I#u|k=X_Ip*Ob{etgFFK*h;`tjo5@crd+{*-C{u}kr;b_Gc-937I5Ti{ z$#o}(WX+4HM1QVZ7#f{&Mmf~(;z}kHHS_ymGW$&_=G|GKGX%A;HfkqImrqIfKKl zK2@V*zR84?($tlSxV+@m;c8Kuxdw1DdlM-`*Q9uD`W|LOLD9B-Y*en8kHJl!U`Go3 zOPN}XF*fqm4Fc4A2?8V;AdZxr*NArUDS5UD?tgiKqA7^v$a3(ub-Llcd@+nvq5hkpCW-QVZlxBA9?3 zepG@PSaVuBV1ZMELQ8lhC5Czm~%&*c`IkWBbTe?n1V;0Xnc;m8`PfAl+UqDV@ zzFeox8twcY^Rx>fW#2Y7mx9v`-`dp7$e7KIc4_0|1&U^*^fCmlui)nHgd;+EwdU~iy!)4nTxdA(R)R#}>} znv3tu1G4`mu;Cm4rF{{oVYo{}WVx2`#F3!z^1_q$e&I0x)lm3q{}-P1 z>?-OYfVqGb(E@AQXWaQ37Lea>${LLzx;>S32{23;b6cNvudJHbc}JBM!;!q;s>eOc z@LTqYmW;OZ(K7IEg}zO16r|JYfoKvzei(I6_kCnRT!f$F9rOl-_w%VI zU;(o=Ib-03{?iO$pUxdE-gdFJ4Vjp5Umsb%fp~cBt=N>&ACSn2S%TxwLZnI9PctS8 z&>L>uE#M)I)%DilH zK$e{e7q+6IYOB|-Bis^HDQ^e}a{26n1#c;qVnfy7?2yPCd%z6?bqU>KU=aSLrVs|^ OI!Zaoev=bUT>t=8*KGR$ literal 0 HcmV?d00001 diff --git a/assets/manual/links/links-creation-tool.jpg b/assets/manual/links/links-creation-tool.jpg deleted file mode 100644 index ab06a03a781dbd236eeaae269fa44e3326167683..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12818 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 diff --git a/assets/manual/links/links-creation-tool.webp b/assets/manual/links/links-creation-tool.webp new file mode 100644 index 0000000000000000000000000000000000000000..38d17547b99c46a060f19b4b2f02ff114c387435 GIT binary patch literal 6492 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 PW}%-Q?Zl~bT>Sh$9BQZS diff --git a/assets/manual/links/main-window.webp b/assets/manual/links/main-window.webp new file mode 100644 index 0000000000000000000000000000000000000000..b8cc00a4d7f050a665ecc447d80657f258e9d72f GIT binary patch literal 12640 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 O3?+ JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en] + +# Recent changes + +For a full list of changes checkout the [changelog](https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT/blob/develop/.github/CHANGELOG.md) on GitHub + +- [Chases](chases.md) +- [Actor importer](actor_importer.md) - added The Dhole's House JSON support +- [Active effects](effects.md) - implementation of active effects +- Active effects added to [links](links.md) and [Link creation tool](link_creation_window.md) + +# Overview sections below + +If this is your first time it is recommends you also read the following sections on this page. + +Foundry VTT is based in actors and items. This module includes a number of system specific actors and items, and some examples of them can be found in the included system compendiums. + +- Actor overview +- Items overview +- Settings overview +- Scene menu overview +- Keyboard and mouse shortcuts +- [Creating your first investigator](first_investigator.md) +- [Character creation](character_creation.md) + +# How to use the system + +- [Active effects](effects.md) - An active effect will modify an actor characteristic(s), attribute(s), skill(s). +- [Actor importer](actor_importer.md) +- Actor Type: Character (TODO) +- Actor Type: Container (TODO) +- Actor Type: Creature (TODO) +- Actor Type: NPC (TODO) +- Chat link creator (TODO) +- Character creation mode (TODO) +- [Combat](combat.md) (TODO) +- Development phase (TODO) +- [Item Types](items.md) (TODO) +- [Item Type: Archetype](item_archetype.md) (TODO) +- [Item Type: Book](item_book.md) (TODO) +- [Item Type: Chases](chases.md) +- Item Type: Item (TODO) +- [Item Type: Occupation](item_occupation.md) +- [Item Type: Setup](item_setup.md) +- [Item Type: Skill](item_skill.md) (TODO) +- Item Type: Spell (TODO) +- Item Type: Status (TODO) +- Item Type: Talent (TODO) +- Item Type: Weapon (TODO) +- [Link Creation Tool](link_creation_window.md) +- [Links](links.md) (TODO) +- Macros (TODO) +- Rolls (TODO) +- [Sanity](sanity.md) (TODO) +- Start Rest (TODO) +- XP Gain (TODO) + +# Actor overview + +- _Character_ - A complete character, usually an investigator. [_Example Character_] +- _Container_ - An inventory container. [_Example Container_] +- _Creature_ - A more simple character, suitable for creatures. [_Example Creature_] +- _NPC_ - A more simple character, suitable for NPCs. [_Example NPC_] + +# Items overview + +- _Archetype_ - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. [_Example Archetype_] +- _Book_ - An arcane tome that can hold spells and character improvements. +- _Item_ - A piece of equipment. +- _Occupation_ - A set of skills and other stats that implement a CoC occupation. [_Example Occupation_] +- _Setup_ - A set of default configurations for character, creature, or NPC creation. [_Example Setup_] +- _Skill_ - A skill with a base percentage and some tags. [_Example Skill_] +- _Spell_ - A magic spell. +- _Status_ - An phobia or mania condition. [_Example Mania_] +- _Talent_ -A special power for Pulp Cthulhu. These do not trigger automation in the system. [_Example Talent_] +- _Weapon_ - An item with weapon statistics (this includes unarmed attacks). [_Example Weapon_] + +# Settings overview + +Click on the Game Settings tab then under the Game Settings heading click on Configure Settings. + +Click on System Settings + +- _Variant/Optional Rules_ - Here you can turn on individual Pulp Cthulhu rules and other optional rules +- _Initiative Settings_ - Additional settings for optional initiative rule +- _Roll Settings_ - Default options for rolls +- _Chat Cards Settings_ - Configure chat messages +- _Scene Settings_ - Scene Settings +- _Game Artwork Settings_ - This allows you to set a custom pause icon and message +- _Sheet Settings_ - This allows you to change character sheet settings and optional CSS +- _Weapon Settings_ - Weapon Settings +- _Developer And Debug Settings_ - These settings can break your world when new updates are released so only use them on test worlds +- _Roll Table Settings_ - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums + +# Call of Cthulhu Scene Menu + +To access this menu you will need to have an active scene which can be created in the Scenes Directory. These options are only available to the Keeper. + +- _Keeper's tools_ + - _Development phase_: When enabled, players can make improvement rolls for their marked skills. + - _Character creation mode_: When enabled, players can distribute points among their skills. + - _XP gain_: When enabled, a skill will be marked for improvement after a successful check. + - _Send a decoy roll to players_: When clicked, players will see a fake GM private roll. + - _Start Rest_: When click, pick characters to perform a rest and roll for XP gains. +- _Roll !_: Used to roll 1d100 with a threshold, difficulty and bonus or penalty dice. +- _Create link_: Create a roll link for players to click + +# Keyboard and mouse shortcuts + +There are many elements in the sheets that trigger a dice roll when clicked. Usually a dialog is shown to prompt the user for a difficulty and a possible bonus or penalty. This behavior is modified with the following controls: + +- Right click on any rollable element to include it in an opposed roll. As long as the card is open, all rolls made + with a right click will be added to the opposed roll. +- Alt + Right click on any rollable element to include it in a combined roll. +- Shift + Left click on a rollable element will make a roll without asking for difficulty or bonus/penalty. +- Ctrl + Left click on a rollable element will create a roll request. Only available for the GM. +- Alt + Left click on sanity will prompt the player for minimum and maximum sanity loss. diff --git a/docs/en/actor_importer.md b/docs/en/actor_importer.md index bd35fda3..c413baa1 100644 --- a/docs/en/actor_importer.md +++ b/docs/en/actor_importer.md @@ -1,11 +1,9 @@ # Actor Importer -You can use the actor importer to import serveral NPC/Creatures blocks from adventures and using the JSON exporter from [The Dholes House](https://www.dholeshouse.org/) +You can use the actor importer to import several NPC/Creatures blocks from adventures and using the JSON exporter from [The Dholes House](https://www.dholeshouse.org/) To open the actor importer either open the Actor Directory and click Actor Importer at the bottom of the side bar or on an active scene then click Actor Importer -. - # Overview If this is your first time it is recommends you also read the following sections. @@ -13,8 +11,6 @@ If this is your first time it is recommends you also read the following sections - Non Playing Character (NPC) / Creature - The Dhole's House Actor Importer JSON -. - # Non Playing Character (NPC) / Creature ![](../../assets/manual/importer/importer.webp) @@ -36,8 +32,6 @@ If this is your first time it is recommends you also read the following sections Click import will create an actor under the Actor directory will be created in the Imported characters folder any text that was not understood will be stored in Keeper notes -. - # The Dhole's House Actor Importer JSON ![](../../assets/manual/importer/actor.webp) diff --git a/docs/en/character_creation.md b/docs/en/character_creation.md index 82f785f7..62c5538a 100644 --- a/docs/en/character_creation.md +++ b/docs/en/character_creation.md @@ -1,70 +1,109 @@ -# _Character Setup_ creation +# Character Creation -Setups are predefined sets of skills and a way to generate the characteristics (this can be by rolling dices or assigning certain amount of points for example). Once a setup has been created can be used during teh [Character creation](./Character_Creation.md). +The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required. -The process to create a character setup is the following: +# Skills + +In this section you will create or edit [skills](item_skill.md) + +1. Go to compendium packs +2. Click on Create Compendium + + - Give your compendium a name (e.g. `My Skills`) + - Select _Item_ as _Document Type_ + +## Use existing skills + +1. Open up the compendium Skills +2. Drag any skills you want to customise into your new compendium + +## Create new skills + +1. Go to Items Directory +2. Cick on Create Item + + - Give the skill a name + - Set _Type_ to _Skill_ + +# Setup + +[Setups](item_setup.md) are predefined sets of skills and a way to generate the characteristics (this can be by rolling dices or assigning certain amount of points for example). Once a setup has been created it can be used in the creation of multiple characters. + +1. Go to Items Directory +2. Click on Create Item + + - Give the skill a name + - Set _Type_ to _Setup_ -1. Go to the items directory -2. Click on _Create Item_ - 2.1 Give it a name - 2.2 Select _setup_ as _Type_ - 2.3 Select the destination folder. 3. Define the setup to set the basic configuration for a type of characters. - - You can add a textual description on the _Description_ tab - - If you click on the _icon_ you can select a new one - - On the _Details_ tab you can: - - Select the _Cthulhu Flavors_ where this setup is valid - - Define the biography sections and their names (click on the `+` to add extra Biography sections) - - Drag default items - - Show / Hide the _Characteristics_ tab with the _Enable characteristics_ checkbox - - The _Characteristics_ tab allows you to define the formula to roll the dices for each characteristic - - The _Skills_ tab allows you to define the default set of skills by dragging items of type _skill_ to the _common skills_ area. + - You can add a textual description on the _Description_ tab + - If you click on the _icon_ you can select a new one + - On the _Details_ tab you can: + - Select the _Cthulhu Flavors_ where this setup is valid + - Define the biography sections and their names (click on the `+` to add extra Biography sections) + - Drag default items like [_Punch_] + - Show / Hide the _Characteristics_ tab with the _Enable characteristics_ checkbox + - The _Characteristics_ tab allows you to define the formula to roll the dices for each characteristic + - The _Skills_ tab allows you to define the default set of skills by dragging items of type _skill_ to the _common skills_ area. -# _Occupation_ creation +# Occupations -An _occupation_ helps to define the character background, think about it as the definition of the set of _occupational skills_ (the ones where the character can spend their occupation points) plus the definition of how to calculate the amount of available occupation points. Finally the _occupation_ also allows to define the minimum and the maximum _credit_ for a character with this _occupation_. +An [occupation](item_occupation.md) helps to define the character background, think about it as the definition of the set of _occupational skills_ (the ones where the character can spend their occupation points) plus the definition of how to calculate the amount of available occupation points. Finally the _occupation_ also allows to define the minimum and the maximum _credit_ for a character with this _occupation_. Keep in mind that the set of _occupational skills_ doesn't need to be fixed, the system allows to configure the _occupation_ so when it's dragged to a Character sheet will give the option of selecting one or more skills from a closed list, or even add a pre defined number of skills to select from all the available ones. -The _ocupation_ creation process is the following one: +The _occupation_ creation process is the following one: + +1. Go to Items Directory +2. Cick on Create Item + + - Give the skill a name + - Set _Type_ to _Occupation_ -1. Go to the items directory -2. Click on _Create Item_ - 2.1 Give it a name - 2.2 Select _occupation_ as _Type_ - 2.3 Selet the destination folder. 3. Define the _occupation_ to select the relevant characteristics and the occupation skills - - You can add a textual description on the _Description_ tab and define the _Source_ - - If you click on the _icon_ you can select a new one - - On the _Details_ tab you can: - - Select the _Occupation Type_ - - Define the characteristics used to calculate the _occupation points_, you can check the characteristics you want and define the multiplier, for the ones with _Optional_ marked, the player will have to choose one at creation time. - For instance if an occupation uses _EDU * 2 + (STR or DEX) * 2_ You have to select _Education_ and put _2_ on the _Multiplier_ without marking _Optional_ and then for _Strength_ and _Dexterity_ you have to check both, check _Optional_ on both, and put _2_ on the Multiplier on both. - - Finally you will have to define the _Minimum_ and _Maximum_ value for the _Credit Rating_ skill for this occupation. - - The _Skills_ tab allows you to select the _occupation skills_ by dragging items of the Type _skill_ to the different sections. A typical occupation has 8 skills plus the _Credit Rating_ skill. - - The _Common Skills_ includes the default occupation skills that can't be changed - - The _Optional skills groups_ section allows to add groups (you can create several of them) of skills for the player to choose from. Once you click on the `+` sign a group is created and you can define the _Number to chose from_ (number of skills to select) and create a pool of skills available for the selection by dragging them on the group. - - Finally the _Additional Skills_ allows you to enter a number of skills the player can choose from the rest of the available skills. + - You can add a textual description on the _Description_ tab and define the _Source_ + - If you click on the _icon_ you can select a new one + - On the _Details_ tab you can: + - Select the _Occupation Type_ + - Define the characteristics used to calculate the _occupation points_, you can check the characteristics you want and define the multiplier, for the ones with _Optional_ marked, the player will have to choose one at creation time. + + For instance if an occupation uses _EDU * 2 + (STR or DEX) * 2_ you have to select _Education_ and put _2_ on the _Multiplier_ without marking _Optional_ and then for _Strength_ and _Dexterity_ you have to check both, check _Optional_ on both, and put _2_ on the Multiplier on both. + + - Finally you will have to define the _Minimum_ and _Maximum_ value for the _Credit Rating_ skill for this occupation. + - The _Skills_ tab allows you to select the _occupation skills_ by dragging items of the Type _skill_ to the different sections. A typical occupation has 8 skills plus the _Credit Rating_ skill. + - The _Common Skills_ includes the default occupation skills that can't be changed + - The _Optional skills groups_ section allows to add groups (you can create several of them) of skills for the player to choose from. Once you click on the `+` sign a group is created and you can define the _Number to chose from_ (number of skills to select) and create a pool of skills available for the selection by dragging them on the group. + - Finally the _Additional Skills_ allows you to enter a number of skills the player can choose from the rest of the available skills. # _Player Character_ creation -You can create a _Player Character_ by creating the _actor_ and filling the corresponding blank _Character Sheet_, but it's much easier if you have previously created a _setup_ and an _occupation_ (see above), if you have created both the process to create the _Player Character_ it's the following one: - -1. Create blank character sheet: - 1. Go to the actor's tab - 2. Click on _Create Actor_ - - Give te actor a _Name_ - - Select _character_ as the _Type_ - - If desired, select the folder for the actor to be created. - - When you click on _Create New Actor_ the actor you will see the black character sheet for the actor. -2. Drag and drop a item of Type _setup_ (for instance 1920s, 1890s, Pulp, Modern,...) on the sheet to do the basic setup using the configuration defined on the item, this usually includes rolling the characteristics or setting their values with the points system, and set a default set of skills corresponding to the given setup. -3. Set the development/ character creation mode. A new tab called _Development_ should appear on the character sheet. +You can create a _Player Character_ by creating the _actor_ and filling the corresponding blank _Character Sheet_, but it's much easier if you have previously created a _setup_ and an _occupation_ (see above), if you have created both the process to create the _Player Character_ is as follows: + +1. Go to Actors Directory +2. Cick on Create Actor + + - Give the actor a name + - Set _Type_ to _Character_ + +3. Drag and drop a item of Type _setup_ (for instance 1920s, 1890s, Pulp, Modern,...) on the sheet to do the basic setup using the configuration defined on the item, this usually includes rolling the characteristics or setting their values with the points system, and set a default set of skills corresponding to the given setup. + 4. Drag and drop an _occupation_ Type item on the sheet, this will probably involve selecting some skills from a given reduced set or from the remaining ones. This will calculate the available _Personal points_ and _Occupation points_ and assign the part of the Occupation points to reach the minimum value for _Credit Rating_ of the selected occupation. -5. Distribute occupation/personal points in development tab taking on account that each skill has 5 columns: - 1. First one is the basic percentage of the skill - 2. The second one is the one to put the _Personal interest points_ during the creation of the character - 3. The third one is only available on for the _occupation_ skills (marked with a dark circle before the skill name) and it's used to assign the _Occupation points_. - 4. The forth column should be initially blank and its where the experience points will show up (you can also assign points here if you are playing an experienced character) - 5. The final column is a read only one with the final calculated value for the skill (the sum of the other 4) + +5. On the keeper's menu on the left click Keeper's tools, if this menu is not available need to have an active scene which can be created in the Scenes Directory + +6. On the new submenu click Character creation mode. A new tab called _Development_ should appear on the character sheets. + +7. Click on the characters Development tab + +8. The first dot column is for your occupational skills these can be toggled by clicking them + - If you have enabled the Pulp rule Archetypes you will have a second dot to toggle that + +9. Distribute occupation/personal points in development tab taking on account that each skill has 5 columns: + 1. First one is the basic percentage of the skill + 2. The second one is the one to put the _Personal interest points_ during the creation of the character + 3. The third one is only available on for the _occupation_ skills (marked with a dark circle before the skill name) and it's used to assign the _Occupation points_. + - If you have enabled the Pulp rule Archetypes you will have a forth column you enter your archetype points here + 4. The forth/fifth column should be initially blank and its where the experience points will show up (you can also assign points here if you are playing an experienced character) + 5. The final column is a read only one with the final calculated value for the skill (the sum of the other 4) - [Video showing the Character creation process](https://www.youtube.com/watch?v=VsQZHVXFwlk) diff --git a/docs/en/chases.md b/docs/en/chases.md index c4b2bb8c..b350f9cc 100644 --- a/docs/en/chases.md +++ b/docs/en/chases.md @@ -82,7 +82,7 @@ The chase is initialized, you can adjust some options. Locations in white are in During setup or during chase you can select a location to modify it. -Starting (white) locations can not be modified during setup.

      +Starting (white) locations can not be modified during setup. To modify a location select it by clicking on it. This will display the location details on the header part of the sheet. @@ -94,8 +94,6 @@ To modify a location select it by clicking on it. This will display the location 4. Add a new location. 5. Active location. -. - # Setting up obstacles. You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties. @@ -107,8 +105,6 @@ You can add obstacle after and before a location. You can pre-fill an obstacle w 3. Movement action cost in case of failure. 4. Check used to pass the location. When it's red the active actor does not have the associated check. -. - # Cut to the chase. When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start. @@ -116,7 +112,7 @@ When you are ready you can cut to the chase. If not all participant have a speed ![](../../assets/manual/chases/cut_to_the_chase_1.webp) 1. Initiative track. The active participant is circled in orange. -2. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated. +2. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest participant) all movement action will be recalculated. 3. A barrier. 4. A hazard. diff --git a/docs/en/combat.md b/docs/en/combat.md index 5782bb15..720b2b89 100644 --- a/docs/en/combat.md +++ b/docs/en/combat.md @@ -1,4 +1,4 @@ -## Combat +# Combat ## Starting the combat diff --git a/docs/en/commands_cheat_sheet.md b/docs/en/commands_cheat_sheet.md index cc8c5332..e0aa02e5 100644 --- a/docs/en/commands_cheat_sheet.md +++ b/docs/en/commands_cheat_sheet.md @@ -1,11 +1,11 @@ -## Commands Cheat Sheet +# Commands Cheat Sheet ## General rules Most sheet component can be clicked on the trigger a check/roll. As a general rule you can modify those requests: -- `Shift` will fast forward the request [Partial implem. (characteristics/attributes/skills only)]. +- `Shift` will fast forward the request. - `Ctrl` [GM only] will create a link in the chat with that request a roll to the players. ## Sanity diff --git a/docs/en/effects.md b/docs/en/effects.md index bafa5141..1d4d8b64 100644 --- a/docs/en/effects.md +++ b/docs/en/effects.md @@ -2,23 +2,23 @@ The system allows for the creation of Active Effects. An active effect will modify an actor characteristic(s), attribute(s), skill(s). -Effects can be created as a [links](links.md) using the [Link creation tool](link_creation_window.md) or directly in the character sheet by clicking the button. +Effects can be created as a [link](links.md) using the [Link creation tool](link_creation_window.md) or directly in the character sheet by clicking the button. ## Effects tab Effects will be display in the effect tabs on the character sheet. -![effects tab](../../assets/manual/effects/effects-tab.jpg) +![effects tab](../../assets/manual/effects/effects-tab.webp) Effect are broken down in 4 categories for PC : - Status: those are effects used and created by the system (Wounds status, prone, insane ...). Those effects do not include any changes. - Temporary: those are effects with duration. - Passive: those are permanent effects. -- Innactive: those are disabled effects. +- Inactive: those are disabled effects. For NPC/Creatures you will only see 2 sections: active and inactive effects. -When an effect is not inactive, the correcponding changes will be applied to the actor. +When an effect is not inactive, the corresponding changes will be applied to the actor. ## Creating effects @@ -28,15 +28,15 @@ This windows has 3 tabs ### Details tab -![Details tab](../../assets/manual/effects/details-tab.jpg) +![Details tab](../../assets/manual/effects/details-tab.webp) ### Duration tab -![Duration tab](../../assets/manual/effects/duration-tab.jpg) +![Duration tab](../../assets/manual/effects/duration-tab.webp) ### Changes tab -![Changes tab](../../assets/manual/effects/changes-tab.jpg) +![Changes tab](../../assets/manual/effects/changes-tab.webp) This last tab will includes all changes made to the character sheet. @@ -45,14 +45,14 @@ This last tab will includes all changes made to the character sheet. An effect includes a list of changes. Each change needs to be addressed with the corresponding data path. The available changes are : -- Characteristics: data.characteristics.\[charactetistic\].value - - available \[charactetistic\] are: str, con, siz, dex, app, int, pow, edu +- Characteristics: data.characteristics.\[characteristic\].value + - available \[characteristic\] are: str, con, siz, dex, app, int, pow, edu - attributes: - mov: data.attribs.mov.value - build: data.attribs.build.value - bonus damage: data.attribs.db.value - armor: data.attribs.armor.value -- derived attributes. Only the maximum value of those attributes should be modifed. Those changes are applied after all other changes have been made. If that attibute is in auto mode, it will be recalculated with the previous characteristics changes before having it's value affected. +- derived attributes. Only the maximum value of those attributes should be modified. Those changes are applied after all other changes have been made. If that attibute is in auto mode, it will be recalculated with the previous characteristics changes before having it's value affected. - max hit points: data.attribs.hp.max - max sanity: data.attribs.san.max - skills. Skills are identified by their name without specialization. Skill names are case sensitive ! diff --git a/docs/en/first_investigator.md b/docs/en/first_investigator.md index 703e684f..0b30b047 100644 --- a/docs/en/first_investigator.md +++ b/docs/en/first_investigator.md @@ -2,7 +2,7 @@ The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required. -. +This page creates an investigator using the provided compendiums, if you are ready to full customise your character people read [Character creation](character_creation.md) instead. # Skill @@ -20,7 +20,7 @@ You can create a new Item Compendium and copy the skills you require into it all ## Setup -Once you have set up your skills next create up a Setup, here is an example from the Items Examples compendium +Once you have set up your skills next create up a Setup, here is an example from the Items Examples compendium [_1920's Setup Example_] Setups allow to you standardise what skills, items, biography sections, and characteristics the investigators start with. @@ -28,7 +28,7 @@ Click on the Items Directory tab then Create Item give this a name e.g. New Inve On the Description tab to set the description click the button to get an editor. -On the Details tab click the on the Biography Sections to add any sections you require from the Create a Backstory step of investigator creation. Click on the Compendium Packs tab then under the Item heading open up the Items Examples Item (CoC7) and drag the onto the setup. +On the Details tab click the on the Biography Sections to add any sections you require from the Create a Backstory step of investigator creation. Click on the Compendium Packs tab then under the Item heading open up the Items Examples Item (CoC7) and drag the [_Punch_] onto the setup. On the Characteristics tab you can customise how investigator characteristics are rolled / bought @@ -38,7 +38,7 @@ All actor and item sheets have a tab which can be used by the Keepers to store n ## Occupation -Occupations allow you set how many the occupation points, credit rating range, and skills the investigator starts with. Here is an example from the Items Examples compendium +Occupations allow you set how many the occupation points, credit rating range, and skills the investigator starts with. Here is an example from the Items Examples compendium [_Occupation Example_] Click on the Items Directory tab then Create Item give this a name e.g. Driver and set the Type to Occupation @@ -48,8 +48,6 @@ On the Details tab you can set the Occupation Points calculation and Minimum/Max On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select. -. - # Creating your first investigator ## Character @@ -58,9 +56,9 @@ To complete your character you need to have an active scene which can be created Click on the Actors Directory tab then Create Item give this a name e.g. New Investigator and set the Type to Character. -You can drag your setup created above on to the character for the initial setup or drag this example instead +You can drag your setup created above on to the character for the initial setup or drag this example instead [_1920's Setup Example_] -Next drag your occupation created above on to the character or drag this example instead +Next drag your occupation created above on to the character or drag this example instead [_Occupation Example_] On the left hand menu bar select Keeper's tools then select Character creation mode. diff --git a/docs/en/item_archetype.md b/docs/en/item_archetype.md new file mode 100644 index 00000000..ee9da5d4 --- /dev/null +++ b/docs/en/item_archetype.md @@ -0,0 +1,15 @@ +# Item Type: Pulp Archetype + +Archetypes are used on Pulp games. They provide skill and characteristic bonuses. + +Once the _Archetype_ item has been created, the _Archetype Sheet_ is shown. +There you can define the details of the _Archetype_: + +- On the _Details_ tab you can: + - Assign the number of _Additional points_ + - Assign the number of _Pulp Talents_ + - Define the _Basic Characteristics_ and if you want to _Use a dice roll_ to generate them. + - Define the _Suggested Occupations_ + - Define the _Suggested Traits_ +- On the _Skills_ tab you can: + - Drag the _skills_ corresponding to this _Archetype_ diff --git a/docs/en/item_book.md b/docs/en/item_book.md new file mode 100644 index 00000000..6723c748 --- /dev/null +++ b/docs/en/item_book.md @@ -0,0 +1,3 @@ +# Item Type: Book + +The system has a special type of item for the books to be able to define the _Sanity Loss_, if it's a Mythos Tome or an Occult book, what _Spells_ or _Skills_ it provides and of curse a description and the book image. diff --git a/docs/en/item_skill.md b/docs/en/item_skill.md new file mode 100644 index 00000000..45e4658b --- /dev/null +++ b/docs/en/item_skill.md @@ -0,0 +1,19 @@ +# Item Type: Skill + +A _skill_ will be rolled during tests. + +1. Go to the Items Directory tab +2. Click on Create Item + + 1. Give the skill a name e.g. _Art/Craft (Dancing)_ + 2. Set _Type_ to _Skill_ + +3. On the _Description_ tab you can change the name, icon, Cthulhu Flavors (which editions this appears in), and description + + 1. _No adjustment_ - Can not be assigned personal skill points. + 2. _No XP gain_ - You do not mark this skill for improvement on a success. + 3. _Specialization_ - This skill is part of a group like Pilot or Flighting. + 4. _Uncommon_ - This skill is uncommon and can be automatically hidden on the character sheet. + 5. _Pushed_ - This skill can be pushed. + 6. _Fighting_ - Automatically set Specialization, Combat, and the specialization name to Fighting. + 7. _Firearms_ - Automatically set Specialization, Combat, and the specialization name to Firearms. diff --git a/docs/en/items.md b/docs/en/items.md index 426357bc..e03554ba 100644 --- a/docs/en/items.md +++ b/docs/en/items.md @@ -1,52 +1,29 @@ -## Items +# Items -The system support many different types of items, from basic items or wepons to skills or the complete setup of a type of character. You can see examples on the compendium that comes with the system. +The system support many different types of items, from basic items or weapons to skills or the complete setup of a type of character. You can see examples on the compendium that comes with the system. To create any of the types of items you always start the same way 1. Go to the items directory 2. Click on _Create Item_ - 2.1 Give it a name - 2.2 Select the item _Type_ (see below for details on each one) - 2.3 Select the destination folder. + - Give it a name + - Select the item _Type_ (see below for details on each one) + - Select the destination folder. And have some common structure so on all of them: - You can add a textual description on the _Description_ tab or just on the main window if it doesn't have tabs. - If you click on the _icon_ you can pick or upload a new one -## Pulp Archetype - -Archetypes are used on Pulp games. They provide skill and characteristic bonuses. - -Once the _Archetype_ item has been created, the _Archetype Sheet_ is shown. -There you can define the details of the _Archetype_: - -- On the _Details_ tab you can: - - Assign the number of _Additional points_ - - Assign the number of _Pulp Talents_ - - Define the _Basic Characteristics_ and if you want to _Use a dice roll_ to generate them. - - Define the _Suggested Occupations_ - - Define the _Suggested Traits_ -- On the _Skills_ tab you can: - - Drag the _skills_ corresponding to this _Archetype_ - -## Book - -The system has a special type of item for the books to be able to define the _Sanity Loss_, if it's a Mythos Tome or an Occult book, what _Spells_ or _Skills_ it provides and of curse a description and the book image. - -## Item - -## Occupation - -## Setup - -## Skill - -## Spell - -## Status - -## Talent - -## Weapon +# Available types +- [Item Type: Archetype](item_archetype.md) +- [Item Type: Book](item_book.md) +- [Item Type: Chases](chases.md) +- Item Type: Item +- [Item Type: Occupation](item_occupation.md) +- [Item Type: Setup](item_setup.md) +- [Item Type: Skill](item_skill.md) +- Item Type: Spell +- Item Type: Status +- Item Type: Talent +- Item Type: Weapon diff --git a/docs/en/link_creation_window.md b/docs/en/link_creation_window.md index 028c977b..3d620024 100644 --- a/docs/en/link_creation_window.md +++ b/docs/en/link_creation_window.md @@ -4,30 +4,30 @@ The system includes a tool to help you create links easily. It's located on the left side bar. Click on the icon. This tools is available to GM only. -![Creation tool](../../assets/manual/links/links-creation-tool.jpg) +![Creation tool](../../assets/manual/links/links-creation-tool.webp) -using this you can create [links](links.md) for skill check, san check, effects ... +using this you can create [link](links.md) for skill check, san check, effects ... alternatively you can open the tool by holding CTRL while clicking no an item or a skill. ## Main window Clicking on the tool icon will open a window : -![Main window](../../assets/manual/links/main-window.jpg) +![Main window](../../assets/manual/links/main-window.webp) You can there select options for you link. -- "Compendium packs" and "Items directory" allows you to reference an objet from corresponding folder. +- "Compendium packs" and "Items directory" allows you to reference an object from corresponding folder. - "Modifiers" will allows you to add modifiers to your check. - "blind" will force the roll mode to be blind. - "Label" will allows you to change the display label. - "Icon" will allows you to choose an icon for your link. Icons can be : - - A font awsome or a game-icons reference : "fas fa-ankh" or "game-icon game-icon-tentacle-strike". + - A font awesome or a game-icons reference : "fas fa-ankh" or "game-icon game-icon-tentacle-strike". - A link to an image in the system data or system core: "icons/magic/symbols/arrowhead-green.webp". If you do not supply a label and/or an icon, a default label and icon will be added. -![default label](../../assets/manual/links/default-label.jpg) +![default label](../../assets/manual/links/default-label.webp) ## Effects window @@ -38,14 +38,14 @@ Select the options the same way you will be doing for a regular effect. - Once your link is created and valid it will appear in a white box in the middle of the window. -![link created](../../assets/manual/links/effect-link-creation.jpg) +![link created](../../assets/manual/links/effect-link-creation.webp) - You are now ready to whisper it to your players, copy it in your clipboard so you can add it to your items or journal entries or send it to the chat. -![link in the chat](../../assets/manual/links/link-effect-chat.jpg) +![link in the chat](../../assets/manual/links/link-effect-chat.webp) - When a player clicks a link the corresponding action will be performed by his character. - When a GM clicks a link the corresponding action will be performed by his selected tokens. -- A link drag/droped in journal entries, on a token etc... +- A link drag/dropped in journal entries, on a token etc... -![link drop](../../assets/manual/links/effect-drop.jpg) +![link drop](../../assets/manual/links/effect-drop.webp) diff --git a/docs/en/links.md b/docs/en/links.md index ecbb044d..f35af9e3 100644 --- a/docs/en/links.md +++ b/docs/en/links.md @@ -8,7 +8,7 @@ - By manually typing it (read details below). - By CTRL+click on any sheet element (Characteristic, Attribute, skill, SAN loss). - By dragging a sheet element (Characteristic, Attribute, skill (+CTRL)) on an editor (Journal entry) - - By CTRL + dragging an item (skill or weapon) from a compendium or an item directory on an editor. When a link is created that way and the used as a GM, if your controlled character doen't hold the weapon/skill you'll be prompted to create the corresponding item. + - By CTRL + dragging an item (skill or weapon) from a compendium or an item directory on an editor. When a link is created that way and the used as a GM, if your controlled character doesn't hold the weapon/skill you'll be prompted to create the corresponding item. - By using the included compendium written by Lozalojo. - Links can be dragged from chat log on an editor. - When a link is created the difficulty/penalty selection windows will open. Hold SHIFT to bypass that comportment. @@ -55,7 +55,7 @@ Format of link is `@coc7.TYPE_OF_REQUEST[OPTIONS]{TEXT_TO_DISPLAY}` ### Using links - You can drag/drop links from chat to sheets and between sheets. -- You can drar/drop a link directly on a token. +- You can drag/drop a link directly on a token. - You can drag/drop items and skills on a journal entry while holding CTRL, this will create the corresponding check with regular difficulty and 0 modifier. - You can create link in the chat by clicking and holding CTRL from any sheet (PC/NPC/Creature) corresponding characteristic/luck/SAN/Competence/weapon/San loss. - This will open the select penalty/difficulty dialogue. Clicking on the generated link will then trigger the check with all parameters. diff --git a/docs/en/manual.md b/docs/en/manual.md deleted file mode 100644 index e6798675..00000000 --- a/docs/en/manual.md +++ /dev/null @@ -1,124 +0,0 @@ -# System documentation v0.7.12 - -This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT. - -You will need one of the following to play the game - -- Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook -- Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set -- Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules - -The system automates most of the regular tasks and rules involved with running a game. - -Several parts of the actor sheets have pop up tooltips that trigger after two seconds, this delay can be changed in the settings -. - -This documentation can be reopened under Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en] - -. - -# Recent changes - -For a full list of changes checkout the [changelog](https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT/blob/develop/.github/CHANGELOG.md) on GitHub - -. - -- [Chases](chases.md) -- [Actor importer](actor_importer.md) - added The Dhole's House JSON support -- [Active effects](effects.md) - implementation of active effects -- Active effects added to [links](links.md) and [Link creation tool](link_creation_window.md) - -. - -# Overview sections below - -If this is your first time it is recommends you also read the following sections. - -- Actor overview -- Items overview -- Settings overview -- Scene menu overview -- [Creating your first investigator](first_investigator.md) - -. - -# How to use the system - -- [Actor importer](actor_importer.md) -- Actor Type: Character -- Actor Type: Container -- Actor Type: Creature -- Actor Type: NPC -- Character creation mode -- Development phase -- Item Type: Archetype -- Item Type: Book -- [Item Type: Chases](chases.md) -- Item Type: Item -- [Item Type: Occupation](item_occupation.md) -- [Item Type: Setup](item_setup.md) -- Item Type: Skill -- Item Type: Spell -- Item Type: Status -- Item Type: Talent -- Item Type: Weapon -- Macros -- Rolls -- Start Rest -- XP Gain -- [links](links.md) -- [Link creation tool](link_creation_window.md) -- [Active effects](effects.md) - -. - -# Actor overview - -- _Character_ - A complete character, usually an investigator. -- _Container_ - An inventory container. -- _Creature_ - A more simple character, suitable for creatures. -- _NPC_ - A more simple character, suitable for NPCs. - -. - -# Items overview - -- _Archetype_ - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. -- _Book_ - An arcane tome that can hold spells and character improvements. -- _Item_ - A piece of equipment. -- _Occupation_ - A set of skills and other stats that implement a CoC occupation. -- _Setup_ - A set of default configurations for character, creature, or NPC creation. -- _Skill_ - A skill with a base percentage and some tags. -- _Spell_ - A magic spell. -- _Status_ - An phobia or mania condition. -- _Talent_ -A special power for Pulp Cthulhu. These do not trigger automation in the system. -- _Weapon_ - An item with weapon statistics (this includes unarmed attacks). - -. - -# Settings overview - -Click on the Game Settings tab then under the Game Settings heading click on Configure Settings. - -Click on System Settings - -- _Variant/Optional Rules_ - Here you can turn on individual Pulp Cthulhu rules and other optional rules -- _Initiative Settings_ - Additional settings for optional initiative rule -- _Roll Settings_ - Default options for rolls -- _Chat Cards Settings_ - Configure chat messages -- _Scene Settings_ - Scene Settings -- _Game Artwork Settings_ - This allows you to set a custom pause icon and message -- _Sheet Settings_ - This allows you to change character sheet settings and optional CSS -- _Weapon Settings_ - Weapon Settings -- _Developer And Debug Settings_ - These settings can break your world when new updates are released so only use them on test worlds -- _Roll Table Settings_ - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums - -. - -# Call of Cthulhu Scene Menu - -To access this menu you will need to have an active scene which can be created in the Scenes Directory. - -- _Keeper's tools_ - Here you can toggle character creation mode, character development phase, actor importer, toggle automatic XP gain on a success, and start a rest -- _Roll !_ - Create a roll in chat -- _Create link_ - Create a roll link for players to click diff --git a/docs/en/sanity.md b/docs/en/sanity.md index 32b70ac7..9fcc10df 100644 --- a/docs/en/sanity.md +++ b/docs/en/sanity.md @@ -4,8 +4,8 @@ The system has integrated the sanity check workflow and can handle sanity rolls, ## Requesting Sanity rolls -- The Guardian can click with `Ctrl+Shift` on the _Sanity_ of character to request a Sanity Check for the character +- The Keeper can click with `Ctrl+Shift` on the _Sanity_ of character to request a Sanity Check for the character - - If the Guardian also press `Alt` (so holding at the same time `Ctrl+Shift+Alt`) while clicking on the _Sanity_ of a character, a dialog will pop-up to introduce the sanity loss if the sanity check is passed and the value for when the sanity check is failed. + - If the Keeper also press `Alt` (so holding at the same time `Ctrl+Shift+Alt`) while clicking on the _Sanity_ of a character, a dialog will pop-up to introduce the sanity loss if the sanity check is passed and the value for when the sanity check is failed. - [Video showing the Sanity check workflow](https://www.youtube.com/watch?v=yAMqHiv7eMw) diff --git a/docs/en/users-guide.md b/docs/en/users-guide.md deleted file mode 100644 index a9d7de9e..00000000 --- a/docs/en/users-guide.md +++ /dev/null @@ -1,74 +0,0 @@ -# Actors and Items - -Foundry VTT is based in actors and items. This module includes a number of system specific actors and items, -and some examples of them can be found in the included system compendiums. - -## Actors - -This system includes four types of actors: - -- character: A complete character, usually an investigator. -- npc: A more simple character, suitable for NPCs. -- creature: A non-human NPC. -- vehicle: Not yet implemented - -## Items - -As for items, these are the types available: - -- item: A piece of equipment. -- weapon: An item with weapon statistics (this includes unarmed attacks). -- skill: A skill with a base percentage and some tags. -- setup: A set of default configurations for character creation. -- occupation: A set of skills and other stats that implement a CoC occupation. -- archetype: A set of skills and other stats that implement a CoC archetype. -- book: An arcane tome. -- spell: A magic spell. -- talent: A special power for Pulp Cthulhu. -- status: An insanity condition. - -# Creating a character - -Before creating a character you should probably create some items (some of them can be taken from the compendiums): - -- A setup. You can choose some default details for all your characters, a list of default skills and a method to - generate characteristics (distributing points or rolling dice). -- A bunch of occupations. You can take their skills from the compendiums. -- You might want to create some items, weapons, talents or archetypes. - -The GM must enable 'Character creation mode' from the toolbar. - -Once you have these items, create a new actor of 'character' type, and drag your setup from the sidebar and drop it -on the character sheet. A dialog will appear to distribute points or roll dice for the characteristics. After clicking -on 'Validate', the scores will be copied to the sheet, and it will be filled with the default list of skills and their -base percentages. - -Then, drag and drop an occupation on the character sheet. If 'Character creation mode' is enabled, there will be -a 'Development' tab in the character sheet. There, each skill has a field for personal interest points, and occupation -skills have a field for occupation points. You need to distribute your points until all are spent, which you can see -in the left column of the 'Development' tab. - -You can then drag and drop any items, talents, etc. When you are finished, lock the sheet using the padlock button. - -# Tools - -There are some system specific buttons in the toolbar, available only to the GM: - -- Keeper's tools - - Development phase: when enabled, players can make improvement rolls for their marked skills. - - Character creation mode: when enabled, players can distribute points among their skills. - - XP gain: when enabled, a skill will be marked for improvement after a successful check. - - Send a decoy roll to players: when clicked, players will see a fake GM private roll. -- Roll dice: used to roll 1d100 with a threshold, difficulty and bonus or penalty dice. - -# Keyboard and mouse shortcuts - -There are many elements in the sheets that trigger a dice roll when clicked. Usually a dialog is shown to prompt the -user for a difficulty and a possible bonus or penalty. This behavior is modified with the following controls: - -- Right click on any rollable element to include it in an opposed roll. As long as the card is open, all rolls made - with a right click will be added to the opposed roll. -- Alt + Right click on any rollable element to include it in a combined roll. -- Shift + Left click on a rollable element will make a roll without asking for difficulty or bonus/penalty. -- Ctrl + Left click on a rollable element will create a roll request. Only available for the GM. -- Alt + Left click on sanity will prompt the player for minimum and maximum sanity loss. diff --git a/generate-manuals.js b/generate-manuals.js index 1bb85b29..2b670b7f 100644 --- a/generate-manuals.js +++ b/generate-manuals.js @@ -3,118 +3,149 @@ import * as fs from 'fs' import write from './node_modules/write/index.js' const sources = { - fk040vqb4per5ju1: { - en: { - name: 'Links [en]', - file: 'links.md' - } - }, - emuu3wo0uul91029: { - en: { - name: 'Link creation tool [en]', - file: 'link_creation_window.md' - } - }, rmtiwtbixojhyf5v: { - en: { - name: 'Active effects [en]', - file: 'effects.md' - } + name: 'Active effects', + lang: 'en', + file: 'effects.md' }, xV4Hxxmu6zjIMw9h: { - en: { - name: 'Actor Importer [en]', - file: 'actor_importer.md' - } + name: 'Actor Importer', + lang: 'en', + file: 'actor_importer.md' }, wZtTHpGV3atKV2oD: { - en: { - name: 'Call of Cthulhu 7th Edition (Unofficial) [en]', - file: 'manual.md' - } + name: 'Call of Cthulhu 7th Edition (Unofficial)', + lang: 'en', + file: 'README.md' + }, + uug1mm5nokly4o2v: { + name: 'Character Creation', + lang: 'en', + file: 'character_creation.md' }, VdOeGcxsu3jsVm3F: { - en: { - name: 'Chases [en]', - file: 'chases.md' - } + name: 'Chases', + lang: 'en', + file: 'chases.md' + }, + nk68b2ew15iw0bb8: { + name: 'Combat', + lang: 'en', + file: 'combat.md' + }, + wilj4rvkreemh70n: { + name: 'Commands Cheat Sheet', + lang: 'en', + file: 'commands_cheat_sheet.md' }, nVYLlqVzmUV5dXAW: { - en: { - name: 'Creating your first investigator [en]', - file: 'first_investigator.md' - } + name: 'Creating your first investigator', + lang: 'en', + file: 'first_investigator.md' }, - '7hFq9EqLviAxqMFz': { - en: { - name: 'Item Type: Occupation [en]', - file: 'item_occupation.md' - } + di6mcnaxfyi0y2l4: { + name: 'Items', + lang: 'en', + file: 'items.md' + }, + kv2tbz6x29cq6ewq: { + name: 'Item Type: Archetype', + lang: 'en', + file: 'item_archetype.md' + }, + oruecvy7jne4u4gt: { + name: 'Item Type: Book', + lang: 'en', + file: 'item_book.md' + }, + qa934whpkpauiyc9: { + name: 'Item Type: Occupation', + lang: 'en', + file: 'item_occupation.md' }, JU1GCWwc8at7gzJ4: { - en: { - name: 'Item Type: Setup [en]', - file: 'item_setup.md' - } + name: 'Item Type: Setup', + lang: 'en', + file: 'item_setup.md' + }, + mz0ulbkecfvv8nw7: { + name: 'Item Type: Skill', + lang: 'en', + file: 'item_skill.md' + }, + fk040vqb4per5ju1: { + name: 'Links', + lang: 'en', + file: 'links.md' + }, + emuu3wo0uul91029: { + name: 'Link creation tool', + lang: 'en', + file: 'link_creation_window.md' + }, + ce7s8psgyctzx5r1: { + name: 'Sanity', + lang: 'en', + file: 'sanity.md' } } const dbFile = [] for (const id in sources) { - for (const lang in sources[id]) { - try { - const md = new Remarkable() - const input = fs.readFileSync( - './module/manual/' + lang + '/' + sources[id][lang].file, - 'utf8' - ) + try { + const md = new Remarkable() + const input = fs.readFileSync( + './module/manual/' + sources[id].lang + '/' + sources[id].file, + 'utf8' + ) - const source = md.render(input) + const source = md.render(input) - const html = source - .replace(/

      \.<\/p>/g, '

       

      ') - .replace( - /\[(fas fa-[^\]]+|game-icon game-icon-[^\]]+)\]/g, - ' ' - ) - .replace(/src="..\/..\/assets\//g, 'src="systems/CoC7/assets/') - .replace(/\n\s*/g, '\n') + const html = source + .replace(/

      \.<\/p>/g, '

       

      ') + .replace( + /\[(fas fa-[^\]]+|game-icon game-icon-[^\]]+)\]/g, + ' ' + ) + .replace(/src="..\/..\/assets\//g, 'src="systems/CoC7/assets/') + .replace(/\n\s*/g, '\n') + .replace(/@@coc7./g, '@coc7.') - const dbEntry = { - _id: id, - name: sources[id][lang].name, - content: '
      \n' + html + '\n
      ' - } + const dbEntry = { + _id: id, + name: sources[id].name + ' [' + sources[id].lang + ']', + content: '
      \n' + html + '\n
      ' + } - dbFile.push(JSON.stringify(dbEntry)) + dbFile.push(JSON.stringify(dbEntry)) - let mdFile = input - .replace(/\n.\n/g, '\n') - .replace(/\[(fas fa-[^\]]+|game-icon game-icon-[^\]]+)\]/g, '') + let mdFile = input + .replace(/\n.\n/g, '\n') + .replace(/\[(fas fa-[^\]]+|game-icon game-icon-[^\]]+)\]/g, '') + .replace(/@@coc7./g, '@coc7.') - const compendiumLinks = mdFile.matchAll( - /@Compendium\[(?[^\]]+)\.(?[^\\.]+)\]{(?[^}]+)}/g - ) - for (const link of compendiumLinks) { - if (link.groups.pack !== 'CoC7.system-doc') { - mdFile = mdFile.replace(link[0], '') - } else { - mdFile = mdFile.replace( - link[0], - '[' + + const compendiumLinks = mdFile.matchAll( + /@Compendium\[(?[^\]]+)\.(?[^\\.]+)\]{(?[^}]+)}/g + ) + for (const link of compendiumLinks) { + if (link.groups.pack !== 'CoC7.system-doc') { + mdFile = mdFile.replace(link[0], '[_' + link.groups.name + '_]') + } else { + mdFile = mdFile.replace( + link[0], + '[' + link.groups.name + '](' + - sources[link.groups.id][lang].file + + sources[link.groups.id].file + ')' - ) - } + ) } - - write('./docs/' + lang + '/' + sources[id][lang].file, mdFile) - } catch (e) { - console.log('EXCEPTION:', e) } + + write('./docs/' + sources[id].lang + '/' + sources[id].file, mdFile) + } catch (e) { + console.log('EXCEPTION:', e) } } diff --git a/module/active-effect.js b/module/active-effect.js index d8270f3a..1465df24 100644 --- a/module/active-effect.js +++ b/module/active-effect.js @@ -174,7 +174,7 @@ export default class CoC7ActiveEffect extends ActiveEffect { }, inactive: { type: 'inactive', - label: game.i18n.localize('Innactive'), + label: game.i18n.localize('Inactive'), effects: [] }, suppressed: { @@ -209,7 +209,7 @@ export default class CoC7ActiveEffect extends ActiveEffect { }, inactive: { type: 'inactive', - label: game.i18n.localize('Innactive'), + label: game.i18n.localize('Inactive'), effects: [] } } @@ -227,7 +227,7 @@ export default class CoC7ActiveEffect extends ActiveEffect { } function parse (str) { - const regEx = /^[\+\-*/\(\)\d]+$/ + const regEx = /^[+\-*/)(\d]+$/ if (!regEx.exec(str)) return NaN try { return new Roll(str).evaluate({ async: false }).total diff --git a/module/actors/actor.js b/module/actors/actor.js index 455caa29..525b4cf6 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -91,55 +91,56 @@ export class CoCActor extends Actor { * @memberof ClientDocumentMixin# */ prepareBaseData () { - this.data.data.skills = {} - for (const i of this.items) { - if (i.type === 'skill') { - this.data.data.skills[`${i.data.data.skillName}`] = { - value: i.rawValue + if (['character', 'npc', 'creature'].includes(this.type)) { + this.data.data.skills = {} + for (const i of this.items) { + if (i.type === 'skill') { + this.data.data.skills[`${i.data.data.skillName}`] = { + value: i.rawValue + } + this.data.data.skills[`${i.id}`] = { value: i.rawValue } } - this.data.data.skills[`${i.id}`] = { value: i.rawValue } } - } - /** + /** * Removal of 1/5 sanity * this is to remove the * actor.data.attribs.san.oneFifthSanity to be removed from template * and indefiniteInsanityLevel to be removed from template */ - if (typeof this.data.data.attribs.san.dailyLimit === 'undefined') { - if (this.data.data.attribs.san.oneFifthSanity) { - const s = this.data.data.attribs.san.oneFifthSanity.split('/') - if (s[1] && !isNaN(Number(s[1]))) { - this.data.data.attribs.san.dailyLimit = Number(s[1]) + if (typeof this.data.data.attribs.san.dailyLimit === 'undefined') { + if (this.data.data.attribs.san.oneFifthSanity) { + const s = this.data.data.attribs.san.oneFifthSanity.split('/') + if (s[1] && !isNaN(Number(s[1]))) { + this.data.data.attribs.san.dailyLimit = Number(s[1]) + } else { + this.data.data.attribs.san.dailyLimit = 0 + } } else { this.data.data.attribs.san.dailyLimit = 0 } - } else { - this.data.data.attribs.san.dailyLimit = 0 } - } - // return computed values or fixed values if not auto. - this.data.data.attribs.mov.value = this.rawMov - this.data.data.attribs.db.value = this.rawDb - this.data.data.attribs.build.value = this.rawBuild + // return computed values or fixed values if not auto. + this.data.data.attribs.mov.value = this.rawMov + this.data.data.attribs.db.value = this.rawDb + this.data.data.attribs.build.value = this.rawBuild - // For vehicle only : - this.data.data.attribs.build.current = this.hp + // For vehicle only : + this.data.data.attribs.build.current = this.hp - // if ( - // data.data.attribs.mp.value > data.data.attribs.mp.max || - // data.data.attribs.mp.max == null - // ) { - // data.data.attribs.mp.value = data.data.attribs.mp.max - // } - // if ( - // data.data.attribs.hp.value > data.data.attribs.hp.max || - // data.data.attribs.hp.max == null - // ) { - // data.data.attribs.hp.value = data.data.attribs.hp.max - // } + // if ( + // data.data.attribs.mp.value > data.data.attribs.mp.max || + // data.data.attribs.mp.max == null + // ) { + // data.data.attribs.mp.value = data.data.attribs.mp.max + // } + // if ( + // data.data.attribs.hp.value > data.data.attribs.hp.max || + // data.data.attribs.hp.max == null + // ) { + // data.data.attribs.hp.value = data.data.attribs.hp.max + // } // if ( // data.data.attribs.hp.value == null && @@ -153,7 +154,7 @@ export class CoCActor extends Actor { // ) { // data.data.attribs.mp.value = data.data.attribs.mp.max // } - + } super.prepareBaseData() } @@ -174,54 +175,56 @@ export class CoCActor extends Actor { * @memberof ClientDocumentMixin# */ prepareDerivedData () { - super.prepareDerivedData() - // Set hpMax, mpMax, sanMax, mov, db, build. This is to allow calculation of derived value with modifed characteristics. - this.data.data.attribs.mov.value = this.rawMov - this.data.data.attribs.db.value = this.rawDb - this.data.data.attribs.build.value = this.rawBuild - - this.data.data.attribs.hp.max = this.rawHpMax - if (this.hp === null) this.data.data.attribs.hp.value = this.rawHpMax - - this.data.data.attribs.mp.max = this.rawMpMax - if (this.mp === null) this.data.data.attribs.mp.value = this.rawMpMax - - this.data.data.attribs.san.max = this.rawSanMax - if (this.san === null) this.data.data.attribs.san.value = this.rawSanMax - - // Apply effects to automaticaly calculated values. - const filterMatrix = [] - - if (this.data.data.attribs.hp.auto) filterMatrix.push('data.attribs.hp.max') - if (this.data.data.attribs.mp.auto) filterMatrix.push('data.attribs.mp.max') - if (this.data.data.attribs.san.auto) filterMatrix.push('data.attribs.san.max') - if (this.data.data.attribs.mov.auto) filterMatrix.push('data.attribs.mov.value') - if (this.data.data.attribs.db.auto) filterMatrix.push('data.attribs.db.value') - if (this.data.data.attribs.build.auto) filterMatrix.push('data.attribs.build.value') - - const changes = this.effects.reduce((changes, e) => { - if (e.data.disabled || e.isSuppressed) return changes - return changes.concat( - e.data.changes.map(c => { - c = foundry.utils.duplicate(c) - c.effect = e - c.priority = c.priority ?? c.mode * 10 - return c - }) - ) - }, []) - changes.sort((a, b) => a.priority - b.priority) + if (['character', 'npc', 'creature'].includes(this.type)) { + super.prepareDerivedData() + // Set hpMax, mpMax, sanMax, mov, db, build. This is to allow calculation of derived value with modifed characteristics. + this.data.data.attribs.mov.value = this.rawMov + this.data.data.attribs.db.value = this.rawDb + this.data.data.attribs.build.value = this.rawBuild + + this.data.data.attribs.hp.max = this.rawHpMax + if (this.hp === null) this.data.data.attribs.hp.value = this.rawHpMax + + this.data.data.attribs.mp.max = this.rawMpMax + if (this.mp === null) this.data.data.attribs.mp.value = this.rawMpMax + + this.data.data.attribs.san.max = this.rawSanMax + if (this.san === null) this.data.data.attribs.san.value = this.rawSanMax + + // Apply effects to automaticaly calculated values. + const filterMatrix = [] + + if (this.data.data.attribs.hp.auto) filterMatrix.push('data.attribs.hp.max') + if (this.data.data.attribs.mp.auto) filterMatrix.push('data.attribs.mp.max') + if (this.data.data.attribs.san.auto) filterMatrix.push('data.attribs.san.max') + if (this.data.data.attribs.mov.auto) filterMatrix.push('data.attribs.mov.value') + if (this.data.data.attribs.db.auto) filterMatrix.push('data.attribs.db.value') + if (this.data.data.attribs.build.auto) filterMatrix.push('data.attribs.build.value') + + const changes = this.effects.reduce((changes, e) => { + if (e.data.disabled || e.isSuppressed) return changes + return changes.concat( + e.data.changes.map(c => { + c = foundry.utils.duplicate(c) + c.effect = e + c.priority = c.priority ?? c.mode * 10 + return c + }) + ) + }, []) + changes.sort((a, b) => a.priority - b.priority) - const selectChanges = changes.filter(e => filterMatrix.includes(e.key)) + const selectChanges = changes.filter(e => filterMatrix.includes(e.key)) - // Apply all changes - for (const change of selectChanges) { - change.effect.apply(this, change) - } + // Apply all changes + for (const change of selectChanges) { + change.effect.apply(this, change) + } - if (this.hpMax && this.hpMax < this.hp) { this.data.data.attribs.hp.value = this.hpMax } - if (this.mpMax && this.mpMax < this.mp) { this.data.data.attribs.mp.value = this.mpMax } - if (this.sanMax && this.sanMax < this.san) { this.data.data.attribs.san.value = this.sanMax } + if (this.hpMax && this.hpMax < this.hp) { this.data.data.attribs.hp.value = this.hpMax } + if (this.mpMax && this.mpMax < this.mp) { this.data.data.attribs.mp.value = this.mpMax } + if (this.sanMax && this.sanMax < this.san) { this.data.data.attribs.san.value = this.sanMax } + } } /** @override */ diff --git a/module/items/skill/data.js b/module/items/skill/data.js index 1840f374..25485651 100644 --- a/module/items/skill/data.js +++ b/module/items/skill/data.js @@ -2,6 +2,33 @@ import { CoC7Item } from '../item.js' export class CoC7Skill extends CoC7Item { + constructor (data, context) { + if (typeof data.data?.skillName === 'undefined') { + if (typeof data.data === 'undefined') { + data.data = {} + } + const construct = CoC7Skill.guessNameParts(data.name) + if (!construct.isSpecialization) { + data.data.skillName = data.name + } else { + data.data.skillName = construct.skillName + data.data.specialization = construct.specialization + if (typeof data.data.properties === 'undefined') { + data.data.properties = {} + } + data.data.properties.special = true + if (construct.isFighting || construct.isFirearms) { + data.data.properties.combat = true + if (construct.isFighting) { + data.data.properties.fighting = true + } else { + data.data.properties.firearm = true + } + } + } + } + super(data, context) + } // async applyModifier (change) { // return @@ -23,6 +50,28 @@ export class CoC7Skill extends CoC7Item { // } // } + static guessNameParts (skillName) { + const output = { + skillName, + specialization: '', + isSpecialization: false, + isFighting: false, + isFirearms: false + } + const match = skillName.match(/^(.+)\s*\(([^)]+)\)$/) + if (match) { + output.skillName = match[2].trim() + output.specialization = match[1].trim() + output.isSpecialization = true + if (output.specialization === game.i18n.localize('CoC7.FightingSpecializationName')) { + output.isFighting = true + } else if (output.specialization === game.i18n.localize('CoC7.FirearmSpecializationName')) { + output.isFirearms = true + } + } + return output + } + get hasActiveEffects () { return this.activeEffects.length > 0 } diff --git a/module/manual/en/manual.md b/module/manual/en/README.md similarity index 60% rename from module/manual/en/manual.md rename to module/manual/en/README.md index d8c9e5b8..f172a05e 100644 --- a/module/manual/en/manual.md +++ b/module/manual/en/README.md @@ -15,62 +15,60 @@ Several parts of the actor sheets have pop up tooltips that trigger after two se This documentation can be reopened under [fas fa-atlas] Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en] -. - # Recent changes For a full list of changes checkout the [changelog](https://github.com/Miskatonic-Investigative-Society/CoC7-FoundryVTT/blob/develop/.github/CHANGELOG.md) on GitHub -. - - @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases} - @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer} - added The Dhole's House JSON support - @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects} - implementation of active effects - Active effects added to @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} and @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool} -. - # Overview sections below -If this is your first time it is recommends you also read the following sections. +If this is your first time it is recommends you also read the following sections on this page. + +Foundry VTT is based in actors and items. This module includes a number of system specific actors and items, and some examples of them can be found in the included system compendiums. - Actor overview - Items overview - Settings overview - Scene menu overview +- Keyboard and mouse shortcuts - @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator} - -. +- @Compendium[CoC7.system-doc.uug1mm5nokly4o2v]{Character creation} # How to use the system +- @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects} - An active effect will modify an actor characteristic(s), attribute(s), skill(s). - @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer} -- Actor Type: Character -- Actor Type: Container -- Actor Type: Creature -- Actor Type: NPC -- Character creation mode -- Development phase -- Item Type: Archetype -- Item Type: Book +- Actor Type: Character (TODO) +- Actor Type: Container (TODO) +- Actor Type: Creature (TODO) +- Actor Type: NPC (TODO) +- Chat link creator (TODO) +- Character creation mode (TODO) +- @Compendium[CoC7.system-doc.nk68b2ew15iw0bb8]{Combat} (TODO) +- Development phase (TODO) +- @Compendium[CoC7.system-doc.di6mcnaxfyi0y2l4]{Item Types} (TODO) +- @Compendium[CoC7.system-doc.kv2tbz6x29cq6ewq]{Item Type: Archetype} (TODO) +- @Compendium[CoC7.system-doc.oruecvy7jne4u4gt]{Item Type: Book} (TODO) - @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Item Type: Chases} -- Item Type: Item -- @Compendium[CoC7.system-doc.7hFq9EqLviAxqMFz]{Item Type: Occupation} +- Item Type: Item (TODO) +- @Compendium[CoC7.system-doc.qa934whpkpauiyc9]{Item Type: Occupation} - @Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Item Type: Setup} -- Item Type: Skill -- Item Type: Spell -- Item Type: Status -- Item Type: Talent -- Item Type: Weapon -- Macros -- Rolls -- Start Rest -- XP Gain -- @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} -- @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool} -- @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects} - -. +- @Compendium[CoC7.system-doc.mz0ulbkecfvv8nw7]{Item Type: Skill} (TODO) +- Item Type: Spell (TODO) +- Item Type: Status (TODO) +- Item Type: Talent (TODO) +- Item Type: Weapon (TODO) +- @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link Creation Tool} +- @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{Links} (TODO) +- Macros (TODO) +- Rolls (TODO) +- @Compendium[CoC7.system-doc.ce7s8psgyctzx5r1]{Sanity} (TODO) +- Start Rest (TODO) +- XP Gain (TODO) # Actor overview @@ -79,8 +77,6 @@ If this is your first time it is recommends you also read the following sections - _Creature_ - A more simple character, suitable for creatures. @Compendium[CoC7.examples.XE2vjLG03wGfnYLw]{Example Creature} - _NPC_ - A more simple character, suitable for NPCs. @Compendium[CoC7.examples.4kSvDc4n13oFx8RG]{Example NPC} -. - # Items overview - _Archetype_ - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. @Compendium[CoC7.items.lu04TIRrg9P3vRqY]{Example Archetype} @@ -94,8 +90,6 @@ If this is your first time it is recommends you also read the following sections - _Talent_ -A special power for Pulp Cthulhu. These do not trigger automation in the system. @Compendium[CoC7.items.yqvwz769ZeJplOW7]{Example Talent} - _Weapon_ - An item with weapon statistics (this includes unarmed attacks). @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Example Weapon} -. - # Settings overview Click on the [fas fa-cogs]Game Settings tab then under the Game Settings heading click on [fas fa-cogs]Configure Settings. @@ -113,12 +107,26 @@ Click on [fas fa-cogs]System Settings - _Developer And Debug Settings_ - These settings can break your world when new updates are released so only use them on test worlds - _Roll Table Settings_ - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums -. - # Call of Cthulhu Scene Menu -To access this menu you will need to have an active scene which can be created in the [fas fa-map]Scenes Directory. +To access this menu you will need to have an active scene which can be created in the [fas fa-map]Scenes Directory. These options are only available to the Keeper. + +- _Keeper's tools_ + - _Development phase_: When enabled, players can make improvement rolls for their marked skills. + - _Character creation mode_: When enabled, players can distribute points among their skills. + - _XP gain_: When enabled, a skill will be marked for improvement after a successful check. + - _Send a decoy roll to players_: When clicked, players will see a fake GM private roll. + - _Start Rest_: When click, pick characters to perform a rest and roll for XP gains. +- _Roll !_: Used to roll 1d100 with a threshold, difficulty and bonus or penalty dice. +- _Create link_: Create a roll link for players to click + +# Keyboard and mouse shortcuts + +There are many elements in the sheets that trigger a dice roll when clicked. Usually a dialog is shown to prompt the user for a difficulty and a possible bonus or penalty. This behavior is modified with the following controls: -- _Keeper's tools_ - Here you can toggle character creation mode, character development phase, actor importer, toggle automatic XP gain on a success, and start a rest -- _Roll !_ - Create a roll in chat -- _Create link_ - Create a roll link for players to click +- Right click on any rollable element to include it in an opposed roll. As long as the card is open, all rolls made + with a right click will be added to the opposed roll. +- Alt + Right click on any rollable element to include it in a combined roll. +- Shift + Left click on a rollable element will make a roll without asking for difficulty or bonus/penalty. +- Ctrl + Left click on a rollable element will create a roll request. Only available for the GM. +- Alt + Left click on sanity will prompt the player for minimum and maximum sanity loss. diff --git a/module/manual/en/actor_importer.md b/module/manual/en/actor_importer.md index 6fc4463a..7713fe65 100644 --- a/module/manual/en/actor_importer.md +++ b/module/manual/en/actor_importer.md @@ -1,11 +1,9 @@ # Actor Importer -You can use the actor importer to import serveral NPC/Creatures blocks from adventures and using the JSON exporter from [The Dholes House](https://www.dholeshouse.org/) +You can use the actor importer to import several NPC/Creatures blocks from adventures and using the JSON exporter from [The Dholes House](https://www.dholeshouse.org/) To open the actor importer either open the [fas fa-users]Actor Directory and click Actor Importer at the bottom of the side bar or on an active scene [game-icon game-icon-tentacle-strike] then click [fas fa-user-plus]Actor Importer -. - # Overview If this is your first time it is recommends you also read the following sections. @@ -13,8 +11,6 @@ If this is your first time it is recommends you also read the following sections - Non Playing Character (NPC) / Creature - The Dhole's House Actor Importer JSON -. - # Non Playing Character (NPC) / Creature ![](../../assets/manual/importer/importer.webp) @@ -36,8 +32,6 @@ If this is your first time it is recommends you also read the following sections Click import will create an actor under the [fas fa-users]Actor directory will be created in the Imported characters folder any text that was not understood will be stored in Keeper notes -. - # The Dhole's House Actor Importer JSON ![](../../assets/manual/importer/actor.webp) diff --git a/module/manual/en/character_creation.md b/module/manual/en/character_creation.md new file mode 100644 index 00000000..a2a07b67 --- /dev/null +++ b/module/manual/en/character_creation.md @@ -0,0 +1,109 @@ +# Character Creation + +The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required. + +# Skills + +In this section you will create or edit @Compendium[CoC7.system-doc.mz0ulbkecfvv8nw7]{skills} + +1. Go to [fas fa-atlas]compendium packs +2. Click on [fas fa-atlas]Create Compendium + + - Give your compendium a name (e.g. `My Skills`) + - Select _Item_ as _Document Type_ + +## Use existing skills + +1. Open up the compendium Skills +2. Drag any skills you want to customise into your new compendium + +## Create new skills + +1. Go to [fas fa-suitcase]Items Directory +2. Cick on [fas fa-suitcase]Create Item + + - Give the skill a name + - Set _Type_ to _Skill_ + +# Setup + +@Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Setups} are predefined sets of skills and a way to generate the characteristics (this can be by rolling dices or assigning certain amount of points for example). Once a setup has been created it can be used in the creation of multiple characters. + +1. Go to [fas fa-suitcase]Items Directory +2. Click on [fas fa-suitcase]Create Item + + - Give the skill a name + - Set _Type_ to _Setup_ + +3. Define the setup to set the basic configuration for a type of characters. + - You can add a textual description on the _Description_ tab + - If you click on the _icon_ you can select a new one + - On the _Details_ tab you can: + - Select the _Cthulhu Flavors_ where this setup is valid + - Define the biography sections and their names (click on the `+` to add extra Biography sections) + - Drag default items like @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Punch} + - Show / Hide the _Characteristics_ tab with the _Enable characteristics_ checkbox + - The _Characteristics_ tab allows you to define the formula to roll the dices for each characteristic + - The _Skills_ tab allows you to define the default set of skills by dragging items of type _skill_ to the _common skills_ area. + +# Occupations + +An @Compendium[CoC7.system-doc.qa934whpkpauiyc9]{occupation} helps to define the character background, think about it as the definition of the set of _occupational skills_ (the ones where the character can spend their occupation points) plus the definition of how to calculate the amount of available occupation points. Finally the _occupation_ also allows to define the minimum and the maximum _credit_ for a character with this _occupation_. + +Keep in mind that the set of _occupational skills_ doesn't need to be fixed, the system allows to configure the _occupation_ so when it's dragged to a Character sheet will give the option of selecting one or more skills from a closed list, or even add a pre defined number of skills to select from all the available ones. + +The _occupation_ creation process is the following one: + +1. Go to [fas fa-suitcase]Items Directory +2. Cick on [fas fa-suitcase]Create Item + + - Give the skill a name + - Set _Type_ to _Occupation_ + +3. Define the _occupation_ to select the relevant characteristics and the occupation skills + - You can add a textual description on the _Description_ tab and define the _Source_ + - If you click on the _icon_ you can select a new one + - On the _Details_ tab you can: + - Select the _Occupation Type_ + - Define the characteristics used to calculate the _occupation points_, you can check the characteristics you want and define the multiplier, for the ones with _Optional_ marked, the player will have to choose one at creation time. + + For instance if an occupation uses _EDU * 2 + (STR or DEX) * 2_ you have to select _Education_ and put _2_ on the _Multiplier_ without marking _Optional_ and then for _Strength_ and _Dexterity_ you have to check both, check _Optional_ on both, and put _2_ on the Multiplier on both. + + - Finally you will have to define the _Minimum_ and _Maximum_ value for the _Credit Rating_ skill for this occupation. + - The _Skills_ tab allows you to select the _occupation skills_ by dragging items of the Type _skill_ to the different sections. A typical occupation has 8 skills plus the _Credit Rating_ skill. + - The _Common Skills_ includes the default occupation skills that can't be changed + - The _Optional skills groups_ section allows to add groups (you can create several of them) of skills for the player to choose from. Once you click on the `+` sign a group is created and you can define the _Number to chose from_ (number of skills to select) and create a pool of skills available for the selection by dragging them on the group. + - Finally the _Additional Skills_ allows you to enter a number of skills the player can choose from the rest of the available skills. + +# _Player Character_ creation + +You can create a _Player Character_ by creating the _actor_ and filling the corresponding blank _Character Sheet_, but it's much easier if you have previously created a _setup_ and an _occupation_ (see above), if you have created both the process to create the _Player Character_ is as follows: + +1. Go to [fas fa-users]Actors Directory +2. Cick on [fas fa-user]Create Actor + + - Give the actor a name + - Set _Type_ to _Character_ + +3. Drag and drop a item of Type _setup_ (for instance 1920s, 1890s, Pulp, Modern,...) on the sheet to do the basic setup using the configuration defined on the item, this usually includes rolling the characteristics or setting their values with the points system, and set a default set of skills corresponding to the given setup. + +4. Drag and drop an _occupation_ Type item on the sheet, this will probably involve selecting some skills from a given reduced set or from the remaining ones. This will calculate the available _Personal points_ and _Occupation points_ and assign the part of the Occupation points to reach the minimum value for _Credit Rating_ of the selected occupation. + +5. On the keeper's menu on the left click [game-icon game-icon-tentacle-strike]Keeper's tools, if this menu is not available need to have an active scene which can be created in the [fas fa-map]Scenes Directory + +6. On the new submenu click [fas fa-user-edit]Character creation mode. A new tab called _Development_ should appear on the character sheets. + +7. Click on the characters Development tab + +8. The first dot column is for your occupational skills these can be toggled by clicking them + - If you have enabled the Pulp rule Archetypes you will have a second dot to toggle that + +9. Distribute occupation/personal points in development tab taking on account that each skill has 5 columns: + 1. First one is the basic percentage of the skill + 2. The second one is the one to put the _Personal interest points_ during the creation of the character + 3. The third one is only available on for the _occupation_ skills (marked with a dark circle before the skill name) and it's used to assign the _Occupation points_. + - If you have enabled the Pulp rule Archetypes you will have a forth column you enter your archetype points here + 4. The forth/fifth column should be initially blank and its where the experience points will show up (you can also assign points here if you are playing an experienced character) + 5. The final column is a read only one with the final calculated value for the skill (the sum of the other 4) + +- [Video showing the Character creation process](https://www.youtube.com/watch?v=VsQZHVXFwlk) diff --git a/module/manual/en/chases.md b/module/manual/en/chases.md index c4b2bb8c..b350f9cc 100644 --- a/module/manual/en/chases.md +++ b/module/manual/en/chases.md @@ -82,7 +82,7 @@ The chase is initialized, you can adjust some options. Locations in white are in During setup or during chase you can select a location to modify it. -Starting (white) locations can not be modified during setup.

      +Starting (white) locations can not be modified during setup. To modify a location select it by clicking on it. This will display the location details on the header part of the sheet. @@ -94,8 +94,6 @@ To modify a location select it by clicking on it. This will display the location 4. Add a new location. 5. Active location. -. - # Setting up obstacles. You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties. @@ -107,8 +105,6 @@ You can add obstacle after and before a location. You can pre-fill an obstacle w 3. Movement action cost in case of failure. 4. Check used to pass the location. When it's red the active actor does not have the associated check. -. - # Cut to the chase. When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start. @@ -116,7 +112,7 @@ When you are ready you can cut to the chase. If not all participant have a speed ![](../../assets/manual/chases/cut_to_the_chase_1.webp) 1. Initiative track. The active participant is circled in orange. -2. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated. +2. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest participant) all movement action will be recalculated. 3. A barrier. 4. A hazard. diff --git a/module/manual/en/combat.md b/module/manual/en/combat.md new file mode 100644 index 00000000..720b2b89 --- /dev/null +++ b/module/manual/en/combat.md @@ -0,0 +1,41 @@ +# Combat + +## Starting the combat + +On the scene select the tokens involved on the combat right click on one of them and on the bottom right click on the _Toggle combat state_ icon. This will add the actors corresponding to the selected tokens to the combat tab. +Then on the combat tab you can _start the combat_. + +The combat tracker will help you to track both the initiatives of the different actors and the combat rounds. + +## Initiative + +On foundry combat turns are ordered by initiative, in the system this is usually the _DEX_ of the actor. So to set the initiatives click on the dice icon of each actor or just the icon with 3 persons on the top left of the combat tab to set all at once. + +Next to each actor on the combat tab there are 3 icons: + +- _A target_: to _draw the gun_ (this will add 50 to that character initiative) +- _A crossed eye_: to show/hide the corresponding actor on the list. +- _A skull_: to mark a character as defeated and skip it for the following turns. + +## Select target / targets + +During an actor's turn, to attack the first thing to do is to select the target or targets, this can be done by doing a _right click_ on the target's token and then clicking on the _target_ icon (bottom left). Or set the _target_ mode on from the left tool bar and click on the targets. + +Then open the actor's sheet and click on the **name** of the item that will be used for the attack. This can be from a single shot of a long range weapon, or some melee attack or a maneuver. +This click will start the attack workflow on the chat, the chat card will allow selecting further options of the attack depending on the type of attack. + +> Tip: if you _right click_ on the combat tracker sheet icon, this will pop put this as a little window and you then you can see both the combat tracker window and results of the combat on the chat. + +## Melee + +## Maneuvers + +Not implemented yet. + +## Single Shot + +## Automate fire + +### Multiple Targets + +## Reload diff --git a/module/manual/en/commands_cheat_sheet.md b/module/manual/en/commands_cheat_sheet.md new file mode 100644 index 00000000..e0aa02e5 --- /dev/null +++ b/module/manual/en/commands_cheat_sheet.md @@ -0,0 +1,29 @@ +# Commands Cheat Sheet + +## General rules + +Most sheet component can be clicked on the trigger a check/roll. +As a general rule you can modify those requests: + +- `Shift` will fast forward the request. +- `Ctrl` [GM only] will create a link in the chat with that request a roll to the players. + +## Sanity + +| Command | Action | +| ---------------------------------- | ------------------------------------------------- | +| `Ctrl+Shift` + _left click SAN_ | Request a Sanity Check for the character | +| `Ctr+Shift+Alt` + _left click SAN_ | Request a Sanity Check and define the sanity loss | + +## Combined / Opposed rolls + +| Command | Action | +| ----------------------------------- | ----------------------------------------------- | +| _Right Click on an element_ | Start/ Include the roll on an **opposed** roll | +| `Alt` + _Right Click on an element_ | Start/ Include the roll on an **combined** roll | + +## Other + +| Command | Action | +| ------- | ----------------------------- | +| `c` | Show _my own_ character sheet | diff --git a/module/manual/en/effects.md b/module/manual/en/effects.md index c05f4e1b..dac5f078 100644 --- a/module/manual/en/effects.md +++ b/module/manual/en/effects.md @@ -2,23 +2,23 @@ The system allows for the creation of Active Effects. An active effect will modify an actor characteristic(s), attribute(s), skill(s). -Effects can be created as a @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} using the @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool} or directly in the character sheet by clicking the [game-icon game-icon-aura] button. +Effects can be created as a @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{link} using the @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool} or directly in the character sheet by clicking the [game-icon game-icon-aura] button. ## Effects tab Effects will be display in the effect tabs on the character sheet. -![effects tab](../../assets/manual/effects/effects-tab.jpg) +![effects tab](../../assets/manual/effects/effects-tab.webp) Effect are broken down in 4 categories for PC : - Status: those are effects used and created by the system (Wounds status, prone, insane ...). Those effects do not include any changes. - Temporary: those are effects with duration. - Passive: those are permanent effects. -- Innactive: those are disabled effects. +- Inactive: those are disabled effects. For NPC/Creatures you will only see 2 sections: active and inactive effects. -When an effect is not inactive, the correcponding changes will be applied to the actor. +When an effect is not inactive, the corresponding changes will be applied to the actor. ## Creating effects @@ -28,15 +28,15 @@ This windows has 3 tabs ### Details tab -![Details tab](../../assets/manual/effects/details-tab.jpg) +![Details tab](../../assets/manual/effects/details-tab.webp) ### Duration tab -![Duration tab](../../assets/manual/effects/duration-tab.jpg) +![Duration tab](../../assets/manual/effects/duration-tab.webp) ### Changes tab -![Changes tab](../../assets/manual/effects/changes-tab.jpg) +![Changes tab](../../assets/manual/effects/changes-tab.webp) This last tab will includes all changes made to the character sheet. @@ -45,14 +45,14 @@ This last tab will includes all changes made to the character sheet. An effect includes a list of changes. Each change needs to be addressed with the corresponding data path. The available changes are : -- Characteristics: data.characteristics.\[charactetistic\].value - - available \[charactetistic\] are: str, con, siz, dex, app, int, pow, edu +- Characteristics: data.characteristics.\[characteristic\].value + - available \[characteristic\] are: str, con, siz, dex, app, int, pow, edu - attributes: - mov: data.attribs.mov.value - build: data.attribs.build.value - bonus damage: data.attribs.db.value - armor: data.attribs.armor.value -- derived attributes. Only the maximum value of those attributes should be modifed. Those changes are applied after all other changes have been made. If that attibute is in auto mode, it will be recalculated with the previous characteristics changes before having it's value affected. +- derived attributes. Only the maximum value of those attributes should be modified. Those changes are applied after all other changes have been made. If that attibute is in auto mode, it will be recalculated with the previous characteristics changes before having it's value affected. - max hit points: data.attribs.hp.max - max sanity: data.attribs.san.max - skills. Skills are identified by their name without specialization. Skill names are case sensitive ! diff --git a/module/manual/en/first_investigator.md b/module/manual/en/first_investigator.md index 76593fa4..ec4c8968 100644 --- a/module/manual/en/first_investigator.md +++ b/module/manual/en/first_investigator.md @@ -2,7 +2,7 @@ The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required. -. +This page creates an investigator using the provided compendiums, if you are ready to full customise your character people read @Compendium[CoC7.system-doc.uug1mm5nokly4o2v]{Character creation} instead. # Skill @@ -24,7 +24,7 @@ Once you have set up your skills next create up a Setup, here is an example from Setups allow to you standardise what skills, items, biography sections, and characteristics the investigators start with. -Click on the [fas fa-suitcas]Items Directory tab then Create Item give this a name e.g. New Investigator Setup and set the Type to Setup +Click on the [fas fa-suitcase]Items Directory tab then Create Item give this a name e.g. New Investigator Setup and set the Type to Setup On the Description tab to set the description click the [fas fa-edit]button to get an editor. @@ -48,8 +48,6 @@ On the Details tab you can set the Occupation Points calculation and Minimum/Max On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select. -. - # Creating your first investigator ## Character diff --git a/module/manual/en/item_archetype.md b/module/manual/en/item_archetype.md new file mode 100644 index 00000000..ee9da5d4 --- /dev/null +++ b/module/manual/en/item_archetype.md @@ -0,0 +1,15 @@ +# Item Type: Pulp Archetype + +Archetypes are used on Pulp games. They provide skill and characteristic bonuses. + +Once the _Archetype_ item has been created, the _Archetype Sheet_ is shown. +There you can define the details of the _Archetype_: + +- On the _Details_ tab you can: + - Assign the number of _Additional points_ + - Assign the number of _Pulp Talents_ + - Define the _Basic Characteristics_ and if you want to _Use a dice roll_ to generate them. + - Define the _Suggested Occupations_ + - Define the _Suggested Traits_ +- On the _Skills_ tab you can: + - Drag the _skills_ corresponding to this _Archetype_ diff --git a/module/manual/en/item_book.md b/module/manual/en/item_book.md new file mode 100644 index 00000000..6723c748 --- /dev/null +++ b/module/manual/en/item_book.md @@ -0,0 +1,3 @@ +# Item Type: Book + +The system has a special type of item for the books to be able to define the _Sanity Loss_, if it's a Mythos Tome or an Occult book, what _Spells_ or _Skills_ it provides and of curse a description and the book image. diff --git a/module/manual/en/item_occupation.md b/module/manual/en/item_occupation.md index dfcf626f..ced77b0b 100644 --- a/module/manual/en/item_occupation.md +++ b/module/manual/en/item_occupation.md @@ -4,7 +4,7 @@ An _occupation_ helps to define the character background, think about it as the Keep in mind that the set of _occupational skills_ doesn't need to be fixed, the system allows to configure the _occupation_ so when it's dragged to a Character sheet will give the option of selecting one or more skills from a closed list, or even add a pre defined number of skills to select from all the available ones. -1. Go to the [fas fa-suitcas]Items Directory tab +1. Go to the [fas fa-suitcase]Items Directory tab 2. Click on [fas fa-suitcase]Create Item 1. Give the set up a name e.g. _Librarian_ diff --git a/module/manual/en/item_setup.md b/module/manual/en/item_setup.md index 46770862..23113136 100644 --- a/module/manual/en/item_setup.md +++ b/module/manual/en/item_setup.md @@ -2,7 +2,7 @@ Setups are predefined sets of skills and a way to generate the characteristics (this can be by rolling dices or assigning certain amount of points for example). -1. Go to the [fas fa-suitcas]Items Directory tab +1. Go to the [fas fa-suitcase]Items Directory tab 2. Click on [fas fa-suitcase]Create Item 1. Give the set up a name e.g. _1920's Setup_ diff --git a/module/manual/en/item_skill.md b/module/manual/en/item_skill.md new file mode 100644 index 00000000..a2b50831 --- /dev/null +++ b/module/manual/en/item_skill.md @@ -0,0 +1,19 @@ +# Item Type: Skill + +A _skill_ will be rolled during tests. + +1. Go to the [fas fa-suitcase]Items Directory tab +2. Click on [fas fa-suitcase]Create Item + + 1. Give the skill a name e.g. _Art/Craft (Dancing)_ + 2. Set _Type_ to _Skill_ + +3. On the _Description_ tab you can change the name, icon, Cthulhu Flavors (which editions this appears in), and description + + 1. _No adjustment_ - Can not be assigned personal skill points. + 2. _No XP gain_ - You do not mark this skill for improvement on a success. + 3. _Specialization_ - This skill is part of a group like Pilot or Flighting. + 4. _Uncommon_ - This skill is uncommon and can be automatically hidden on the character sheet. + 5. _Pushed_ - This skill can be pushed. + 6. _Fighting_ - Automatically set Specialization, Combat, and the specialization name to Fighting. + 7. _Firearms_ - Automatically set Specialization, Combat, and the specialization name to Firearms. diff --git a/module/manual/en/items.md b/module/manual/en/items.md new file mode 100644 index 00000000..55c226c4 --- /dev/null +++ b/module/manual/en/items.md @@ -0,0 +1,29 @@ +# Items + +The system support many different types of items, from basic items or weapons to skills or the complete setup of a type of character. You can see examples on the compendium that comes with the system. + +To create any of the types of items you always start the same way + +1. Go to the items directory +2. Click on _Create Item_ + - Give it a name + - Select the item _Type_ (see below for details on each one) + - Select the destination folder. + +And have some common structure so on all of them: + +- You can add a textual description on the _Description_ tab or just on the main window if it doesn't have tabs. +- If you click on the _icon_ you can pick or upload a new one + +# Available types +- @Compendium[CoC7.system-doc.kv2tbz6x29cq6ewq]{Item Type: Archetype} +- @Compendium[CoC7.system-doc.oruecvy7jne4u4gt]{Item Type: Book} +- @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Item Type: Chases} +- Item Type: Item +- @Compendium[CoC7.system-doc.qa934whpkpauiyc9]{Item Type: Occupation} +- @Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Item Type: Setup} +- @Compendium[CoC7.system-doc.mz0ulbkecfvv8nw7]{Item Type: Skill} +- Item Type: Spell +- Item Type: Status +- Item Type: Talent +- Item Type: Weapon diff --git a/module/manual/en/link_creation_window.md b/module/manual/en/link_creation_window.md index 5c398643..be978810 100644 --- a/module/manual/en/link_creation_window.md +++ b/module/manual/en/link_creation_window.md @@ -4,30 +4,30 @@ The system includes a tool to help you create links easily. It's located on the left side bar. Click on the [fas fa-link] icon. This tools is available to GM only. -![Creation tool](../../assets/manual/links/links-creation-tool.jpg) +![Creation tool](../../assets/manual/links/links-creation-tool.webp) -using this you can create @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} for skill check, san check, effects ... +using this you can create @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{link} for skill check, san check, effects ... alternatively you can open the tool by holding CTRL while clicking no an item or a skill. ## Main window Clicking on the tool icon will open a window : -![Main window](../../assets/manual/links/main-window.jpg) +![Main window](../../assets/manual/links/main-window.webp) You can there select options for you link. -- "Compendium packs" and "Items directory" allows you to reference an objet from corresponding folder. +- "Compendium packs" and "Items directory" allows you to reference an object from corresponding folder. - "Modifiers" will allows you to add modifiers to your check. - "blind" will force the roll mode to be blind. - "Label" will allows you to change the display label. - "Icon" will allows you to choose an icon for your link. Icons can be : - - A font awsome or a game-icons reference : "fas fa-ankh" or "game-icon game-icon-tentacle-strike". + - A font awesome or a game-icons reference : "fas fa-ankh" or "game-icon game-icon-tentacle-strike". - A link to an image in the system data or system core: "icons/magic/symbols/arrowhead-green.webp". If you do not supply a label and/or an icon, a default label and icon will be added. -![default label](../../assets/manual/links/default-label.jpg) +![default label](../../assets/manual/links/default-label.webp) ## Effects window @@ -38,14 +38,14 @@ Select the options the same way you will be doing for a regular effect. - Once your link is created and valid it will appear in a white box in the middle of the window. -![link created](../../assets/manual/links/effect-link-creation.jpg) +![link created](../../assets/manual/links/effect-link-creation.webp) - You are now ready to whisper it to your players, copy it in your clipboard so you can add it to your items or journal entries or send it to the chat. -![link in the chat](../../assets/manual/links/link-effect-chat.jpg) +![link in the chat](../../assets/manual/links/link-effect-chat.webp) - When a player clicks a link the corresponding action will be performed by his character. - When a GM clicks a link the corresponding action will be performed by his selected tokens. -- A link drag/droped in journal entries, on a token etc... +- A link drag/dropped in journal entries, on a token etc... -![link drop](../../assets/manual/links/effect-drop.jpg) +![link drop](../../assets/manual/links/effect-drop.webp) diff --git a/module/manual/en/links.md b/module/manual/en/links.md index ba7c05b2..2a3d8aac 100644 --- a/module/manual/en/links.md +++ b/module/manual/en/links.md @@ -8,7 +8,7 @@ - By manually typing it (read details below). - By CTRL+click on any sheet element (Characteristic, Attribute, skill, SAN loss). - By dragging a sheet element (Characteristic, Attribute, skill (+CTRL)) on an editor (Journal entry) - - By CTRL + dragging an item (skill or weapon) from a compendium or an item directory on an editor. When a link is created that way and the used as a GM, if your controlled character doen't hold the weapon/skill you'll be prompted to create the corresponding item. + - By CTRL + dragging an item (skill or weapon) from a compendium or an item directory on an editor. When a link is created that way and the used as a GM, if your controlled character doesn't hold the weapon/skill you'll be prompted to create the corresponding item. - By using the included compendium written by Lozalojo. - Links can be dragged from chat log on an editor. - When a link is created the difficulty/penalty selection windows will open. Hold SHIFT to bypass that comportment. @@ -21,7 +21,7 @@ - Links should be written using the @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool}. The link creation window is a tool for GM. It's located in the left side bar. Links for chat messages and sheet editors (NPC, Journal entries...). -Format of link is `@coc7.TYPE_OF_REQUEST[OPTIONS]{TEXT_TO_DISPLAY}` +Format of link is `@@coc7.TYPE_OF_REQUEST[OPTIONS]{TEXT_TO_DISPLAY}` - `TYPE_OF_REQUEST` : - `sanloss`: trigger a san check, upon failure will propose to deduct the corresponding SAN. @@ -45,17 +45,17 @@ Format of link is `@coc7.TYPE_OF_REQUEST[OPTIONS]{TEXT_TO_DISPLAY}` | Link | Result | | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | -| `@coc7.sanloss[sanMax:1D6,sanMin:1,difficulty:++,modifier:-1]` | {Hard San Loss (-1) 1/1D6} | -| `@coc7.check[type:charac,name:STR,difficulty:+,modifier:-1]` | {Hard STR check(-1)} | -| `@coc7.check[type:attrib,name:lck,difficulty:+,modifier:-1]` | {Hard luck check(-1)} | -| `@coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,difficulty:+,modifier:-1]` | {Hard Anthropology check(-1)} (with icon) | -| `@coc7.sanloss[sanMax:1D6,sanMin:1]` | {San Loss (-1) 1/1D6} (without name, difficulty nor modifier) | -| `@coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,modifier:+1]` | {Anthropology check (+1)} (with icon, without name nor difficulty) | +| `@@coc7.sanloss[sanMax:1D6,sanMin:1,difficulty:++,modifier:-1]` | {Hard San Loss (-1) 1/1D6} | +| `@@coc7.check[type:charac,name:STR,difficulty:+,modifier:-1]` | {Hard STR check(-1)} | +| `@@coc7.check[type:attrib,name:lck,difficulty:+,modifier:-1]` | {Hard luck check(-1)} | +| `@@coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,difficulty:+,modifier:-1]` | {Hard Anthropology check(-1)} (with icon) | +| `@@coc7.sanloss[sanMax:1D6,sanMin:1]` | {San Loss (-1) 1/1D6} (without name, difficulty nor modifier) | +| `@@coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,modifier:+1]` | {Anthropology check (+1)} (with icon, without name nor difficulty) | ### Using links - You can drag/drop links from chat to sheets and between sheets. -- You can drar/drop a link directly on a token. +- You can drag/drop a link directly on a token. - You can drag/drop items and skills on a journal entry while holding CTRL, this will create the corresponding check with regular difficulty and 0 modifier. - You can create link in the chat by clicking and holding CTRL from any sheet (PC/NPC/Creature) corresponding characteristic/luck/SAN/Competence/weapon/San loss. - This will open the select penalty/difficulty dialogue. Clicking on the generated link will then trigger the check with all parameters. diff --git a/module/manual/en/sanity.md b/module/manual/en/sanity.md new file mode 100644 index 00000000..9fcc10df --- /dev/null +++ b/module/manual/en/sanity.md @@ -0,0 +1,11 @@ +## Sanity Checks + +The system has integrated the sanity check workflow and can handle sanity rolls, tracking _Sanity_ loss and rolling for temporal insanity. + +## Requesting Sanity rolls + +- The Keeper can click with `Ctrl+Shift` on the _Sanity_ of character to request a Sanity Check for the character + + - If the Keeper also press `Alt` (so holding at the same time `Ctrl+Shift+Alt`) while clicking on the _Sanity_ of a character, a dialog will pop-up to introduce the sanity loss if the sanity check is passed and the value for when the sanity check is failed. + +- [Video showing the Sanity check workflow](https://www.youtube.com/watch?v=yAMqHiv7eMw) diff --git a/packs/examples.db b/packs/examples.db index a4aad281..58c18fe7 100644 --- a/packs/examples.db +++ b/packs/examples.db @@ -1,5 +1,5 @@ {"_id":"4kSvDc4n13oFx8RG","name":"Villain example","type":"npc","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":50,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":null},"con":{"value":50,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":null},"siz":{"value":50,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":null},"dex":{"value":50,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":null},"app":{"value":50,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":null},"int":{"value":50,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":null},"pow":{"value":50,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":null},"edu":{"value":50,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":null}},"attribs":{"hp":{"value":10,"max":10,"short":"HP","label":"Hit points","auto":true},"mp":{"value":10,"max":10,"short":"HP","label":"Magic points","auto":true},"lck":{"value":50,"short":"LCK","label":"Luck","max":99},"san":{"value":50,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":8,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":0,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":0,"value":0,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"conditions":{"criticalWounds":{"value":false},"unconscious":{"value":false},"dying":{"value":false},"dead":{"value":false},"prone":{"value":false},"tempoInsane":{"value":false},"indefInsane":{"value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"special":{"sanLoss":{"checkPassed":"","checkFailled":""},"attacksPerRound":1},"infos":{"occupation":"Be a villain","age":"Very old","sex":""},"flags":{"locked":true,"displayFormula":false},"attacksPerRound":1},"token":{"name":"Villain example","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg","light":{"alpha":0.5,"angle":0,"bright":0,"coloration":1,"dim":0,"gradual":true,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}}},"items":[{"_id":"JKPFlce4fXskHrco","name":"Very mean sidekick","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.MpvookJWHQs0NX6M"}}},{"_id":"Uyw5Vo86WmxaCbLt","name":"Plan to enslave humanity","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.H7yLjkXpmrlhPFRt"}}},{"_id":"75xFKGouCIhczLRe","name":"Punch","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"mjNPsr30tOVP1OUa"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":100000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.Uldjvs5fvCMri6RN"}}},{"_id":"mjNPsr30tOVP1OUa","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"skillName":"Brawl","specialization":"Fighting","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vS8bsPWFlwgOecoB"}}},{"_id":"Wc35ZVZlbGvnt4Dk","name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"skillName":"Rifle/Shotgun","specialization":"Firearms","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.m2pYjKk4Gk3FcEBL"}}},{"_id":"GEX2If3omq2h3kf0","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"skillName":"Dodge","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wK8XxNj9QwXlGFEb"}}},{"_id":"CpenApM1POTvS9uc","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"skillName":"Own","specialization":"Language","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":50,"attributes":{},"properties":{"push":true,"special":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id":"7VR4auTMAPfaEqyA","name":"My test weapon","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"

      Description of the weapon

      \n

      selecting 'Area of effect' will enable 3 different damage and range

      \n

      selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

      \n

      selecting 'Special' will activate the special input field

      \n

      In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

      \n

      Edit the weapon and select the correct skill.

      ","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Rifle/Shotgun","id":"Wc35ZVZlbGvnt4Dk"},"alternativ":{"name":"Rifle/Shotgun","id":"Wc35ZVZlbGvnt4Dk"}},"range":{"normal":{"value":"15ft","units":"","damage":"1d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":""},"bullets":"","ammo":0,"malfunction":"85","blastRadius":null,"properties":{"melee":false,"rngd":true,"auto":true,"brst":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"$5","mdrn":"$6"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.ar306rfjUIZFenWF"}}},{"_id":"gCpN0Jqn85LVYRcD","name":"Torment the PC","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"skillName":"Torment the PC","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"75","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.l4vz66H4IkqiXKzB"}}},{"_id":"0AHo1cSc7ueMEg1C","name":"Takeover the world","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"skillName":"Takeover the world","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"80","attributes":{},"properties":{},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DuQXiLwoHb7JnNGv"}}},{"_id":"gtLHe6r4xczLReMd","name":"Be a pain","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"skillName":"Be a pain","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"0","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DGD3CQQWsYIqhLWL"}}},{"_id":"tzxgO3tPQTvSHXKv","name":"Bark orders","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"skillName":"Bark orders","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"45","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.M4Q1ps8ecPWKfnI0"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.KIFjLTP875sS5weT"}}} -{"_id":"JuI2aWDSEuQNKeUI","name":"1920 Character","type":"character","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":null,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":null},"con":{"value":null,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":null},"siz":{"value":null,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":null},"dex":{"value":null,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":null},"app":{"value":null,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":null},"int":{"value":null,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":null},"pow":{"value":null,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":null},"edu":{"value":null,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":null}},"attribs":{"hp":{"value":null,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":0,"max":0,"short":"HP","label":"Magic points","auto":true},"lck":{"value":null,"short":"LCK","label":"Luck","max":99},"san":{"value":null,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":8,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":-2,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":-2,"value":-2,"short":"BLD","label":"Build","auto":true},"armor":{"value":"","localized":false,"locations":[],"auto":false}},"conditions":{"criticalWounds":{"value":false},"unconscious":{"value":false},"dying":{"value":false},"dead":{"value":false},"prone":{"value":false},"tempoInsane":{"value":false},"indefInsane":{"value":false}},"infos":{"occupation":"","age":"","sex":"","residence":"","birthplace":"","archetype":"","organization":"","playername":""},"flags":{"locked":true,"manualCredit":false},"credit":{"monetarySymbol":"","multiplier":null,"spent":"","assetsDetails":""},"development":{"personal":null,"occupation":null,"archetype":null},"biography":[{"title":"Personal Description","value":null},{"title":"Ideology/Beliefs","value":null},{"title":"Significant People","value":null},{"title":"Meaningful Locations","value":null},{"title":"Treasured Possessions","value":null},{"title":"Traits","value":null}],"sanityLossEvents":[],"backstory":"","indefiniteInsanityLevel":{"value":0,"max":0},"description":{"keeper":""},"notes":""},"token":{"vision":true,"dimSight":30,"brightSight":0,"actorLink":true,"disposition":1,"name":"1920 Character","displayName":0,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg","light":{"alpha":0.5,"angle":0,"bright":0,"coloration":1,"dim":0,"gradual":true,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}}},"items":[{"_id":"Xm0JdbwxJzHLLtYZ","name":"Track (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","data":{"skillName":"Any","specialization":"Track","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":10,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.w0eY2fJe6CEHY9pq"}}},{"_id":"JMvqU49qbRiTKJGb","name":"Swim","type":"skill","img":"systems/CoC7/assets/icons/skills/swim.svg","data":{"skillName":"Swim","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.1zSIeY0eat2AxQok"}}},{"_id":"RGnZ6pAqojV0yLwM","name":"Survival (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/survival_any.svg","data":{"skillName":"Any","specialization":"Survival","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":10,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.X99v5MtRlfTNjL3B"}}},{"_id":"ahBy1reywUrr7lgk","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","data":{"skillName":"Stealth","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.DcV524K0jNfjDEZC"}}},{"_id":"WYY5kolG5SyG2aH1","name":"Spot Hidden","type":"skill","img":"systems/CoC7/assets/icons/skills/spot_hidden.svg","data":{"skillName":"Spot Hidden","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.nHaWNwtW3Lg0sqYJ"}}},{"_id":"GJGoB7xXaIyP3ciE","name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","data":{"skillName":"Sleight of Hand","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.KKFNX5M4LtEtiuxs"}}},{"_id":"dY60dvWH18v1sSTW","name":"Science (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_any.svg","data":{"skillName":"Any","specialization":"Science","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.KvZuYcg3AmVrwKi2"}}},{"_id":"rCfoj0uGHg492k6D","name":"Ride","type":"skill","img":"systems/CoC7/assets/icons/skills/ride.svg","data":{"skillName":"Ride","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.o7TdzbuSP7ticONf"}}},{"_id":"PrdpOJWdNCRTZ0EE","name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","data":{"skillName":"Psychology","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.MFR4eR79niGaLfph"}}},{"_id":"1Pan4WIJDkZbqESM","name":"Psychoanalysis","type":"skill","img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg","data":{"skillName":"Psychoanalysis","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rXBU2GofiO2qOsGv"}}},{"_id":"i9errUuZqlwAVi7v","name":"Pilot (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/pilot_any.svg","data":{"skillName":"Any","specialization":"Pilot","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.uQsVn8K6XRXQmtaI"}}},{"_id":"bMbjk7ytnd1Ow4j5","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","data":{"skillName":"Persuade","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.uMzSNURmZqjxr7mU"}}},{"_id":"pMYQtwYDRSmb9wWA","name":"Operate Heavy Machinery","type":"skill","img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","data":{"skillName":"Operate Heavy Machinery","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.cuExWy1130KUwuWz"}}},{"_id":"Exqibxs7ijhDp0Oz","name":"Occult","type":"skill","img":"systems/CoC7/assets/icons/skills/occult.svg","data":{"skillName":"Occult","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.6pSfZVS68jSHxa5T"}}},{"_id":"CgTtqUAM5uMMTUV6","name":"Navigate","type":"skill","img":"systems/CoC7/assets/icons/skills/navigate.svg","data":{"skillName":"Navigate","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.1c3fdvpQtvZf5YXK"}}},{"_id":"CF86aFA8aBiuIBnC","name":"Natural World","type":"skill","img":"systems/CoC7/assets/icons/skills/natural_world.svg","data":{"skillName":"Natural World","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.jTcu6Ni2ek7Yz5q3"}}},{"_id":"lVyVqAsQNvAy4quQ","name":"Medicine","type":"skill","img":"systems/CoC7/assets/icons/skills/medicine.svg","data":{"skillName":"Medicine","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.Xmg7oAy70DKpv4kq"}}},{"_id":"PTaJmdgk1UZ5TKSF","name":"Mechanical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg","data":{"skillName":"Mechanical Repair","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.0qCTuRFUCACSEsWj"}}},{"_id":"dx5b6LHcyLTHt42D","name":"Locksmith","type":"skill","img":"systems/CoC7/assets/icons/skills/locksmith.svg","data":{"skillName":"Locksmith","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.MRbFH52Zh9TzhLBh"}}},{"_id":"exZnZAWT4P7MO36B","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","data":{"skillName":"Listen","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.MoAB0NRNlpEc2qWr"}}},{"_id":"UJu9tY8PlscU8ZkB","name":"Library Use","type":"skill","img":"systems/CoC7/assets/icons/skills/library_use.svg","data":{"skillName":"Library Use","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.BcWHh8EhmyKj7bNk"}}},{"_id":"lp6SOOP4SMs0lU07","name":"Law","type":"skill","img":"systems/CoC7/assets/icons/skills/law.svg","data":{"skillName":"Law","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.64hnBZNC8FM7oTkg"}}},{"_id":"QLUOsnhvE5AFJxaB","name":"Language (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"skillName":"Any","specialization":"Language","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.Yu3Xk8kZBlz0G82y"}}},{"_id":"a26s0DWcoCU4qtmm","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"skillName":"Own","specialization":"Language","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":0,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id":"wW21dwp7rzAp15cl","name":"Jump","type":"skill","img":"systems/CoC7/assets/icons/skills/jump.svg","data":{"skillName":"Jump","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.c5utlFbDM7J8TA8b"}}},{"_id":"mZ5ZZL7ObfXV8Iiv","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","data":{"skillName":"Intimidate","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.hDr4eUbS398oniTa"}}},{"_id":"m1yN6RN0njMJODkX","name":"History","type":"skill","img":"systems/CoC7/assets/icons/skills/history.svg","data":{"skillName":"History","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.URo2NSSJSNdvOqXU"}}},{"_id":"7rOwHbUVLndS15g5","name":"First Aid","type":"skill","img":"systems/CoC7/assets/icons/skills/first_aid.svg","data":{"skillName":"First Aid","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"30","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.nZ8rdL4PLb7A7f5B"}}},{"_id":"Ubh99M4zdwX9mp1x","name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"skillName":"Rifle/Shotgun","specialization":"Firearms","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.m2pYjKk4Gk3FcEBL"}}},{"_id":"C7bqom4UhyJcnkB3","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","data":{"skillName":"Handgun","specialization":"Firearms","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.KmDGtn7ukUFVb265"}}},{"_id":"t8O7Rj8Vu4C4afTC","name":"Fighting (Throw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_throw.svg","data":{"skillName":"Throw","specialization":"Fighting","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true,"push":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.sWt5Q3ZXd6NlwhXU"}}},{"_id":"bw5XofBHsubMPXrH","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"skillName":"Brawl","specialization":"Fighting","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vS8bsPWFlwgOecoB"}}},{"_id":"HoRlO4r5ppzKQHH9","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","data":{"skillName":"Fast Talk","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.ld78TITwKNFPpanQ"}}},{"_id":"mLjRnUqQIp6CYJQH","name":"Electrical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/electrical_repair.svg","data":{"skillName":"Electrical Repair","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.NBkq8oCGM1FjmsyF"}}},{"_id":"R8g0Gp4AkZuILeoB","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","data":{"skillName":"Drive Auto","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.Og2OWQH93aSDWAMZ"}}},{"_id":"DKWmZRfC0zuCcODP","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"skillName":"Dodge","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":0,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wK8XxNj9QwXlGFEb"}}},{"_id":"kYSMTiL0H1tGNUEb","name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","data":{"skillName":"Disguise","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.gzNPM9gbx0EZffBV"}}},{"_id":"20PG6iyVubohJnVH","name":"Cthulhu Mythos","type":"skill","img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","data":{"skillName":"Cthulhu Mythos","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"noadjustments":true,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.WJky66ezt2ef5ksH"}}},{"_id":"odMxKer3Rc3uA48Z","name":"Credit Rating","type":"skill","img":"systems/CoC7/assets/icons/skills/credit_rating.svg","data":{"skillName":"Credit Rating","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"noxpgain":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vYrJ5h9cIQBzvw8E"}}},{"_id":"BWFywTfWSGwgK9hs","name":"Climb","type":"skill","img":"systems/CoC7/assets/icons/skills/climb.svg","data":{"skillName":"Climb","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.oh5eFj00Wohnx1My"}}},{"_id":"wie2UBnNX1qeOqb7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","data":{"skillName":"Any","specialization":"Art/Craft","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":5,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.HAuFBG4ZT2yO9yn7"}}},{"_id":"CZrHf3aUx24pTuQ1","name":"Archaeology","type":"skill","img":"systems/CoC7/assets/icons/skills/archaeology.svg","data":{"skillName":"Archaeology","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.GHhkcJUqjcP4lToY"}}},{"_id":"7e40WoR9jIsZYXqN","name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","data":{"skillName":"Appraise","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wOs3gryeGRPkGoWD"}}},{"_id":"KloYBzryxIJqJCjC","name":"Anthropology","type":"skill","img":"systems/CoC7/assets/icons/skills/anthropology.svg","data":{"skillName":"Anthropology","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.ovIp66Luwfwbq28F"}}},{"_id":"zDv5sOhdbzGoc0cF","name":"Accounting","type":"skill","img":"systems/CoC7/assets/icons/skills/accounting.svg","data":{"skillName":"Accounting","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.UOuN0gESXPp2HXwH"}}},{"_id":"z8XBu0n5NcYhH9Nj","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","data":{"skillName":"Charm","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.JgtxiN3KzooOWIQV"}}},{"_id":"HQTh5EPAeYzdcBpS","name":"Fists","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"bw5XofBHsubMPXrH"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"addb":true,"ahdb":false,"stun":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.NRmTURxUXvhNFuZi"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.WeWSVgjL1YEYNVm2"}}} +{"_id":"JuI2aWDSEuQNKeUI","name": "1920 Character","type": "character","img": "icons/svg/mystery-man.svg","data": {"characteristics": {"str": {"value": 50,"tempValue": null,"short": "CHARAC.STR","label": "CHARAC.Strength","formula": "(3D6)*5"},"con": {"value": 50,"tempValue": null,"short": "CHARAC.CON","label": "CHARAC.Constitution","formula": "(3D6)*5"},"siz": {"value": 50,"tempValue": null,"short": "CHARAC.SIZ","label": "CHARAC.Size","formula": "(2D6+6)*5"},"dex": {"value": 50,"tempValue": null,"short": "CHARAC.DEX","label": "CHARAC.Dexterity","formula": "(3D6)*5"},"app": {"value": 50,"tempValue": null,"short": "CHARAC.APP","label": "CHARAC.Appearance","formula": "(3D6)*5"},"int": {"value": 50,"tempValue": null,"short": "CHARAC.INT","label": "CHARAC.Intelligence","formula": "(2D6+6)*5"},"pow": {"value": 50,"tempValue": null,"short": "CHARAC.POW","label": "CHARAC.Power","formula": "(3D6)*5"},"edu": {"value": 50,"tempValue": null,"short": "CHARAC.EDU","label": "CHARAC.Education","formula": "(2D6+6)*5"}},"attribs": {"hp": {"value": 10,"max": 10,"short": "HP","label": "Hit points","auto": true},"mp": {"value": 10,"max": 10,"short": "HP","label": "Magic points","auto": true},"lck": {"value": 50,"short": "LCK","label": "Luck","max": 99},"san": {"value": 50,"max": 99,"short": "SAN","label": "Sanity","auto": true,"dailyLoss": 0,"oneFifthSanity": " / 0","dailyLimit": 10},"mov": {"value": null,"max": null,"short": "MOV","label": "Movement rate","auto": true},"db": {"value": null,"short": "DB","label": "Damage bonus","auto": true},"build": {"current": null,"value": null,"short": "BLD","label": "Build","auto": true},"armor": {"value": "","localized": false,"locations": [],"auto": false}},"conditions": {"criticalWounds": {"value": false},"unconscious": {"value": false},"dying": {"value": false},"dead": {"value": false},"prone": {"value": false},"tempoInsane": {"value": false},"indefInsane": {"value": false}},"infos": {"occupation": "","age": "","sex": "","residence": "","birthplace": "","archetype": "","organization": "","playername": ""},"flags": {"locked": true,"manualCredit": false},"credit": {"monetarySymbol": "","multiplier": null,"spent": "","assetsDetails": ""},"development": {"personal": null,"occupation": null,"archetype": null},"biography": [{"title": "Personal Description","value": null},{"title": "Ideology/Beliefs","value": null},{"title": "Significant People","value": null},{"title": "Meaningful Locations","value": null},{"title": "Treasured Possessions","value": null},{"title": "Traits","value": null}],"sanityLossEvents": [],"backstory": "","indefiniteInsanityLevel": {"value": 0,"max": 0},"description": {"keeper": ""},"notes": ""},"token": {"vision": true,"dimSight": 30,"brightSight": 0,"actorLink": true,"disposition": 1,"name": "1920 Character","displayName": 0,"width": 1,"height": 1,"scale": 1,"mirrorX": false,"mirrorY": false,"lockRotation": false,"rotation": 0,"alpha": 1,"sightAngle": 0,"light": {"alpha": 0.5,"angle": 0,"bright": 0,"coloration": 1,"dim": 0,"gradual": true,"luminosity": 0.5,"saturation": 0,"contrast": 0,"shadows": 0,"animation": {"speed": 5,"intensity": 5,"reverse": false},"darkness": {"min": 0,"max": 1}},"displayBars": 0,"bar1": {"attribute": "attribs.hp"},"bar2": {"attribute": "attribs.san"},"flags": {},"randomImg": false,"img": "icons/svg/mystery-man.svg"},"items": [{"_id": "O1NxgQyl1TVEcFpv","name": "Accounting","type": "skill","img": "systems/CoC7/assets/icons/skills/accounting.svg","data": {"skillName": "Accounting","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.UOuN0gESXPp2HXwH"}}},{"_id": "6ahs1BVypf0LG2ui","name": "Anthropology","type": "skill","img": "systems/CoC7/assets/icons/skills/anthropology.svg","data": {"skillName": "Anthropology","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": false,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.ovIp66Luwfwbq28F"}}},{"_id": "nZp5VsP8lJjxK53F","name": "Appraise","type": "skill","img": "systems/CoC7/assets/icons/skills/appraise.svg","data": {"skillName": "Appraise","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.wOs3gryeGRPkGoWD"}}},{"_id": "2qbA452TZDxEvBgo","name": "Archaeology","type": "skill","img": "systems/CoC7/assets/icons/skills/archaeology.svg","data": {"skillName": "Archaeology","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.GHhkcJUqjcP4lToY"}}},{"_id": "HUSs3Z1WMKy2WU8Q","name": "Art/Craft (Acting)","type": "skill","img": "systems/CoC7/assets/icons/skills/art_craft_acting.svg","data": {"skillName": "Acting","specialization": "Art/Craft","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"special": true,"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": false,"glit": false,"pulp": false,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.m6V53lyfz7zh95FE"}}},{"_id": "2M1xXSNW68KZuhTR","name": "Charm","type": "skill","img": "systems/CoC7/assets/icons/skills/charm.svg","data": {"skillName": "Charm","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "15","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.JgtxiN3KzooOWIQV"}}},{"_id": "M33sgqZolcplbGET","name": "Climb","type": "skill","img": "systems/CoC7/assets/icons/skills/climb.svg","data": {"skillName": "Climb","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.oh5eFj00Wohnx1My"}}},{"_id": "wtw9jEO0gGzoQa0Q","name": "Credit Rating","type": "skill","img": "systems/CoC7/assets/icons/skills/credit_rating.svg","data": {"skillName": "Credit Rating","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "0","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"noxpgain": true,"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.vYrJ5h9cIQBzvw8E"}}},{"_id": "HyZbjOCgYlryFfID","name": "Cthulhu Mythos","type": "skill","img": "systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","data": {"skillName": "Cthulhu Mythos","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "0","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"noadjustments": true,"noxpgain": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.WJky66ezt2ef5ksH"}}},{"_id": "7zb3datkgo38MgkY","name": "Disguise","type": "skill","img": "systems/CoC7/assets/icons/skills/disguise.svg","data": {"skillName": "Disguise","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.gzNPM9gbx0EZffBV"}}},{"_id": "5phV0BmF8L9zc76p","name": "Dodge","type": "skill","img": "systems/CoC7/assets/icons/skills/dodge.svg","data": {"skillName": "Dodge","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": 25,"adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.wK8XxNj9QwXlGFEb"}}},{"_id": "aV1HPa6T0ao5KxIC","name": "Drive Auto","type": "skill","img": "systems/CoC7/assets/icons/skills/drive_auto.svg","data": {"skillName": "Drive Auto","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": false,"glit": false,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.Og2OWQH93aSDWAMZ"}}},{"_id": "e9TkwUb9I707qhri","name": "Electrical Repair","type": "skill","img": "systems/CoC7/assets/icons/skills/electrical_repair.svg","data": {"skillName": "Electrical Repair","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": false,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.NBkq8oCGM1FjmsyF"}}},{"_id": "eFKUznsTG8LAMni9","name": "Fast Talk","type": "skill","img": "systems/CoC7/assets/icons/skills/fast_talk.svg","data": {"skillName": "Fast Talk","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.ld78TITwKNFPpanQ"}}},{"_id": "28W5Wr09jltOPNY0","name": "Fighting (Brawl)","type": "skill","img": "systems/CoC7/assets/icons/skills/fighting_brawl.svg","data": {"skillName": "Brawl","specialization": "Fighting","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "25","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"fighting": true,"firearm": false,"combat": true,"special": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.vS8bsPWFlwgOecoB"}}},{"_id": "s25rvwAwBR4fOsWr","name": "Fighting (Throw)","type": "skill","img": "systems/CoC7/assets/icons/skills/fighting_throw.svg","data": {"skillName": "Throw","specialization": "Fighting","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"fighting": true,"firearm": false,"combat": true,"special": true,"push": false},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.sWt5Q3ZXd6NlwhXU"}}},{"_id": "BSyRMN21TZXSXs1D","name": "Firearms (Handgun)","type": "skill","img": "systems/CoC7/assets/icons/skills/firearms_handgun.svg","data": {"skillName": "Handgun","specialization": "Firearms","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"fighting": false,"firearm": true,"combat": true,"special": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.KmDGtn7ukUFVb265"}}},{"_id": "DVWmLyQsxED935JM","name": "Firearms (Rifle/Shotgun)","type": "skill","img": "systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data": {"skillName": "Rifle/Shotgun","specialization": "Firearms","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "25","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"fighting": false,"firearm": true,"combat": true,"special": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.m2pYjKk4Gk3FcEBL"}}},{"_id": "iTHGs2zn58m6d0uu","name": "First Aid","type": "skill","img": "systems/CoC7/assets/icons/skills/first_aid.svg","data": {"skillName": "First Aid","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "30","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.nZ8rdL4PLb7A7f5B"}}},{"_id": "ACERhi4RMPrdugNC","name": "History","type": "skill","img": "systems/CoC7/assets/icons/skills/history.svg","data": {"skillName": "History","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.URo2NSSJSNdvOqXU"}}},{"_id": "C8893ykdL7FyvzEI","name": "Intimidate","type": "skill","img": "systems/CoC7/assets/icons/skills/intimidate.svg","data": {"skillName": "Intimidate","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "15","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.hDr4eUbS398oniTa"}}},{"_id": "4DJfICiq17xUj7mL","name": "Jump","type": "skill","img": "systems/CoC7/assets/icons/skills/jump.svg","data": {"skillName": "Jump","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.c5utlFbDM7J8TA8b"}}},{"_id": "zwh2alzxQ4nDML3E","name": "Language (Own)","type": "skill","img": "systems/CoC7/assets/icons/skills/language.svg","data": {"skillName": "Own","specialization": "Language","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": 50,"adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true,"special": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id": "HRl7kuG4fRwn7FvH","name": "Law","type": "skill","img": "systems/CoC7/assets/icons/skills/law.svg","data": {"skillName": "Law","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.64hnBZNC8FM7oTkg"}}},{"_id": "rYpQ2fCwgMRluTXM","name": "Library Use","type": "skill","img": "systems/CoC7/assets/icons/skills/library_use.svg","data": {"skillName": "Library Use","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.BcWHh8EhmyKj7bNk"}}},{"_id": "itXQ18v2e9EkTIbZ","name": "Listen","type": "skill","img": "systems/CoC7/assets/icons/skills/listen.svg","data": {"skillName": "Listen","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.MoAB0NRNlpEc2qWr"}}},{"_id": "GusblC5ZOVXJEpcz","name": "Locksmith","type": "skill","img": "systems/CoC7/assets/icons/skills/locksmith.svg","data": {"skillName": "Locksmith","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.MRbFH52Zh9TzhLBh"}}},{"_id": "osBrI5BZsEZn1r2S","name": "Mechanical Repair","type": "skill","img": "systems/CoC7/assets/icons/skills/mechanical_repair.svg","data": {"skillName": "Mechanical Repair","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.0qCTuRFUCACSEsWj"}}},{"_id": "6nJe6CryCPhGEGU2","name": "Medicine","type": "skill","img": "systems/CoC7/assets/icons/skills/medicine.svg","data": {"skillName": "Medicine","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.Xmg7oAy70DKpv4kq"}}},{"_id": "qPXnOlg3n92R7O85","name": "Natural World","type": "skill","img": "systems/CoC7/assets/icons/skills/natural_world.svg","data": {"skillName": "Natural World","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.jTcu6Ni2ek7Yz5q3"}}},{"_id": "GtVW9kz8j6mD8m58","name": "Navigate","type": "skill","img": "systems/CoC7/assets/icons/skills/navigate.svg","data": {"skillName": "Navigate","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.1c3fdvpQtvZf5YXK"}}},{"_id": "MeSZfeUgsHUE9F9m","name": "Occult","type": "skill","img": "systems/CoC7/assets/icons/skills/occult.svg","data": {"skillName": "Occult","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.6pSfZVS68jSHxa5T"}}},{"_id": "01wRdHg6uK4TQD1m","name": "Operate Heavy Machinery","type": "skill","img": "systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","data": {"skillName": "Operate Heavy Machinery","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": false,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.cuExWy1130KUwuWz"}}},{"_id": "RcLYCAd4zn4ucfrt","name": "Persuade","type": "skill","img": "systems/CoC7/assets/icons/skills/persuade.svg","data": {"skillName": "Persuade","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.uMzSNURmZqjxr7mU"}}},{"_id": "VpsprviqIXRc3EAF","name": "Psychoanalysis","type": "skill","img": "systems/CoC7/assets/icons/skills/psychoanalysis.svg","data": {"skillName": "Psychoanalysis","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": false,"glit": false,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.rXBU2GofiO2qOsGv"}}},{"_id": "JOw0IOr7IOwzKyJ5","name": "Psychology","type": "skill","img": "systems/CoC7/assets/icons/skills/psychology.svg","data": {"skillName": "Psychology","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.MFR4eR79niGaLfph"}}},{"_id": "1diyhnSEoVUP7cUX","name": "Ride","type": "skill","img": "systems/CoC7/assets/icons/skills/ride.svg","data": {"skillName": "Ride","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.o7TdzbuSP7ticONf"}}},{"_id": "jnwwvXj9PfpMeyfa","name": "Science (Chemistry)","type": "skill","img": "systems/CoC7/assets/icons/skills/science_chemistry.svg","data": {"skillName": "Chemistry","specialization": "Science","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"special": true,"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": false,"glit": false,"pulp": false,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.8twBT7nbyh5dEp3J"}}},{"_id": "MsuFtn5Mlzr9ZmH5","name": "Sleight of Hand","type": "skill","img": "systems/CoC7/assets/icons/skills/sleight_of_hand.svg","data": {"skillName": "Sleight of Hand","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.KKFNX5M4LtEtiuxs"}}},{"_id": "Ma2wIagNCMHCZPtc","name": "Spot Hidden","type": "skill","img": "systems/CoC7/assets/icons/skills/spot_hidden.svg","data": {"skillName": "Spot Hidden","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "25","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.nHaWNwtW3Lg0sqYJ"}}},{"_id": "6OiGCnzzSfZn4n73","name": "Stealth","type": "skill","img": "systems/CoC7/assets/icons/skills/stealth.svg","data": {"skillName": "Stealth","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.DcV524K0jNfjDEZC"}}},{"_id": "0oGWHuK8BnQ5B6ho","name": "Swim","type": "skill","img": "systems/CoC7/assets/icons/skills/swim.svg","data": {"skillName": "Swim","specialization": "","description": {"value": "

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.1zSIeY0eat2AxQok"}}},{"_id": "4uoHnRl7akCDPogc","name": "Fists","type": "weapon","img": "systems/CoC7/assets/icons/skills/fighting_brawl.svg","data": {"description": {"value": "","chat": "","special": "","keeper": ""},"wpnType": "","skill": {"main": {"name": "Brawl","id": "28W5Wr09jltOPNY0"},"alternativ": {"name": "","id": ""}},"range": {"normal": {"value": 0,"units": "","damage": "1D3"},"long": {"value": 0,"units": "","damage": ""},"extreme": {"value": 0,"units": "","damage": ""}},"usesPerRound": {"normal": "1","max": "","burst": null},"bullets": "","ammo": 0,"malfunction": "","blastRadius": null,"properties": {"addb": true,"ahdb": false,"melee": true,"rngd": false,"shotgun": false,"brst": false,"auto": false,"dbrl": false},"eras": {"1920": false,"nvct": false,"drka": false,"ddts": false,"glit": false,"pulp": false,"mdrn": false},"price": {}},"effects": [],"folder": null,"sort": 100000,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Item.Uldjvs5fvCMri6RN"}}}],"effects": [],"flags": {"CoC7": {"skillListMode": false,"skillShowUncommon": true},"exportSource": {"world": "dholes","system": "CoC7","coreVersion": "9.269","systemVersion": "0.7.11"}}} {"_id":"KgyqcEJZZztYfpEr","name":"Goon","type":"npc","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":null,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":"5*2d6+6"},"con":{"value":null,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":"5*3d6"},"siz":{"value":null,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":"5*3d6"},"dex":{"value":null,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":"5*3d6"},"app":{"value":null,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":"5*1d6"},"int":{"value":null,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":"5*1d6"},"pow":{"value":null,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":"0"},"edu":{"value":null,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":"0"}},"attribs":{"hp":{"value":null,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":null,"max":null,"short":"HP","label":"Magic points","auto":true},"lck":{"value":null,"short":"LCK","label":"Luck","max":99},"san":{"value":50,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":8,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":-2,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":-2,"value":-2,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"conditions":{"criticalWounds":{"value":false},"unconscious":{"value":false},"dying":{"value":false},"dead":{"value":false},"prone":{"value":false},"tempoInsane":{"value":false},"indefInsane":{"value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"special":{"sanLoss":{"checkPassed":"","checkFailled":""},"attacksPerRound":1},"infos":{"occupation":"Obey to the villain","age":"Average","sex":""},"flags":{"locked":true,"displayFormula":false},"attacksPerRound":1},"token":{"name":"Goon","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg","light":{"alpha":0.5,"angle":0,"bright":0,"coloration":1,"dim":0,"gradual":true,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}}},"items":[{"_id":"nhNyqjmMf2xgLEAh","name":"Secret documents","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.5lfgKDdff95ONHW5"}}},{"_id":"pjiFo3geRss79cUu","name":"Orders","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.PFxgMt9PmW9JcrS6"}}},{"_id":"dRfkuKnn9Vl7BAnR","name":"Firearms (Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","data":{"skillName":"Shotgun","specialization":"Firearms","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{"special":true,"fighting":false,"firearm":true,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"x3n4xMyqXSGATZ9L","name":"Shotgun","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"

      Description of the weapon

      \n

      selecting 'Area of effect' will enable 3 different damage and range

      \n

      selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

      \n

      selecting 'Special' will activate the special input field

      \n

      In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

      \n

      Edit the weapon and select the correct skill.

      ","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Shotgun","id":"dRfkuKnn9Vl7BAnR"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"15ft","units":"","damage":"1d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":false,"rngd":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.fnyCgkQluYSM4yTl"}}},{"_id":"bn7QZKctB109130p","name":"Punch","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"coPK7CiB6zbpnofh"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"slnt":true,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":100000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.Uldjvs5fvCMri6RN"}}},{"_id":"coPK7CiB6zbpnofh","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","data":{"skillName":"Brawl","specialization":"Fighting","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vS8bsPWFlwgOecoB"}}},{"_id":"cYRUJwddg0yvccHL","name":"Club","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"coPK7CiB6zbpnofh"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1d4"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"ahdb":true,"addb":false,"slnt":true,"stun":true,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":300000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.BZRfjXQ4V43t4fNw"}}},{"_id":"Cy8zEO2hzmxHYe1g","name":"Receive orders","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"skillName":"Receive orders","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"95","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.cOzs5LkYR1icbzo9"}}},{"_id":"bQq5zs3LeTyZ8O57","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","data":{"skillName":"Own","specialization":"Language","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"@EDU","attributes":{},"properties":{"push":true,"special":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id":"AWcXwvVJG779q7fH","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","data":{"skillName":"Dodge","specialization":"","description":{"value":"

      See the Call of Cthulhu - 7th Ed Core Rulebook

      ","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"1/2*@DEX","attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wK8XxNj9QwXlGFEb"}}},{"_id":"U7Nsi0qkuJjemOaf","name":"Try hard","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"skillName":"Try hard","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"10","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.aEK9aFa8uoMJLiSg"}}},{"_id":"lm867qysqMBwLEK9","name":"Be a pain","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"skillName":"Be a pain","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"50","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DGD3CQQWsYIqhLWL"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.0skVq6Pae0GlrSMU"}}} {"_id":"XE2vjLG03wGfnYLw","name":"Creature example","type":"creature","img":"icons/svg/mystery-man.svg","data":{"characteristics":{"str":{"value":0,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":"1d6"},"con":{"value":10,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":"2d6"},"siz":{"value":50,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":"5*3d6"},"dex":{"value":10,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":"4d6"},"app":{"value":20,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":"5d6"},"int":{"value":20,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":"6d6"},"pow":{"value":0,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":""},"edu":{"value":0,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":"0"}},"attribs":{"hp":{"value":6,"max":6,"short":"HP","label":"Hit points","auto":true},"mp":{"value":0,"max":0,"short":"HP","label":"Magic points","auto":true},"lck":{"value":0,"short":"LCK","label":"Luck","max":99},"san":{"value":0,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":7,"max":7,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":-2,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":-2,"value":-2,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"conditions":{"criticalWounds":{"value":false},"unconscious":{"value":false},"dying":{"value":false},"dead":{"value":false},"prone":{"value":false},"tempoInsane":{"value":false},"indefInsane":{"value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"special":{"attribs":{"move":{"primary":{"enabled":false,"value":null,"type":null},"secondary":{"enabled":false,"value":null,"type":null}}},"sanLoss":{"checkPassed":"","checkFailled":""},"attacksPerRound":1},"infos":{"type":""},"flags":{"locked":true,"displayFormula":false},"biography":{"personalDescription":{"value":"

      Clicking the lock will allow modification of the sheet.

      \n

      When sheet is unlock you can modify things directly from the sheet. You can also open the entities sheets and delete things.

      \n

      In that mode you can create skills/possessions by clicking the + icon. Holding shift will bypass the opening of the corresponding sheet.

      \n

      You can enter characteristics as numbers and as formulas. Click the right icon to toggle modes. Clicking the red dice will roll the formula when possible. So you can have your creature with defined values, or roll/reroll the value on demand.

      "}}},"token":{"name":"Creature example","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg","light":{"alpha":0.5,"angle":0,"bright":0,"coloration":1,"dim":0,"gradual":true,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}}},"items":[{"_id":"uThvps46yrs3LyNw","name":"Pile of junk","type":"item","img":"icons/svg/item-bag.svg","data":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.r8S7V9kUWpjtMxaX"}}},{"_id":"jc6aXhzjXLKREJIy","name":"Fighting (Fighting)","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"skillName":"Fighting","specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"50","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":50,"attributes":{},"properties":{"special":true,"fighting":true,"firearm":false,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ddI3EOxhNRDrbiWW","name":"Innate attack","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"

      Creature's natural attack

      ","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Fighting","id":"jc6aXhzjXLKREJIy"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1d3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"addb":true,"ahdb":false,"slnt":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.i9tOh6fwndVIGwHR"}}},{"_id":"qMUYPKo3mj4zOPjA","name":"Fighting (Slice PCs in small cubes)","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"skillName":"Slice PCs in small cubes","specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"75","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":75,"attributes":{},"properties":{"special":true,"fighting":true,"firearm":false,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"wxRnkgFqjB1A0dOY","name":"Deadly claws","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"

      You can add special description or slugs there :

      \n
      ","keeper":""},"wpnType":"","skill":{"main":{"name":"Slice PCs in small cubes","id":"qMUYPKo3mj4zOPjA"},"alternativ":{"name":"Fighting","id":"jc6aXhzjXLKREJIy"}},"range":{"normal":{"value":0,"units":"","damage":"10d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":""},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"brst":true,"spcl":true,"melee":true,"rngd":false,"shotgun":false,"auto":false,"dbrl":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.NWkpD68urH6gwHkU"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.ExVcSKXT23bi0A4u"}}} {"_id":"r7bDSY4OYKxQYEas","name":"Cupboard","type":"container","img":"icons/svg/chest.svg","data":{"description":{"value":"

      The lock on the door was removed years ago leaving a hole. You have to poke something in the hole to pull the door open.

      ","keeper":""},"flags":{"locked":false}},"token":{"actorLink":true,"name":"Floor safe","displayName":0,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/chest.svg","light":{"alpha":0.5,"angle":0,"bright":0,"coloration":1,"dim":0,"gradual":true,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}}},"items":[{"_id":"L7F6PDH2dK7ZNYxZ","name":"Fighting (Sword)","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","data":{"skillName":"Sword","specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":20,"attributes":{},"properties":{"special":true,"fighting":true,"firearm":false,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ZtIdjmVil351PsA2","name":"Rapier","type":"weapon","img":"icons/svg/sword.svg","data":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Sword","id":"L7F6PDH2dK7ZNYxZ"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D6+1"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"$15","mdrn":"$100"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.h57LwHlUKVT0oQvU"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.M8hvUblNcgImyozT"}}} diff --git a/packs/system-doc.db b/packs/system-doc.db index c94dc6dc..e7b72e59 100644 --- a/packs/system-doc.db +++ b/packs/system-doc.db @@ -1,9 +1,17 @@ -{"_id":"fk040vqb4per5ju1","name":"Links [en]","content":"
      \n

      Links

      \n
        \n
      • Links are a way for a GM to request for a roll (Characteristic, Attribute, Skill, SAN loss, Weapon).
      • \n
      • Links can contain an active effect.
      • \n
      • Links are created in the chat log. When you click a link it will trigger a check for your(s) controlled/impersonated character(s).
      • \n
      • Links can be included in any editor, mainly journal entries.
      • \n
      • Link can be created in 5 ways:\n
          \n
        • By manually typing it (read details below).
        • \n
        • By CTRL+click on any sheet element (Characteristic, Attribute, skill, SAN loss).
        • \n
        • By dragging a sheet element (Characteristic, Attribute, skill (+CTRL)) on an editor (Journal entry)
        • \n
        • By CTRL + dragging an item (skill or weapon) from a compendium or an item directory on an editor. When a link is created that way and the used as a GM, if your controlled character doen't hold the weapon/skill you'll be prompted to create the corresponding item.
        • \n
        • By using the included compendium written by Lozalojo.
        • \n
      • \n
      • Links can be dragged from chat log on an editor.
      • \n
      • When a link is created the difficulty/penalty selection windows will open. Hold SHIFT to bypass that comportment.
      • \n
      • When a link is created, the roll mode will be check. If the roll mode is set to 'blind GM roll' the link will be created as blind.
      • \n
      • When a link is created with a difficulty and a penalty, the difficulty/penalty windows will not pop.
      • \n
      • When a link is created without a difficulty or a penalty, the difficulty/penalty windows will pop. Holding SHIFT will fastforward the roll (regular/no penalty).
      • \n
      \n

      Writing links

      \n
        \n
      • Links should be written using the @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool}. The link creation window is a tool for GM. It's located in the left side bar.
      • \n
      \n

      Links for chat messages and sheet editors (NPC, Journal entries...).\nFormat of link is @coc7.TYPE_OF_REQUEST[OPTIONS]{TEXT_TO_DISPLAY}

      \n
        \n
      • TYPE_OF_REQUEST :\n
          \n
        • sanloss: trigger a san check, upon failure will propose to deduct the corresponding SAN.
        • \n
        • check: trigger a check depending on the options.
        • \n
        • item: trigger use of a weapon. Only items of type weapon can be triggered.
        • \n
      • \n
      • OPTIONS: [] = optional, default\n
          \n
        • sanloss:\n
            \n
          • sanMax: max SAN loss
          • \n
          • sanMin: min SAN loss
          • \n
        • \n
        • check:\n
            \n
          • type: type of check ( characteristic, skill, attrib).
          • \n
          • name: name of the skill/characteristic/attrib.
          • \n
          • [blind]: will force a blind check, if not present the check will depend on your selected roll mode.
          • \n
        • \n
        • all:\n
            \n
          • [difficulty]: ? (blind), 0 (regular), + (hard), ++ (extreme), +++ (critical).
          • \n
          • [modifier]: -x (x penalty dice), +x (x bonus dice), 0 (no modifier).
          • \n
          • [icon]: icon tu use (font awesome, fas fa-dice).
          • \n
        • \n
      • \n
      • TEXT_TO_DISPLAY: Name to display, this is optional.
      • \n
      \n

      Examples

      \n\n\n\n\n\n\n\n\n\n\n\n\n
      LinkResult
      @coc7.sanloss[sanMax:1D6,sanMin:1,difficulty:++,modifier:-1]{Hard San Loss (-1) 1/1D6}
      @coc7.check[type:charac,name:STR,difficulty:+,modifier:-1]{Hard STR check(-1)}
      @coc7.check[type:attrib,name:lck,difficulty:+,modifier:-1]{Hard luck check(-1)}
      @coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,difficulty:+,modifier:-1]{Hard Anthropology check(-1)} (with icon)
      @coc7.sanloss[sanMax:1D6,sanMin:1]{San Loss (-1) 1/1D6} (without name, difficulty nor modifier)
      @coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,modifier:+1]{Anthropology check (+1)} (with icon, without name nor difficulty)
      \n

      Using links

      \n
        \n
      • You can drag/drop links from chat to sheets and between sheets.
      • \n
      • You can drar/drop a link directly on a token.
      • \n
      • You can drag/drop items and skills on a journal entry while holding CTRL, this will create the corresponding check with regular difficulty and 0 modifier.
      • \n
      • You can create link in the chat by clicking and holding CTRL from any sheet (PC/NPC/Creature) corresponding characteristic/luck/SAN/Competence/weapon/San loss.\n
          \n
        • This will open the select penalty/difficulty dialogue. Clicking on the generated link will then trigger the check with all parameters.
        • \n
        • Holding Shift on top will not open the penalty/difficulty dialogue. Clicking on the generated link will open the penalty/difficulty dialogue then trigger the check.
        • \n
      • \n
      \n\n
      "} -{"_id":"emuu3wo0uul91029","name":"Link creation tool [en]","content":"
      \n

      Link creation tool

      \n

      The system includes a tool to help you create links easily.\nIt's located on the left side bar. Click on the   icon.\nThis tools is available to GM only.

      \n

      \"Creation

      \n

      using this you can create @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} for skill check, san check, effects ...\nalternatively you can open the tool by holding CTRL while clicking no an item or a skill.

      \n

      Main window

      \n

      Clicking on the tool icon will open a window :

      \n

      \"Main

      \n

      You can there select options for you link.

      \n
        \n
      • "Compendium packs" and "Items directory" allows you to reference an objet from corresponding folder.
      • \n
      • "Modifiers" will allows you to add modifiers to your check.
      • \n
      • "blind" will force the roll mode to be blind.
      • \n
      • "Label" will allows you to change the display label.
      • \n
      • "Icon" will allows you to choose an icon for your link. Icons can be :\n
          \n
        • A font awsome or a game-icons reference : "fas fa-ankh" or "game-icon game-icon-tentacle-strike".
        • \n
        • A link to an image in the system data or system core: "icons/magic/symbols/arrowhead-green.webp".
        • \n
      • \n
      \n

      If you do not supply a label and/or an icon, a default label and icon will be added.

      \n

      \"default

      \n

      Effects window

      \n

      Selecting effects will open an advance window where you can create links for @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{active effects}.\nSelect the options the same way you will be doing for a regular effect.

      \n

      Using links

      \n
        \n
      • Once your link is created and valid it will appear in a white box in the middle of the window.
      • \n
      \n

      \"link

      \n
        \n
      • You are now ready to whisper it to your players, copy it in your clipboard so you can add it to your items or journal entries or send it to the chat.
      • \n
      \n

      \"link

      \n
        \n
      • When a player clicks a link the corresponding action will be performed by his character.
      • \n
      • When a GM clicks a link the corresponding action will be performed by his selected tokens.
      • \n
      • A link drag/droped in journal entries, on a token etc...
      • \n
      \n

      \"link

      \n\n
      "} -{"_id":"rmtiwtbixojhyf5v","name":"Active effects [en]","content":"
      \n

      Effects

      \n

      The system allows for the creation of Active Effects.\nAn active effect will modify an actor characteristic(s), attribute(s), skill(s).\nEffects can be created as a @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} using the @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool} or directly in the character sheet by clicking the   button.

      \n

      Effects tab

      \n

      Effects will be display in the effect tabs on the character sheet.

      \n

      \"effects

      \n

      Effect are broken down in 4 categories for PC :

      \n
        \n
      • Status: those are effects used and created by the system (Wounds status, prone, insane ...). Those effects do not include any changes.
      • \n
      • Temporary: those are effects with duration.
      • \n
      • Passive: those are permanent effects.
      • \n
      • Innactive: those are disabled effects.
      • \n
      \n

      For NPC/Creatures you will only see 2 sections: active and inactive effects.\nWhen an effect is not inactive, the correcponding changes will be applied to the actor.

      \n

      Creating effects

      \n

      You can create effect by clicking the Add button.\nThis will bring the effect creation window.\nThis windows has 3 tabs

      \n

      Details tab

      \n

      \"Details

      \n

      Duration tab

      \n

      \"Duration

      \n

      Changes tab

      \n

      \"Changes

      \n

      This last tab will includes all changes made to the character sheet.

      \n

      Changes

      \n

      An effect includes a list of changes. Each change needs to be addressed with the corresponding data path.\nThe available changes are :

      \n
        \n
      • Characteristics: data.characteristics.[charactetistic].value\n
          \n
        • available [charactetistic] are: str, con, siz, dex, app, int, pow, edu
        • \n
      • \n
      • attributes:\n
          \n
        • mov: data.attribs.mov.value
        • \n
        • build: data.attribs.build.value
        • \n
        • bonus damage: data.attribs.db.value
        • \n
        • armor: data.attribs.armor.value
        • \n
      • \n
      • derived attributes. Only the maximum value of those attributes should be modifed. Those changes are applied after all other changes have been made. If that attibute is in auto mode, it will be recalculated with the previous characteristics changes before having it's value affected.\n
          \n
        • max hit points: data.attribs.hp.max
        • \n
        • max sanity: data.attribs.san.max
        • \n
      • \n
      • skills. Skills are identified by their name without specialization. Skill names are case sensitive !\n
          \n
        • data.skills.Handgun.value
        • \n
      • \n
      \n\n
      "} -{"_id":"xV4Hxxmu6zjIMw9h","name":"Actor Importer [en]","content":"
      \n

      Actor Importer

      \n

      You can use the actor importer to import serveral NPC/Creatures blocks from adventures and using the JSON exporter from The Dholes House

      \n

      To open the actor importer either open the  Actor Directory and click Actor Importer at the bottom of the side bar or on an active scene   then click  Actor Importer

      \n

       

      \n

      Overview

      \n

      If this is your first time it is recommends you also read the following sections.

      \n
        \n
      • Non Playing Character (NPC) / Creature
      • \n
      • The Dhole's House Actor Importer JSON
      • \n
      \n

       

      \n

      Non Playing Character (NPC) / Creature

      \n

      \"\"

      \n
        \n
      1. Select NPC or Creature

      2. \n
      3. Should the system convert the character block from an earlier edition to 7th

      4. \n
      5. Select the languages of the character block

      6. \n
      7. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched

        \n

        Items: From your item directory

        \n

        World: From your world compendiums

        \n

        Modules: From your module compendiums

        \n

        System: From the system compendiums provided with this system

      8. \n
      9. An example layout is given here you can copy this to your clipboard if you want to edit it or paste in the text from an adventure

      10. \n
      \n

      Click import will create an actor under the  Actor directory will be created in the Imported characters folder any text that was not understood will be stored in Keeper notes

      \n

       

      \n

      The Dhole's House Actor Importer JSON

      \n

      \"\"

      \n
        \n
      1. The Dhole's House Actor Importer JSON

      2. \n
      3. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched

        \n

        Items: From your item directory

        \n

        World: From your world compendiums

        \n

        Modules: From your module compendiums

        \n

        System: From the system compendiums provided with this system

      4. \n
      \n

      Browse for your JSON file, once selected the name and image will be be shown, click import to create the actor under the  Actor directory will be created in the Imported characters folder

      \n

      By default the image will be stored in a folder called dhole-image in your world, this can be changed by clicking on the  Game Settings tab then under the Game Settings heading clicking on  Configure Settings, click on  System Settings.

      \n\n
      "} -{"_id":"wZtTHpGV3atKV2oD","name":"Call of Cthulhu 7th Edition (Unofficial) [en]","content":"
      \n

      System documentation v0.7.12

      \n

      This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT.

      \n

      You will need one of the following to play the game

      \n
        \n
      • Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook
      • \n
      • Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set
      • \n
      • Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules
      • \n
      \n

      The system automates most of the regular tasks and rules involved with running a game.

      \n

      Several parts of the actor sheets have pop up tooltips that trigger after two seconds, this delay can be changed in the settings\n.

      \n

      This documentation can be reopened under   Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en]

      \n

       

      \n

      Recent changes

      \n

      For a full list of changes checkout the changelog on GitHub

      \n

       

      \n
        \n
      • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
      • \n
      • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer} - added The Dhole's House JSON support
      • \n
      • @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects} - implementation of active effects
      • \n
      • Active effects added to @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} and @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool}
      • \n
      \n

       

      \n

      Overview sections below

      \n

      If this is your first time it is recommends you also read the following sections.

      \n
        \n
      • Actor overview
      • \n
      • Items overview
      • \n
      • Settings overview
      • \n
      • Scene menu overview
      • \n
      • @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator}
      • \n
      \n

       

      \n

      How to use the system

      \n
        \n
      • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer}
      • \n
      • Actor Type: Character
      • \n
      • Actor Type: Container
      • \n
      • Actor Type: Creature
      • \n
      • Actor Type: NPC
      • \n
      • Character creation mode
      • \n
      • Development phase
      • \n
      • Item Type: Archetype
      • \n
      • Item Type: Book
      • \n
      • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Item Type: Chases}
      • \n
      • Item Type: Item
      • \n
      • @Compendium[CoC7.system-doc.7hFq9EqLviAxqMFz]{Item Type: Occupation}
      • \n
      • @Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Item Type: Setup}
      • \n
      • Item Type: Skill
      • \n
      • Item Type: Spell
      • \n
      • Item Type: Status
      • \n
      • Item Type: Talent
      • \n
      • Item Type: Weapon
      • \n
      • Macros
      • \n
      • Rolls
      • \n
      • Start Rest
      • \n
      • XP Gain
      • \n
      • @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links}
      • \n
      • @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool}
      • \n
      • @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects}
      • \n
      \n

       

      \n

      Actor overview

      \n
        \n
      • Character - A complete character, usually an investigator. @Compendium[CoC7.examples.JuI2aWDSEuQNKeUI]{Example Character}
      • \n
      • Container - An inventory container. @Compendium[CoC7.examples.r7bDSY4OYKxQYEas]{Example Container}
      • \n
      • Creature - A more simple character, suitable for creatures. @Compendium[CoC7.examples.XE2vjLG03wGfnYLw]{Example Creature}
      • \n
      • NPC - A more simple character, suitable for NPCs. @Compendium[CoC7.examples.4kSvDc4n13oFx8RG]{Example NPC}
      • \n
      \n

       

      \n

      Items overview

      \n
        \n
      • Archetype - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. @Compendium[CoC7.items.lu04TIRrg9P3vRqY]{Example Archetype}
      • \n
      • Book - An arcane tome that can hold spells and character improvements.
      • \n
      • Item - A piece of equipment.
      • \n
      • Occupation - A set of skills and other stats that implement a CoC occupation. @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Example Occupation}
      • \n
      • Setup - A set of default configurations for character, creature, or NPC creation. @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{Example Setup}
      • \n
      • Skill - A skill with a base percentage and some tags. @Compendium[CoC7.skills.UOuN0gESXPp2HXwH]{Example Skill}
      • \n
      • Spell - A magic spell.
      • \n
      • Status - An phobia or mania condition. @Compendium[CoC7.items.DVdvEDizPZPux1pK]{Example Mania}
      • \n
      • Talent -A special power for Pulp Cthulhu. These do not trigger automation in the system. @Compendium[CoC7.items.yqvwz769ZeJplOW7]{Example Talent}
      • \n
      • Weapon - An item with weapon statistics (this includes unarmed attacks). @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Example Weapon}
      • \n
      \n

       

      \n

      Settings overview

      \n

      Click on the  Game Settings tab then under the Game Settings heading click on  Configure Settings.

      \n

      Click on  System Settings

      \n
        \n
      • Variant/Optional Rules - Here you can turn on individual Pulp Cthulhu rules and other optional rules
      • \n
      • Initiative Settings - Additional settings for optional initiative rule
      • \n
      • Roll Settings - Default options for rolls
      • \n
      • Chat Cards Settings - Configure chat messages
      • \n
      • Scene Settings - Scene Settings
      • \n
      • Game Artwork Settings - This allows you to set a custom pause icon and message
      • \n
      • Sheet Settings - This allows you to change character sheet settings and optional CSS
      • \n
      • Weapon Settings - Weapon Settings
      • \n
      • Developer And Debug Settings - These settings can break your world when new updates are released so only use them on test worlds
      • \n
      • Roll Table Settings - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums
      • \n
      \n

       

      \n

      Call of Cthulhu Scene Menu

      \n

      To access this menu you will need to have an active scene which can be created in the  Scenes Directory.

      \n
        \n
      • Keeper's tools - Here you can toggle character creation mode, character development phase, actor importer, toggle automatic XP gain on a success, and start a rest
      • \n
      • Roll ! - Create a roll in chat
      • \n
      • Create link - Create a roll link for players to click
      • \n
      \n\n
      "} -{"_id":"VdOeGcxsu3jsVm3F","name":"Chases [en]","content":"
      \n

      Creating a new chase

      \n

      To create a chase create a new item of type chase.

      \n

      Only the keeper should have access to that item.

      \n

      A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

      \n

      A hazard will always be crossed but failing the check will slow you down.

      \n

      A barrier will stop you until you successfully pass or destroy it.

      \n

      \"\"

      \n

      The chase sheet is divided in 3 parts.

      \n
        \n
      • A header where you will see information about current location once a chase is started.
      • \n
      • A chase setup tab. This will allows you to create and follow the chase.
      • \n
      • A participant list where you can setup your participant. This tab will not work after the chase started.
      • \n
      \n

      Adding a participant.

      \n

      To add a participant click on the plus sign on the participant list or drag an actor or a token.

      \n

      Note that it is not mandatory to have a actor associated with a participant. This will allows for fast setup or to add someone on the fly to the chase.

      \n

      To be able to add a token to the chase a few control have been added to character and NPC sheets:

      \n

      \"\"

      \n

      Those icons will give additional information.

      \n
        \n
      1. Indicate that this actor is a synthetic actor (instance of an actor)
      2. \n
      3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
      4. \n
      5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
      6. \n
      7. Indicate that actor's data are linked to an actor in the actors directory.
      8. \n
      \n

      Dragging a token to the participant list or to a location will activate the importer window.

      \n

      \"\"

      \n

      Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrix chase, dreamlands chase...)

      \n
        \n
      1. Clicking this will change the participant side from prey to chaser.
      2. \n
      3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
      4. \n
      \n

      Participant list

      \n

      \"\"

      \n

      Here you can have the list of participant to the chase.

      \n
        \n
      1. Will trigger a chase roll. This will create a roll card if the participant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
      2. \n
      3. This will clear the speed roll if any, or delete the participant.
      4. \n
      \n

      \"\"

      \n
        \n
      1. Roll card waiting to get resolved in the chat.
      2. \n
      3. Speed check rolled. You can click this to get the details.
      4. \n
      5. To reset the speed check.
      6. \n
      \n

      \"\"

      \n

      Chase setup

      \n

      \"\"

      \n

      To setup a chase enter the initial numbers of locations and click initialize.

      \n

      \"\"

      \n

      The chase is initialized, you can adjust some options. Locations in white are initial locations and can not be modified.

      \n
        \n
      1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
      2. \n
      3. Selecting this will include in the chase participants who would have otherwise been able to escape.
      4. \n
      5. Selecting this will include in the chase participants who would have been excluded for being too slow.
      6. \n
      7. This is the number of locations between the slowest prey and the fastest chaser.
      8. \n
      9. This is the starting location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
      10. \n
      11. This will animate token when they move to a new location.
      12. \n
      \n

      Setting up locations

      \n

      During setup or during chase you can select a location to modify it.

      \n

      Starting (white) locations can not be modified during setup.</p>

      \n

      To modify a location select it by clicking on it. This will display the location details on the header part of the sheet.

      \n

      \"\"

      \n
        \n
      1. This will add a participant. If the chase is started the participant will be on that location. If the chase isn't started the participant will be added on the init track.
      2. \n
      3. This will remove the location. A location has to be empty to be removed.
      4. \n
      5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin indicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
      6. \n
      7. Add a new location.
      8. \n
      9. Active location.
      10. \n
      \n

       

      \n

      Setting up obstacles.

      \n

      You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

      \n

      \"\"

      \n
        \n
      1. Toggle this to add damage to a barrier.
      2. \n
      3. Barrier's hit points.
      4. \n
      5. Movement action cost in case of failure.
      6. \n
      7. Check used to pass the location. When it's red the active actor does not have the associated check.
      8. \n
      \n

       

      \n

      Cut to the chase.

      \n

      When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

      \n

      \"\"

      \n
        \n
      1. Initiative track. The active participant is circled in orange.
      2. \n
      3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest particpant) all movement action will be recalculated.
      4. \n
      5. A barrier.
      6. \n
      7. A hazard.
      8. \n
      \n

      Obstacle resolution flow

      \n

      \"\"

      \n
        \n
      1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interact to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
      2. \n
      \n

      Here is a shorten flow example:

      \n

      \"\"\n\"\"\n\"\"\n\"\"

      \n

      Once the flow is complete all changes are send to the chase.

      \n

      \"\"

      \n

      This round is finished. All actor have spent their movement action. You can click Next round to proceed.

      \n

      Participant controls.

      \n

      \"\"

      \n

      You can modify or move a participant by using the controls button on his card.

      \n
        \n
      1. Those 3 icons will allow to delete, modify and activate a participant.
      2. \n
      3. Movement action. A yellow is available, grey is consumed, red is a deficit.
      4. \n
      5. This will control your participant bonus. He can draw a gun or be awarded bonus dices.
      6. \n
      7. Movement action controls. Here you can increase or decrease movement actions.
      8. \n
      9. Movement controls. You can move backward or forward. You can assist an ally (consume an action and give a bonus die) or take a cautious approach.
      10. \n
      \n\n
      "} -{"_id":"nVYLlqVzmUV5dXAW","name":"Creating your first investigator [en]","content":"
      \n

      Initial item setup

      \n

      The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required.

      \n

       

      \n

      Skill

      \n

      Click on the  Compendium Packs tab then under the Item heading open up the Skills Item (CoC7). Here you will find the skills shown on the characters sheets available from Chaosium's website.

      \n
        \n
      • No adjustment - Can not be assigned personal skill points.
      • \n
      • No XP gain - You do not mark this skill for improvement on a success.
      • \n
      • Specialization - This skill is part of a group like Pilot or Flighting.
      • \n
      • Uncommon - This skill is uncommon and can be automatically hidden on the character sheet.
      • \n
      • Pushed - This skill can be pushed.
      • \n
      • Fighting - Automatically set Specialization, Combat, and the specialization name to Fighting.
      • \n
      • Firearms - Automatically set Specialization, Combat, and the specialization name to Firearms.
      • \n
      \n

      You can create a new Item Compendium and copy the skills you require into it allowing you to edit them. You can also create new skills by creating new Skill Items (Click on the  Items Directory tab then Create Item give this a name e.g. Gardening and set the Type to Skill).

      \n

      Setup

      \n

      Once you have set up your skills next create up a Setup, here is an example from the Items Examples compendium @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

      \n

      Setups allow to you standardise what skills, items, biography sections, and characteristics the investigators start with.

      \n

      Click on the  Items Directory tab then Create Item give this a name e.g. New Investigator Setup and set the Type to Setup

      \n

      On the Description tab to set the description click the  button to get an editor.

      \n

      On the Details tab click the   on the Biography Sections to add any sections you require from the Create a Backstory step of investigator creation. Click on the  Compendium Packs tab then under the Item heading open up the Items Examples Item (CoC7) and drag the @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Punch} onto the setup.

      \n

      On the Characteristics tab you can customise how investigator characteristics are rolled / bought

      \n

      On the Skills tab you can drag the skills the investigator will have.

      \n

      All actor and item sheets have a  tab which can be used by the Keepers to store notes, only users that are set to GM can see this tab

      \n

      Occupation

      \n

      Occupations allow you set how many the occupation points, credit rating range, and skills the investigator starts with. Here is an example from the Items Examples compendium @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

      \n

      Click on the  Items Directory tab then Create Item give this a name e.g. Driver and set the Type to Occupation

      \n

      On the Description tab to set the description click the  button to get an editor.

      \n

      On the Details tab you can set the Occupation Points calculation and Minimum/Maximum Credit Rating

      \n

      On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select.

      \n

       

      \n

      Creating your first investigator

      \n

      Character

      \n

      To complete your character you need to have an active scene which can be created in the  Scenes Directory.

      \n

      Click on the  Actors Directory tab then Create Item give this a name e.g. New Investigator and set the Type to Character.

      \n

      You can drag your setup created above on to the character for the initial setup or drag this example instead @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

      \n

      Next drag your occupation created above on to the character or drag this example instead @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

      \n

      On the left hand menu bar select  Keeper's tools then select  Character creation mode.

      \n

      On the character sheet select the Development tab. The first dot indicates this is an occupation skill, the first column of numbers is the base value, next if where you assign personal points, third is for occupation points, the fourth is for experience gained during the investigator improvement phase, the final column is the total skill percent.

      \n

      You can see how many personal and occupation points you have spent so far, once you have spent all your points you need to toggle off  Character creation mode to allow characters to see their HP, MP, Sanity, and luck

      \n\n
      "} -{"_id":"7hFq9EqLviAxqMFz","name":"Item Type: Occupation [en]","content":"
      \n

      Item Type: Occupation

      \n

      An occupation helps to define the character background, think about it as the definition of the set of occupational skills (the ones where the character can spend their occupation points) plus the definition of how to calculate the amount of available occupation points. Finally the occupation also allows to define the minimum and the maximum credit for a character with this occupation.

      \n

      Keep in mind that the set of occupational skills doesn't need to be fixed, the system allows to configure the occupation so when it's dragged to a Character sheet will give the option of selecting one or more skills from a closed list, or even add a pre defined number of skills to select from all the available ones.

      \n
        \n
      1. Go to the  Items Directory tab

      2. \n
      3. Click on  Create Item

        \n
          \n
        1. Give the set up a name e.g. Librarian
        2. \n
        3. Set Type to Occupation
        4. \n
      4. \n
      5. On the Description tab you can change the name, icon, name of the source book, and description

      6. \n
      7. On the Details tab you can control

        \n
          \n
        1. Select the Occupation Type

        2. \n
        3. Define the characteristics used to calculate the occupation points, you can check the characteristics you want and define the multiplier, for the ones with Optional marked, the player will have to choose one at creation time.

          \n
            \n
          1. For instance if an occupation uses EDU * 2 + (STR or DEX) * 2 You have to select Education and put 2 on the Multiplier without marking Optional and then for Strength and Dexterity you have to check both, check Optional on both, and put 2 on the Multiplier on both.
          2. \n
          3. Finally you will have to define the Minimum and Maximum value for the Credit Rating skill for this occupation.
          4. \n
        4. \n
        5. Names of biography sections (click on the + to add extra Biography sections), this can be replaced with a single block biography in settings

        6. \n
        7. Under items you can drag and drop default items and weapons

        8. \n
      8. \n
      9. On the Skills you can drag and drop skills in to multiple sections, A typical occupation has 8 skills plus the Credit Rating skill.

        \n
          \n
        1. The Common Skills includes the default occupation skills that can't be changed
        2. \n
        3. The Optional skills groups section allows to add groups (you can create several of them) of skills for the player to choose from. Once you click on the + sign a group is created and you can define the Number to chose from (number of skills to select) and create a pool of skills available for the selection by dragging them on the group.
        4. \n
        5. Finally the Additional Skills allows you to enter a number of skills the player can choose from the rest of the available skills.
        6. \n
      10. \n
      \n\n
      "} -{"_id":"JU1GCWwc8at7gzJ4","name":"Item Type: Setup [en]","content":"
      \n

      Item Type: Setup

      \n

      Setups are predefined sets of skills and a way to generate the characteristics (this can be by rolling dices or assigning certain amount of points for example).

      \n
        \n
      1. Go to the  Items Directory tab

      2. \n
      3. Click on  Create Item

        \n
          \n
        1. Give the set up a name e.g. 1920's Setup
        2. \n
        3. Set Type to Setup
        4. \n
      4. \n
      5. On the Description tab you can change the name, icon, name of the source book, and description

      6. \n
      7. On the Details tab you can control

        \n
          \n
        1. Show / Hide the Characteristics tab with the Enable characteristics checkbox
        2. \n
        3. Which version of Call of Cthulhu this is for, this can be filtered in compendiums
        4. \n
        5. Names of biography sections (click on the + to add extra Biography sections), this can be replaced with a single block biography in settings
        6. \n
        7. Under items you can drag and drop default items and weapons
        8. \n
      8. \n
      9. On the Characteristics tab you can set a points buy or roll characteristics and the formula

      10. \n
      11. On the Skills tab under common skill you can drag and drop default skills

      12. \n
      \n\n
      "} \ No newline at end of file +{"_id":"rmtiwtbixojhyf5v","name":"Active effects [en]","content":"
      \n

      Effects

      \n

      The system allows for the creation of Active Effects.\nAn active effect will modify an actor characteristic(s), attribute(s), skill(s).\nEffects can be created as a @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{link} using the @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool} or directly in the character sheet by clicking the   button.

      \n

      Effects tab

      \n

      Effects will be display in the effect tabs on the character sheet.

      \n

      \"effects

      \n

      Effect are broken down in 4 categories for PC :

      \n
        \n
      • Status: those are effects used and created by the system (Wounds status, prone, insane ...). Those effects do not include any changes.
      • \n
      • Temporary: those are effects with duration.
      • \n
      • Passive: those are permanent effects.
      • \n
      • Inactive: those are disabled effects.
      • \n
      \n

      For NPC/Creatures you will only see 2 sections: active and inactive effects.\nWhen an effect is not inactive, the corresponding changes will be applied to the actor.

      \n

      Creating effects

      \n

      You can create effect by clicking the Add button.\nThis will bring the effect creation window.\nThis windows has 3 tabs

      \n

      Details tab

      \n

      \"Details

      \n

      Duration tab

      \n

      \"Duration

      \n

      Changes tab

      \n

      \"Changes

      \n

      This last tab will includes all changes made to the character sheet.

      \n

      Changes

      \n

      An effect includes a list of changes. Each change needs to be addressed with the corresponding data path.\nThe available changes are :

      \n
        \n
      • Characteristics: data.characteristics.[characteristic].value\n
          \n
        • available [characteristic] are: str, con, siz, dex, app, int, pow, edu
        • \n
      • \n
      • attributes:\n
          \n
        • mov: data.attribs.mov.value
        • \n
        • build: data.attribs.build.value
        • \n
        • bonus damage: data.attribs.db.value
        • \n
        • armor: data.attribs.armor.value
        • \n
      • \n
      • derived attributes. Only the maximum value of those attributes should be modified. Those changes are applied after all other changes have been made. If that attibute is in auto mode, it will be recalculated with the previous characteristics changes before having it's value affected.\n
          \n
        • max hit points: data.attribs.hp.max
        • \n
        • max sanity: data.attribs.san.max
        • \n
      • \n
      • skills. Skills are identified by their name without specialization. Skill names are case sensitive !\n
          \n
        • data.skills.Handgun.value
        • \n
      • \n
      \n\n
      "} +{"_id":"xV4Hxxmu6zjIMw9h","name":"Actor Importer [en]","content":"
      \n

      Actor Importer

      \n

      You can use the actor importer to import several NPC/Creatures blocks from adventures and using the JSON exporter from The Dholes House

      \n

      To open the actor importer either open the  Actor Directory and click Actor Importer at the bottom of the side bar or on an active scene   then click  Actor Importer

      \n

      Overview

      \n

      If this is your first time it is recommends you also read the following sections.

      \n
        \n
      • Non Playing Character (NPC) / Creature
      • \n
      • The Dhole's House Actor Importer JSON
      • \n
      \n

      Non Playing Character (NPC) / Creature

      \n

      \"\"

      \n
        \n
      1. Select NPC or Creature

      2. \n
      3. Should the system convert the character block from an earlier edition to 7th

      4. \n
      5. Select the languages of the character block

      6. \n
      7. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched

        \n

        Items: From your item directory

        \n

        World: From your world compendiums

        \n

        Modules: From your module compendiums

        \n

        System: From the system compendiums provided with this system

      8. \n
      9. An example layout is given here you can copy this to your clipboard if you want to edit it or paste in the text from an adventure

      10. \n
      \n

      Click import will create an actor under the  Actor directory will be created in the Imported characters folder any text that was not understood will be stored in Keeper notes

      \n

      The Dhole's House Actor Importer JSON

      \n

      \"\"

      \n
        \n
      1. The Dhole's House Actor Importer JSON

      2. \n
      3. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched

        \n

        Items: From your item directory

        \n

        World: From your world compendiums

        \n

        Modules: From your module compendiums

        \n

        System: From the system compendiums provided with this system

      4. \n
      \n

      Browse for your JSON file, once selected the name and image will be be shown, click import to create the actor under the  Actor directory will be created in the Imported characters folder

      \n

      By default the image will be stored in a folder called dhole-image in your world, this can be changed by clicking on the  Game Settings tab then under the Game Settings heading clicking on  Configure Settings, click on  System Settings.

      \n\n
      "} +{"_id":"wZtTHpGV3atKV2oD","name":"Call of Cthulhu 7th Edition (Unofficial) [en]","content":"
      \n

      System documentation v0.7.12

      \n

      This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT.

      \n

      You will need one of the following to play the game

      \n
        \n
      • Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook
      • \n
      • Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set
      • \n
      • Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules
      • \n
      \n

      The system automates most of the regular tasks and rules involved with running a game.

      \n

      Several parts of the actor sheets have pop up tooltips that trigger after two seconds, this delay can be changed in the settings\n.

      \n

      This documentation can be reopened under   Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en]

      \n

      Recent changes

      \n

      For a full list of changes checkout the changelog on GitHub

      \n
        \n
      • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
      • \n
      • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer} - added The Dhole's House JSON support
      • \n
      • @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects} - implementation of active effects
      • \n
      • Active effects added to @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} and @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool}
      • \n
      \n

      Overview sections below

      \n

      If this is your first time it is recommends you also read the following sections on this page.

      \n

      Foundry VTT is based in actors and items. This module includes a number of system specific actors and items, and some examples of them can be found in the included system compendiums.

      \n
        \n
      • Actor overview
      • \n
      • Items overview
      • \n
      • Settings overview
      • \n
      • Scene menu overview
      • \n
      • Keyboard and mouse shortcuts
      • \n
      • @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator}
      • \n
      • @Compendium[CoC7.system-doc.uug1mm5nokly4o2v]{Character creation}
      • \n
      \n

      How to use the system

      \n
        \n
      • @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects} - An active effect will modify an actor characteristic(s), attribute(s), skill(s).
      • \n
      • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer}
      • \n
      • Actor Type: Character (TODO)
      • \n
      • Actor Type: Container (TODO)
      • \n
      • Actor Type: Creature (TODO)
      • \n
      • Actor Type: NPC (TODO)
      • \n
      • Chat link creator (TODO)
      • \n
      • Character creation mode (TODO)
      • \n
      • @Compendium[CoC7.system-doc.nk68b2ew15iw0bb8]{Combat} (TODO)
      • \n
      • Development phase (TODO)
      • \n
      • @Compendium[CoC7.system-doc.di6mcnaxfyi0y2l4]{Item Types} (TODO)
      • \n
      • @Compendium[CoC7.system-doc.kv2tbz6x29cq6ewq]{Item Type: Archetype} (TODO)
      • \n
      • @Compendium[CoC7.system-doc.oruecvy7jne4u4gt]{Item Type: Book} (TODO)
      • \n
      • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Item Type: Chases}
      • \n
      • Item Type: Item (TODO)
      • \n
      • @Compendium[CoC7.system-doc.qa934whpkpauiyc9]{Item Type: Occupation}
      • \n
      • @Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Item Type: Setup}
      • \n
      • @Compendium[CoC7.system-doc.mz0ulbkecfvv8nw7]{Item Type: Skill} (TODO)
      • \n
      • Item Type: Spell (TODO)
      • \n
      • Item Type: Status (TODO)
      • \n
      • Item Type: Talent (TODO)
      • \n
      • Item Type: Weapon (TODO)
      • \n
      • @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link Creation Tool}
      • \n
      • @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{Links} (TODO)
      • \n
      • Macros (TODO)
      • \n
      • Rolls (TODO)
      • \n
      • @Compendium[CoC7.system-doc.ce7s8psgyctzx5r1]{Sanity} (TODO)
      • \n
      • Start Rest (TODO)
      • \n
      • XP Gain (TODO)
      • \n
      \n

      Actor overview

      \n
        \n
      • Character - A complete character, usually an investigator. @Compendium[CoC7.examples.JuI2aWDSEuQNKeUI]{Example Character}
      • \n
      • Container - An inventory container. @Compendium[CoC7.examples.r7bDSY4OYKxQYEas]{Example Container}
      • \n
      • Creature - A more simple character, suitable for creatures. @Compendium[CoC7.examples.XE2vjLG03wGfnYLw]{Example Creature}
      • \n
      • NPC - A more simple character, suitable for NPCs. @Compendium[CoC7.examples.4kSvDc4n13oFx8RG]{Example NPC}
      • \n
      \n

      Items overview

      \n
        \n
      • Archetype - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. @Compendium[CoC7.items.lu04TIRrg9P3vRqY]{Example Archetype}
      • \n
      • Book - An arcane tome that can hold spells and character improvements.
      • \n
      • Item - A piece of equipment.
      • \n
      • Occupation - A set of skills and other stats that implement a CoC occupation. @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Example Occupation}
      • \n
      • Setup - A set of default configurations for character, creature, or NPC creation. @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{Example Setup}
      • \n
      • Skill - A skill with a base percentage and some tags. @Compendium[CoC7.skills.UOuN0gESXPp2HXwH]{Example Skill}
      • \n
      • Spell - A magic spell.
      • \n
      • Status - An phobia or mania condition. @Compendium[CoC7.items.DVdvEDizPZPux1pK]{Example Mania}
      • \n
      • Talent -A special power for Pulp Cthulhu. These do not trigger automation in the system. @Compendium[CoC7.items.yqvwz769ZeJplOW7]{Example Talent}
      • \n
      • Weapon - An item with weapon statistics (this includes unarmed attacks). @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Example Weapon}
      • \n
      \n

      Settings overview

      \n

      Click on the  Game Settings tab then under the Game Settings heading click on  Configure Settings.

      \n

      Click on  System Settings

      \n
        \n
      • Variant/Optional Rules - Here you can turn on individual Pulp Cthulhu rules and other optional rules
      • \n
      • Initiative Settings - Additional settings for optional initiative rule
      • \n
      • Roll Settings - Default options for rolls
      • \n
      • Chat Cards Settings - Configure chat messages
      • \n
      • Scene Settings - Scene Settings
      • \n
      • Game Artwork Settings - This allows you to set a custom pause icon and message
      • \n
      • Sheet Settings - This allows you to change character sheet settings and optional CSS
      • \n
      • Weapon Settings - Weapon Settings
      • \n
      • Developer And Debug Settings - These settings can break your world when new updates are released so only use them on test worlds
      • \n
      • Roll Table Settings - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums
      • \n
      \n

      Call of Cthulhu Scene Menu

      \n

      To access this menu you will need to have an active scene which can be created in the  Scenes Directory. These options are only available to the Keeper.

      \n
        \n
      • Keeper's tools\n
          \n
        • Development phase: When enabled, players can make improvement rolls for their marked skills.
        • \n
        • Character creation mode: When enabled, players can distribute points among their skills.
        • \n
        • XP gain: When enabled, a skill will be marked for improvement after a successful check.
        • \n
        • Send a decoy roll to players: When clicked, players will see a fake GM private roll.
        • \n
        • Start Rest: When click, pick characters to perform a rest and roll for XP gains.
        • \n
      • \n
      • Roll !: Used to roll 1d100 with a threshold, difficulty and bonus or penalty dice.
      • \n
      • Create link: Create a roll link for players to click
      • \n
      \n

      Keyboard and mouse shortcuts

      \n

      There are many elements in the sheets that trigger a dice roll when clicked. Usually a dialog is shown to prompt the user for a difficulty and a possible bonus or penalty. This behavior is modified with the following controls:

      \n
        \n
      • Right click on any rollable element to include it in an opposed roll. As long as the card is open, all rolls made\nwith a right click will be added to the opposed roll.
      • \n
      • Alt + Right click on any rollable element to include it in a combined roll.
      • \n
      • Shift + Left click on a rollable element will make a roll without asking for difficulty or bonus/penalty.
      • \n
      • Ctrl + Left click on a rollable element will create a roll request. Only available for the GM.
      • \n
      • Alt + Left click on sanity will prompt the player for minimum and maximum sanity loss.
      • \n
      \n\n
      "} +{"_id":"uug1mm5nokly4o2v","name":"Character Creation [en]","content":"
      \n

      Character Creation

      \n

      The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required.

      \n

      Skills

      \n

      In this section you will create or edit @Compendium[CoC7.system-doc.mz0ulbkecfvv8nw7]{skills}

      \n
        \n
      1. Go to  compendium packs

      2. \n
      3. Click on  Create Compendium

        \n
          \n
        • Give your compendium a name (e.g. My Skills)
        • \n
        • Select Item as Document Type
        • \n
      4. \n
      \n

      Use existing skills

      \n
        \n
      1. Open up the compendium Skills
      2. \n
      3. Drag any skills you want to customise into your new compendium
      4. \n
      \n

      Create new skills

      \n
        \n
      1. Go to  Items Directory

      2. \n
      3. Cick on  Create Item

        \n
          \n
        • Give the skill a name
        • \n
        • Set Type to Skill
        • \n
      4. \n
      \n

      Setup

      \n

      @Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Setups} are predefined sets of skills and a way to generate the characteristics (this can be by rolling dices or assigning certain amount of points for example). Once a setup has been created it can be used in the creation of multiple characters.

      \n
        \n
      1. Go to  Items Directory

      2. \n
      3. Click on  Create Item

        \n
          \n
        • Give the skill a name
        • \n
        • Set Type to Setup
        • \n
      4. \n
      5. Define the setup to set the basic configuration for a type of characters.

        \n
          \n
        • You can add a textual description on the Description tab
        • \n
        • If you click on the icon you can select a new one
        • \n
        • On the Details tab you can:\n
            \n
          • Select the Cthulhu Flavors where this setup is valid
          • \n
          • Define the biography sections and their names (click on the + to add extra Biography sections)
          • \n
          • Drag default items like @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Punch}
          • \n
          • Show / Hide the Characteristics tab with the Enable characteristics checkbox
          • \n
        • \n
        • The Characteristics tab allows you to define the formula to roll the dices for each characteristic
        • \n
        • The Skills tab allows you to define the default set of skills by dragging items of type skill to the common skills area.
        • \n
      6. \n
      \n

      Occupations

      \n

      An @Compendium[CoC7.system-doc.qa934whpkpauiyc9]{occupation} helps to define the character background, think about it as the definition of the set of occupational skills (the ones where the character can spend their occupation points) plus the definition of how to calculate the amount of available occupation points. Finally the occupation also allows to define the minimum and the maximum credit for a character with this occupation.

      \n

      Keep in mind that the set of occupational skills doesn't need to be fixed, the system allows to configure the occupation so when it's dragged to a Character sheet will give the option of selecting one or more skills from a closed list, or even add a pre defined number of skills to select from all the available ones.

      \n

      The occupation creation process is the following one:

      \n
        \n
      1. Go to  Items Directory

      2. \n
      3. Cick on  Create Item

        \n
          \n
        • Give the skill a name
        • \n
        • Set Type to Occupation
        • \n
      4. \n
      5. Define the occupation to select the relevant characteristics and the occupation skills

        \n
          \n
        • You can add a textual description on the Description tab and define the Source
        • \n
        • If you click on the icon you can select a new one
        • \n
        • On the Details tab you can:\n
            \n
          • Select the Occupation Type

          • \n
          • Define the characteristics used to calculate the occupation points, you can check the characteristics you want and define the multiplier, for the ones with Optional marked, the player will have to choose one at creation time.

            \n

            For instance if an occupation uses EDU * 2 + (STR or DEX) * 2 you have to select Education and put 2 on the Multiplier without marking Optional and then for Strength and Dexterity you have to check both, check Optional on both, and put 2 on the Multiplier on both.

          • \n
          • Finally you will have to define the Minimum and Maximum value for the Credit Rating skill for this occupation.

          • \n
        • \n
        • The Skills tab allows you to select the occupation skills by dragging items of the Type skill to the different sections. A typical occupation has 8 skills plus the Credit Rating skill.\n
            \n
          • The Common Skills includes the default occupation skills that can't be changed
          • \n
          • The Optional skills groups section allows to add groups (you can create several of them) of skills for the player to choose from. Once you click on the + sign a group is created and you can define the Number to chose from (number of skills to select) and create a pool of skills available for the selection by dragging them on the group.
          • \n
          • Finally the Additional Skills allows you to enter a number of skills the player can choose from the rest of the available skills.
          • \n
        • \n
      6. \n
      \n

      Player Character creation

      \n

      You can create a Player Character by creating the actor and filling the corresponding blank Character Sheet, but it's much easier if you have previously created a setup and an occupation (see above), if you have created both the process to create the Player Character is as follows:

      \n
        \n
      1. Go to  Actors Directory

      2. \n
      3. Cick on  Create Actor

        \n
          \n
        • Give the actor a name
        • \n
        • Set Type to Character
        • \n
      4. \n
      5. Drag and drop a item of Type setup (for instance 1920s, 1890s, Pulp, Modern,...) on the sheet to do the basic setup using the configuration defined on the item, this usually includes rolling the characteristics or setting their values with the points system, and set a default set of skills corresponding to the given setup.

      6. \n
      7. Drag and drop an occupation Type item on the sheet, this will probably involve selecting some skills from a given reduced set or from the remaining ones. This will calculate the available Personal points and Occupation points and assign the part of the Occupation points to reach the minimum value for Credit Rating of the selected occupation.

      8. \n
      9. On the keeper's menu on the left click  Keeper's tools, if this menu is not available need to have an active scene which can be created in the  Scenes Directory

      10. \n
      11. On the new submenu click  Character creation mode. A new tab called Development should appear on the character sheets.

      12. \n
      13. Click on the characters Development tab

      14. \n
      15. The first dot column is for your occupational skills these can be toggled by clicking them

        \n
          \n
        • If you have enabled the Pulp rule Archetypes you will have a second dot to toggle that
        • \n
      16. \n
      17. Distribute occupation/personal points in development tab taking on account that each skill has 5 columns:

        \n
          \n
        1. First one is the basic percentage of the skill
        2. \n
        3. The second one is the one to put the Personal interest points during the creation of the character
        4. \n
        5. The third one is only available on for the occupation skills (marked with a dark circle before the skill name) and it's used to assign the Occupation points.\n
            \n
          • If you have enabled the Pulp rule Archetypes you will have a forth column you enter your archetype points here
          • \n
        6. \n
        7. The forth/fifth column should be initially blank and its where the experience points will show up (you can also assign points here if you are playing an experienced character)
        8. \n
        9. The final column is a read only one with the final calculated value for the skill (the sum of the other 4)
        10. \n
      18. \n
      \n\n\n
      "} +{"_id":"VdOeGcxsu3jsVm3F","name":"Chases [en]","content":"
      \n

      Creating a new chase

      \n

      To create a chase create a new item of type chase.

      \n

      Only the keeper should have access to that item.

      \n

      A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

      \n

      A hazard will always be crossed but failing the check will slow you down.

      \n

      A barrier will stop you until you successfully pass or destroy it.

      \n

      \"\"

      \n

      The chase sheet is divided in 3 parts.

      \n
        \n
      • A header where you will see information about current location once a chase is started.
      • \n
      • A chase setup tab. This will allows you to create and follow the chase.
      • \n
      • A participant list where you can setup your participant. This tab will not work after the chase started.
      • \n
      \n

      Adding a participant.

      \n

      To add a participant click on the plus sign on the participant list or drag an actor or a token.

      \n

      Note that it is not mandatory to have a actor associated with a participant. This will allows for fast setup or to add someone on the fly to the chase.

      \n

      To be able to add a token to the chase a few control have been added to character and NPC sheets:

      \n

      \"\"

      \n

      Those icons will give additional information.

      \n
        \n
      1. Indicate that this actor is a synthetic actor (instance of an actor)
      2. \n
      3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
      4. \n
      5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
      6. \n
      7. Indicate that actor's data are linked to an actor in the actors directory.
      8. \n
      \n

      Dragging a token to the participant list or to a location will activate the importer window.

      \n

      \"\"

      \n

      Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrix chase, dreamlands chase...)

      \n
        \n
      1. Clicking this will change the participant side from prey to chaser.
      2. \n
      3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
      4. \n
      \n

      Participant list

      \n

      \"\"

      \n

      Here you can have the list of participant to the chase.

      \n
        \n
      1. Will trigger a chase roll. This will create a roll card if the participant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
      2. \n
      3. This will clear the speed roll if any, or delete the participant.
      4. \n
      \n

      \"\"

      \n
        \n
      1. Roll card waiting to get resolved in the chat.
      2. \n
      3. Speed check rolled. You can click this to get the details.
      4. \n
      5. To reset the speed check.
      6. \n
      \n

      \"\"

      \n

      Chase setup

      \n

      \"\"

      \n

      To setup a chase enter the initial numbers of locations and click initialize.

      \n

      \"\"

      \n

      The chase is initialized, you can adjust some options. Locations in white are initial locations and can not be modified.

      \n
        \n
      1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
      2. \n
      3. Selecting this will include in the chase participants who would have otherwise been able to escape.
      4. \n
      5. Selecting this will include in the chase participants who would have been excluded for being too slow.
      6. \n
      7. This is the number of locations between the slowest prey and the fastest chaser.
      8. \n
      9. This is the starting location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
      10. \n
      11. This will animate token when they move to a new location.
      12. \n
      \n

      Setting up locations

      \n

      During setup or during chase you can select a location to modify it.

      \n

      Starting (white) locations can not be modified during setup.

      \n

      To modify a location select it by clicking on it. This will display the location details on the header part of the sheet.

      \n

      \"\"

      \n
        \n
      1. This will add a participant. If the chase is started the participant will be on that location. If the chase isn't started the participant will be added on the init track.
      2. \n
      3. This will remove the location. A location has to be empty to be removed.
      4. \n
      5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin indicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
      6. \n
      7. Add a new location.
      8. \n
      9. Active location.
      10. \n
      \n

      Setting up obstacles.

      \n

      You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

      \n

      \"\"

      \n
        \n
      1. Toggle this to add damage to a barrier.
      2. \n
      3. Barrier's hit points.
      4. \n
      5. Movement action cost in case of failure.
      6. \n
      7. Check used to pass the location. When it's red the active actor does not have the associated check.
      8. \n
      \n

      Cut to the chase.

      \n

      When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

      \n

      \"\"

      \n
        \n
      1. Initiative track. The active participant is circled in orange.
      2. \n
      3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest participant) all movement action will be recalculated.
      4. \n
      5. A barrier.
      6. \n
      7. A hazard.
      8. \n
      \n

      Obstacle resolution flow

      \n

      \"\"

      \n
        \n
      1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interact to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
      2. \n
      \n

      Here is a shorten flow example:

      \n

      \"\"\n\"\"\n\"\"\n\"\"

      \n

      Once the flow is complete all changes are send to the chase.

      \n

      \"\"

      \n

      This round is finished. All actor have spent their movement action. You can click Next round to proceed.

      \n

      Participant controls.

      \n

      \"\"

      \n

      You can modify or move a participant by using the controls button on his card.

      \n
        \n
      1. Those 3 icons will allow to delete, modify and activate a participant.
      2. \n
      3. Movement action. A yellow is available, grey is consumed, red is a deficit.
      4. \n
      5. This will control your participant bonus. He can draw a gun or be awarded bonus dices.
      6. \n
      7. Movement action controls. Here you can increase or decrease movement actions.
      8. \n
      9. Movement controls. You can move backward or forward. You can assist an ally (consume an action and give a bonus die) or take a cautious approach.
      10. \n
      \n\n
      "} +{"_id":"nk68b2ew15iw0bb8","name":"Combat [en]","content":"
      \n

      Combat

      \n

      Starting the combat

      \n

      On the scene select the tokens involved on the combat right click on one of them and on the bottom right click on the Toggle combat state icon. This will add the actors corresponding to the selected tokens to the combat tab.\nThen on the combat tab you can start the combat.

      \n

      The combat tracker will help you to track both the initiatives of the different actors and the combat rounds.

      \n

      Initiative

      \n

      On foundry combat turns are ordered by initiative, in the system this is usually the DEX of the actor. So to set the initiatives click on the dice icon of each actor or just the icon with 3 persons on the top left of the combat tab to set all at once.

      \n

      Next to each actor on the combat tab there are 3 icons:

      \n
        \n
      • A target: to draw the gun (this will add 50 to that character initiative)
      • \n
      • A crossed eye: to show/hide the corresponding actor on the list.
      • \n
      • A skull: to mark a character as defeated and skip it for the following turns.
      • \n
      \n

      Select target / targets

      \n

      During an actor's turn, to attack the first thing to do is to select the target or targets, this can be done by doing a right click on the target's token and then clicking on the target icon (bottom left). Or set the target mode on from the left tool bar and click on the targets.

      \n

      Then open the actor's sheet and click on the name of the item that will be used for the attack. This can be from a single shot of a long range weapon, or some melee attack or a maneuver.\nThis click will start the attack workflow on the chat, the chat card will allow selecting further options of the attack depending on the type of attack.

      \n
      \n

      Tip: if you right click on the combat tracker sheet icon, this will pop put this as a little window and you then you can see both the combat tracker window and results of the combat on the chat.

      \n
      \n

      Melee

      \n

      Maneuvers

      \n

      Not implemented yet.

      \n

      Single Shot

      \n

      Automate fire

      \n

      Multiple Targets

      \n

      Reload

      \n\n
      "} +{"_id":"wilj4rvkreemh70n","name":"Commands Cheat Sheet [en]","content":"
      \n

      Commands Cheat Sheet

      \n

      General rules

      \n

      Most sheet component can be clicked on the trigger a check/roll.\nAs a general rule you can modify those requests:

      \n
        \n
      • Shift will fast forward the request.
      • \n
      • Ctrl [GM only] will create a link in the chat with that request a roll to the players.
      • \n
      \n

      Sanity

      \n\n\n\n\n\n\n\n\n
      CommandAction
      Ctrl+Shift + left click SANRequest a Sanity Check for the character
      Ctr+Shift+Alt + left click SANRequest a Sanity Check and define the sanity loss
      \n

      Combined / Opposed rolls

      \n\n\n\n\n\n\n\n\n
      CommandAction
      Right Click on an elementStart/ Include the roll on an opposed roll
      Alt + Right Click on an elementStart/ Include the roll on an combined roll
      \n

      Other

      \n\n\n\n\n\n\n\n
      CommandAction
      cShow my own character sheet
      \n\n
      "} +{"_id":"nVYLlqVzmUV5dXAW","name":"Creating your first investigator [en]","content":"
      \n

      Initial item setup

      \n

      The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required.

      \n

      This page creates an investigator using the provided compendiums, if you are ready to full customise your character people read @Compendium[CoC7.system-doc.uug1mm5nokly4o2v]{Character creation} instead.

      \n

      Skill

      \n

      Click on the  Compendium Packs tab then under the Item heading open up the Skills Item (CoC7). Here you will find the skills shown on the characters sheets available from Chaosium's website.

      \n
        \n
      • No adjustment - Can not be assigned personal skill points.
      • \n
      • No XP gain - You do not mark this skill for improvement on a success.
      • \n
      • Specialization - This skill is part of a group like Pilot or Flighting.
      • \n
      • Uncommon - This skill is uncommon and can be automatically hidden on the character sheet.
      • \n
      • Pushed - This skill can be pushed.
      • \n
      • Fighting - Automatically set Specialization, Combat, and the specialization name to Fighting.
      • \n
      • Firearms - Automatically set Specialization, Combat, and the specialization name to Firearms.
      • \n
      \n

      You can create a new Item Compendium and copy the skills you require into it allowing you to edit them. You can also create new skills by creating new Skill Items (Click on the  Items Directory tab then Create Item give this a name e.g. Gardening and set the Type to Skill).

      \n

      Setup

      \n

      Once you have set up your skills next create up a Setup, here is an example from the Items Examples compendium @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

      \n

      Setups allow to you standardise what skills, items, biography sections, and characteristics the investigators start with.

      \n

      Click on the  Items Directory tab then Create Item give this a name e.g. New Investigator Setup and set the Type to Setup

      \n

      On the Description tab to set the description click the  button to get an editor.

      \n

      On the Details tab click the   on the Biography Sections to add any sections you require from the Create a Backstory step of investigator creation. Click on the  Compendium Packs tab then under the Item heading open up the Items Examples Item (CoC7) and drag the @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Punch} onto the setup.

      \n

      On the Characteristics tab you can customise how investigator characteristics are rolled / bought

      \n

      On the Skills tab you can drag the skills the investigator will have.

      \n

      All actor and item sheets have a  tab which can be used by the Keepers to store notes, only users that are set to GM can see this tab

      \n

      Occupation

      \n

      Occupations allow you set how many the occupation points, credit rating range, and skills the investigator starts with. Here is an example from the Items Examples compendium @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

      \n

      Click on the  Items Directory tab then Create Item give this a name e.g. Driver and set the Type to Occupation

      \n

      On the Description tab to set the description click the  button to get an editor.

      \n

      On the Details tab you can set the Occupation Points calculation and Minimum/Maximum Credit Rating

      \n

      On the Skills tab you can drag skills from the Compendiums or Item Directory to Common skills, you can also set up multiple Optional skill groups deciding how many the investigator must select.

      \n

      Creating your first investigator

      \n

      Character

      \n

      To complete your character you need to have an active scene which can be created in the  Scenes Directory.

      \n

      Click on the  Actors Directory tab then Create Item give this a name e.g. New Investigator and set the Type to Character.

      \n

      You can drag your setup created above on to the character for the initial setup or drag this example instead @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{1920's Setup Example}

      \n

      Next drag your occupation created above on to the character or drag this example instead @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Occupation Example}

      \n

      On the left hand menu bar select  Keeper's tools then select  Character creation mode.

      \n

      On the character sheet select the Development tab. The first dot indicates this is an occupation skill, the first column of numbers is the base value, next if where you assign personal points, third is for occupation points, the fourth is for experience gained during the investigator improvement phase, the final column is the total skill percent.

      \n

      You can see how many personal and occupation points you have spent so far, once you have spent all your points you need to toggle off  Character creation mode to allow characters to see their HP, MP, Sanity, and luck

      \n\n
      "} +{"_id":"di6mcnaxfyi0y2l4","name":"Items [en]","content":"
      \n

      Items

      \n

      The system support many different types of items, from basic items or weapons to skills or the complete setup of a type of character. You can see examples on the compendium that comes with the system.

      \n

      To create any of the types of items you always start the same way

      \n
        \n
      1. Go to the items directory
      2. \n
      3. Click on Create Item\n
          \n
        • Give it a name
        • \n
        • Select the item Type (see below for details on each one)
        • \n
        • Select the destination folder.
        • \n
      4. \n
      \n

      And have some common structure so on all of them:

      \n
        \n
      • You can add a textual description on the Description tab or just on the main window if it doesn't have tabs.
      • \n
      • If you click on the icon you can pick or upload a new one
      • \n
      \n

      Available types

      \n
        \n
      • @Compendium[CoC7.system-doc.kv2tbz6x29cq6ewq]{Item Type: Archetype}
      • \n
      • @Compendium[CoC7.system-doc.oruecvy7jne4u4gt]{Item Type: Book}
      • \n
      • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Item Type: Chases}
      • \n
      • Item Type: Item
      • \n
      • @Compendium[CoC7.system-doc.qa934whpkpauiyc9]{Item Type: Occupation}
      • \n
      • @Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Item Type: Setup}
      • \n
      • @Compendium[CoC7.system-doc.mz0ulbkecfvv8nw7]{Item Type: Skill}
      • \n
      • Item Type: Spell
      • \n
      • Item Type: Status
      • \n
      • Item Type: Talent
      • \n
      • Item Type: Weapon
      • \n
      \n\n
      "} +{"_id":"kv2tbz6x29cq6ewq","name":"Item Type: Archetype [en]","content":"
      \n

      Item Type: Pulp Archetype

      \n

      Archetypes are used on Pulp games. They provide skill and characteristic bonuses.

      \n

      Once the Archetype item has been created, the Archetype Sheet is shown.\nThere you can define the details of the Archetype:

      \n
        \n
      • On the Details tab you can:\n
          \n
        • Assign the number of Additional points
        • \n
        • Assign the number of Pulp Talents
        • \n
        • Define the Basic Characteristics and if you want to Use a dice roll to generate them.
        • \n
        • Define the Suggested Occupations
        • \n
        • Define the Suggested Traits
        • \n
      • \n
      • On the Skills tab you can:\n
          \n
        • Drag the skills corresponding to this Archetype
        • \n
      • \n
      \n\n
      "} +{"_id":"oruecvy7jne4u4gt","name":"Item Type: Book [en]","content":"
      \n

      Item Type: Book

      \n

      The system has a special type of item for the books to be able to define the Sanity Loss, if it's a Mythos Tome or an Occult book, what Spells or Skills it provides and of curse a description and the book image.

      \n\n
      "} +{"_id":"qa934whpkpauiyc9","name":"Item Type: Occupation [en]","content":"
      \n

      Item Type: Occupation

      \n

      An occupation helps to define the character background, think about it as the definition of the set of occupational skills (the ones where the character can spend their occupation points) plus the definition of how to calculate the amount of available occupation points. Finally the occupation also allows to define the minimum and the maximum credit for a character with this occupation.

      \n

      Keep in mind that the set of occupational skills doesn't need to be fixed, the system allows to configure the occupation so when it's dragged to a Character sheet will give the option of selecting one or more skills from a closed list, or even add a pre defined number of skills to select from all the available ones.

      \n
        \n
      1. Go to the  Items Directory tab

      2. \n
      3. Click on  Create Item

        \n
          \n
        1. Give the set up a name e.g. Librarian
        2. \n
        3. Set Type to Occupation
        4. \n
      4. \n
      5. On the Description tab you can change the name, icon, name of the source book, and description

      6. \n
      7. On the Details tab you can control

        \n
          \n
        1. Select the Occupation Type

        2. \n
        3. Define the characteristics used to calculate the occupation points, you can check the characteristics you want and define the multiplier, for the ones with Optional marked, the player will have to choose one at creation time.

          \n
            \n
          1. For instance if an occupation uses EDU * 2 + (STR or DEX) * 2 You have to select Education and put 2 on the Multiplier without marking Optional and then for Strength and Dexterity you have to check both, check Optional on both, and put 2 on the Multiplier on both.
          2. \n
          3. Finally you will have to define the Minimum and Maximum value for the Credit Rating skill for this occupation.
          4. \n
        4. \n
        5. Names of biography sections (click on the + to add extra Biography sections), this can be replaced with a single block biography in settings

        6. \n
        7. Under items you can drag and drop default items and weapons

        8. \n
      8. \n
      9. On the Skills you can drag and drop skills in to multiple sections, A typical occupation has 8 skills plus the Credit Rating skill.

        \n
          \n
        1. The Common Skills includes the default occupation skills that can't be changed
        2. \n
        3. The Optional skills groups section allows to add groups (you can create several of them) of skills for the player to choose from. Once you click on the + sign a group is created and you can define the Number to chose from (number of skills to select) and create a pool of skills available for the selection by dragging them on the group.
        4. \n
        5. Finally the Additional Skills allows you to enter a number of skills the player can choose from the rest of the available skills.
        6. \n
      10. \n
      \n\n
      "} +{"_id":"JU1GCWwc8at7gzJ4","name":"Item Type: Setup [en]","content":"
      \n

      Item Type: Setup

      \n

      Setups are predefined sets of skills and a way to generate the characteristics (this can be by rolling dices or assigning certain amount of points for example).

      \n
        \n
      1. Go to the  Items Directory tab

      2. \n
      3. Click on  Create Item

        \n
          \n
        1. Give the set up a name e.g. 1920's Setup
        2. \n
        3. Set Type to Setup
        4. \n
      4. \n
      5. On the Description tab you can change the name, icon, name of the source book, and description

      6. \n
      7. On the Details tab you can control

        \n
          \n
        1. Show / Hide the Characteristics tab with the Enable characteristics checkbox
        2. \n
        3. Which version of Call of Cthulhu this is for, this can be filtered in compendiums
        4. \n
        5. Names of biography sections (click on the + to add extra Biography sections), this can be replaced with a single block biography in settings
        6. \n
        7. Under items you can drag and drop default items and weapons
        8. \n
      8. \n
      9. On the Characteristics tab you can set a points buy or roll characteristics and the formula

      10. \n
      11. On the Skills tab under common skill you can drag and drop default skills

      12. \n
      \n\n
      "} +{"_id":"mz0ulbkecfvv8nw7","name":"Item Type: Skill [en]","content":"
      \n

      Item Type: Skill

      \n

      A skill will be rolled during tests.

      \n
        \n
      1. Go to the  Items Directory tab

      2. \n
      3. Click on  Create Item

        \n
          \n
        1. Give the skill a name e.g. Art/Craft (Dancing)
        2. \n
        3. Set Type to Skill
        4. \n
      4. \n
      5. On the Description tab you can change the name, icon, Cthulhu Flavors (which editions this appears in), and description

        \n
          \n
        1. No adjustment - Can not be assigned personal skill points.
        2. \n
        3. No XP gain - You do not mark this skill for improvement on a success.
        4. \n
        5. Specialization - This skill is part of a group like Pilot or Flighting.
        6. \n
        7. Uncommon - This skill is uncommon and can be automatically hidden on the character sheet.
        8. \n
        9. Pushed - This skill can be pushed.
        10. \n
        11. Fighting - Automatically set Specialization, Combat, and the specialization name to Fighting.
        12. \n
        13. Firearms - Automatically set Specialization, Combat, and the specialization name to Firearms.
        14. \n
      6. \n
      \n\n
      "} +{"_id":"fk040vqb4per5ju1","name":"Links [en]","content":"
      \n

      Links

      \n
        \n
      • Links are a way for a GM to request for a roll (Characteristic, Attribute, Skill, SAN loss, Weapon).
      • \n
      • Links can contain an active effect.
      • \n
      • Links are created in the chat log. When you click a link it will trigger a check for your(s) controlled/impersonated character(s).
      • \n
      • Links can be included in any editor, mainly journal entries.
      • \n
      • Link can be created in 5 ways:\n
          \n
        • By manually typing it (read details below).
        • \n
        • By CTRL+click on any sheet element (Characteristic, Attribute, skill, SAN loss).
        • \n
        • By dragging a sheet element (Characteristic, Attribute, skill (+CTRL)) on an editor (Journal entry)
        • \n
        • By CTRL + dragging an item (skill or weapon) from a compendium or an item directory on an editor. When a link is created that way and the used as a GM, if your controlled character doesn't hold the weapon/skill you'll be prompted to create the corresponding item.
        • \n
        • By using the included compendium written by Lozalojo.
        • \n
      • \n
      • Links can be dragged from chat log on an editor.
      • \n
      • When a link is created the difficulty/penalty selection windows will open. Hold SHIFT to bypass that comportment.
      • \n
      • When a link is created, the roll mode will be check. If the roll mode is set to 'blind GM roll' the link will be created as blind.
      • \n
      • When a link is created with a difficulty and a penalty, the difficulty/penalty windows will not pop.
      • \n
      • When a link is created without a difficulty or a penalty, the difficulty/penalty windows will pop. Holding SHIFT will fastforward the roll (regular/no penalty).
      • \n
      \n

      Writing links

      \n
        \n
      • Links should be written using the @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool}. The link creation window is a tool for GM. It's located in the left side bar.
      • \n
      \n

      Links for chat messages and sheet editors (NPC, Journal entries...).\nFormat of link is @coc7.TYPE_OF_REQUEST[OPTIONS]{TEXT_TO_DISPLAY}

      \n
        \n
      • TYPE_OF_REQUEST :\n
          \n
        • sanloss: trigger a san check, upon failure will propose to deduct the corresponding SAN.
        • \n
        • check: trigger a check depending on the options.
        • \n
        • item: trigger use of a weapon. Only items of type weapon can be triggered.
        • \n
      • \n
      • OPTIONS: [] = optional, default\n
          \n
        • sanloss:\n
            \n
          • sanMax: max SAN loss
          • \n
          • sanMin: min SAN loss
          • \n
        • \n
        • check:\n
            \n
          • type: type of check ( characteristic, skill, attrib).
          • \n
          • name: name of the skill/characteristic/attrib.
          • \n
          • [blind]: will force a blind check, if not present the check will depend on your selected roll mode.
          • \n
        • \n
        • all:\n
            \n
          • [difficulty]: ? (blind), 0 (regular), + (hard), ++ (extreme), +++ (critical).
          • \n
          • [modifier]: -x (x penalty dice), +x (x bonus dice), 0 (no modifier).
          • \n
          • [icon]: icon tu use (font awesome, fas fa-dice).
          • \n
        • \n
      • \n
      • TEXT_TO_DISPLAY: Name to display, this is optional.
      • \n
      \n

      Examples

      \n\n\n\n\n\n\n\n\n\n\n\n\n
      LinkResult
      @coc7.sanloss[sanMax:1D6,sanMin:1,difficulty:++,modifier:-1]{Hard San Loss (-1) 1/1D6}
      @coc7.check[type:charac,name:STR,difficulty:+,modifier:-1]{Hard STR check(-1)}
      @coc7.check[type:attrib,name:lck,difficulty:+,modifier:-1]{Hard luck check(-1)}
      @coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,difficulty:+,modifier:-1]{Hard Anthropology check(-1)} (with icon)
      @coc7.sanloss[sanMax:1D6,sanMin:1]{San Loss (-1) 1/1D6} (without name, difficulty nor modifier)
      @coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,modifier:+1]{Anthropology check (+1)} (with icon, without name nor difficulty)
      \n

      Using links

      \n
        \n
      • You can drag/drop links from chat to sheets and between sheets.
      • \n
      • You can drag/drop a link directly on a token.
      • \n
      • You can drag/drop items and skills on a journal entry while holding CTRL, this will create the corresponding check with regular difficulty and 0 modifier.
      • \n
      • You can create link in the chat by clicking and holding CTRL from any sheet (PC/NPC/Creature) corresponding characteristic/luck/SAN/Competence/weapon/San loss.\n
          \n
        • This will open the select penalty/difficulty dialogue. Clicking on the generated link will then trigger the check with all parameters.
        • \n
        • Holding Shift on top will not open the penalty/difficulty dialogue. Clicking on the generated link will open the penalty/difficulty dialogue then trigger the check.
        • \n
      • \n
      \n\n
      "} +{"_id":"emuu3wo0uul91029","name":"Link creation tool [en]","content":"
      \n

      Link creation tool

      \n

      The system includes a tool to help you create links easily.\nIt's located on the left side bar. Click on the   icon.\nThis tools is available to GM only.

      \n

      \"Creation

      \n

      using this you can create @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{link} for skill check, san check, effects ...\nalternatively you can open the tool by holding CTRL while clicking no an item or a skill.

      \n

      Main window

      \n

      Clicking on the tool icon will open a window :

      \n

      \"Main

      \n

      You can there select options for you link.

      \n
        \n
      • "Compendium packs" and "Items directory" allows you to reference an object from corresponding folder.
      • \n
      • "Modifiers" will allows you to add modifiers to your check.
      • \n
      • "blind" will force the roll mode to be blind.
      • \n
      • "Label" will allows you to change the display label.
      • \n
      • "Icon" will allows you to choose an icon for your link. Icons can be :\n
          \n
        • A font awesome or a game-icons reference : "fas fa-ankh" or "game-icon game-icon-tentacle-strike".
        • \n
        • A link to an image in the system data or system core: "icons/magic/symbols/arrowhead-green.webp".
        • \n
      • \n
      \n

      If you do not supply a label and/or an icon, a default label and icon will be added.

      \n

      \"default

      \n

      Effects window

      \n

      Selecting effects will open an advance window where you can create links for @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{active effects}.\nSelect the options the same way you will be doing for a regular effect.

      \n

      Using links

      \n
        \n
      • Once your link is created and valid it will appear in a white box in the middle of the window.
      • \n
      \n

      \"link

      \n
        \n
      • You are now ready to whisper it to your players, copy it in your clipboard so you can add it to your items or journal entries or send it to the chat.
      • \n
      \n

      \"link

      \n
        \n
      • When a player clicks a link the corresponding action will be performed by his character.
      • \n
      • When a GM clicks a link the corresponding action will be performed by his selected tokens.
      • \n
      • A link drag/dropped in journal entries, on a token etc...
      • \n
      \n

      \"link

      \n\n
      "} +{"_id":"ce7s8psgyctzx5r1","name":"Sanity [en]","content":"
      \n

      Sanity Checks

      \n

      The system has integrated the sanity check workflow and can handle sanity rolls, tracking Sanity loss and rolling for temporal insanity.

      \n

      Requesting Sanity rolls

      \n
        \n
      • The Keeper can click with Ctrl+Shift on the Sanity of character to request a Sanity Check for the character

        \n
          \n
        • If the Keeper also press Alt (so holding at the same time Ctrl+Shift+Alt) while clicking on the Sanity of a character, a dialog will pop-up to introduce the sanity loss if the sanity check is passed and the value for when the sanity check is failed.
        • \n
      • \n
      • Video showing the Sanity check workflow

      • \n
      \n\n
      "} \ No newline at end of file diff --git a/styles/interface/compendium.less b/styles/interface/compendium.less index 1341256f..d1b9afd2 100644 --- a/styles/interface/compendium.less +++ b/styles/interface/compendium.less @@ -7,6 +7,17 @@ line-height: 32px; display: block; } + +.coc7overview h1:not(:first-child) { + margin-top: 2rem; +} + div.coc7overview li { margin: 0.3rem; } + +div.coc7overview code { + background: @greyBackground; + padding: 0.1rem; + line-height: 1.2rem; +} From f2066e58b163ee26d236fbbc6ccbdde098097d16 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Sat, 13 Aug 2022 18:41:46 +0200 Subject: [PATCH 712/726] Compat V9 V10 with effect duration --- module/active-effect.js | 80 ++++++++++++++++++++++++++++++++++------- 1 file changed, 67 insertions(+), 13 deletions(-) diff --git a/module/active-effect.js b/module/active-effect.js index d8270f3a..c4a266c6 100644 --- a/module/active-effect.js +++ b/module/active-effect.js @@ -1,6 +1,32 @@ /* global ActiveEffect, foundry, game, Roll */ export default class CoC7ActiveEffect extends ActiveEffect { + constructor (...args) { + super(...args) + // Used for V9 compat only. + if (game.version && !game.version.startsWith('10')) { + if (this.combats) { + const duration = this.duration + delete this.duration + Object.defineProperty(this, 'duration', { + get () { + const d = this.data.duration + if (Number.isNumeric(d.seconds)) { + let label = duration.label + if (d.seconds > 3600) { + label = new Date(d.seconds * 1000).toISOString().slice(11, 19) + } else if (d.seconds > 100) { + label = new Date(d.seconds * 1000).toISOString().slice(14, 19) + } + duration.label = label + } + return duration + } + }) + } + } + } + /** @inheritdoc */ apply (actor, change) { if (!isNaN(Number(change.value))) change.value = Number(change.value) @@ -123,24 +149,52 @@ export default class CoC7ActiveEffect extends ActiveEffect { } } - /** - * @override - */ - get duration () { - const d = this.data.duration - const duration = super.duration - if (Number.isNumeric(d.seconds)) { + // prepareData () { + // super.prepareData() + // } + + prepareEmbeddedDocuments () { + super.prepareEmbeddedDocuments() + } + + // Used in V10 only !! + _prepareDuration () { + super._prepareDuration() + + const duration = this.duration + if (Number.isNumeric(duration.seconds)) { let label = duration.label - if (d.seconds > 3600) { - label = new Date(d.seconds * 1000).toISOString().slice(11, 19) - } else if (d.seconds > 100) { - label = new Date(d.seconds * 1000).toISOString().slice(14, 19) + if (duration.seconds > 3600) { + label = new Date(duration.seconds * 1000).toISOString().slice(11, 19) + } else if (duration.seconds > 100) { + label = new Date(duration.seconds * 1000).toISOString().slice(14, 19) } duration.label = label } - return duration } + /** + * @override + */ + // get duration () { + // const d = this.data.duration + // const duration = super.duration + // if (Number.isNumeric(d.seconds)) { + // let label = duration.label + // if (d.seconds > 3600) { + // label = new Date(d.seconds * 1000).toISOString().slice(11, 19) + // } else if (d.seconds > 100) { + // label = new Date(d.seconds * 1000).toISOString().slice(14, 19) + // } + // duration.label = label + // } + // return duration + // } + + // set duration (x) { + // super.duration = x + // } + get isStatus () { const statusId = this.getFlag('core', 'statusId') return [ @@ -227,7 +281,7 @@ export default class CoC7ActiveEffect extends ActiveEffect { } function parse (str) { - const regEx = /^[\+\-*/\(\)\d]+$/ + const regEx = /^[+\-*/()\d]+$/ if (!regEx.exec(str)) return NaN try { return new Roll(str).evaluate({ async: false }).total From f10fab7192e628b63474db2ef2dc18b5e010a091 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 15 Aug 2022 22:53:10 +0100 Subject: [PATCH 713/726] Tour setup --- module/apps/coc7-tour.js | 71 +++++++++++++++++++++++++ module/hooks/ready.js | 16 ++++-- module/scripts/register-tours.js | 25 +++++++++ module/tours/enable-variant-rules-en.js | 69 ++++++++++++++++++++++++ module/tours/enable-variant-rules-fr.js | 24 +++++++++ 5 files changed, 201 insertions(+), 4 deletions(-) create mode 100644 module/apps/coc7-tour.js create mode 100644 module/scripts/register-tours.js create mode 100644 module/tours/enable-variant-rules-en.js create mode 100644 module/tours/enable-variant-rules-fr.js diff --git a/module/apps/coc7-tour.js b/module/apps/coc7-tour.js new file mode 100644 index 00000000..57d6efa3 --- /dev/null +++ b/module/apps/coc7-tour.js @@ -0,0 +1,71 @@ +/* global MutationObserver, Tour, ui */ +let CoC7Tour = class internalCoC7Tour {} +if (typeof Tour !== 'undefined') { + CoC7Tour = class internalCoC7Tour extends Tour { + async waitForElement (selector) { + return new Promise((resolve, reject) => { + const element = document.querySelector(selector) + if (element) { + resolve() + return + } + + const observer = new MutationObserver((mutations, observer) => { + document.querySelectorAll(selector).forEach((el) => { + resolve(el) + observer.disconnect() + }) + }) + + observer.observe(document.body, { + childList: true, + subtree: true + }) + }) + } + + async _preStep () { + await super._preStep() + + // Close currently open applications + if (this.stepIndex === 0) { + for (const app of Object.values(ui.windows)) { + app.close() + } + } + + await this.waitForElement(this.currentStep.selector) + } + + async _postStep () { + await super._postStep() + if (this.stepIndex < 0 || !this.hasNext) { + return + } + + if (!this.currentStep.action) { + return + } + + if (this.isResetting) { + this.isResetting = false + return + } + + switch (this.currentStep.action) { + case 'click': + document.querySelector(this.currentStep.selector).click() + break + } + } + + async reset () { + if (this.status !== 'completed') { + this.isResetting = true + } + await super.reset() + } + } +} + +export { CoC7Tour } diff --git a/module/hooks/ready.js b/module/hooks/ready.js index 078866e4..d78d89f6 100644 --- a/module/hooks/ready.js +++ b/module/hooks/ready.js @@ -1,7 +1,7 @@ /* global game, Hooks, isNewerVersion */ import { CoC7Tooltips } from '../apps/tooltips.js' - // import { CoC7WelcomeMessage } from '../apps/welcome-message.js' +import { registerTours } from '../scripts/register-tours.js' export function listen () { Hooks.once('ready', async () => { @@ -14,10 +14,18 @@ export function listen () { const instructionsVersion = game.settings.get('CoC7', 'showInstructions') if (isNewerVersion(game.system.data.version, instructionsVersion ?? '0')) { - ;( - await game.packs.get('CoC7.system-doc').getDocument('wZtTHpGV3atKV2oD') - ).sheet.render(true) + let lang = game.i18n.lang + const readMe = { + en: 'wZtTHpGV3atKV2oD' + } + if (typeof readMe[lang] === 'undefined') { + lang = 'en' + } + (await game.packs.get('CoC7.system-doc').getDocument(readMe[lang])).sheet.render(true) // game.settings.set('CoC7', 'showInstructions', game.system.data.version) // Don't turn off while testing } + if (typeof game.tours !== 'undefined') { + registerTours() + } }) } diff --git a/module/scripts/register-tours.js b/module/scripts/register-tours.js new file mode 100644 index 00000000..8535c43d --- /dev/null +++ b/module/scripts/register-tours.js @@ -0,0 +1,25 @@ +/* global game */ +import { EnableVariantRulesEn } from '../tours/enable-variant-rules-en.js' +import { EnableVariantRulesFr } from '../tours/enable-variant-rules-fr.js' + +export async function registerTours () { + try { + let lang = game.i18n.lang + const tours = { + en: { + 'enable-variant-rules': EnableVariantRulesEn + }, + fr: { + 'enable-variant-rules': EnableVariantRulesFr + } + } + if (typeof tours[lang] === 'undefined') { + lang = 'en' + } + for (const tourName in tours[lang]) { + game.tours.register('CoC7', tourName, new tours[lang][tourName]()) + } + } catch (err) { + console.error('TOUR ERROR', err) + } +} diff --git a/module/tours/enable-variant-rules-en.js b/module/tours/enable-variant-rules-en.js new file mode 100644 index 00000000..c557d1ef --- /dev/null +++ b/module/tours/enable-variant-rules-en.js @@ -0,0 +1,69 @@ +/* global mergeObject */ +import { CoC7Tour } from '../apps/coc7-tour.js' + +export class EnableVariantRulesEn extends CoC7Tour { + constructor (config) { + super(mergeObject({ + title: 'Enable optional/variant rules.', + description: 'Learn how to enable Pulp Cthulhu rules, or other variant rules', + canBeResumed: false, + display: true, + steps: [ + { + id: 'goto-settings', + selector: '[data-tab="settings"]', + title: 'COC7.Tour.GotoSettingsTitle', + content: 'COC7.Tour.GotoSettingsContent', + action: 'click' + }, + { + id: 'goto-configure', + selector: '[data-action="configure"]', + title: 'COC7.Tour.GotoConfigureTitle', + content: 'COC7.Tour.GotoConfigureContent', + action: 'click' + }, + { + id: 'goto-system-settings', + selector: '[data-tab="system"]', + title: 'COC7.Tour.GotoSystemSettingsTitle', + content: 'COC7.Tour.GotoSystemSettingsContent', + action: 'click' + }, + { + id: 'goto-game-rules', + selector: '[data-key="CoC7.gameRules"]', + title: 'COC7.Tour.GotoGameRulesTitle', + content: 'COC7.Tour.GotoGameRulesContent', + action: 'click' + }, + { + id: 'save-game-rules', + selector: '#rules-settings [name=submit]', + title: 'COC7.Tour.SaveGameRulesTitle', + content: 'COC7.Tour.SaveGameRulesContent' + }, + { + id: 'save-system-settings-rules', + selector: '#client-settings [name=submit]', + title: 'COC7.Tour.SaveSystemSettingsTitle', + content: 'COC7.Tour.SaveSystemSettingsContent' + } + ], + localization: { + 'COC7.Tour.GotoSettingsTitle': 'Game Settings', + 'COC7.Tour.GotoSettingsContent': 'Go to the Game Settings tab', + 'COC7.Tour.GotoConfigureTitle': 'Configure Settings', + 'COC7.Tour.GotoConfigureContent': 'Click on the Configure Settings button', + 'COC7.Tour.GotoSystemSettingsTitle': 'System Settings', + 'COC7.Tour.GotoSystemSettingsContent': 'Go to the System Settings tab', + 'COC7.Tour.GotoGameRulesTitle': 'Configure Variant/Optional Rules', + 'COC7.Tour.GotoGameRulesContent': 'Click on the Configure Variant/Optional Rules button', + 'COC7.Tour.SaveGameRulesTitle': 'Save rule changes', + 'COC7.Tour.SaveGameRulesContent': 'Once you have made your changes click on the Save Changes button', + 'COC7.Tour.SaveSystemSettingsTitle': 'Save system settings', + 'COC7.Tour.SaveSystemSettingsContent': 'Finally click on the Save Changes button' + } + }, config)) + } +} diff --git a/module/tours/enable-variant-rules-fr.js b/module/tours/enable-variant-rules-fr.js new file mode 100644 index 00000000..4af003d0 --- /dev/null +++ b/module/tours/enable-variant-rules-fr.js @@ -0,0 +1,24 @@ +import { EnableVariantRulesEn } from './enable-variant-rules-en.js' + +export class EnableVariantRulesFr extends EnableVariantRulesEn { + constructor (config) { + super({ + title: 'Enable optional/variant rules.', + description: 'Learn how to enable Pulp Cthulhu rules, or other variant rules', + localization: { + 'COC7.Tour.GotoSettingsTitle': 'Game Settings', + 'COC7.Tour.GotoSettingsContent': 'Go to the Game Settings tab', + 'COC7.Tour.GotoConfigureTitle': 'Configure Settings', + 'COC7.Tour.GotoConfigureContent': 'Click on the Configure Settings button', + 'COC7.Tour.GotoSystemSettingsTitle': 'System Settings', + 'COC7.Tour.GotoSystemSettingsContent': 'Go to the System Settings tab', + 'COC7.Tour.GotoGameRulesTitle': 'Configure Variant/Optional Rules', + 'COC7.Tour.GotoGameRulesContent': 'Click on the Configure Variant/Optional Rules button', + 'COC7.Tour.SaveGameRulesTitle': 'Save rule changes', + 'COC7.Tour.SaveGameRulesContent': 'Once you have made your changes click on the Save Changes button', + 'COC7.Tour.SaveSystemSettingsTitle': 'Save system settings', + 'COC7.Tour.SaveSystemSettingsContent': 'Finally click on the Save Changes button' + } + }) + } +} From 583b5003a02ff3a68ddf3c9dbbd442b35a0f42f3 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 15 Aug 2022 23:18:23 +0100 Subject: [PATCH 714/726] Update CHANGELOG.md --- .github/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 998818e0..c0b84f9a 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -2,8 +2,12 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. +- Add active effects to manipulate actor sheet value totals - Add actor.runRoll(...) function to allow third party modules/macros to perform rolls +- Add chase items that Keepers can use to track chases +- Add manual pages which will pop up on first load, this is a work in progress - Add The Dhole's House JSON actor importer, thanks to @pconcepcion +- Add FoundryVTT v10 tour for finding the rules variant settings - Fix dice sounds not being pushed to other clients - Fix tooltip for character summary sheet - Fix updater not always running automatically From 08b8511db6246b955ecf5ea5156ecc518ed92edb Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 17 Aug 2022 09:28:32 +0200 Subject: [PATCH 715/726] Implement the french translation for tours. --- module/tours/enable-variant-rules-fr.js | 28 ++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/module/tours/enable-variant-rules-fr.js b/module/tours/enable-variant-rules-fr.js index 4af003d0..9b46b0e9 100644 --- a/module/tours/enable-variant-rules-fr.js +++ b/module/tours/enable-variant-rules-fr.js @@ -3,21 +3,21 @@ import { EnableVariantRulesEn } from './enable-variant-rules-en.js' export class EnableVariantRulesFr extends EnableVariantRulesEn { constructor (config) { super({ - title: 'Enable optional/variant rules.', - description: 'Learn how to enable Pulp Cthulhu rules, or other variant rules', + title: 'Activez les règles optionnelles.', + description: 'Activez les règles optionelles et Pulp Cthulhu', localization: { - 'COC7.Tour.GotoSettingsTitle': 'Game Settings', - 'COC7.Tour.GotoSettingsContent': 'Go to the Game Settings tab', - 'COC7.Tour.GotoConfigureTitle': 'Configure Settings', - 'COC7.Tour.GotoConfigureContent': 'Click on the Configure Settings button', - 'COC7.Tour.GotoSystemSettingsTitle': 'System Settings', - 'COC7.Tour.GotoSystemSettingsContent': 'Go to the System Settings tab', - 'COC7.Tour.GotoGameRulesTitle': 'Configure Variant/Optional Rules', - 'COC7.Tour.GotoGameRulesContent': 'Click on the Configure Variant/Optional Rules button', - 'COC7.Tour.SaveGameRulesTitle': 'Save rule changes', - 'COC7.Tour.SaveGameRulesContent': 'Once you have made your changes click on the Save Changes button', - 'COC7.Tour.SaveSystemSettingsTitle': 'Save system settings', - 'COC7.Tour.SaveSystemSettingsContent': 'Finally click on the Save Changes button' + 'COC7.Tour.GotoSettingsTitle': 'Paramètres', + 'COC7.Tour.GotoSettingsContent': 'Ouvrir l\'onglet "Paramètres"', + 'COC7.Tour.GotoConfigureTitle': 'Configuration des options', + 'COC7.Tour.GotoConfigureContent': 'Cliquez sur "Configuration des options"', + 'COC7.Tour.GotoSystemSettingsTitle': 'Système de jeu', + 'COC7.Tour.GotoSystemSettingsContent': 'Ouvrez l\'onglet "Système de jeu"', + 'COC7.Tour.GotoGameRulesTitle': 'Configurer les variantes/règles optionnelles', + 'COC7.Tour.GotoGameRulesContent': 'Clickez sur le boutton "Configurer les variantes/règles optionnelles"', + 'COC7.Tour.SaveGameRulesTitle': 'Sauvegarder les modifications', + 'COC7.Tour.SaveGameRulesContent': 'Apres avoir choisis les options cliquez sur le bouton "Sauvegarder les modifications"', + 'COC7.Tour.SaveSystemSettingsTitle': 'Saugarder', + 'COC7.Tour.SaveSystemSettingsContent': 'Cliquez sur "Sauvegarer" !' } }) } From 0214ac9c5441c32fb7a3cc7b844b0bcbc3d2e6be Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 17 Aug 2022 11:35:24 +0100 Subject: [PATCH 716/726] Update manual version number and to only automatically show once per release --- docs/en/README.md | 2 +- module/hooks/ready.js | 2 +- module/manual/en/README.md | 2 +- packs/system-doc.db | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/en/README.md b/docs/en/README.md index 7cf4fb58..f3fd4a8f 100644 --- a/docs/en/README.md +++ b/docs/en/README.md @@ -1,4 +1,4 @@ -# System documentation v0.7.12 +# System documentation for version 0.8.0 This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT. diff --git a/module/hooks/ready.js b/module/hooks/ready.js index d78d89f6..1292a561 100644 --- a/module/hooks/ready.js +++ b/module/hooks/ready.js @@ -22,7 +22,7 @@ export function listen () { lang = 'en' } (await game.packs.get('CoC7.system-doc').getDocument(readMe[lang])).sheet.render(true) - // game.settings.set('CoC7', 'showInstructions', game.system.data.version) // Don't turn off while testing + game.settings.set('CoC7', 'showInstructions', game.system.data.version) } if (typeof game.tours !== 'undefined') { registerTours() diff --git a/module/manual/en/README.md b/module/manual/en/README.md index f172a05e..0c00c0ab 100644 --- a/module/manual/en/README.md +++ b/module/manual/en/README.md @@ -1,4 +1,4 @@ -# System documentation v0.7.12 +# System documentation for version 0.8.0 This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT. diff --git a/packs/system-doc.db b/packs/system-doc.db index e7b72e59..4a2c9612 100644 --- a/packs/system-doc.db +++ b/packs/system-doc.db @@ -1,6 +1,6 @@ {"_id":"rmtiwtbixojhyf5v","name":"Active effects [en]","content":"
      \n

      Effects

      \n

      The system allows for the creation of Active Effects.\nAn active effect will modify an actor characteristic(s), attribute(s), skill(s).\nEffects can be created as a @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{link} using the @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool} or directly in the character sheet by clicking the   button.

      \n

      Effects tab

      \n

      Effects will be display in the effect tabs on the character sheet.

      \n

      \"effects

      \n

      Effect are broken down in 4 categories for PC :

      \n
        \n
      • Status: those are effects used and created by the system (Wounds status, prone, insane ...). Those effects do not include any changes.
      • \n
      • Temporary: those are effects with duration.
      • \n
      • Passive: those are permanent effects.
      • \n
      • Inactive: those are disabled effects.
      • \n
      \n

      For NPC/Creatures you will only see 2 sections: active and inactive effects.\nWhen an effect is not inactive, the corresponding changes will be applied to the actor.

      \n

      Creating effects

      \n

      You can create effect by clicking the Add button.\nThis will bring the effect creation window.\nThis windows has 3 tabs

      \n

      Details tab

      \n

      \"Details

      \n

      Duration tab

      \n

      \"Duration

      \n

      Changes tab

      \n

      \"Changes

      \n

      This last tab will includes all changes made to the character sheet.

      \n

      Changes

      \n

      An effect includes a list of changes. Each change needs to be addressed with the corresponding data path.\nThe available changes are :

      \n
        \n
      • Characteristics: data.characteristics.[characteristic].value\n
          \n
        • available [characteristic] are: str, con, siz, dex, app, int, pow, edu
        • \n
      • \n
      • attributes:\n
          \n
        • mov: data.attribs.mov.value
        • \n
        • build: data.attribs.build.value
        • \n
        • bonus damage: data.attribs.db.value
        • \n
        • armor: data.attribs.armor.value
        • \n
      • \n
      • derived attributes. Only the maximum value of those attributes should be modified. Those changes are applied after all other changes have been made. If that attibute is in auto mode, it will be recalculated with the previous characteristics changes before having it's value affected.\n
          \n
        • max hit points: data.attribs.hp.max
        • \n
        • max sanity: data.attribs.san.max
        • \n
      • \n
      • skills. Skills are identified by their name without specialization. Skill names are case sensitive !\n
          \n
        • data.skills.Handgun.value
        • \n
      • \n
      \n\n
      "} {"_id":"xV4Hxxmu6zjIMw9h","name":"Actor Importer [en]","content":"
      \n

      Actor Importer

      \n

      You can use the actor importer to import several NPC/Creatures blocks from adventures and using the JSON exporter from The Dholes House

      \n

      To open the actor importer either open the  Actor Directory and click Actor Importer at the bottom of the side bar or on an active scene   then click  Actor Importer

      \n

      Overview

      \n

      If this is your first time it is recommends you also read the following sections.

      \n
        \n
      • Non Playing Character (NPC) / Creature
      • \n
      • The Dhole's House Actor Importer JSON
      • \n
      \n

      Non Playing Character (NPC) / Creature

      \n

      \"\"

      \n
        \n
      1. Select NPC or Creature

      2. \n
      3. Should the system convert the character block from an earlier edition to 7th

      4. \n
      5. Select the languages of the character block

      6. \n
      7. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched

        \n

        Items: From your item directory

        \n

        World: From your world compendiums

        \n

        Modules: From your module compendiums

        \n

        System: From the system compendiums provided with this system

      8. \n
      9. An example layout is given here you can copy this to your clipboard if you want to edit it or paste in the text from an adventure

      10. \n
      \n

      Click import will create an actor under the  Actor directory will be created in the Imported characters folder any text that was not understood will be stored in Keeper notes

      \n

      The Dhole's House Actor Importer JSON

      \n

      \"\"

      \n
        \n
      1. The Dhole's House Actor Importer JSON

      2. \n
      3. When adding skills, items, spells, and weapons the system can attempt to find items in your world with the same name, you can select the order the seconds are searched

        \n

        Items: From your item directory

        \n

        World: From your world compendiums

        \n

        Modules: From your module compendiums

        \n

        System: From the system compendiums provided with this system

      4. \n
      \n

      Browse for your JSON file, once selected the name and image will be be shown, click import to create the actor under the  Actor directory will be created in the Imported characters folder

      \n

      By default the image will be stored in a folder called dhole-image in your world, this can be changed by clicking on the  Game Settings tab then under the Game Settings heading clicking on  Configure Settings, click on  System Settings.

      \n\n
      "} -{"_id":"wZtTHpGV3atKV2oD","name":"Call of Cthulhu 7th Edition (Unofficial) [en]","content":"
      \n

      System documentation v0.7.12

      \n

      This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT.

      \n

      You will need one of the following to play the game

      \n
        \n
      • Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook
      • \n
      • Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set
      • \n
      • Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules
      • \n
      \n

      The system automates most of the regular tasks and rules involved with running a game.

      \n

      Several parts of the actor sheets have pop up tooltips that trigger after two seconds, this delay can be changed in the settings\n.

      \n

      This documentation can be reopened under   Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en]

      \n

      Recent changes

      \n

      For a full list of changes checkout the changelog on GitHub

      \n
        \n
      • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
      • \n
      • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer} - added The Dhole's House JSON support
      • \n
      • @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects} - implementation of active effects
      • \n
      • Active effects added to @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} and @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool}
      • \n
      \n

      Overview sections below

      \n

      If this is your first time it is recommends you also read the following sections on this page.

      \n

      Foundry VTT is based in actors and items. This module includes a number of system specific actors and items, and some examples of them can be found in the included system compendiums.

      \n
        \n
      • Actor overview
      • \n
      • Items overview
      • \n
      • Settings overview
      • \n
      • Scene menu overview
      • \n
      • Keyboard and mouse shortcuts
      • \n
      • @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator}
      • \n
      • @Compendium[CoC7.system-doc.uug1mm5nokly4o2v]{Character creation}
      • \n
      \n

      How to use the system

      \n
        \n
      • @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects} - An active effect will modify an actor characteristic(s), attribute(s), skill(s).
      • \n
      • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer}
      • \n
      • Actor Type: Character (TODO)
      • \n
      • Actor Type: Container (TODO)
      • \n
      • Actor Type: Creature (TODO)
      • \n
      • Actor Type: NPC (TODO)
      • \n
      • Chat link creator (TODO)
      • \n
      • Character creation mode (TODO)
      • \n
      • @Compendium[CoC7.system-doc.nk68b2ew15iw0bb8]{Combat} (TODO)
      • \n
      • Development phase (TODO)
      • \n
      • @Compendium[CoC7.system-doc.di6mcnaxfyi0y2l4]{Item Types} (TODO)
      • \n
      • @Compendium[CoC7.system-doc.kv2tbz6x29cq6ewq]{Item Type: Archetype} (TODO)
      • \n
      • @Compendium[CoC7.system-doc.oruecvy7jne4u4gt]{Item Type: Book} (TODO)
      • \n
      • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Item Type: Chases}
      • \n
      • Item Type: Item (TODO)
      • \n
      • @Compendium[CoC7.system-doc.qa934whpkpauiyc9]{Item Type: Occupation}
      • \n
      • @Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Item Type: Setup}
      • \n
      • @Compendium[CoC7.system-doc.mz0ulbkecfvv8nw7]{Item Type: Skill} (TODO)
      • \n
      • Item Type: Spell (TODO)
      • \n
      • Item Type: Status (TODO)
      • \n
      • Item Type: Talent (TODO)
      • \n
      • Item Type: Weapon (TODO)
      • \n
      • @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link Creation Tool}
      • \n
      • @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{Links} (TODO)
      • \n
      • Macros (TODO)
      • \n
      • Rolls (TODO)
      • \n
      • @Compendium[CoC7.system-doc.ce7s8psgyctzx5r1]{Sanity} (TODO)
      • \n
      • Start Rest (TODO)
      • \n
      • XP Gain (TODO)
      • \n
      \n

      Actor overview

      \n
        \n
      • Character - A complete character, usually an investigator. @Compendium[CoC7.examples.JuI2aWDSEuQNKeUI]{Example Character}
      • \n
      • Container - An inventory container. @Compendium[CoC7.examples.r7bDSY4OYKxQYEas]{Example Container}
      • \n
      • Creature - A more simple character, suitable for creatures. @Compendium[CoC7.examples.XE2vjLG03wGfnYLw]{Example Creature}
      • \n
      • NPC - A more simple character, suitable for NPCs. @Compendium[CoC7.examples.4kSvDc4n13oFx8RG]{Example NPC}
      • \n
      \n

      Items overview

      \n
        \n
      • Archetype - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. @Compendium[CoC7.items.lu04TIRrg9P3vRqY]{Example Archetype}
      • \n
      • Book - An arcane tome that can hold spells and character improvements.
      • \n
      • Item - A piece of equipment.
      • \n
      • Occupation - A set of skills and other stats that implement a CoC occupation. @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Example Occupation}
      • \n
      • Setup - A set of default configurations for character, creature, or NPC creation. @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{Example Setup}
      • \n
      • Skill - A skill with a base percentage and some tags. @Compendium[CoC7.skills.UOuN0gESXPp2HXwH]{Example Skill}
      • \n
      • Spell - A magic spell.
      • \n
      • Status - An phobia or mania condition. @Compendium[CoC7.items.DVdvEDizPZPux1pK]{Example Mania}
      • \n
      • Talent -A special power for Pulp Cthulhu. These do not trigger automation in the system. @Compendium[CoC7.items.yqvwz769ZeJplOW7]{Example Talent}
      • \n
      • Weapon - An item with weapon statistics (this includes unarmed attacks). @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Example Weapon}
      • \n
      \n

      Settings overview

      \n

      Click on the  Game Settings tab then under the Game Settings heading click on  Configure Settings.

      \n

      Click on  System Settings

      \n
        \n
      • Variant/Optional Rules - Here you can turn on individual Pulp Cthulhu rules and other optional rules
      • \n
      • Initiative Settings - Additional settings for optional initiative rule
      • \n
      • Roll Settings - Default options for rolls
      • \n
      • Chat Cards Settings - Configure chat messages
      • \n
      • Scene Settings - Scene Settings
      • \n
      • Game Artwork Settings - This allows you to set a custom pause icon and message
      • \n
      • Sheet Settings - This allows you to change character sheet settings and optional CSS
      • \n
      • Weapon Settings - Weapon Settings
      • \n
      • Developer And Debug Settings - These settings can break your world when new updates are released so only use them on test worlds
      • \n
      • Roll Table Settings - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums
      • \n
      \n

      Call of Cthulhu Scene Menu

      \n

      To access this menu you will need to have an active scene which can be created in the  Scenes Directory. These options are only available to the Keeper.

      \n
        \n
      • Keeper's tools\n
          \n
        • Development phase: When enabled, players can make improvement rolls for their marked skills.
        • \n
        • Character creation mode: When enabled, players can distribute points among their skills.
        • \n
        • XP gain: When enabled, a skill will be marked for improvement after a successful check.
        • \n
        • Send a decoy roll to players: When clicked, players will see a fake GM private roll.
        • \n
        • Start Rest: When click, pick characters to perform a rest and roll for XP gains.
        • \n
      • \n
      • Roll !: Used to roll 1d100 with a threshold, difficulty and bonus or penalty dice.
      • \n
      • Create link: Create a roll link for players to click
      • \n
      \n

      Keyboard and mouse shortcuts

      \n

      There are many elements in the sheets that trigger a dice roll when clicked. Usually a dialog is shown to prompt the user for a difficulty and a possible bonus or penalty. This behavior is modified with the following controls:

      \n
        \n
      • Right click on any rollable element to include it in an opposed roll. As long as the card is open, all rolls made\nwith a right click will be added to the opposed roll.
      • \n
      • Alt + Right click on any rollable element to include it in a combined roll.
      • \n
      • Shift + Left click on a rollable element will make a roll without asking for difficulty or bonus/penalty.
      • \n
      • Ctrl + Left click on a rollable element will create a roll request. Only available for the GM.
      • \n
      • Alt + Left click on sanity will prompt the player for minimum and maximum sanity loss.
      • \n
      \n\n
      "} +{"_id":"wZtTHpGV3atKV2oD","name":"Call of Cthulhu 7th Edition (Unofficial) [en]","content":"
      \n

      System documentation for version 0.8.0

      \n

      This document is a work in progress overview of the CoC7 system it is not a tutorial for how to use FoundryVTT.

      \n

      You will need one of the following to play the game

      \n
        \n
      • Chaosium's Call of Cthulhu 7th Edition - Keeper's Rulebook
      • \n
      • Chaosium's Call of Cthulhu 7th Edition - Call of Cthulhu Starter Set
      • \n
      • Chaosium's Call of Cthulhu 7th Edition - Quick-Start Rules
      • \n
      \n

      The system automates most of the regular tasks and rules involved with running a game.

      \n

      Several parts of the actor sheets have pop up tooltips that trigger after two seconds, this delay can be changed in the settings\n.

      \n

      This documentation can be reopened under   Compendiums -> JournalEntry -> System manual -> Call of Cthulhu 7th Edition (Unofficial) [en]

      \n

      Recent changes

      \n

      For a full list of changes checkout the changelog on GitHub

      \n
        \n
      • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Chases}
      • \n
      • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer} - added The Dhole's House JSON support
      • \n
      • @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects} - implementation of active effects
      • \n
      • Active effects added to @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{links} and @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link creation tool}
      • \n
      \n

      Overview sections below

      \n

      If this is your first time it is recommends you also read the following sections on this page.

      \n

      Foundry VTT is based in actors and items. This module includes a number of system specific actors and items, and some examples of them can be found in the included system compendiums.

      \n
        \n
      • Actor overview
      • \n
      • Items overview
      • \n
      • Settings overview
      • \n
      • Scene menu overview
      • \n
      • Keyboard and mouse shortcuts
      • \n
      • @Compendium[CoC7.system-doc.nVYLlqVzmUV5dXAW]{Creating your first investigator}
      • \n
      • @Compendium[CoC7.system-doc.uug1mm5nokly4o2v]{Character creation}
      • \n
      \n

      How to use the system

      \n
        \n
      • @Compendium[CoC7.system-doc.rmtiwtbixojhyf5v]{Active effects} - An active effect will modify an actor characteristic(s), attribute(s), skill(s).
      • \n
      • @Compendium[CoC7.system-doc.xV4Hxxmu6zjIMw9h]{Actor importer}
      • \n
      • Actor Type: Character (TODO)
      • \n
      • Actor Type: Container (TODO)
      • \n
      • Actor Type: Creature (TODO)
      • \n
      • Actor Type: NPC (TODO)
      • \n
      • Chat link creator (TODO)
      • \n
      • Character creation mode (TODO)
      • \n
      • @Compendium[CoC7.system-doc.nk68b2ew15iw0bb8]{Combat} (TODO)
      • \n
      • Development phase (TODO)
      • \n
      • @Compendium[CoC7.system-doc.di6mcnaxfyi0y2l4]{Item Types} (TODO)
      • \n
      • @Compendium[CoC7.system-doc.kv2tbz6x29cq6ewq]{Item Type: Archetype} (TODO)
      • \n
      • @Compendium[CoC7.system-doc.oruecvy7jne4u4gt]{Item Type: Book} (TODO)
      • \n
      • @Compendium[CoC7.system-doc.VdOeGcxsu3jsVm3F]{Item Type: Chases}
      • \n
      • Item Type: Item (TODO)
      • \n
      • @Compendium[CoC7.system-doc.qa934whpkpauiyc9]{Item Type: Occupation}
      • \n
      • @Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Item Type: Setup}
      • \n
      • @Compendium[CoC7.system-doc.mz0ulbkecfvv8nw7]{Item Type: Skill} (TODO)
      • \n
      • Item Type: Spell (TODO)
      • \n
      • Item Type: Status (TODO)
      • \n
      • Item Type: Talent (TODO)
      • \n
      • Item Type: Weapon (TODO)
      • \n
      • @Compendium[CoC7.system-doc.emuu3wo0uul91029]{Link Creation Tool}
      • \n
      • @Compendium[CoC7.system-doc.fk040vqb4per5ju1]{Links} (TODO)
      • \n
      • Macros (TODO)
      • \n
      • Rolls (TODO)
      • \n
      • @Compendium[CoC7.system-doc.ce7s8psgyctzx5r1]{Sanity} (TODO)
      • \n
      • Start Rest (TODO)
      • \n
      • XP Gain (TODO)
      • \n
      \n

      Actor overview

      \n
        \n
      • Character - A complete character, usually an investigator. @Compendium[CoC7.examples.JuI2aWDSEuQNKeUI]{Example Character}
      • \n
      • Container - An inventory container. @Compendium[CoC7.examples.r7bDSY4OYKxQYEas]{Example Container}
      • \n
      • Creature - A more simple character, suitable for creatures. @Compendium[CoC7.examples.XE2vjLG03wGfnYLw]{Example Creature}
      • \n
      • NPC - A more simple character, suitable for NPCs. @Compendium[CoC7.examples.4kSvDc4n13oFx8RG]{Example NPC}
      • \n
      \n

      Items overview

      \n
        \n
      • Archetype - A set of skills and other stats that implement a Pulp Cthulhu archetype. These do not trigger automation in the system. @Compendium[CoC7.items.lu04TIRrg9P3vRqY]{Example Archetype}
      • \n
      • Book - An arcane tome that can hold spells and character improvements.
      • \n
      • Item - A piece of equipment.
      • \n
      • Occupation - A set of skills and other stats that implement a CoC occupation. @Compendium[CoC7.items.NOsh6EdNSjpjahDF]{Example Occupation}
      • \n
      • Setup - A set of default configurations for character, creature, or NPC creation. @Compendium[CoC7.items.CcH7CdXGtGTjMSCg]{Example Setup}
      • \n
      • Skill - A skill with a base percentage and some tags. @Compendium[CoC7.skills.UOuN0gESXPp2HXwH]{Example Skill}
      • \n
      • Spell - A magic spell.
      • \n
      • Status - An phobia or mania condition. @Compendium[CoC7.items.DVdvEDizPZPux1pK]{Example Mania}
      • \n
      • Talent -A special power for Pulp Cthulhu. These do not trigger automation in the system. @Compendium[CoC7.items.yqvwz769ZeJplOW7]{Example Talent}
      • \n
      • Weapon - An item with weapon statistics (this includes unarmed attacks). @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Example Weapon}
      • \n
      \n

      Settings overview

      \n

      Click on the  Game Settings tab then under the Game Settings heading click on  Configure Settings.

      \n

      Click on  System Settings

      \n
        \n
      • Variant/Optional Rules - Here you can turn on individual Pulp Cthulhu rules and other optional rules
      • \n
      • Initiative Settings - Additional settings for optional initiative rule
      • \n
      • Roll Settings - Default options for rolls
      • \n
      • Chat Cards Settings - Configure chat messages
      • \n
      • Scene Settings - Scene Settings
      • \n
      • Game Artwork Settings - This allows you to set a custom pause icon and message
      • \n
      • Sheet Settings - This allows you to change character sheet settings and optional CSS
      • \n
      • Weapon Settings - Weapon Settings
      • \n
      • Developer And Debug Settings - These settings can break your world when new updates are released so only use them on test worlds
      • \n
      • Roll Table Settings - When sanity rolls are made the system can automatically roll for a bout of madness. You can see example roll tables in the Sanity Roll Table compendiums
      • \n
      \n

      Call of Cthulhu Scene Menu

      \n

      To access this menu you will need to have an active scene which can be created in the  Scenes Directory. These options are only available to the Keeper.

      \n
        \n
      • Keeper's tools\n
          \n
        • Development phase: When enabled, players can make improvement rolls for their marked skills.
        • \n
        • Character creation mode: When enabled, players can distribute points among their skills.
        • \n
        • XP gain: When enabled, a skill will be marked for improvement after a successful check.
        • \n
        • Send a decoy roll to players: When clicked, players will see a fake GM private roll.
        • \n
        • Start Rest: When click, pick characters to perform a rest and roll for XP gains.
        • \n
      • \n
      • Roll !: Used to roll 1d100 with a threshold, difficulty and bonus or penalty dice.
      • \n
      • Create link: Create a roll link for players to click
      • \n
      \n

      Keyboard and mouse shortcuts

      \n

      There are many elements in the sheets that trigger a dice roll when clicked. Usually a dialog is shown to prompt the user for a difficulty and a possible bonus or penalty. This behavior is modified with the following controls:

      \n
        \n
      • Right click on any rollable element to include it in an opposed roll. As long as the card is open, all rolls made\nwith a right click will be added to the opposed roll.
      • \n
      • Alt + Right click on any rollable element to include it in a combined roll.
      • \n
      • Shift + Left click on a rollable element will make a roll without asking for difficulty or bonus/penalty.
      • \n
      • Ctrl + Left click on a rollable element will create a roll request. Only available for the GM.
      • \n
      • Alt + Left click on sanity will prompt the player for minimum and maximum sanity loss.
      • \n
      \n\n
      "} {"_id":"uug1mm5nokly4o2v","name":"Character Creation [en]","content":"
      \n

      Character Creation

      \n

      The system comes with some compendiums ready for you to customise. These are reset every time you update or install the system so it is recommended you copy them into your own compendium and edit them as required.

      \n

      Skills

      \n

      In this section you will create or edit @Compendium[CoC7.system-doc.mz0ulbkecfvv8nw7]{skills}

      \n
        \n
      1. Go to  compendium packs

      2. \n
      3. Click on  Create Compendium

        \n
          \n
        • Give your compendium a name (e.g. My Skills)
        • \n
        • Select Item as Document Type
        • \n
      4. \n
      \n

      Use existing skills

      \n
        \n
      1. Open up the compendium Skills
      2. \n
      3. Drag any skills you want to customise into your new compendium
      4. \n
      \n

      Create new skills

      \n
        \n
      1. Go to  Items Directory

      2. \n
      3. Cick on  Create Item

        \n
          \n
        • Give the skill a name
        • \n
        • Set Type to Skill
        • \n
      4. \n
      \n

      Setup

      \n

      @Compendium[CoC7.system-doc.JU1GCWwc8at7gzJ4]{Setups} are predefined sets of skills and a way to generate the characteristics (this can be by rolling dices or assigning certain amount of points for example). Once a setup has been created it can be used in the creation of multiple characters.

      \n
        \n
      1. Go to  Items Directory

      2. \n
      3. Click on  Create Item

        \n
          \n
        • Give the skill a name
        • \n
        • Set Type to Setup
        • \n
      4. \n
      5. Define the setup to set the basic configuration for a type of characters.

        \n
          \n
        • You can add a textual description on the Description tab
        • \n
        • If you click on the icon you can select a new one
        • \n
        • On the Details tab you can:\n
            \n
          • Select the Cthulhu Flavors where this setup is valid
          • \n
          • Define the biography sections and their names (click on the + to add extra Biography sections)
          • \n
          • Drag default items like @Compendium[CoC7.items.3elxAwnv7WCUNwng]{Punch}
          • \n
          • Show / Hide the Characteristics tab with the Enable characteristics checkbox
          • \n
        • \n
        • The Characteristics tab allows you to define the formula to roll the dices for each characteristic
        • \n
        • The Skills tab allows you to define the default set of skills by dragging items of type skill to the common skills area.
        • \n
      6. \n
      \n

      Occupations

      \n

      An @Compendium[CoC7.system-doc.qa934whpkpauiyc9]{occupation} helps to define the character background, think about it as the definition of the set of occupational skills (the ones where the character can spend their occupation points) plus the definition of how to calculate the amount of available occupation points. Finally the occupation also allows to define the minimum and the maximum credit for a character with this occupation.

      \n

      Keep in mind that the set of occupational skills doesn't need to be fixed, the system allows to configure the occupation so when it's dragged to a Character sheet will give the option of selecting one or more skills from a closed list, or even add a pre defined number of skills to select from all the available ones.

      \n

      The occupation creation process is the following one:

      \n
        \n
      1. Go to  Items Directory

      2. \n
      3. Cick on  Create Item

        \n
          \n
        • Give the skill a name
        • \n
        • Set Type to Occupation
        • \n
      4. \n
      5. Define the occupation to select the relevant characteristics and the occupation skills

        \n
          \n
        • You can add a textual description on the Description tab and define the Source
        • \n
        • If you click on the icon you can select a new one
        • \n
        • On the Details tab you can:\n
            \n
          • Select the Occupation Type

          • \n
          • Define the characteristics used to calculate the occupation points, you can check the characteristics you want and define the multiplier, for the ones with Optional marked, the player will have to choose one at creation time.

            \n

            For instance if an occupation uses EDU * 2 + (STR or DEX) * 2 you have to select Education and put 2 on the Multiplier without marking Optional and then for Strength and Dexterity you have to check both, check Optional on both, and put 2 on the Multiplier on both.

          • \n
          • Finally you will have to define the Minimum and Maximum value for the Credit Rating skill for this occupation.

          • \n
        • \n
        • The Skills tab allows you to select the occupation skills by dragging items of the Type skill to the different sections. A typical occupation has 8 skills plus the Credit Rating skill.\n
            \n
          • The Common Skills includes the default occupation skills that can't be changed
          • \n
          • The Optional skills groups section allows to add groups (you can create several of them) of skills for the player to choose from. Once you click on the + sign a group is created and you can define the Number to chose from (number of skills to select) and create a pool of skills available for the selection by dragging them on the group.
          • \n
          • Finally the Additional Skills allows you to enter a number of skills the player can choose from the rest of the available skills.
          • \n
        • \n
      6. \n
      \n

      Player Character creation

      \n

      You can create a Player Character by creating the actor and filling the corresponding blank Character Sheet, but it's much easier if you have previously created a setup and an occupation (see above), if you have created both the process to create the Player Character is as follows:

      \n
        \n
      1. Go to  Actors Directory

      2. \n
      3. Cick on  Create Actor

        \n
          \n
        • Give the actor a name
        • \n
        • Set Type to Character
        • \n
      4. \n
      5. Drag and drop a item of Type setup (for instance 1920s, 1890s, Pulp, Modern,...) on the sheet to do the basic setup using the configuration defined on the item, this usually includes rolling the characteristics or setting their values with the points system, and set a default set of skills corresponding to the given setup.

      6. \n
      7. Drag and drop an occupation Type item on the sheet, this will probably involve selecting some skills from a given reduced set or from the remaining ones. This will calculate the available Personal points and Occupation points and assign the part of the Occupation points to reach the minimum value for Credit Rating of the selected occupation.

      8. \n
      9. On the keeper's menu on the left click  Keeper's tools, if this menu is not available need to have an active scene which can be created in the  Scenes Directory

      10. \n
      11. On the new submenu click  Character creation mode. A new tab called Development should appear on the character sheets.

      12. \n
      13. Click on the characters Development tab

      14. \n
      15. The first dot column is for your occupational skills these can be toggled by clicking them

        \n
          \n
        • If you have enabled the Pulp rule Archetypes you will have a second dot to toggle that
        • \n
      16. \n
      17. Distribute occupation/personal points in development tab taking on account that each skill has 5 columns:

        \n
          \n
        1. First one is the basic percentage of the skill
        2. \n
        3. The second one is the one to put the Personal interest points during the creation of the character
        4. \n
        5. The third one is only available on for the occupation skills (marked with a dark circle before the skill name) and it's used to assign the Occupation points.\n
            \n
          • If you have enabled the Pulp rule Archetypes you will have a forth column you enter your archetype points here
          • \n
        6. \n
        7. The forth/fifth column should be initially blank and its where the experience points will show up (you can also assign points here if you are playing an experienced character)
        8. \n
        9. The final column is a read only one with the final calculated value for the skill (the sum of the other 4)
        10. \n
      18. \n
      \n\n\n
      "} {"_id":"VdOeGcxsu3jsVm3F","name":"Chases [en]","content":"
      \n

      Creating a new chase

      \n

      To create a chase create a new item of type chase.

      \n

      Only the keeper should have access to that item.

      \n

      A chase is composed of a succession of locations. Each location can be separated by an obstacle (barrier or hazard).

      \n

      A hazard will always be crossed but failing the check will slow you down.

      \n

      A barrier will stop you until you successfully pass or destroy it.

      \n

      \"\"

      \n

      The chase sheet is divided in 3 parts.

      \n
        \n
      • A header where you will see information about current location once a chase is started.
      • \n
      • A chase setup tab. This will allows you to create and follow the chase.
      • \n
      • A participant list where you can setup your participant. This tab will not work after the chase started.
      • \n
      \n

      Adding a participant.

      \n

      To add a participant click on the plus sign on the participant list or drag an actor or a token.

      \n

      Note that it is not mandatory to have a actor associated with a participant. This will allows for fast setup or to add someone on the fly to the chase.

      \n

      To be able to add a token to the chase a few control have been added to character and NPC sheets:

      \n

      \"\"

      \n

      Those icons will give additional information.

      \n
        \n
      1. Indicate that this actor is a synthetic actor (instance of an actor)
      2. \n
      3. Indicate that actor's data are not linked. Each instance of that actor has his own properties.
      4. \n
      5. Indicate that this actor has an associated token. You can drag and drop this onto a chase location or on the participant list.
      6. \n
      7. Indicate that actor's data are linked to an actor in the actors directory.
      8. \n
      \n

      Dragging a token to the participant list or to a location will activate the importer window.

      \n

      \"\"

      \n

      Here you can setup your participant. All fields can be changed. Note that you can select a different initiative and speed check. This is non standard in the CoC, but allows to setup unusual chases (futuristic matrix chase, dreamlands chase...)

      \n
        \n
      1. Clicking this will change the participant side from prey to chaser.
      2. \n
      3. Clicking this will trigger a speed check. Note that there will be no player entries necessary nor any roll card displayed.
      4. \n
      \n

      Participant list

      \n

      \"\"

      \n

      Here you can have the list of participant to the chase.

      \n
        \n
      1. Will trigger a chase roll. This will create a roll card if the participant has an associated actor (it's not a dummy). Holding shift will fast forward and solve the card.
      2. \n
      3. This will clear the speed roll if any, or delete the participant.
      4. \n
      \n

      \"\"

      \n
        \n
      1. Roll card waiting to get resolved in the chat.
      2. \n
      3. Speed check rolled. You can click this to get the details.
      4. \n
      5. To reset the speed check.
      6. \n
      \n

      \"\"

      \n

      Chase setup

      \n

      \"\"

      \n

      To setup a chase enter the initial numbers of locations and click initialize.

      \n

      \"\"

      \n

      The chase is initialized, you can adjust some options. Locations in white are initial locations and can not be modified.

      \n
        \n
      1. This is the chase track, the location in white are initials locations. The location in grey are actual chase locations.
      2. \n
      3. Selecting this will include in the chase participants who would have otherwise been able to escape.
      4. \n
      5. Selecting this will include in the chase participants who would have been excluded for being too slow.
      6. \n
      7. This is the number of locations between the slowest prey and the fastest chaser.
      8. \n
      9. This is the starting location of the fastest prey. Setting this to 0 will place him just before the start. 1 will place him at the start. -1 will place him 1 location before the start.
      10. \n
      11. This will animate token when they move to a new location.
      12. \n
      \n

      Setting up locations

      \n

      During setup or during chase you can select a location to modify it.

      \n

      Starting (white) locations can not be modified during setup.

      \n

      To modify a location select it by clicking on it. This will display the location details on the header part of the sheet.

      \n

      \"\"

      \n
        \n
      1. This will add a participant. If the chase is started the participant will be on that location. If the chase isn't started the participant will be added on the init track.
      2. \n
      3. This will remove the location. A location has to be empty to be removed.
      4. \n
      5. You can drag this and drop it on a scene. This will set the coordinates for that location. A red pin indicate that coordinates has been set. Right clicking a red pin will reset it's coordinate. If coordinates are set, and a participant with an associated token enter that location his token will be moved to that location.
      6. \n
      7. Add a new location.
      8. \n
      9. Active location.
      10. \n
      \n

      Setting up obstacles.

      \n

      You can add obstacle after and before a location. You can pre-fill an obstacle with a name, an associated check and some penalties.

      \n

      \"\"

      \n
        \n
      1. Toggle this to add damage to a barrier.
      2. \n
      3. Barrier's hit points.
      4. \n
      5. Movement action cost in case of failure.
      6. \n
      7. Check used to pass the location. When it's red the active actor does not have the associated check.
      8. \n
      \n

      Cut to the chase.

      \n

      When you are ready you can cut to the chase. If not all participant have a speed check this will trigger a warning and will not let you start.

      \n

      \"\"

      \n
        \n
      1. Initiative track. The active participant is circled in orange.
      2. \n
      3. Chase track. Active location and participant. You can drag drop participant from the chase track to move them freely. You can drag a new actor or token directly on the chase track. This will pop the import window and add that participant to the chase. In some cases (eg. new prey slower than the slowest participant) all movement action will be recalculated.
      4. \n
      5. A barrier.
      6. \n
      7. A hazard.
      8. \n
      \n

      Obstacle resolution flow

      \n

      \"\"

      \n
        \n
      1. When the active participant is facing an obstacle you can trigger the obstacle resolution flow by clicking this. This will open a chat card where keeper and player can interact to pass that obstacle. All changes made to the card can be reflected to the obstacle in the chase at the end of the flow.
      2. \n
      \n

      Here is a shorten flow example:

      \n

      \"\"\n\"\"\n\"\"\n\"\"

      \n

      Once the flow is complete all changes are send to the chase.

      \n

      \"\"

      \n

      This round is finished. All actor have spent their movement action. You can click Next round to proceed.

      \n

      Participant controls.

      \n

      \"\"

      \n

      You can modify or move a participant by using the controls button on his card.

      \n
        \n
      1. Those 3 icons will allow to delete, modify and activate a participant.
      2. \n
      3. Movement action. A yellow is available, grey is consumed, red is a deficit.
      4. \n
      5. This will control your participant bonus. He can draw a gun or be awarded bonus dices.
      6. \n
      7. Movement action controls. Here you can increase or decrease movement actions.
      8. \n
      9. Movement controls. You can move backward or forward. You can assist an ally (consume an action and give a bonus die) or take a cautious approach.
      10. \n
      \n\n
      "} {"_id":"nk68b2ew15iw0bb8","name":"Combat [en]","content":"
      \n

      Combat

      \n

      Starting the combat

      \n

      On the scene select the tokens involved on the combat right click on one of them and on the bottom right click on the Toggle combat state icon. This will add the actors corresponding to the selected tokens to the combat tab.\nThen on the combat tab you can start the combat.

      \n

      The combat tracker will help you to track both the initiatives of the different actors and the combat rounds.

      \n

      Initiative

      \n

      On foundry combat turns are ordered by initiative, in the system this is usually the DEX of the actor. So to set the initiatives click on the dice icon of each actor or just the icon with 3 persons on the top left of the combat tab to set all at once.

      \n

      Next to each actor on the combat tab there are 3 icons:

      \n
        \n
      • A target: to draw the gun (this will add 50 to that character initiative)
      • \n
      • A crossed eye: to show/hide the corresponding actor on the list.
      • \n
      • A skull: to mark a character as defeated and skip it for the following turns.
      • \n
      \n

      Select target / targets

      \n

      During an actor's turn, to attack the first thing to do is to select the target or targets, this can be done by doing a right click on the target's token and then clicking on the target icon (bottom left). Or set the target mode on from the left tool bar and click on the targets.

      \n

      Then open the actor's sheet and click on the name of the item that will be used for the attack. This can be from a single shot of a long range weapon, or some melee attack or a maneuver.\nThis click will start the attack workflow on the chat, the chat card will allow selecting further options of the attack depending on the type of attack.

      \n
      \n

      Tip: if you right click on the combat tracker sheet icon, this will pop put this as a little window and you then you can see both the combat tracker window and results of the combat on the chat.

      \n
      \n

      Melee

      \n

      Maneuvers

      \n

      Not implemented yet.

      \n

      Single Shot

      \n

      Automate fire

      \n

      Multiple Targets

      \n

      Reload

      \n\n
      "} From 9b456a6e13a43682010ada32fbb479ba9160227f Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 17 Aug 2022 16:47:13 +0200 Subject: [PATCH 717/726] Allows chat card interraction for trusted players. --- lang/en.json | 8 ++++++-- module/chat.js | 10 ++++++---- module/coc7.js | 2 +- module/scripts/register-settings.js | 18 ++++++++++++++++++ 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/lang/en.json b/lang/en.json index e50d4ff9..9b24f70c 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1032,9 +1032,13 @@ "SETTINGS.CheckDifficultyUnknown": "Unknown difficulty", "SETTINGS.showIconsOnly": "On summarized sheet, show only icons on skills list.", "SETTINGS.UseToken": "Use token image", - "SETTINGS.UseTokenHint": "Use token image instead of portraits in chat-cards", + "SETTINGS.UseTokenHint": "Use token image instead of portraits in chat cards", + "SETTINGS.TrustedCanModfyChatCard": "Allow trusted user to modify chat card", + "SETTINGS.TrustedCanModfyChatCardHint": "Enabling this setting will give permission to trusted users to select options on chat card. The GM only section will still not be visible to them", + "SETTINGS.TrustedCanSeeChatCard": "Allow trusted user to see GM only sections", + "SETTINGS.TrustedCanSeeChatCardHint": "Enabling this setting will give permission to trusted users to see GM only section on chat card. Use this with caution!", "SETTINGS.DisplayActorOnCard": "Display actor on card", - "SETTINGS.DisplayActorOnCardHint": "Display the actor's image/token on combat chat-cards", + "SETTINGS.DisplayActorOnCardHint": "Display the actor's image/token on combat chat cards", "SETTINGS.InitiativeRule": "Select initiative rule", "SETTINGS.InitiativeRuleHint": "You can select basic initiative rule (using DEX value) or optional rule (using a roll)", "SETTINGS.InitiativeRuleBasic": "Basic", diff --git a/module/chat.js b/module/chat.js index 7d4514f9..67632086 100644 --- a/module/chat.js +++ b/module/chat.js @@ -298,7 +298,7 @@ export class CoC7Chat { const gmVisibleOnly = html.find('.gm-visible-only') for (const elem of gmVisibleOnly) { - if (!game.user.isGM) elem.style.display = 'none' + if (!(game.user.isGM || (game.user.isTrusted && game.settings.get('CoC7', 'trustedCanSeeChatCard')))) elem.style.display = 'none' } const ownerVisibleOnly = html.find('.owner-visible-only') @@ -360,9 +360,11 @@ export class CoC7Chat { } const gmSelectOnly = html.find('.gm-select-only') - for (const select of gmSelectOnly) { - select.classList.add('inactive') - select.classList.remove('simple-flag') + if (!(game.user.isTrusted && game.settings.get('CoC7', 'trustedCanModfyChatCard'))) { + for (const select of gmSelectOnly) { + select.classList.add('inactive') + select.classList.remove('simple-flag') + } } } } diff --git a/module/coc7.js b/module/coc7.js index 015920ac..24e36356 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -46,7 +46,7 @@ Hooks.on('renderSettingsConfig', (app, html, options) => { '

      Slug 1 : 2d17kh

    ' ) systemTab - .find('input[name=CoC7\\.displayActorOnCard]') + .find('input[name=CoC7\\.trustedCanModfyChatCard]') .closest('div.form-group') .before( '

    ' + diff --git a/module/scripts/register-settings.js b/module/scripts/register-settings.js index 37e173e6..3f786bf2 100644 --- a/module/scripts/register-settings.js +++ b/module/scripts/register-settings.js @@ -108,6 +108,24 @@ export function registerSettings () { /** * Chat Cards */ + /** Trusted players will be allowed to modify chat cards */ + game.settings.register('CoC7', 'trustedCanModfyChatCard', { + name: 'SETTINGS.TrustedCanModfyChatCard', + hint: 'SETTINGS.TrustedCanModfyChatCardHint', + scope: 'world', + config: true, + default: false, + type: Boolean + }) + /** Trusted players will be allowed to see chat cards private sections */ + game.settings.register('CoC7', 'trustedCanSeeChatCard', { + name: 'SETTINGS.TrustedCanSeeChatCard', + hint: 'SETTINGS.TrustedCanSeeChatCardHint', + scope: 'world', + config: true, + default: false, + type: Boolean + }) /** Set the need to display actor image on chat cards */ game.settings.register('CoC7', 'displayActorOnCard', { name: 'SETTINGS.DisplayActorOnCard', From ed82fb7872602e753814fb9186617f5558cf9caf Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 17 Aug 2022 16:49:29 +0200 Subject: [PATCH 718/726] Version upgrade --- system.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system.json b/system.json index 140654b1..5284db0a 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "name": "CoC7", "title": "Call of Cthulhu 7th Edition (Unofficial)", "description": "An unofficial implementation of the Call of Cthulhu 7th Edition game system for Foundry Virtual Tabletop.", - "version": "0.7.11", + "version": "0.8.0", "authors": [ { "name": "Miskatonic Investigative Society" From b22a61a093c99e03dac420fa20aaaf41931f5ba7 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 17 Aug 2022 16:58:39 +0200 Subject: [PATCH 719/726] Version and readme upgrade to 0.8.0 --- .github/CHANGELOG.md | 3 ++- system.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index c0b84f9a..dee35c89 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,4 +1,4 @@ -## Changes coming in a future release: +## Version 0.8.0: When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. @@ -8,6 +8,7 @@ When not specified, all changes were made by @castanhocorreia, @HavlockV, and @s - Add manual pages which will pop up on first load, this is a work in progress - Add The Dhole's House JSON actor importer, thanks to @pconcepcion - Add FoundryVTT v10 tour for finding the rules variant settings +- Add options to allow trusted players to interact with chat cards - Fix dice sounds not being pushed to other clients - Fix tooltip for character summary sheet - Fix updater not always running automatically diff --git a/system.json b/system.json index 5284db0a..71b36328 100644 --- a/system.json +++ b/system.json @@ -9,7 +9,7 @@ } ], "minimumCoreVersion": "9", - "compatibleCoreVersion": "10.276", + "compatibleCoreVersion": "10", "esmodules": [ "lib/socketlib/src/libwrapper_shim.js", "lib/socketlib/src/socketlib.js", From 34e581b299903bc8cf440e14d3c8fb142be416e6 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 17 Aug 2022 15:03:55 +0000 Subject: [PATCH 720/726] Updated translations list --- .github/TRANSLATIONS.md | 414 ++++++++++++++++++++-------------------- 1 file changed, 212 insertions(+), 202 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index ad0a8515..d53eeec7 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,210 +2,212 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The **it** translation is currently up to date - The following translations have been abandoned **cn**, **cs**, **de**, **es**, [are you able to help?](./ABANDONED.md) -|Key|fr|ja|ko|pl|pt-BR|sv|zh-TW| -|:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -|**Remaining**:|**192**|**194**|**193**|**194**|**192**|**192**|**192**| -|[CoC7.ABarrier](#coc7abarrier)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AHazard](#coc7ahazard)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActionCost](#coc7actioncost)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActionCostOnFail](#coc7actioncostonfail)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Actions](#coc7actions)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActorDataLinked](#coc7actordatalinked)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActorDataNotLinked](#coc7actordatanotlinked)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActorImported](#coc7actorimported)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ActorIsTokenHint](#coc7actoristokenhint)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Add](#coc7add)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AddActorToChase](#coc7addactortochase)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AddBonusDie](#coc7addbonusdie)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AddParticipant](#coc7addparticipant)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AdjustedMovement](#coc7adjustedmovement)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AlreadyEncountered](#coc7alreadyencountered)|✅|❌|✅|✅|✅|✅|✅| -|[CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ArmorIgnored](#coc7armorignored)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AskDamageRoll](#coc7askdamageroll)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AskIntentions](#coc7askintentions)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AskRoll](#coc7askroll)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Assist](#coc7assist)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AttemptBreakDown](#coc7attemptbreakdown)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.AttemptNegotiateObstacle](#coc7attemptnegotiateobstacle)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Barrier](#coc7barrier)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.BeingCautious](#coc7beingcautious)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.BeingVeryCautious](#coc7beingverycautious)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.BreakDown](#coc7breakdown)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Breakable](#coc7breakable)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Cautious](#coc7cautious)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CautiousApproach](#coc7cautiousapproach)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.AdjustedMovementShort](#coc7chaseadjustedmovementshort)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.ChasersMax](#coc7chasechasersmax)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.ChasersMin](#coc7chasechasersmin)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.CheckName](#coc7chasecheckname)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.InitiativeShort](#coc7chaseinitiativeshort)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.PreysMax](#coc7chasepreysmax)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Chase.PreysMin](#coc7chasepreysmin)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ChaseSetup](#coc7chasesetup)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CheckFailed](#coc7checkfailed)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CheckName](#coc7checkname)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CheckPassed](#coc7checkpassed)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CleanSkillList](#coc7cleanskilllist)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CleanSkillListHint](#coc7cleanskilllisthint)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ClearAllConditions](#coc7clearallconditions)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmCut2Chase](#coc7confirmcut2chase)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmCut2ChaseHint](#coc7confirmcut2chasehint)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmNextChaseRound](#coc7confirmnextchaseround)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmNextChaseRoundHint](#coc7confirmnextchaseroundhint)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmResetChase](#coc7confirmresetchase)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmResetChaseHint](#coc7confirmresetchasehint)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmRestartChase](#coc7confirmrestartchase)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConfirmRestartChaseHint](#coc7confirmrestartchasehint)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ConsumeBonusDice](#coc7consumebonusdice)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Create](#coc7create)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.CutToTheChase](#coc7cuttothechase)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Damage](#coc7damage)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DamageDealTo](#coc7damagedealto)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DamageDealt](#coc7damagedealt)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DamageOnFail](#coc7damageonfail)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DecreaseMovementAction](#coc7decreasemovementaction)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DefinitelyInsane](#coc7definitelyinsane)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Delete](#coc7delete)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DholeHouseImportingName](#coc7dholehouseimportingname)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Disable](#coc7disable)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DoesNotMeetMinimumReqToBeAdded](#coc7doesnotmeetminimumreqtobeadded)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DontMoveToLocation](#coc7dontmovetolocation)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.DragOnCanvas](#coc7dragoncanvas)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Duration](#coc7duration)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Edit](#coc7edit)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.EffectAppliedCantOverride](#coc7effectappliedcantoverride)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.EffectNew](#coc7effectnew)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Enable](#coc7enable)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorBeneficiaryAtMaxBonus](#coc7errorbeneficiaryatmaxbonus)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorEmptyLocationsList](#coc7erroremptylocationslist)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorNoTokensSelected](#coc7errornotokensselected)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorParticipantAtMaxBonus](#coc7errorparticipantatmaxbonus)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorTokenNotOnScene](#coc7errortokennotonscene)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.FINISH](#coc7finish)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.FacingObstacle](#coc7facingobstacle)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.FileUploadError](#coc7fileuploaderror)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.German](#coc7german)|✅|✅|✅|❌|✅|✅|✅| -|[CoC7.GotLucky](#coc7gotlucky)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Hazard](#coc7hazard)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.IncludeEscapees](#coc7includeescapees)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.IncludeLatecomers](#coc7includelatecomers)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.IncreaseMovementAction](#coc7increasemovementaction)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Initialize](#coc7initialize)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Initiative](#coc7initiative)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.InsertLocation](#coc7insertlocation)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.LocationCoordinate](#coc7locationcoordinate)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.LocationInit](#coc7locationinit)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.LocationNotEmpty](#coc7locationnotempty)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Locations](#coc7locations)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.LuckNotEnough](#coc7lucknotenough)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.MakeActive](#coc7makeactive)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.MaxPossibleSanLoss](#coc7maxpossiblesanloss)|✅|❌|✅|✅|✅|✅|✅| -|[CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Migrate.ErrorActor](#coc7migrateerroractor)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Migrate.ErrorItem](#coc7migrateerroritem)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Migrate.ErrorScene](#coc7migrateerrorscene)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Migrate.ErrorTable](#coc7migrateerrortable)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.MoveBackward](#coc7movebackward)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.MoveForward](#coc7moveforward)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.MoveToLocation](#coc7movetolocation)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.MovementAction](#coc7movementaction)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NeedMin2Participants](#coc7needmin2participants)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NeedRecalculate](#coc7needrecalculate)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NeedToRecalculate](#coc7needtorecalculate)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Negotiate](#coc7negotiate)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NextRound](#coc7nextround)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NoDamageDealt](#coc7nodamagedealt)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NoValidCheck](#coc7novalidcheck)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NoValidSkill](#coc7novalidskill)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NotAllHaveSpeedRoll](#coc7notallhavespeedroll)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.NothingToRoll](#coc7nothingtoroll)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Obstacle](#coc7obstacle)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ObstacleDamage](#coc7obstacledamage)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ObstacleFail](#coc7obstaclefail)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ObstacleFumble](#coc7obstaclefumble)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ObstacleHasHitPoint](#coc7obstaclehashitpoint)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ObstacleName](#coc7obstaclename)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ObstaclePassed](#coc7obstaclepassed)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.OpenObstacleResolutionCard](#coc7openobstacleresolutioncard)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.OverrideCalc](#coc7overridecalc)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantAlreadyProcessed](#coc7participantalreadyprocessed)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantDataMissing](#coc7participantdatamissing)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantDropHint](#coc7participantdrophint)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantNotEnoughMovement](#coc7participantnotenoughmovement)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantNotFound](#coc7participantnotfound)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantUuidNotFound](#coc7participantuuidnotfound)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.ParticipantsList](#coc7participantslist)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.PenaltyDice](#coc7penaltydice)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.PickDirectory](#coc7pickdirectory)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.PlayerMovesToLocation](#coc7playermovestolocation)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Polish](#coc7polish)|✅|✅|✅|❌|✅|✅|✅| -|[CoC7.ReflectObstacleChanges](#coc7reflectobstaclechanges)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Remove](#coc7remove)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RemoveBonusDie](#coc7removebonusdie)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RemoveLocation](#coc7removelocation)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RemoveObstacle](#coc7removeobstacle)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Reset](#coc7reset)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Restart](#coc7restart)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Sane](#coc7sane)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.SelectNewSkill](#coc7selectnewskill)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.SomethingInTheWay](#coc7somethingintheway)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.SpeedCheck](#coc7speedcheck)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.StartingIndex](#coc7startingindex)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.StartingRange](#coc7startingrange)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.TooFast](#coc7toofast)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.TooSlow](#coc7tooslow)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.TryToBreak](#coc7trytobreak)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.TryToGetPastBarriers](#coc7trytogetpastbarriers)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.TryToNegotiateHazard](#coc7trytonegotiatehazard)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.UnarmedWeaponName](#coc7unarmedweaponname)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.Update](#coc7update)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.VehicleChase](#coc7vehiclechase)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.WaitForPlayerInput](#coc7waitforplayerinput)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.WeaponSkillMain](#coc7weaponskillmain)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.YouLostTime](#coc7youlosttime)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.YouTakeNoDamage](#coc7youtakenodamage)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.YouTakeSomeDamage](#coc7youtakesomedamage)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess)|❌|❌|❌|❌|❌|❌|❌| -|[CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle)|❌|❌|❌|❌|❌|❌|❌| -|[SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement)|❌|❌|❌|❌|❌|❌|❌| -|[SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint)|❌|❌|❌|❌|❌|❌|❌| -|[SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty)|✅|✅|❌|✅|✅|✅|✅| -|[SETTINGS.TitleChaseSettings](#settingstitlechasesettings)|❌|❌|❌|❌|❌|❌|❌| +|Key|fr|it|ja|ko|pl|pt-BR|sv|zh-TW| +|:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +|**Remaining**:|**196**|**4**|**198**|**197**|**198**|**196**|**196**|**196**| +|[CoC7.ABarrier](#coc7abarrier)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.AHazard](#coc7ahazard)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ActionCost](#coc7actioncost)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ActionCostOnFail](#coc7actioncostonfail)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Actions](#coc7actions)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ActorDataLinked](#coc7actordatalinked)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ActorDataNotLinked](#coc7actordatanotlinked)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ActorImported](#coc7actorimported)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ActorIsTokenHint](#coc7actoristokenhint)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Add](#coc7add)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.AddActorToChase](#coc7addactortochase)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.AddBonusDie](#coc7addbonusdie)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.AddParticipant](#coc7addparticipant)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.AdjustedMovement](#coc7adjustedmovement)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.AlreadyEncountered](#coc7alreadyencountered)|✅|✅|❌|✅|✅|✅|✅|✅| +|[CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ArmorIgnored](#coc7armorignored)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.AskDamageRoll](#coc7askdamageroll)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.AskIntentions](#coc7askintentions)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.AskRoll](#coc7askroll)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Assist](#coc7assist)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.AttemptBreakDown](#coc7attemptbreakdown)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.AttemptNegotiateObstacle](#coc7attemptnegotiateobstacle)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Barrier](#coc7barrier)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.BeingCautious](#coc7beingcautious)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.BeingVeryCautious](#coc7beingverycautious)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.BreakDown](#coc7breakdown)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Breakable](#coc7breakable)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Cautious](#coc7cautious)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.CautiousApproach](#coc7cautiousapproach)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.AdjustedMovementShort](#coc7chaseadjustedmovementshort)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.ChasersMax](#coc7chasechasersmax)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.ChasersMin](#coc7chasechasersmin)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.CheckName](#coc7chasecheckname)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.InitiativeShort](#coc7chaseinitiativeshort)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.PreysMax](#coc7chasepreysmax)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Chase.PreysMin](#coc7chasepreysmin)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ChaseSetup](#coc7chasesetup)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.CheckFailed](#coc7checkfailed)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.CheckName](#coc7checkname)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.CheckPassed](#coc7checkpassed)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.CleanSkillList](#coc7cleanskilllist)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.CleanSkillListHint](#coc7cleanskilllisthint)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ClearAllConditions](#coc7clearallconditions)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmCut2Chase](#coc7confirmcut2chase)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmCut2ChaseHint](#coc7confirmcut2chasehint)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmNextChaseRound](#coc7confirmnextchaseround)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmNextChaseRoundHint](#coc7confirmnextchaseroundhint)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmResetChase](#coc7confirmresetchase)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmResetChaseHint](#coc7confirmresetchasehint)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmRestartChase](#coc7confirmrestartchase)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ConfirmRestartChaseHint](#coc7confirmrestartchasehint)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ConsumeBonusDice](#coc7consumebonusdice)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Create](#coc7create)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.CutToTheChase](#coc7cuttothechase)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Damage](#coc7damage)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DamageDealTo](#coc7damagedealto)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DamageDealt](#coc7damagedealt)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DamageOnFail](#coc7damageonfail)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DecreaseMovementAction](#coc7decreasemovementaction)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DefinitelyInsane](#coc7definitelyinsane)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Delete](#coc7delete)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DholeHouseImportingName](#coc7dholehouseimportingname)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Disable](#coc7disable)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DoesNotMeetMinimumReqToBeAdded](#coc7doesnotmeetminimumreqtobeadded)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DontMoveToLocation](#coc7dontmovetolocation)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.DragOnCanvas](#coc7dragoncanvas)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Duration](#coc7duration)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Edit](#coc7edit)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.EffectAppliedCantOverride](#coc7effectappliedcantoverride)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.EffectNew](#coc7effectnew)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Enable](#coc7enable)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorBeneficiaryAtMaxBonus](#coc7errorbeneficiaryatmaxbonus)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorEmptyLocationsList](#coc7erroremptylocationslist)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorNoTokensSelected](#coc7errornotokensselected)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorParticipantAtMaxBonus](#coc7errorparticipantatmaxbonus)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorTokenNotOnScene](#coc7errortokennotonscene)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.FINISH](#coc7finish)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.FacingObstacle](#coc7facingobstacle)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.FileUploadError](#coc7fileuploaderror)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.German](#coc7german)|✅|✅|✅|✅|❌|✅|✅|✅| +|[CoC7.GotLucky](#coc7gotlucky)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Hazard](#coc7hazard)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.IncludeEscapees](#coc7includeescapees)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.IncludeLatecomers](#coc7includelatecomers)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.IncreaseMovementAction](#coc7increasemovementaction)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Initialize](#coc7initialize)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Initiative](#coc7initiative)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.InsertLocation](#coc7insertlocation)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.LocationCoordinate](#coc7locationcoordinate)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.LocationInit](#coc7locationinit)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.LocationNotEmpty](#coc7locationnotempty)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Locations](#coc7locations)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.LuckNotEnough](#coc7lucknotenough)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.MakeActive](#coc7makeactive)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.MaxPossibleSanLoss](#coc7maxpossiblesanloss)|✅|✅|❌|✅|✅|✅|✅|✅| +|[CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Migrate.ErrorActor](#coc7migrateerroractor)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Migrate.ErrorItem](#coc7migrateerroritem)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Migrate.ErrorScene](#coc7migrateerrorscene)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Migrate.ErrorTable](#coc7migrateerrortable)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.MoveBackward](#coc7movebackward)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.MoveForward](#coc7moveforward)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.MoveToLocation](#coc7movetolocation)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.MovementAction](#coc7movementaction)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.NeedMin2Participants](#coc7needmin2participants)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.NeedRecalculate](#coc7needrecalculate)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.NeedToRecalculate](#coc7needtorecalculate)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Negotiate](#coc7negotiate)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.NextRound](#coc7nextround)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.NoDamageDealt](#coc7nodamagedealt)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.NoValidCheck](#coc7novalidcheck)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.NoValidSkill](#coc7novalidskill)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.NotAllHaveSpeedRoll](#coc7notallhavespeedroll)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.NothingToRoll](#coc7nothingtoroll)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Obstacle](#coc7obstacle)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ObstacleDamage](#coc7obstacledamage)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ObstacleFail](#coc7obstaclefail)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ObstacleFumble](#coc7obstaclefumble)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ObstacleHasHitPoint](#coc7obstaclehashitpoint)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ObstacleName](#coc7obstaclename)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ObstaclePassed](#coc7obstaclepassed)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.OpenObstacleResolutionCard](#coc7openobstacleresolutioncard)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.OverrideCalc](#coc7overridecalc)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantAlreadyProcessed](#coc7participantalreadyprocessed)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantDataMissing](#coc7participantdatamissing)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantDropHint](#coc7participantdrophint)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantNotEnoughMovement](#coc7participantnotenoughmovement)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantNotFound](#coc7participantnotfound)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantUuidNotFound](#coc7participantuuidnotfound)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.ParticipantsList](#coc7participantslist)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.PenaltyDice](#coc7penaltydice)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.PickDirectory](#coc7pickdirectory)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.PlayerMovesToLocation](#coc7playermovestolocation)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Polish](#coc7polish)|✅|✅|✅|✅|❌|✅|✅|✅| +|[CoC7.ReflectObstacleChanges](#coc7reflectobstaclechanges)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Remove](#coc7remove)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.RemoveBonusDie](#coc7removebonusdie)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.RemoveLocation](#coc7removelocation)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.RemoveObstacle](#coc7removeobstacle)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Reset](#coc7reset)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Restart](#coc7restart)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Sane](#coc7sane)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.SelectNewSkill](#coc7selectnewskill)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.SomethingInTheWay](#coc7somethingintheway)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.SpeedCheck](#coc7speedcheck)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.StartingIndex](#coc7startingindex)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.StartingRange](#coc7startingrange)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.TooFast](#coc7toofast)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.TooSlow](#coc7tooslow)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.TryToBreak](#coc7trytobreak)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.TryToGetPastBarriers](#coc7trytogetpastbarriers)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.TryToNegotiateHazard](#coc7trytonegotiatehazard)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.UnarmedWeaponName](#coc7unarmedweaponname)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.Update](#coc7update)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.VehicleChase](#coc7vehiclechase)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.WaitForPlayerInput](#coc7waitforplayerinput)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.WeaponSkillMain](#coc7weaponskillmain)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.YouLostTime](#coc7youlosttime)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.YouTakeNoDamage](#coc7youtakenodamage)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.YouTakeSomeDamage](#coc7youtakesomedamage)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess)|❌|✅|❌|❌|❌|❌|❌|❌| +|[CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle)|❌|✅|❌|❌|❌|❌|❌|❌| +|[SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement)|❌|✅|❌|❌|❌|❌|❌|❌| +|[SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint)|❌|✅|❌|❌|❌|❌|❌|❌| +|[SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty)|✅|✅|✅|❌|✅|✅|✅|✅| +|[SETTINGS.TitleChaseSettings](#settingstitlechasesettings)|❌|✅|❌|❌|❌|❌|❌|❌| +|[SETTINGS.TrustedCanModfyChatCard](#settingstrustedcanmodfychatcard)|❌|❌|❌|❌|❌|❌|❌|❌| +|[SETTINGS.TrustedCanModfyChatCardHint](#settingstrustedcanmodfychatcardhint)|❌|❌|❌|❌|❌|❌|❌|❌| +|[SETTINGS.TrustedCanSeeChatCard](#settingstrustedcanseechatcard)|❌|❌|❌|❌|❌|❌|❌|❌| +|[SETTINGS.TrustedCanSeeChatCardHint](#settingstrustedcanseechatcardhint)|❌|❌|❌|❌|❌|❌|❌|❌| ##### CoC7.ABarrier ``` "CoC7.ABarrier": "a barrier",``` ##### CoC7.AHazard @@ -600,3 +602,11 @@ The following translations have been abandoned **cn**, **cs**, **de**, **es**, [ ``` "SETTINGS.DefaultDifficulty": "Default check difficulty",``` ##### SETTINGS.TitleChaseSettings ``` "SETTINGS.TitleChaseSettings": "Chase Settings",``` +##### SETTINGS.TrustedCanModfyChatCard +``` "SETTINGS.TrustedCanModfyChatCard": "Allow trusted user to modify chat card",``` +##### SETTINGS.TrustedCanModfyChatCardHint +``` "SETTINGS.TrustedCanModfyChatCardHint": "Enabling this setting will give permission to trusted users to select options on chat card. The GM only section will still not be visible to them",``` +##### SETTINGS.TrustedCanSeeChatCard +``` "SETTINGS.TrustedCanSeeChatCard": "Allow trusted user to see GM only sections",``` +##### SETTINGS.TrustedCanSeeChatCardHint +``` "SETTINGS.TrustedCanSeeChatCardHint": "Enabling this setting will give permission to trusted users to see GM only section on chat card. Use this with caution!",``` From e7a9fa074d649376c5458fbbee99720ef3d2b646 Mon Sep 17 00:00:00 2001 From: HavlockV Date: Wed, 17 Aug 2022 15:03:56 +0000 Subject: [PATCH 721/726] [create-pull-request] automated change --- .github/ABANDONED.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index b14b76de..f1b18d53 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -233,6 +233,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.ToolTipSanity": "
    1. Left click roll check with options
    2. Alt/Option + Left click roll sanity loss with options
    3. Shift + Left click Immediate regular difficulty roll
    4. Shift + Alt/Option + Left click roll sanity loss without dice pool options
    1. Right click Opposed check with options
    2. Shift + Right click Immediate opposed check
    1. Alt/Option + Right click Combined check with options
    2. Shift + Alt/Option + Right click Immediate combined check
    ", "CoC7.ToolTipCombat": "
    1. Left click roll check with options
    2. Shift + Left click Immediate regular difficulty roll
    1. Right click Combat opposed maneuver with options
    2. Shift + Right click Immediate combat opposed maneuver
    ", "SETTINGS.TitleChaseSettings": "Chase Settings", +"SETTINGS.TrustedCanModfyChatCard": "Allow trusted user to modify chat card", +"SETTINGS.TrustedCanModfyChatCardHint": "Enabling this setting will give permission to trusted users to select options on chat card. The GM only section will still not be visible to them", +"SETTINGS.TrustedCanSeeChatCard": "Allow trusted user to see GM only sections", +"SETTINGS.TrustedCanSeeChatCardHint": "Enabling this setting will give permission to trusted users to see GM only section on chat card. Use this with caution!", "SETTINGS.ChaseShowTokenMovement": "Show token movement.", "SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.", "CoC7.EffectNew": "New effect", @@ -626,6 +630,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "SETTINGS.TitleRollTable": "Roll Table Settings", "SETTINGS.TitleChaseSettings": "Chase Settings", "SETTINGS.showIconsOnly": "On summarized sheet, show only icons on skills list.", +"SETTINGS.TrustedCanModfyChatCard": "Allow trusted user to modify chat card", +"SETTINGS.TrustedCanModfyChatCardHint": "Enabling this setting will give permission to trusted users to select options on chat card. The GM only section will still not be visible to them", +"SETTINGS.TrustedCanSeeChatCard": "Allow trusted user to see GM only sections", +"SETTINGS.TrustedCanSeeChatCardHint": "Enabling this setting will give permission to trusted users to see GM only section on chat card. Use this with caution!", "SETTINGS.displayPlayerNameOnSheet": "Display player's name on sheet", "SETTINGS.OverrideGameArtwork": "Override game Artwork", "SETTINGS.OverrideGameArtworkHint": "!!RESTART REQUIRED!! gives access to advance game config, leave blank for default", @@ -900,6 +908,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.ToolTipSanity": "
    1. Left click roll check with options
    2. Alt/Option + Left click roll sanity loss with options
    3. Shift + Left click Immediate regular difficulty roll
    4. Shift + Alt/Option + Left click roll sanity loss without dice pool options
    1. Right click Opposed check with options
    2. Shift + Right click Immediate opposed check
    1. Alt/Option + Right click Combined check with options
    2. Shift + Alt/Option + Right click Immediate combined check
    ", "CoC7.ToolTipCombat": "
    1. Left click roll check with options
    2. Shift + Left click Immediate regular difficulty roll
    1. Right click Combat opposed maneuver with options
    2. Shift + Right click Immediate combat opposed maneuver
    ", "SETTINGS.TitleChaseSettings": "Chase Settings", +"SETTINGS.TrustedCanModfyChatCard": "Allow trusted user to modify chat card", +"SETTINGS.TrustedCanModfyChatCardHint": "Enabling this setting will give permission to trusted users to select options on chat card. The GM only section will still not be visible to them", +"SETTINGS.TrustedCanSeeChatCard": "Allow trusted user to see GM only sections", +"SETTINGS.TrustedCanSeeChatCardHint": "Enabling this setting will give permission to trusted users to see GM only section on chat card. Use this with caution!", "SETTINGS.ChaseShowTokenMovement": "Show token movement.", "SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.", "CoC7.getTheExample": "Copy Example", @@ -1111,6 +1123,10 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.ToolTipSanity": "
    1. Left click roll check with options
    2. Alt/Option + Left click roll sanity loss with options
    3. Shift + Left click Immediate regular difficulty roll
    4. Shift + Alt/Option + Left click roll sanity loss without dice pool options
    1. Right click Opposed check with options
    2. Shift + Right click Immediate opposed check
    1. Alt/Option + Right click Combined check with options
    2. Shift + Alt/Option + Right click Immediate combined check
    ", "CoC7.ToolTipCombat": "
    1. Left click roll check with options
    2. Shift + Left click Immediate regular difficulty roll
    1. Right click Combat opposed maneuver with options
    2. Shift + Right click Immediate combat opposed maneuver
    ", "SETTINGS.TitleChaseSettings": "Chase Settings", +"SETTINGS.TrustedCanModfyChatCard": "Allow trusted user to modify chat card", +"SETTINGS.TrustedCanModfyChatCardHint": "Enabling this setting will give permission to trusted users to select options on chat card. The GM only section will still not be visible to them", +"SETTINGS.TrustedCanSeeChatCard": "Allow trusted user to see GM only sections", +"SETTINGS.TrustedCanSeeChatCardHint": "Enabling this setting will give permission to trusted users to see GM only section on chat card. Use this with caution!", "SETTINGS.ChaseShowTokenMovement": "Show token movement.", "SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.", "CoC7.EffectNew": "New effect", From dbd5e3387a46bf4644a61fd2341716ef580e4a6d Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 17 Aug 2022 18:49:28 +0100 Subject: [PATCH 722/726] Updates to v10 package names --- module/updater.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/module/updater.js b/module/updater.js index fc9242b1..b0e4f83c 100644 --- a/module/updater.js +++ b/module/updater.js @@ -14,39 +14,39 @@ export class Updater { this.currentModules = {} for (const pack of game.packs) { if ( - !['CoC7', 'world'].includes( - pack.metadata.package || pack.metadata.packageName + !['CoC7', 'system', 'world'].includes( + pack.metadata.package || pack.metadata.packageType ) && ['Actor', 'Item', 'Scene'].includes(pack.metadata.type) ) { if ( !Object.prototype.hasOwnProperty.call( this.currentModules, - pack.metadata.package || pack.metadata.packageName + pack.metadata.package || pack.metadata.packageType ) ) { // Only check each package once if ( !Object.prototype.hasOwnProperty.call( this.updatedModules, - pack.metadata.package || pack.metadata.packageName + pack.metadata.package || pack.metadata.packageType ) || String( this.updatedModules[ - pack.metadata.package || pack.metadata.packageName + pack.metadata.package || pack.metadata.packageType ] ) !== String( game.modules.get( - pack.metadata.package || pack.metadata.packageName + pack.metadata.package || pack.metadata.packageType ).data.version ) ) { // Package has not been updated before or the version number has changed this.currentModules[ - pack.metadata.package || pack.metadata.packageName + pack.metadata.package || pack.metadata.packageType ] = game.modules.get( - pack.metadata.package || pack.metadata.packageName + pack.metadata.package || pack.metadata.packageType ).data.version } } @@ -261,7 +261,7 @@ export class Updater { // Migrate World Compendium Packs for (const pack of game.packs) { if ( - (pack.metadata.package || pack.metadata.packageName) !== 'CoC7' && + (pack.metadata.package || pack.metadata.packageType) !== 'CoC7' && ['Actor', 'Item', 'Macro', 'RollTable', 'Scene'].includes( pack.metadata.type ) From c4316aa345a1a547cf0257029c4c9b6bde0bb645 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 17 Aug 2022 23:37:27 +0200 Subject: [PATCH 723/726] Adding V10 warning --- .github/CHANGELOG.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index dee35c89..7f4323e4 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,4 +1,21 @@ -## Version 0.8.0: +# Warning + +The system is on a transition stage between FVTT V9 and V10. Most of it has been tested and is working on V10. + +Be aware that V10 is still in testing stage, hence not ready for 'production'. + +However be aware that migrating to V10 now is not advisable. Your may break your worlds as they will be migrated and you won't be able to return to V9. + +Despite out best efforts, some part of this system may not work with V10. + +_If you decide to go on with V10 :_ + +- __MAKE A COPY OF YOUR WORLD BEFORE UPGRADIND__ +- please report any bug encoutered on github, specify if you used V10 version. + +Happy gaming ! + +## Version 0.8.0 When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. From ffe6f320a374760e09666b08a3f1df37d71561fe Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 17 Aug 2022 23:38:50 +0200 Subject: [PATCH 724/726] Format update --- .github/CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 7f4323e4..59368dc6 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,10 +1,10 @@ # Warning -The system is on a transition stage between FVTT V9 and V10. Most of it has been tested and is working on V10. +The system is on a transition stage between FVTT V9 and V10. Most of it has been tested and should be working on V10. -Be aware that V10 is still in testing stage, hence not ready for 'production'. +However foundry V10 is still in testing stage. -However be aware that migrating to V10 now is not advisable. Your may break your worlds as they will be migrated and you won't be able to return to V9. +Be aware that migrating to V10 now is not advisable. Your may break your worlds as they will be migrated and you won't be able to return to V9. Despite out best efforts, some part of this system may not work with V10. From a932ccf64439c9ba39171b094b4529890397c3f1 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 17 Aug 2022 23:42:01 +0200 Subject: [PATCH 725/726] warning emoji --- .github/CHANGELOG.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 59368dc6..901fa394 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,16 +1,16 @@ -# Warning +# :warning: Important note -The system is on a transition stage between FVTT V9 and V10. Most of it has been tested and should be working on V10. - -However foundry V10 is still in testing stage. - -Be aware that migrating to V10 now is not advisable. Your may break your worlds as they will be migrated and you won't be able to return to V9. - -Despite out best efforts, some part of this system may not work with V10. +> The system is on a transition stage between FVTT V9 and V10. Most of it has been tested and should be working on V10. +> +> However foundry V10 is still in testing stage. +> +> Be aware that migrating to V10 now is not advisable. Your may break your worlds as they will be migrated and you won't be able to return to V9. +> +> Despite out best efforts, some part of this system may not work with V10. _If you decide to go on with V10 :_ -- __MAKE A COPY OF YOUR WORLD BEFORE UPGRADIND__ +- :warning: __MAKE A COPY OF YOUR WORLD BEFORE UPGRADIND__ - please report any bug encoutered on github, specify if you used V10 version. Happy gaming ! From 6f4200c1ffa71e53d09ee7a6411a4cb0d00f6296 Mon Sep 17 00:00:00 2001 From: HavlockV <65915923+HavlockV@users.noreply.github.com> Date: Wed, 17 Aug 2022 23:48:30 +0200 Subject: [PATCH 726/726] Typo --- .github/CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 901fa394..47d55bdf 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -8,10 +8,10 @@ > > Despite out best efforts, some part of this system may not work with V10. -_If you decide to go on with V10 :_ +_If you decide to go on with V10:_ -- :warning: __MAKE A COPY OF YOUR WORLD BEFORE UPGRADIND__ -- please report any bug encoutered on github, specify if you used V10 version. +- :warning: __MAKE A COPY OF YOUR WORLD BEFORE UPGRADING__ +- please report any bug encountered on GitHub, specify if you used V10 version. Happy gaming !