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 @@
- {{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
+ --}}
+
+
+